Merge "Move navigation to compose 1.5.0 stable prebuilts" into androidx-main
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt
index 3ff0f4b..fe8a394 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt
@@ -192,7 +192,10 @@
         // Read the profile rules from the file collection that contains the profile artifacts from
         // all the configurations for this variant and merge them in a single list.
         val profileRules = baselineProfileFileCollection.files
-            .readLines { FILENAME_MATCHER_BASELINE_PROFILE in it.name }
+            .readLines {
+                FILENAME_MATCHER_BASELINE_PROFILE in it.name ||
+                    FILENAME_MATCHER_STARTUP_PROFILE in it.name
+            }
 
         if (variantName.isPresent && profileRules.isEmpty()) {
             logger.warn(
diff --git a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
index 7f6b19aa..bd086a0 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
+++ b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
@@ -111,6 +111,10 @@
                 Fixtures.CLASS_1_METHOD_1,
                 Fixtures.CLASS_2,
                 Fixtures.CLASS_2_METHOD_1,
+                Fixtures.CLASS_3_METHOD_1,
+                Fixtures.CLASS_3,
+                Fixtures.CLASS_4_METHOD_1,
+                Fixtures.CLASS_4
             )
 
         assertThat(startupProfileFile("main").exists()).isFalse()
@@ -152,6 +156,10 @@
                 Fixtures.CLASS_1_METHOD_1,
                 Fixtures.CLASS_2,
                 Fixtures.CLASS_2_METHOD_1,
+                Fixtures.CLASS_3,
+                Fixtures.CLASS_3_METHOD_1,
+                Fixtures.CLASS_4,
+                Fixtures.CLASS_4_METHOD_1,
             )
 
         assertThat(readStartupProfileFileContent("release"))
@@ -239,12 +247,16 @@
             .containsExactly(
                 Fixtures.CLASS_1,
                 Fixtures.CLASS_1_METHOD_1,
+                Fixtures.CLASS_3,
+                Fixtures.CLASS_3_METHOD_1,
             )
 
         assertThat(readBaselineProfileFileContent("paidRelease"))
             .containsExactly(
                 Fixtures.CLASS_2,
                 Fixtures.CLASS_2_METHOD_1,
+                Fixtures.CLASS_4,
+                Fixtures.CLASS_4_METHOD_1,
             )
     }
 
diff --git a/benchmark/benchmark-common/api/1.2.0-beta03.txt b/benchmark/benchmark-common/api/1.2.0-beta03.txt
new file mode 100644
index 0000000..eb18450
--- /dev/null
+++ b/benchmark/benchmark-common/api/1.2.0-beta03.txt
@@ -0,0 +1,117 @@
+// Signature format: 4.0
+package androidx.benchmark {
+
+  public final class BenchmarkState {
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount);
+    method @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.List getMeasurementTimeNs();
+    method public boolean keepRunning();
+    method public void pauseTiming();
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+    method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkConfigApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkStateApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract class MetricCapture {
+    ctor public MetricCapture(java.util.List names);
+    method public abstract void capturePaused();
+    method public abstract void captureResumed();
+    method public abstract void captureStart(long timeNs);
+    method public abstract void captureStop(long timeNs, long[] output, int offset);
+    method public final java.util.List getNames();
+    property public final java.util.List names;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class MicrobenchmarkConfig {
+    ctor public MicrobenchmarkConfig(optional java.util.List metrics, optional boolean shouldEnableTraceAppTag, optional boolean shouldEnablePerfettoSdkTracing, optional androidx.benchmark.ProfilerConfig? profiler);
+    method public java.util.List getMetrics();
+    method public androidx.benchmark.ProfilerConfig? getProfiler();
+    method public boolean getShouldEnablePerfettoSdkTracing();
+    method public boolean getShouldEnableTraceAppTag();
+    property public final java.util.List metrics;
+    property public final androidx.benchmark.ProfilerConfig? profiler;
+    property public final boolean shouldEnablePerfettoSdkTracing;
+    property public final boolean shouldEnableTraceAppTag;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract sealed class ProfilerConfig {
+  }
+
+  public static final class ProfilerConfig.MethodTracing extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.MethodTracing();
+  }
+
+  public static final class ProfilerConfig.StackSampling extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.StackSampling();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class TimeCapture extends androidx.benchmark.MetricCapture {
+    ctor public TimeCapture();
+    method public void capturePaused();
+    method public void captureResumed();
+    method public void captureStart(long timeNs);
+    method public void captureStop(long timeNs, long[] output, int offset);
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoCaptureApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public abstract sealed class PerfettoConfig {
+  }
+
+  public static final class PerfettoConfig.Binary extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Binary(byte[] bytes);
+    method public byte[] getBytes();
+    property public final byte[] bytes;
+  }
+
+  public static final class PerfettoConfig.Text extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Text(String text);
+    method public String getText();
+    property public final String text;
+  }
+
+  @SuppressCompatibility @RequiresApi(23) @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTrace {
+    ctor public PerfettoTrace(String path);
+    method public String getPath();
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, optional java.util.List appTagPackages, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, kotlin.jvm.functions.Function0 block);
+    property public final String path;
+    field public static final androidx.benchmark.perfetto.PerfettoTrace.Companion Companion;
+  }
+
+  public static final class PerfettoTrace.Companion {
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, optional java.util.List appTagPackages, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, kotlin.jvm.functions.Function0 block);
+  }
+
+}
+
diff --git a/benchmark/benchmark-common/api/res-1.2.0-beta03.txt b/benchmark/benchmark-common/api/res-1.2.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-common/api/res-1.2.0-beta03.txt
diff --git a/benchmark/benchmark-common/api/restricted_1.2.0-beta03.txt b/benchmark/benchmark-common/api/restricted_1.2.0-beta03.txt
new file mode 100644
index 0000000..fb75b90
--- /dev/null
+++ b/benchmark/benchmark-common/api/restricted_1.2.0-beta03.txt
@@ -0,0 +1,119 @@
+// Signature format: 4.0
+package androidx.benchmark {
+
+  public final class BenchmarkState {
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount);
+    method @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.List getMeasurementTimeNs();
+    method public boolean keepRunning();
+    method @kotlin.PublishedApi internal boolean keepRunningInternal();
+    method public void pauseTiming();
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+    method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion Companion;
+    field @kotlin.PublishedApi internal int iterationsRemaining;
+  }
+
+  public static final class BenchmarkState.Companion {
+    method @SuppressCompatibility @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, @IntRange(from=0L) long totalRunTimeNs, java.util.List dataNs, @IntRange(from=0L) int warmupIterations, @IntRange(from=0L) long thermalThrottleSleepSeconds, @IntRange(from=1L) int repeatIterations);
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkConfigApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalBenchmarkStateApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract class MetricCapture {
+    ctor public MetricCapture(java.util.List names);
+    method public abstract void capturePaused();
+    method public abstract void captureResumed();
+    method public abstract void captureStart(long timeNs);
+    method public abstract void captureStop(long timeNs, long[] output, int offset);
+    method public final java.util.List getNames();
+    property public final java.util.List names;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class MicrobenchmarkConfig {
+    ctor public MicrobenchmarkConfig(optional java.util.List metrics, optional boolean shouldEnableTraceAppTag, optional boolean shouldEnablePerfettoSdkTracing, optional androidx.benchmark.ProfilerConfig? profiler);
+    method public java.util.List getMetrics();
+    method public androidx.benchmark.ProfilerConfig? getProfiler();
+    method public boolean getShouldEnablePerfettoSdkTracing();
+    method public boolean getShouldEnableTraceAppTag();
+    property public final java.util.List metrics;
+    property public final androidx.benchmark.ProfilerConfig? profiler;
+    property public final boolean shouldEnablePerfettoSdkTracing;
+    property public final boolean shouldEnableTraceAppTag;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public abstract sealed class ProfilerConfig {
+  }
+
+  public static final class ProfilerConfig.MethodTracing extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.MethodTracing();
+  }
+
+  public static final class ProfilerConfig.StackSampling extends androidx.benchmark.ProfilerConfig {
+    ctor public ProfilerConfig.StackSampling();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class TimeCapture extends androidx.benchmark.MetricCapture {
+    ctor public TimeCapture();
+    method public void capturePaused();
+    method public void captureResumed();
+    method public void captureStart(long timeNs);
+    method public void captureStop(long timeNs, long[] output, int offset);
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoCaptureApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public abstract sealed class PerfettoConfig {
+  }
+
+  public static final class PerfettoConfig.Binary extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Binary(byte[] bytes);
+    method public byte[] getBytes();
+    property public final byte[] bytes;
+  }
+
+  public static final class PerfettoConfig.Text extends androidx.benchmark.perfetto.PerfettoConfig {
+    ctor public PerfettoConfig.Text(String text);
+    method public String getText();
+    property public final String text;
+  }
+
+  @SuppressCompatibility @RequiresApi(23) @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTrace {
+    ctor public PerfettoTrace(String path);
+    method public String getPath();
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, optional java.util.List appTagPackages, kotlin.jvm.functions.Function0 block);
+    method public static void record(String fileLabel, kotlin.jvm.functions.Function0 block);
+    property public final String path;
+    field public static final androidx.benchmark.perfetto.PerfettoTrace.Companion Companion;
+  }
+
+  public static final class PerfettoTrace.Companion {
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, optional java.util.List appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1? traceCallback, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, optional java.util.List appTagPackages, kotlin.jvm.functions.Function0 block);
+    method public void record(String fileLabel, kotlin.jvm.functions.Function0 block);
+  }
+
+}
+
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
index f82a89b..0577141 100644
--- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
+++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
@@ -39,19 +39,18 @@
     /**
      * Set to true to enable androidx.tracing.perfetto tracepoints (such as composition tracing)
      *
-     * Note this only affects Macrobenchmarks currently, and only when StartupMode.COLD is not used,
-     * since enabling the tracepoints wakes the target process
-     *
-     * Currently internal/experimental
+     * Note that when StartupMode.COLD is used, additional work must be performed during target app
+     * startup to initialize tracing.
      */
-    private val _fullTracingEnable: Boolean
-    val fullTracingEnable: Boolean get() = fullTracingEnableOverride ?: _fullTracingEnable
+    private val _perfettoSdkTracingEnable: Boolean
+    val perfettoSdkTracingEnable: Boolean get() =
+        perfettoSdkTracingEnableOverride ?: _perfettoSdkTracingEnable
 
     /**
      * Allows tests to override whether full tracing is enabled
      */
     @VisibleForTesting
-    var fullTracingEnableOverride: Boolean? = null
+    var perfettoSdkTracingEnableOverride: Boolean? = null
 
     val enabledRules: Set
 
@@ -120,8 +119,11 @@
         iterations =
             arguments.getBenchmarkArgument("iterations")?.toInt()
 
-        _fullTracingEnable =
-            (arguments.getBenchmarkArgument("fullTracing.enable")?.toBoolean() ?: false)
+        _perfettoSdkTracingEnable =
+            arguments.getBenchmarkArgument("perfettoSdkTracing.enable")?.toBoolean()
+                // fullTracing.enable is the legacy/compat name
+                ?: arguments.getBenchmarkArgument("fullTracing.enable")?.toBoolean()
+                    ?: false
 
         // Transform comma-delimited list into set of suppressed errors
         // E.g. "DEBUGGABLE, UNLOCKED" -> setOf("DEBUGGABLE", "UNLOCKED")
diff --git a/benchmark/benchmark-junit4/api/1.2.0-beta03.txt b/benchmark/benchmark-junit4/api/1.2.0-beta03.txt
new file mode 100644
index 0000000..aea3355
--- /dev/null
+++ b/benchmark/benchmark-junit4/api/1.2.0-beta03.txt
@@ -0,0 +1,35 @@
+// Signature format: 4.0
+package androidx.benchmark.junit4 {
+
+  public class AndroidBenchmarkRunner extends androidx.test.runner.AndroidJUnitRunner {
+    ctor public AndroidBenchmarkRunner();
+  }
+
+  public final class BenchmarkRule implements org.junit.rules.TestRule {
+    ctor public BenchmarkRule();
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public BenchmarkRule(androidx.benchmark.MicrobenchmarkConfig config);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public androidx.benchmark.BenchmarkState getState();
+  }
+
+  public final class BenchmarkRule.Scope {
+    method public inline  T runWithTimingDisabled(kotlin.jvm.functions.Function0 block);
+  }
+
+  public final class BenchmarkRuleKt {
+    method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1 block);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTraceRule implements org.junit.rules.TestRule {
+    ctor public PerfettoTraceRule(optional boolean enableAppTagTracing, optional boolean enableUserspaceTracing, optional kotlin.jvm.functions.Function1? traceCallback);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public boolean getEnableAppTagTracing();
+    method public boolean getEnableUserspaceTracing();
+    method public kotlin.jvm.functions.Function1? getTraceCallback();
+    property public final boolean enableAppTagTracing;
+    property public final boolean enableUserspaceTracing;
+    property public final kotlin.jvm.functions.Function1? traceCallback;
+  }
+
+}
+
diff --git a/benchmark/benchmark-junit4/api/res-1.2.0-beta03.txt b/benchmark/benchmark-junit4/api/res-1.2.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-junit4/api/res-1.2.0-beta03.txt
diff --git a/benchmark/benchmark-junit4/api/restricted_1.2.0-beta03.txt b/benchmark/benchmark-junit4/api/restricted_1.2.0-beta03.txt
new file mode 100644
index 0000000..0dab2ea
--- /dev/null
+++ b/benchmark/benchmark-junit4/api/restricted_1.2.0-beta03.txt
@@ -0,0 +1,36 @@
+// Signature format: 4.0
+package androidx.benchmark.junit4 {
+
+  public class AndroidBenchmarkRunner extends androidx.test.runner.AndroidJUnitRunner {
+    ctor public AndroidBenchmarkRunner();
+  }
+
+  public final class BenchmarkRule implements org.junit.rules.TestRule {
+    ctor public BenchmarkRule();
+    ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public BenchmarkRule(androidx.benchmark.MicrobenchmarkConfig config);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public androidx.benchmark.BenchmarkState getState();
+  }
+
+  public final class BenchmarkRule.Scope {
+    method @kotlin.PublishedApi internal androidx.benchmark.BenchmarkState getOuterState();
+    method public inline  T runWithTimingDisabled(kotlin.jvm.functions.Function0 block);
+  }
+
+  public final class BenchmarkRuleKt {
+    method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1 block);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoCaptureApi public final class PerfettoTraceRule implements org.junit.rules.TestRule {
+    ctor public PerfettoTraceRule(optional boolean enableAppTagTracing, optional boolean enableUserspaceTracing, optional kotlin.jvm.functions.Function1? traceCallback);
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public boolean getEnableAppTagTracing();
+    method public boolean getEnableUserspaceTracing();
+    method public kotlin.jvm.functions.Function1? getTraceCallback();
+    property public final boolean enableAppTagTracing;
+    property public final boolean enableUserspaceTracing;
+    property public final kotlin.jvm.functions.Function1? traceCallback;
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro-junit4/api/1.2.0-beta03.txt b/benchmark/benchmark-macro-junit4/api/1.2.0-beta03.txt
new file mode 100644
index 0000000..d4c3495
--- /dev/null
+++ b/benchmark/benchmark-macro-junit4/api/1.2.0-beta03.txt
@@ -0,0 +1,26 @@
+// Signature format: 4.0
+package androidx.benchmark.macro.junit4 {
+
+  @RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
+    ctor public BaselineProfileRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1 filterPredicate, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, kotlin.jvm.functions.Function1 profileBlock);
+  }
+
+  public final class MacrobenchmarkRule implements org.junit.rules.TestRule {
+    ctor public MacrobenchmarkRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void measureRepeated(String packageName, java.util.List metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1 measureBlock);
+    method public void measureRepeated(String packageName, java.util.List metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1 setupBlock, kotlin.jvm.functions.Function1 measureBlock);
+    method public void measureRepeated(String packageName, java.util.List metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1 measureBlock);
+    method public void measureRepeated(String packageName, java.util.List metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1 measureBlock);
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro-junit4/api/res-1.2.0-beta03.txt b/benchmark/benchmark-macro-junit4/api/res-1.2.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-macro-junit4/api/res-1.2.0-beta03.txt
diff --git a/benchmark/benchmark-macro-junit4/api/restricted_1.2.0-beta03.txt b/benchmark/benchmark-macro-junit4/api/restricted_1.2.0-beta03.txt
new file mode 100644
index 0000000..d4c3495
--- /dev/null
+++ b/benchmark/benchmark-macro-junit4/api/restricted_1.2.0-beta03.txt
@@ -0,0 +1,26 @@
+// Signature format: 4.0
+package androidx.benchmark.macro.junit4 {
+
+  @RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule {
+    ctor public BaselineProfileRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, optional kotlin.jvm.functions.Function1 filterPredicate, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, optional int maxIterations, kotlin.jvm.functions.Function1 profileBlock);
+    method public void collect(String packageName, kotlin.jvm.functions.Function1 profileBlock);
+  }
+
+  public final class MacrobenchmarkRule implements org.junit.rules.TestRule {
+    ctor public MacrobenchmarkRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+    method public void measureRepeated(String packageName, java.util.List metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1 measureBlock);
+    method public void measureRepeated(String packageName, java.util.List metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1 setupBlock, kotlin.jvm.functions.Function1 measureBlock);
+    method public void measureRepeated(String packageName, java.util.List metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1 measureBlock);
+    method public void measureRepeated(String packageName, java.util.List metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1 measureBlock);
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro/api/1.2.0-beta03.txt b/benchmark/benchmark-macro/api/1.2.0-beta03.txt
new file mode 100644
index 0000000..54c8a8c
--- /dev/null
+++ b/benchmark/benchmark-macro/api/1.2.0-beta03.txt
@@ -0,0 +1,261 @@
+// Signature format: 4.0
+package androidx.benchmark.macro {
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric {
+    ctor public AudioUnderrunMetric();
+  }
+
+  public enum BaselineProfileMode {
+    method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.BaselineProfileMode[] values();
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Disable;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Require;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode UseIfAvailable;
+  }
+
+  public abstract sealed class CompilationMode {
+    field public static final androidx.benchmark.macro.CompilationMode.Companion Companion;
+    field public static final androidx.benchmark.macro.CompilationMode DEFAULT;
+  }
+
+  public static final class CompilationMode.Companion {
+  }
+
+  public static final class CompilationMode.Full extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Full();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Ignore();
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.None extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.None();
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Partial();
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
+    method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode();
+    method public int getWarmupIterations();
+    property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode;
+    property public final int warmupIterations;
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi {
+  }
+
+  public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public FrameTimingMetric();
+  }
+
+  public final class MacrobenchmarkScope {
+    ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
+    method public void dropKernelPageCache();
+    method public void dropShaderCache();
+    method public androidx.test.uiautomator.UiDevice getDevice();
+    method public Integer? getIteration();
+    method public String getPackageName();
+    method public void killProcess();
+    method public void killProcess(optional boolean useKillAll);
+    method public void pressHome();
+    method public void pressHome(optional long delayDurationMs);
+    method public void startActivityAndWait();
+    method public void startActivityAndWait(android.content.Intent intent);
+    method public void startActivityAndWait(optional kotlin.jvm.functions.Function1 block);
+    property public final androidx.test.uiautomator.UiDevice device;
+    property public final Integer? iteration;
+    property public final String packageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryCountersMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryCountersMetric();
+    method public java.util.List getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryUsageMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryUsageMetric(androidx.benchmark.macro.MemoryUsageMetric.Mode mode, optional java.util.List subMetrics);
+    method public java.util.List getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  public enum MemoryUsageMetric.Mode {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Last;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Max;
+  }
+
+  public enum MemoryUsageMetric.SubMetric {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric Gpu;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric HeapSize;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssAnon;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssFile;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssShmem;
+  }
+
+  public abstract sealed class Metric {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.CaptureInfo {
+    ctor public Metric.CaptureInfo(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int component1();
+    method public String component2();
+    method public String component3();
+    method public androidx.benchmark.macro.StartupMode? component4();
+    method public androidx.benchmark.macro.Metric.CaptureInfo copy(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int getApiLevel();
+    method public androidx.benchmark.macro.StartupMode? getStartupMode();
+    method public String getTargetPackageName();
+    method public String getTestPackageName();
+    property public final int apiLevel;
+    property public final androidx.benchmark.macro.StartupMode? startupMode;
+    property public final String targetPackageName;
+    property public final String testPackageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.Measurement {
+    ctor public Metric.Measurement(String name, double data);
+    ctor public Metric.Measurement(String name, java.util.List dataSamples);
+    method public String component1();
+    method public java.util.List component2();
+    method public boolean component3();
+    method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List data, boolean requireSingleValue);
+    method public java.util.List getData();
+    method public String getName();
+    method public boolean getRequireSingleValue();
+    property public final java.util.List data;
+    property public final String name;
+    property public final boolean requireSingleValue;
+  }
+
+  public final class MetricResultExtensionsKt {
+    method @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static void assertEqualMeasurements(java.util.List expected, java.util.List observed, double threshold);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategory {
+    method public static androidx.benchmark.macro.PowerCategory valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategory[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategory CPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory DISPLAY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPS;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MACHINE_LEARNING;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MEMORY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory NETWORK;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory UNCATEGORIZED;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategoryDisplayLevel {
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel BREAKDOWN;
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel TOTAL;
+  }
+
+  @SuppressCompatibility @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class PowerMetric extends androidx.benchmark.macro.Metric {
+    ctor public PowerMetric(androidx.benchmark.macro.PowerMetric.Type type);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public static androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map categories);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map categories);
+    field public static final androidx.benchmark.macro.PowerMetric.Companion Companion;
+  }
+
+  public static final class PowerMetric.Companion {
+    method public androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map categories);
+    method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map categories);
+  }
+
+  public abstract static sealed class PowerMetric.Type {
+    method public final java.util.Map getCategories();
+    method public final void setCategories(java.util.Map);
+    property public final java.util.Map categories;
+  }
+
+  public static final class PowerMetric.Type.Battery extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Battery();
+  }
+
+  public static final class PowerMetric.Type.Energy extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Energy(optional java.util.Map energyCategories);
+  }
+
+  public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Power(optional java.util.Map powerCategories);
+  }
+
+  public enum StartupMode {
+    method public static androidx.benchmark.macro.StartupMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.StartupMode[] values();
+    enum_constant public static final androidx.benchmark.macro.StartupMode COLD;
+    enum_constant public static final androidx.benchmark.macro.StartupMode HOT;
+    enum_constant public static final androidx.benchmark.macro.StartupMode WARM;
+  }
+
+  public final class StartupTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public StartupTimingMetric();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public abstract class TraceMetric extends androidx.benchmark.macro.Metric {
+    ctor public TraceMetric();
+    method public abstract java.util.List getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @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, optional boolean targetPackageOnly);
+  }
+
+  public enum TraceSectionMetric.Mode {
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    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;
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoTraceProcessorApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class PerfettoTraceProcessor {
+    ctor public PerfettoTraceProcessor();
+    method public  T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1 block);
+    method public static  T runServer(kotlin.jvm.functions.Function1 block);
+    field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+  }
+
+  public static final class PerfettoTraceProcessor.Companion {
+    method public  T runServer(kotlin.jvm.functions.Function1 block);
+  }
+
+  public static final class PerfettoTraceProcessor.Session {
+    method public kotlin.sequences.Sequence query(@org.intellij.lang.annotations.Language("sql") String query);
+    method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map {
+    ctor public Row(java.util.Map map);
+    method public byte[] bytes(String columnName);
+    method public double double(String columnName);
+    method public long long(String columnName);
+    method public byte[]? nullableBytes(String columnName);
+    method public Double? nullableDouble(String columnName);
+    method public Long? nullableLong(String columnName);
+    method public String? nullableString(String columnName);
+    method public String string(String columnName);
+  }
+
+  public final class RowKt {
+    method @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair... pairs);
+  }
+
+}
+
diff --git a/benchmark/benchmark-macro/api/res-1.2.0-beta03.txt b/benchmark/benchmark-macro/api/res-1.2.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/benchmark/benchmark-macro/api/res-1.2.0-beta03.txt
diff --git a/benchmark/benchmark-macro/api/restricted_1.2.0-beta03.txt b/benchmark/benchmark-macro/api/restricted_1.2.0-beta03.txt
new file mode 100644
index 0000000..9fb21fd
--- /dev/null
+++ b/benchmark/benchmark-macro/api/restricted_1.2.0-beta03.txt
@@ -0,0 +1,283 @@
+// Signature format: 4.0
+package androidx.benchmark.macro {
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric {
+    ctor public AudioUnderrunMetric();
+  }
+
+  public enum BaselineProfileMode {
+    method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.BaselineProfileMode[] values();
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Disable;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Require;
+    enum_constant public static final androidx.benchmark.macro.BaselineProfileMode UseIfAvailable;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class BatteryCharge {
+    method public boolean hasMinimumCharge(optional boolean throwOnMissingMetrics);
+    field public static final androidx.benchmark.macro.BatteryCharge INSTANCE;
+  }
+
+  public abstract sealed class CompilationMode {
+    field public static final androidx.benchmark.macro.CompilationMode.Companion Companion;
+    field public static final androidx.benchmark.macro.CompilationMode DEFAULT;
+  }
+
+  public static final class CompilationMode.Companion {
+  }
+
+  public static final class CompilationMode.Full extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Full();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Ignore();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class CompilationMode.Interpreted extends androidx.benchmark.macro.CompilationMode {
+    field public static final androidx.benchmark.macro.CompilationMode.Interpreted INSTANCE;
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.None extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.None();
+  }
+
+  @RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode {
+    ctor public CompilationMode.Partial();
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode);
+    ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations);
+    method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode();
+    method public int getWarmupIterations();
+    property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode;
+    property public final int warmupIterations;
+  }
+
+  public final class CompilationModeKt {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static boolean isSupportedWithVmSettings(androidx.benchmark.macro.CompilationMode);
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi {
+  }
+
+  @SuppressCompatibility @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi {
+  }
+
+  public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public FrameTimingMetric();
+  }
+
+  public final class MacrobenchmarkScope {
+    ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
+    method public void dropKernelPageCache();
+    method public void dropShaderCache();
+    method public androidx.test.uiautomator.UiDevice getDevice();
+    method public Integer? getIteration();
+    method public String getPackageName();
+    method public void killProcess();
+    method public void killProcess(optional boolean useKillAll);
+    method public void pressHome();
+    method public void pressHome(optional long delayDurationMs);
+    method public void startActivityAndWait();
+    method public void startActivityAndWait(android.content.Intent intent);
+    method public void startActivityAndWait(optional kotlin.jvm.functions.Function1 block);
+    property public final androidx.test.uiautomator.UiDevice device;
+    property public final Integer? iteration;
+    property public final String packageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryCountersMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryCountersMetric();
+    method public java.util.List getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class MemoryUsageMetric extends androidx.benchmark.macro.TraceMetric {
+    ctor public MemoryUsageMetric(androidx.benchmark.macro.MemoryUsageMetric.Mode mode, optional java.util.List subMetrics);
+    method public java.util.List getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  public enum MemoryUsageMetric.Mode {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.Mode[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Last;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.Mode Max;
+  }
+
+  public enum MemoryUsageMetric.SubMetric {
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.MemoryUsageMetric.SubMetric[] values();
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric Gpu;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric HeapSize;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssAnon;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssFile;
+    enum_constant public static final androidx.benchmark.macro.MemoryUsageMetric.SubMetric RssShmem;
+  }
+
+  public abstract sealed class Metric {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.CaptureInfo {
+    ctor public Metric.CaptureInfo(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int component1();
+    method public String component2();
+    method public String component3();
+    method public androidx.benchmark.macro.StartupMode? component4();
+    method public androidx.benchmark.macro.Metric.CaptureInfo copy(int apiLevel, String targetPackageName, String testPackageName, androidx.benchmark.macro.StartupMode? startupMode);
+    method public int getApiLevel();
+    method public androidx.benchmark.macro.StartupMode? getStartupMode();
+    method public String getTargetPackageName();
+    method public String getTestPackageName();
+    property public final int apiLevel;
+    property public final androidx.benchmark.macro.StartupMode? startupMode;
+    property public final String targetPackageName;
+    property public final String testPackageName;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static final class Metric.Measurement {
+    ctor public Metric.Measurement(String name, double data);
+    ctor public Metric.Measurement(String name, java.util.List dataSamples);
+    method public String component1();
+    method public java.util.List component2();
+    method public boolean component3();
+    method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List data, boolean requireSingleValue);
+    method public java.util.List getData();
+    method public String getName();
+    method public boolean getRequireSingleValue();
+    property public final java.util.List data;
+    property public final String name;
+    property public final boolean requireSingleValue;
+  }
+
+  public final class MetricResultExtensionsKt {
+    method @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public static void assertEqualMeasurements(java.util.List expected, java.util.List observed, double threshold);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategory {
+    method public static androidx.benchmark.macro.PowerCategory valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategory[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategory CPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory DISPLAY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPS;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory GPU;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MACHINE_LEARNING;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory MEMORY;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory NETWORK;
+    enum_constant public static final androidx.benchmark.macro.PowerCategory UNCATEGORIZED;
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public enum PowerCategoryDisplayLevel {
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.PowerCategoryDisplayLevel[] values();
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel BREAKDOWN;
+    enum_constant public static final androidx.benchmark.macro.PowerCategoryDisplayLevel TOTAL;
+  }
+
+  @SuppressCompatibility @RequiresApi(29) @androidx.benchmark.macro.ExperimentalMetricApi public final class PowerMetric extends androidx.benchmark.macro.Metric {
+    ctor public PowerMetric(androidx.benchmark.macro.PowerMetric.Type type);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public static androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map categories);
+    method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map categories);
+    field public static final androidx.benchmark.macro.PowerMetric.Companion Companion;
+  }
+
+  public static final class PowerMetric.Companion {
+    method public androidx.benchmark.macro.PowerMetric.Type.Battery Battery();
+    method public androidx.benchmark.macro.PowerMetric.Type.Energy Energy(optional java.util.Map categories);
+    method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map categories);
+  }
+
+  public abstract static sealed class PowerMetric.Type {
+    method public final java.util.Map getCategories();
+    method public final void setCategories(java.util.Map);
+    property public final java.util.Map categories;
+  }
+
+  public static final class PowerMetric.Type.Battery extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Battery();
+  }
+
+  public static final class PowerMetric.Type.Energy extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Energy(optional java.util.Map energyCategories);
+  }
+
+  public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+    ctor public PowerMetric.Type.Power(optional java.util.Map powerCategories);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class PowerRail {
+    method public boolean hasMetrics(optional boolean throwOnMissingMetrics);
+    field public static final androidx.benchmark.macro.PowerRail INSTANCE;
+  }
+
+  public enum StartupMode {
+    method public static androidx.benchmark.macro.StartupMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    method public static androidx.benchmark.macro.StartupMode[] values();
+    enum_constant public static final androidx.benchmark.macro.StartupMode COLD;
+    enum_constant public static final androidx.benchmark.macro.StartupMode HOT;
+    enum_constant public static final androidx.benchmark.macro.StartupMode WARM;
+  }
+
+  @RequiresApi(29) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class StartupTimingLegacyMetric extends androidx.benchmark.macro.Metric {
+    ctor public StartupTimingLegacyMetric();
+  }
+
+  public final class StartupTimingMetric extends androidx.benchmark.macro.Metric {
+    ctor public StartupTimingMetric();
+  }
+
+  @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public abstract class TraceMetric extends androidx.benchmark.macro.Metric {
+    ctor public TraceMetric();
+    method public abstract java.util.List getResult(androidx.benchmark.macro.Metric.CaptureInfo captureInfo, androidx.benchmark.perfetto.PerfettoTraceProcessor.Session traceSession);
+  }
+
+  @SuppressCompatibility @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, optional boolean targetPackageOnly);
+  }
+
+  public enum TraceSectionMetric.Mode {
+    method public static androidx.benchmark.macro.TraceSectionMetric.Mode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
+    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;
+  }
+
+}
+
+package androidx.benchmark.perfetto {
+
+  @SuppressCompatibility @kotlin.RequiresOptIn @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalPerfettoTraceProcessorApi {
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class PerfettoTraceProcessor {
+    ctor public PerfettoTraceProcessor();
+    method public  T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1 block);
+    method public static  T runServer(kotlin.jvm.functions.Function1 block);
+    field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+  }
+
+  public static final class PerfettoTraceProcessor.Companion {
+    method public  T runServer(kotlin.jvm.functions.Function1 block);
+  }
+
+  public static final class PerfettoTraceProcessor.Session {
+    method public kotlin.sequences.Sequence query(@org.intellij.lang.annotations.Language("sql") String query);
+    method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query);
+  }
+
+  @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map {
+    ctor public Row(java.util.Map map);
+    method public byte[] bytes(String columnName);
+    method public double double(String columnName);
+    method public long long(String columnName);
+    method public byte[]? nullableBytes(String columnName);
+    method public Double? nullableDouble(String columnName);
+    method public Long? nullableLong(String columnName);
+    method public String? nullableString(String columnName);
+    method public String string(String columnName);
+  }
+
+  public final class RowKt {
+    method @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair... pairs);
+  }
+
+}
+
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 f8cbebb..0bcb3b4 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
@@ -43,7 +43,6 @@
 import org.junit.After
 import org.junit.Assume.assumeTrue
 import org.junit.Before
-import org.junit.Ignore
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
@@ -216,14 +215,10 @@
         }
     }
 
-    // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing)
-    @Ignore
     @Test
     fun test_handshake_framework_cold_start_persistent() =
         test_handshake_framework_cold_start(persistent = true)
 
-    // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing)
-    @Ignore
     @Test
     fun test_handshake_framework_cold_start_non_persistent() =
         test_handshake_framework_cold_start(persistent = false)
@@ -277,8 +272,6 @@
         }
     }
 
-    // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing)
-    @Ignore
     /**
      * Tests [androidx.benchmark.perfetto.PerfettoCapture.enableAndroidxTracingPerfetto] as
      * opposed to [androidx.tracing.perfetto.handshake.PerfettoSdkHandshake.enableTracingColdStart]
@@ -326,14 +319,10 @@
         }
     }
 
-    // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing)
-    @Ignore
     @Test
     fun test_handshake_framework_cold_start_disable_persistent() =
         test_handshake_framework_cold_start_disable(persistent = true)
 
-    // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing)
-    @Ignore
     @Test
     fun test_handshake_framework_cold_start_disable_non_persistent() =
         test_handshake_framework_cold_start_disable(persistent = true)
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
index d1ad575..df00a1a 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
@@ -402,7 +402,7 @@
     measureBlock: MacrobenchmarkScope.() -> Unit
 ) {
     val perfettoSdkConfig =
-        if (Arguments.fullTracingEnable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+        if (Arguments.perfettoSdkTracingEnable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
             PerfettoSdkConfig(
                 packageName,
                 when (startupMode) {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
index 1d045d0..8cb0a3d 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
@@ -84,10 +84,6 @@
                 val isPublished = androidXExtension.shouldPublish()
 
                 it.lint {
-                    // Too many Kotlin features require synthetic accessors - we want to rely on R8
-                    // to
-                    // remove these accessors
-                    disable.add("SyntheticAccessor")
                     // These lint checks are normally a warning (or lower), but we ignore (in
                     // AndroidX)
                     // warnings in Lint, so we make it an error here so it will fail the build.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 7cc787b..21fb3f1 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -61,6 +61,9 @@
 import org.gradle.api.Plugin
 import org.gradle.api.Project
 import org.gradle.api.Task
+import org.gradle.api.artifacts.CacheableRule
+import org.gradle.api.artifacts.ComponentMetadataContext
+import org.gradle.api.artifacts.ComponentMetadataRule
 import org.gradle.api.artifacts.Configuration
 import org.gradle.api.component.SoftwareComponentFactory
 import org.gradle.api.file.DuplicatesStrategy
@@ -82,6 +85,7 @@
 import org.gradle.kotlin.dsl.extra
 import org.gradle.kotlin.dsl.findByType
 import org.gradle.kotlin.dsl.getByType
+import org.gradle.kotlin.dsl.withModule
 import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
 import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
 import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
@@ -297,20 +301,16 @@
     private fun Project.configureKotlinVersion() {
         val kotlinVersionStringProvider = androidXConfiguration.kotlinBomVersion
 
-        // Resolve Kotlin versions to the target version or higher.
+        // Resolve unspecified Kotlin versions to the target version.
         configurations.all { configuration ->
             configuration.resolutionStrategy { strategy ->
                 strategy.eachDependency { details ->
                     if (details.requested.group == "org.jetbrains.kotlin") {
-                        val requestedVersion =
-                            if (details.requested.version.isNullOrEmpty()) {
-                                null
-                            } else {
-                                Version(details.requested.version!!)
-                            }
-                        val bomVersion = kotlinVersionStringProvider.get()
-                        if (requestedVersion == null || requestedVersion < Version(bomVersion)) {
-                            details.useVersion(bomVersion)
+                        if (
+                            details.requested.group == "org.jetbrains.kotlin" &&
+                            details.requested.version == null
+                        ) {
+                            details.useVersion(kotlinVersionStringProvider.get())
                         }
                     }
                 }
@@ -335,6 +335,35 @@
                 kotlinExtension.coreLibrariesVersion = kotlinVersionStringProvider.get()
             }
         }
+
+        // Resolve classpath conflicts caused by kotlin-stdlib-jdk7 and -jdk8 artifacts by amending
+        // the kotlin-stdlib artifact metadata to add same-version constraints.
+        project.dependencies {
+            components { componentMetadata ->
+                componentMetadata.withModule(
+                    "org.jetbrains.kotlin:kotlin-stdlib"
+                )
+            }
+        }
+    }
+
+    @CacheableRule
+    internal abstract class KotlinStdlibDependenciesRule : ComponentMetadataRule {
+        override fun execute(context: ComponentMetadataContext) {
+            val module = context.details.id
+            val version = module.version
+            context.details.allVariants { variantMetadata ->
+                variantMetadata.withDependencyConstraints { constraintsMetadata ->
+                    val reason = "${module.name} is in atomic group ${module.group}"
+                    constraintsMetadata.add("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$version") {
+                        it.because(reason)
+                    }
+                    constraintsMetadata.add("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$version") {
+                        it.because(reason)
+                    }
+                }
+            }
+        }
     }
 
     private fun configureWithKotlinPlugin(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
index 2552af0..28200ee 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -397,15 +397,9 @@
             fatal.add("LambdaLast")
             fatal.add("UnknownNullness")
 
-            // Only override if not set explicitly.
-            // Some Kotlin projects may wish to disable this.
-            if (
-                isLibrary &&
-                    !disable.contains("SyntheticAccessor") &&
-                    extension.type != LibraryType.SAMPLES
-            ) {
-                fatal.add("SyntheticAccessor")
-            }
+            // Too many Kotlin features require synthetic accessors - we want to rely on R8 to
+            // remove these accessors
+            disable.add("SyntheticAccessor")
 
             // Only check for missing translations in finalized (beta and later) modules.
             if (extension.mavenVersion?.isFinalApi() == true) {
diff --git a/camera/camera-camera2/api/1.3.0-beta03.txt b/camera/camera-camera2/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..87c79d0
--- /dev/null
+++ b/camera/camera-camera2/api/1.3.0-beta03.txt
@@ -0,0 +1,54 @@
+// Signature format: 4.0
+package androidx.camera.camera2 {
+
+  @RequiresApi(21) public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig();
+  }
+
+}
+
+package androidx.camera.camera2.interop {
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture addCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+    method public com.google.common.util.concurrent.ListenableFuture clearCaptureRequestOptions();
+    method public static androidx.camera.camera2.interop.Camera2CameraControl from(androidx.camera.core.CameraControl);
+    method public androidx.camera.camera2.interop.CaptureRequestOptions getCaptureRequestOptions();
+    method public com.google.common.util.concurrent.ListenableFuture setCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+    method public static androidx.camera.camera2.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo);
+    method public  T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key);
+    method public String getCameraId();
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+  }
+
+  @RequiresApi(21) public static final class Camera2Interop.Extender {
+    ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder);
+    method public  androidx.camera.camera2.interop.Camera2Interop.Extender setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key, ValueT);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+    method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.Extender setPhysicalCameraId(String);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+    method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.Extender setStreamUseCase(long);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+    method public  ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key);
+  }
+
+  @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public CaptureRequestOptions.Builder();
+    method public androidx.camera.camera2.interop.CaptureRequestOptions build();
+    method public  androidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key);
+    method public  androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key, ValueT);
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
+  }
+
+}
+
diff --git a/camera/camera-camera2/api/res-1.3.0-beta03.txt b/camera/camera-camera2/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-camera2/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-camera2/api/restricted_1.3.0-beta03.txt b/camera/camera-camera2/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..87c79d0
--- /dev/null
+++ b/camera/camera-camera2/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,54 @@
+// Signature format: 4.0
+package androidx.camera.camera2 {
+
+  @RequiresApi(21) public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig();
+  }
+
+}
+
+package androidx.camera.camera2.interop {
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture addCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+    method public com.google.common.util.concurrent.ListenableFuture clearCaptureRequestOptions();
+    method public static androidx.camera.camera2.interop.Camera2CameraControl from(androidx.camera.core.CameraControl);
+    method public androidx.camera.camera2.interop.CaptureRequestOptions getCaptureRequestOptions();
+    method public com.google.common.util.concurrent.ListenableFuture setCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+    method public static androidx.camera.camera2.interop.Camera2CameraInfo from(androidx.camera.core.CameraInfo);
+    method public  T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key);
+    method public String getCameraId();
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+  }
+
+  @RequiresApi(21) public static final class Camera2Interop.Extender {
+    ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder);
+    method public  androidx.camera.camera2.interop.Camera2Interop.Extender setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key, ValueT);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+    method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.Extender setPhysicalCameraId(String);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+    method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.Extender setStreamUseCase(long);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+    method public  ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key);
+  }
+
+  @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public CaptureRequestOptions.Builder();
+    method public androidx.camera.camera2.interop.CaptureRequestOptions build();
+    method public  androidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key);
+    method public  androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key, ValueT);
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
+  }
+
+}
+
diff --git a/camera/camera-core/api/1.3.0-beta03.txt b/camera/camera-core/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..adace2b
--- /dev/null
+++ b/camera/camera-core/api/1.3.0-beta03.txt
@@ -0,0 +1,612 @@
+// Signature format: 4.0
+package androidx.camera.core {
+
+  @RequiresApi(21) public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+    field public static final int RATIO_DEFAULT = -1; // 0xffffffff
+  }
+
+  @RequiresApi(21) public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  @RequiresApi(21) public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture setExposureCompensationIndex(int);
+    method public com.google.common.util.concurrent.ListenableFuture setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+  }
+
+  @RequiresApi(21) public abstract class CameraEffect {
+    ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.ImageProcessor, androidx.core.util.Consumer);
+    ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.SurfaceProcessor, androidx.core.util.Consumer);
+    method public androidx.core.util.Consumer getErrorListener();
+    method public java.util.concurrent.Executor getExecutor();
+    method public androidx.camera.core.SurfaceProcessor? getSurfaceProcessor();
+    method public int getTargets();
+    field public static final int IMAGE_CAPTURE = 4; // 0x4
+    field public static final int PREVIEW = 1; // 0x1
+    field public static final int VIDEO_CAPTURE = 2; // 0x2
+  }
+
+  @RequiresApi(21) public interface CameraFilter {
+    method public java.util.List filter(java.util.List);
+  }
+
+  @RequiresApi(21) public interface CameraInfo {
+    method public androidx.camera.core.CameraSelector getCameraSelector();
+    method public androidx.lifecycle.LiveData getCameraState();
+    method public androidx.camera.core.ExposureState getExposureState();
+    method @FloatRange(from=0, fromInclusive=false) public default float getIntrinsicZoomRatio();
+    method public default int getLensFacing();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(int);
+    method public default java.util.Set!> getSupportedFrameRateRanges();
+    method public androidx.lifecycle.LiveData getTorchState();
+    method public androidx.lifecycle.LiveData getZoomState();
+    method public boolean hasFlashUnit();
+    method public default boolean isFocusMeteringSupported(androidx.camera.core.FocusMeteringAction);
+    method @SuppressCompatibility @androidx.camera.core.ExperimentalZeroShutterLag public default boolean isZslSupported();
+  }
+
+  @RequiresApi(21) public final class CameraInfoUnavailableException extends java.lang.Exception {
+  }
+
+  @RequiresApi(21) public interface CameraProvider {
+    method public java.util.List getAvailableCameraInfos();
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+  }
+
+  @RequiresApi(21) public final class CameraSelector {
+    method public java.util.List filter(java.util.List);
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field @SuppressCompatibility @androidx.camera.core.ExperimentalLensFacing public static final int LENS_FACING_EXTERNAL = 2; // 0x2
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+    field public static final int LENS_FACING_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter);
+    method public androidx.camera.core.CameraSelector build();
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+  }
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class CameraState {
+    ctor public CameraState();
+    method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type);
+    method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type, androidx.camera.core.CameraState.StateError?);
+    method public abstract androidx.camera.core.CameraState.StateError? getError();
+    method public abstract androidx.camera.core.CameraState.Type getType();
+    field public static final int ERROR_CAMERA_DISABLED = 5; // 0x5
+    field public static final int ERROR_CAMERA_FATAL_ERROR = 6; // 0x6
+    field public static final int ERROR_CAMERA_IN_USE = 2; // 0x2
+    field public static final int ERROR_DO_NOT_DISTURB_MODE_ENABLED = 7; // 0x7
+    field public static final int ERROR_MAX_CAMERAS_IN_USE = 1; // 0x1
+    field public static final int ERROR_OTHER_RECOVERABLE_ERROR = 3; // 0x3
+    field public static final int ERROR_STREAM_CONFIG = 4; // 0x4
+  }
+
+  public enum CameraState.ErrorType {
+    enum_constant public static final androidx.camera.core.CameraState.ErrorType CRITICAL;
+    enum_constant public static final androidx.camera.core.CameraState.ErrorType RECOVERABLE;
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class CameraState.StateError {
+    ctor public CameraState.StateError();
+    method public static androidx.camera.core.CameraState.StateError create(int);
+    method public static androidx.camera.core.CameraState.StateError create(int, Throwable?);
+    method public abstract Throwable? getCause();
+    method public abstract int getCode();
+    method public androidx.camera.core.CameraState.ErrorType getType();
+  }
+
+  public enum CameraState.Type {
+    enum_constant public static final androidx.camera.core.CameraState.Type CLOSED;
+    enum_constant public static final androidx.camera.core.CameraState.Type CLOSING;
+    enum_constant public static final androidx.camera.core.CameraState.Type OPEN;
+    enum_constant public static final androidx.camera.core.CameraState.Type OPENING;
+    enum_constant public static final androidx.camera.core.CameraState.Type PENDING_OPEN;
+  }
+
+  @RequiresApi(21) public class CameraUnavailableException extends java.lang.Exception {
+    ctor public CameraUnavailableException(int);
+    ctor public CameraUnavailableException(int, String?);
+    ctor public CameraUnavailableException(int, String?, Throwable?);
+    ctor public CameraUnavailableException(int, Throwable?);
+    method public int getReason();
+    field public static final int CAMERA_DISABLED = 1; // 0x1
+    field public static final int CAMERA_DISCONNECTED = 2; // 0x2
+    field public static final int CAMERA_ERROR = 3; // 0x3
+    field public static final int CAMERA_IN_USE = 4; // 0x4
+    field public static final int CAMERA_MAX_IN_USE = 5; // 0x5
+    field public static final int CAMERA_UNAVAILABLE_DO_NOT_DISTURB = 6; // 0x6
+    field public static final int CAMERA_UNKNOWN_ERROR = 0; // 0x0
+  }
+
+  @RequiresApi(21) public final class CameraXConfig {
+    method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?);
+    method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+    method public int getMinimumLoggingLevel();
+    method public android.os.Handler? getSchedulerHandler(android.os.Handler?);
+  }
+
+  public static final class CameraXConfig.Builder {
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int);
+    method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  @RequiresApi(21) public class ConcurrentCamera {
+    ctor public ConcurrentCamera(java.util.List);
+    method public java.util.List getCameras();
+  }
+
+  public static final class ConcurrentCamera.SingleCameraConfig {
+    ctor public ConcurrentCamera.SingleCameraConfig(androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup, androidx.lifecycle.LifecycleOwner);
+    method public androidx.camera.core.CameraSelector getCameraSelector();
+    method public androidx.lifecycle.LifecycleOwner getLifecycleOwner();
+    method public androidx.camera.core.UseCaseGroup getUseCaseGroup();
+  }
+
+  @RequiresApi(21) public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraInfo, float, float);
+  }
+
+  @RequiresApi(21) public final class DynamicRange {
+    ctor public DynamicRange(int, int);
+    method public int getBitDepth();
+    method public int getEncoding();
+    field public static final int BIT_DEPTH_10_BIT = 10; // 0xa
+    field public static final int BIT_DEPTH_8_BIT = 8; // 0x8
+    field public static final int BIT_DEPTH_UNSPECIFIED = 0; // 0x0
+    field public static final androidx.camera.core.DynamicRange DOLBY_VISION_10_BIT;
+    field public static final androidx.camera.core.DynamicRange DOLBY_VISION_8_BIT;
+    field public static final int ENCODING_DOLBY_VISION = 6; // 0x6
+    field public static final int ENCODING_HDR10 = 4; // 0x4
+    field public static final int ENCODING_HDR10_PLUS = 5; // 0x5
+    field public static final int ENCODING_HDR_UNSPECIFIED = 2; // 0x2
+    field public static final int ENCODING_HLG = 3; // 0x3
+    field public static final int ENCODING_SDR = 1; // 0x1
+    field public static final int ENCODING_UNSPECIFIED = 0; // 0x0
+    field public static final androidx.camera.core.DynamicRange HDR10_10_BIT;
+    field public static final androidx.camera.core.DynamicRange HDR10_PLUS_10_BIT;
+    field public static final androidx.camera.core.DynamicRange HDR_UNSPECIFIED_10_BIT;
+    field public static final androidx.camera.core.DynamicRange HLG_10_BIT;
+    field public static final androidx.camera.core.DynamicRange SDR;
+    field public static final androidx.camera.core.DynamicRange UNSPECIFIED;
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalGetImage {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalLensFacing {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalUseCaseApi {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalZeroShutterLag {
+  }
+
+  @RequiresApi(21) public interface ExposureState {
+    method public int getExposureCompensationIndex();
+    method public android.util.Range getExposureCompensationRange();
+    method public android.util.Rational getExposureCompensationStep();
+    method public boolean isExposureCompensationSupported();
+  }
+
+  @RequiresApi(21) public interface ExtendableBuilder {
+    method public T build();
+  }
+
+  @RequiresApi(21) public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List getMeteringPointsAe();
+    method public java.util.List getMeteringPointsAf();
+    method public java.util.List getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint);
+    ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  @RequiresApi(21) public final class FocusMeteringResult {
+    method public boolean isFocusSuccessful();
+  }
+
+  @RequiresApi(21) public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method public void clearAnalyzer();
+    method @SuppressCompatibility @androidx.camera.core.ExperimentalUseCaseApi public java.util.concurrent.Executor? getBackgroundExecutor();
+    method public int getBackpressureStrategy();
+    method public int getImageQueueDepth();
+    method public int getOutputImageFormat();
+    method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
+    method public int getTargetRotation();
+    method public boolean isOutputImageRotationEnabled();
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(int);
+    field public static final int COORDINATE_SYSTEM_ORIGINAL = 0; // 0x0
+    field public static final int OUTPUT_IMAGE_FORMAT_RGBA_8888 = 2; // 0x2
+    field public static final int OUTPUT_IMAGE_FORMAT_YUV_420_888 = 1; // 0x1
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+    method public default android.util.Size? getDefaultTargetResolution();
+    method public default int getTargetCoordinateSystem();
+    method public default void updateTransform(android.graphics.Matrix?);
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setOutputImageFormat(int);
+    method @RequiresApi(23) public androidx.camera.core.ImageAnalysis.Builder setOutputImageRotationEnabled(boolean);
+    method public androidx.camera.core.ImageAnalysis.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
+    method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int);
+  }
+
+  @RequiresApi(21) public final class ImageCapture extends androidx.camera.core.UseCase {
+    method public int getCaptureMode();
+    method public int getFlashMode();
+    method @IntRange(from=1, to=100) public int getJpegQuality();
+    method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
+    method public int getTargetRotation();
+    method public void setCropAspectRatio(android.util.Rational);
+    method public void setFlashMode(int);
+    method public void setTargetRotation(int);
+    method public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field @SuppressCompatibility @androidx.camera.core.ExperimentalZeroShutterLag public static final int CAPTURE_MODE_ZERO_SHUTTER_LAG = 2; // 0x2
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageCapture.Builder setJpegQuality(@IntRange(from=1, to=100) int);
+    method public androidx.camera.core.ImageCapture.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
+    method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int);
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(androidx.camera.core.ImageCaptureException);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(androidx.camera.core.ImageCaptureException);
+    method public void onImageSaved(androidx.camera.core.ImageCapture.OutputFileResults);
+  }
+
+  public static final class ImageCapture.OutputFileOptions {
+  }
+
+  public static final class ImageCapture.OutputFileOptions.Builder {
+    ctor public ImageCapture.OutputFileOptions.Builder(android.content.ContentResolver, android.net.Uri, android.content.ContentValues);
+    ctor public ImageCapture.OutputFileOptions.Builder(java.io.File);
+    ctor public ImageCapture.OutputFileOptions.Builder(java.io.OutputStream);
+    method public androidx.camera.core.ImageCapture.OutputFileOptions build();
+    method public androidx.camera.core.ImageCapture.OutputFileOptions.Builder setMetadata(androidx.camera.core.ImageCapture.Metadata);
+  }
+
+  public static class ImageCapture.OutputFileResults {
+    method public android.net.Uri? getSavedUri();
+  }
+
+  @RequiresApi(21) public class ImageCaptureException extends java.lang.Exception {
+    ctor public ImageCaptureException(int, String, Throwable?);
+    method public int getImageCaptureError();
+  }
+
+  @RequiresApi(21) public interface ImageInfo {
+    method public int getRotationDegrees();
+    method public default android.graphics.Matrix getSensorToBufferTransformMatrix();
+    method public long getTimestamp();
+  }
+
+  public interface ImageProcessor {
+    method public androidx.camera.core.ImageProcessor.Response process(androidx.camera.core.ImageProcessor.Request) throws androidx.camera.core.ProcessingException;
+  }
+
+  public static interface ImageProcessor.Request {
+    method public androidx.camera.core.ImageProxy getInputImage();
+    method public int getOutputFormat();
+  }
+
+  public static interface ImageProcessor.Response {
+    method public androidx.camera.core.ImageProxy getOutputImage();
+  }
+
+  @RequiresApi(21) public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method @SuppressCompatibility @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+    method public default android.graphics.Bitmap toBitmap();
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  @RequiresApi(21) public class InitializationException extends java.lang.Exception {
+    ctor public InitializationException(String?);
+    ctor public InitializationException(String?, Throwable?);
+    ctor public InitializationException(Throwable?);
+  }
+
+  @RequiresApi(21) public class MeteringPoint {
+    method public float getSize();
+  }
+
+  @RequiresApi(21) public abstract class MeteringPointFactory {
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  @RequiresApi(21) public class MirrorMode {
+    field public static final int MIRROR_MODE_OFF = 0; // 0x0
+    field public static final int MIRROR_MODE_ON = 1; // 0x1
+    field public static final int MIRROR_MODE_ON_FRONT_ONLY = 2; // 0x2
+  }
+
+  @RequiresApi(21) public final class Preview extends androidx.camera.core.UseCase {
+    method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
+    method public android.util.Range getTargetFrameRate();
+    method public int getTargetRotation();
+    method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
+    method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
+    method public void setTargetRotation(int);
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
+    method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method @Deprecated public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(int);
+  }
+
+  public static interface Preview.SurfaceProvider {
+    method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
+  }
+
+  public class ProcessingException extends java.lang.Exception {
+    ctor public ProcessingException();
+  }
+
+  @RequiresApi(21) public class ResolutionInfo {
+    ctor public ResolutionInfo(android.util.Size, android.graphics.Rect, int);
+    method public android.graphics.Rect getCropRect();
+    method public android.util.Size getResolution();
+    method public int getRotationDegrees();
+  }
+
+  @RequiresApi(21) public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+  }
+
+  public interface SurfaceOutput extends java.io.Closeable {
+    method public void close();
+    method public android.util.Size getSize();
+    method public android.view.Surface getSurface(java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method public int getTargets();
+    method public void updateTransformMatrix(float[], float[]);
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class SurfaceOutput.Event {
+    method public abstract int getEventCode();
+    method public abstract androidx.camera.core.SurfaceOutput getSurfaceOutput();
+    field public static final int EVENT_REQUEST_CLOSE = 0; // 0x0
+  }
+
+  public interface SurfaceProcessor {
+    method public void onInputSurface(androidx.camera.core.SurfaceRequest) throws androidx.camera.core.ProcessingException;
+    method public void onOutputSurface(androidx.camera.core.SurfaceOutput) throws androidx.camera.core.ProcessingException;
+  }
+
+  @RequiresApi(21) public final class SurfaceRequest {
+    method public void addRequestCancellationListener(java.util.concurrent.Executor, Runnable);
+    method public void clearTransformationInfoListener();
+    method public androidx.camera.core.DynamicRange getDynamicRange();
+    method public android.util.Size getResolution();
+    method public boolean invalidate();
+    method public void provideSurface(android.view.Surface, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method public void setTransformationInfoListener(java.util.concurrent.Executor, androidx.camera.core.SurfaceRequest.TransformationInfoListener);
+    method public boolean willNotProvideSurface();
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.Result {
+    method public abstract int getResultCode();
+    method public abstract android.view.Surface getSurface();
+    field public static final int RESULT_INVALID_SURFACE = 2; // 0x2
+    field public static final int RESULT_REQUEST_CANCELLED = 1; // 0x1
+    field public static final int RESULT_SURFACE_ALREADY_PROVIDED = 3; // 0x3
+    field public static final int RESULT_SURFACE_USED_SUCCESSFULLY = 0; // 0x0
+    field public static final int RESULT_WILL_NOT_PROVIDE_SURFACE = 4; // 0x4
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.TransformationInfo {
+    method public abstract android.graphics.Rect getCropRect();
+    method public abstract int getRotationDegrees();
+  }
+
+  public static interface SurfaceRequest.TransformationInfoListener {
+    method public void onTransformationInfoUpdate(androidx.camera.core.SurfaceRequest.TransformationInfo);
+  }
+
+  @RequiresApi(21) public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  @RequiresApi(21) public abstract class UseCase {
+    method public static int snapToSurfaceRotation(@IntRange(from=0, to=359) int);
+  }
+
+  @RequiresApi(21) public final class UseCaseGroup {
+    method public java.util.List getEffects();
+    method public java.util.List getUseCases();
+    method public androidx.camera.core.ViewPort? getViewPort();
+  }
+
+  public static final class UseCaseGroup.Builder {
+    ctor public UseCaseGroup.Builder();
+    method public androidx.camera.core.UseCaseGroup.Builder addEffect(androidx.camera.core.CameraEffect);
+    method public androidx.camera.core.UseCaseGroup.Builder addUseCase(androidx.camera.core.UseCase);
+    method public androidx.camera.core.UseCaseGroup build();
+    method public androidx.camera.core.UseCaseGroup.Builder setViewPort(androidx.camera.core.ViewPort);
+  }
+
+  @RequiresApi(21) public final class ViewPort {
+    method public android.util.Rational getAspectRatio();
+    method public int getLayoutDirection();
+    method public int getRotation();
+    method public int getScaleType();
+    field public static final int FILL_CENTER = 1; // 0x1
+    field public static final int FILL_END = 2; // 0x2
+    field public static final int FILL_START = 0; // 0x0
+    field public static final int FIT = 3; // 0x3
+  }
+
+  public static final class ViewPort.Builder {
+    ctor public ViewPort.Builder(android.util.Rational, int);
+    method public androidx.camera.core.ViewPort build();
+    method public androidx.camera.core.ViewPort.Builder setLayoutDirection(int);
+    method public androidx.camera.core.ViewPort.Builder setScaleType(int);
+  }
+
+  @RequiresApi(21) public interface ZoomState {
+    method public float getLinearZoom();
+    method public float getMaxZoomRatio();
+    method public float getMinZoomRatio();
+    method public float getZoomRatio();
+  }
+
+}
+
+package androidx.camera.core.resolutionselector {
+
+  @RequiresApi(21) public final class AspectRatioStrategy {
+    ctor public AspectRatioStrategy(int, int);
+    method public int getFallbackRule();
+    method public int getPreferredAspectRatio();
+    field public static final int FALLBACK_RULE_AUTO = 1; // 0x1
+    field public static final int FALLBACK_RULE_NONE = 0; // 0x0
+    field public static final androidx.camera.core.resolutionselector.AspectRatioStrategy RATIO_16_9_FALLBACK_AUTO_STRATEGY;
+    field public static final androidx.camera.core.resolutionselector.AspectRatioStrategy RATIO_4_3_FALLBACK_AUTO_STRATEGY;
+  }
+
+  @RequiresApi(21) public interface ResolutionFilter {
+    method public java.util.List filter(java.util.List, int);
+  }
+
+  @RequiresApi(21) public final class ResolutionSelector {
+    method public int getAllowedResolutionMode();
+    method public androidx.camera.core.resolutionselector.AspectRatioStrategy getAspectRatioStrategy();
+    method public androidx.camera.core.resolutionselector.ResolutionFilter? getResolutionFilter();
+    method public androidx.camera.core.resolutionselector.ResolutionStrategy? getResolutionStrategy();
+    field public static final int PREFER_CAPTURE_RATE_OVER_HIGHER_RESOLUTION = 0; // 0x0
+    field public static final int PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE = 1; // 0x1
+  }
+
+  public static final class ResolutionSelector.Builder {
+    ctor public ResolutionSelector.Builder();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector build();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setAllowedResolutionMode(int);
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setAspectRatioStrategy(androidx.camera.core.resolutionselector.AspectRatioStrategy);
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setResolutionFilter(androidx.camera.core.resolutionselector.ResolutionFilter);
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setResolutionStrategy(androidx.camera.core.resolutionselector.ResolutionStrategy);
+  }
+
+  @RequiresApi(21) public final class ResolutionStrategy {
+    ctor public ResolutionStrategy(android.util.Size, int);
+    method public android.util.Size? getBoundSize();
+    method public int getFallbackRule();
+    field public static final int FALLBACK_RULE_CLOSEST_HIGHER = 2; // 0x2
+    field public static final int FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER = 1; // 0x1
+    field public static final int FALLBACK_RULE_CLOSEST_LOWER = 4; // 0x4
+    field public static final int FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER = 3; // 0x3
+    field public static final int FALLBACK_RULE_NONE = 0; // 0x0
+    field public static final androidx.camera.core.resolutionselector.ResolutionStrategy HIGHEST_AVAILABLE_STRATEGY;
+  }
+
+}
+
diff --git a/camera/camera-core/api/res-1.3.0-beta03.txt b/camera/camera-core/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-core/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-core/api/restricted_1.3.0-beta03.txt b/camera/camera-core/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..adace2b
--- /dev/null
+++ b/camera/camera-core/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,612 @@
+// Signature format: 4.0
+package androidx.camera.core {
+
+  @RequiresApi(21) public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+    field public static final int RATIO_DEFAULT = -1; // 0xffffffff
+  }
+
+  @RequiresApi(21) public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  @RequiresApi(21) public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture setExposureCompensationIndex(int);
+    method public com.google.common.util.concurrent.ListenableFuture setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+  }
+
+  @RequiresApi(21) public abstract class CameraEffect {
+    ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.ImageProcessor, androidx.core.util.Consumer);
+    ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.SurfaceProcessor, androidx.core.util.Consumer);
+    method public androidx.core.util.Consumer getErrorListener();
+    method public java.util.concurrent.Executor getExecutor();
+    method public androidx.camera.core.SurfaceProcessor? getSurfaceProcessor();
+    method public int getTargets();
+    field public static final int IMAGE_CAPTURE = 4; // 0x4
+    field public static final int PREVIEW = 1; // 0x1
+    field public static final int VIDEO_CAPTURE = 2; // 0x2
+  }
+
+  @RequiresApi(21) public interface CameraFilter {
+    method public java.util.List filter(java.util.List);
+  }
+
+  @RequiresApi(21) public interface CameraInfo {
+    method public androidx.camera.core.CameraSelector getCameraSelector();
+    method public androidx.lifecycle.LiveData getCameraState();
+    method public androidx.camera.core.ExposureState getExposureState();
+    method @FloatRange(from=0, fromInclusive=false) public default float getIntrinsicZoomRatio();
+    method public default int getLensFacing();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(int);
+    method public default java.util.Set!> getSupportedFrameRateRanges();
+    method public androidx.lifecycle.LiveData getTorchState();
+    method public androidx.lifecycle.LiveData getZoomState();
+    method public boolean hasFlashUnit();
+    method public default boolean isFocusMeteringSupported(androidx.camera.core.FocusMeteringAction);
+    method @SuppressCompatibility @androidx.camera.core.ExperimentalZeroShutterLag public default boolean isZslSupported();
+  }
+
+  @RequiresApi(21) public final class CameraInfoUnavailableException extends java.lang.Exception {
+  }
+
+  @RequiresApi(21) public interface CameraProvider {
+    method public java.util.List getAvailableCameraInfos();
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+  }
+
+  @RequiresApi(21) public final class CameraSelector {
+    method public java.util.List filter(java.util.List);
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field @SuppressCompatibility @androidx.camera.core.ExperimentalLensFacing public static final int LENS_FACING_EXTERNAL = 2; // 0x2
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+    field public static final int LENS_FACING_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter);
+    method public androidx.camera.core.CameraSelector build();
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+  }
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class CameraState {
+    ctor public CameraState();
+    method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type);
+    method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type, androidx.camera.core.CameraState.StateError?);
+    method public abstract androidx.camera.core.CameraState.StateError? getError();
+    method public abstract androidx.camera.core.CameraState.Type getType();
+    field public static final int ERROR_CAMERA_DISABLED = 5; // 0x5
+    field public static final int ERROR_CAMERA_FATAL_ERROR = 6; // 0x6
+    field public static final int ERROR_CAMERA_IN_USE = 2; // 0x2
+    field public static final int ERROR_DO_NOT_DISTURB_MODE_ENABLED = 7; // 0x7
+    field public static final int ERROR_MAX_CAMERAS_IN_USE = 1; // 0x1
+    field public static final int ERROR_OTHER_RECOVERABLE_ERROR = 3; // 0x3
+    field public static final int ERROR_STREAM_CONFIG = 4; // 0x4
+  }
+
+  public enum CameraState.ErrorType {
+    enum_constant public static final androidx.camera.core.CameraState.ErrorType CRITICAL;
+    enum_constant public static final androidx.camera.core.CameraState.ErrorType RECOVERABLE;
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class CameraState.StateError {
+    ctor public CameraState.StateError();
+    method public static androidx.camera.core.CameraState.StateError create(int);
+    method public static androidx.camera.core.CameraState.StateError create(int, Throwable?);
+    method public abstract Throwable? getCause();
+    method public abstract int getCode();
+    method public androidx.camera.core.CameraState.ErrorType getType();
+  }
+
+  public enum CameraState.Type {
+    enum_constant public static final androidx.camera.core.CameraState.Type CLOSED;
+    enum_constant public static final androidx.camera.core.CameraState.Type CLOSING;
+    enum_constant public static final androidx.camera.core.CameraState.Type OPEN;
+    enum_constant public static final androidx.camera.core.CameraState.Type OPENING;
+    enum_constant public static final androidx.camera.core.CameraState.Type PENDING_OPEN;
+  }
+
+  @RequiresApi(21) public class CameraUnavailableException extends java.lang.Exception {
+    ctor public CameraUnavailableException(int);
+    ctor public CameraUnavailableException(int, String?);
+    ctor public CameraUnavailableException(int, String?, Throwable?);
+    ctor public CameraUnavailableException(int, Throwable?);
+    method public int getReason();
+    field public static final int CAMERA_DISABLED = 1; // 0x1
+    field public static final int CAMERA_DISCONNECTED = 2; // 0x2
+    field public static final int CAMERA_ERROR = 3; // 0x3
+    field public static final int CAMERA_IN_USE = 4; // 0x4
+    field public static final int CAMERA_MAX_IN_USE = 5; // 0x5
+    field public static final int CAMERA_UNAVAILABLE_DO_NOT_DISTURB = 6; // 0x6
+    field public static final int CAMERA_UNKNOWN_ERROR = 0; // 0x0
+  }
+
+  @RequiresApi(21) public final class CameraXConfig {
+    method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?);
+    method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+    method public int getMinimumLoggingLevel();
+    method public android.os.Handler? getSchedulerHandler(android.os.Handler?);
+  }
+
+  public static final class CameraXConfig.Builder {
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int);
+    method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  @RequiresApi(21) public class ConcurrentCamera {
+    ctor public ConcurrentCamera(java.util.List);
+    method public java.util.List getCameras();
+  }
+
+  public static final class ConcurrentCamera.SingleCameraConfig {
+    ctor public ConcurrentCamera.SingleCameraConfig(androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup, androidx.lifecycle.LifecycleOwner);
+    method public androidx.camera.core.CameraSelector getCameraSelector();
+    method public androidx.lifecycle.LifecycleOwner getLifecycleOwner();
+    method public androidx.camera.core.UseCaseGroup getUseCaseGroup();
+  }
+
+  @RequiresApi(21) public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraInfo, float, float);
+  }
+
+  @RequiresApi(21) public final class DynamicRange {
+    ctor public DynamicRange(int, int);
+    method public int getBitDepth();
+    method public int getEncoding();
+    field public static final int BIT_DEPTH_10_BIT = 10; // 0xa
+    field public static final int BIT_DEPTH_8_BIT = 8; // 0x8
+    field public static final int BIT_DEPTH_UNSPECIFIED = 0; // 0x0
+    field public static final androidx.camera.core.DynamicRange DOLBY_VISION_10_BIT;
+    field public static final androidx.camera.core.DynamicRange DOLBY_VISION_8_BIT;
+    field public static final int ENCODING_DOLBY_VISION = 6; // 0x6
+    field public static final int ENCODING_HDR10 = 4; // 0x4
+    field public static final int ENCODING_HDR10_PLUS = 5; // 0x5
+    field public static final int ENCODING_HDR_UNSPECIFIED = 2; // 0x2
+    field public static final int ENCODING_HLG = 3; // 0x3
+    field public static final int ENCODING_SDR = 1; // 0x1
+    field public static final int ENCODING_UNSPECIFIED = 0; // 0x0
+    field public static final androidx.camera.core.DynamicRange HDR10_10_BIT;
+    field public static final androidx.camera.core.DynamicRange HDR10_PLUS_10_BIT;
+    field public static final androidx.camera.core.DynamicRange HDR_UNSPECIFIED_10_BIT;
+    field public static final androidx.camera.core.DynamicRange HLG_10_BIT;
+    field public static final androidx.camera.core.DynamicRange SDR;
+    field public static final androidx.camera.core.DynamicRange UNSPECIFIED;
+  }
+
+  @SuppressCompatibility @RequiresApi(21) @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalGetImage {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalLensFacing {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalUseCaseApi {
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalZeroShutterLag {
+  }
+
+  @RequiresApi(21) public interface ExposureState {
+    method public int getExposureCompensationIndex();
+    method public android.util.Range getExposureCompensationRange();
+    method public android.util.Rational getExposureCompensationStep();
+    method public boolean isExposureCompensationSupported();
+  }
+
+  @RequiresApi(21) public interface ExtendableBuilder {
+    method public T build();
+  }
+
+  @RequiresApi(21) public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List getMeteringPointsAe();
+    method public java.util.List getMeteringPointsAf();
+    method public java.util.List getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint);
+    ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  @RequiresApi(21) public final class FocusMeteringResult {
+    method public boolean isFocusSuccessful();
+  }
+
+  @RequiresApi(21) public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method public void clearAnalyzer();
+    method @SuppressCompatibility @androidx.camera.core.ExperimentalUseCaseApi public java.util.concurrent.Executor? getBackgroundExecutor();
+    method public int getBackpressureStrategy();
+    method public int getImageQueueDepth();
+    method public int getOutputImageFormat();
+    method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
+    method public int getTargetRotation();
+    method public boolean isOutputImageRotationEnabled();
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(int);
+    field public static final int COORDINATE_SYSTEM_ORIGINAL = 0; // 0x0
+    field public static final int OUTPUT_IMAGE_FORMAT_RGBA_8888 = 2; // 0x2
+    field public static final int OUTPUT_IMAGE_FORMAT_YUV_420_888 = 1; // 0x1
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+    method public default android.util.Size? getDefaultTargetResolution();
+    method public default int getTargetCoordinateSystem();
+    method public default void updateTransform(android.graphics.Matrix?);
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setOutputImageFormat(int);
+    method @RequiresApi(23) public androidx.camera.core.ImageAnalysis.Builder setOutputImageRotationEnabled(boolean);
+    method public androidx.camera.core.ImageAnalysis.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
+    method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int);
+  }
+
+  @RequiresApi(21) public final class ImageCapture extends androidx.camera.core.UseCase {
+    method public int getCaptureMode();
+    method public int getFlashMode();
+    method @IntRange(from=1, to=100) public int getJpegQuality();
+    method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
+    method public int getTargetRotation();
+    method public void setCropAspectRatio(android.util.Rational);
+    method public void setFlashMode(int);
+    method public void setTargetRotation(int);
+    method public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field @SuppressCompatibility @androidx.camera.core.ExperimentalZeroShutterLag public static final int CAPTURE_MODE_ZERO_SHUTTER_LAG = 2; // 0x2
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageCapture.Builder setJpegQuality(@IntRange(from=1, to=100) int);
+    method public androidx.camera.core.ImageCapture.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
+    method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int);
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(androidx.camera.core.ImageCaptureException);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(androidx.camera.core.ImageCaptureException);
+    method public void onImageSaved(androidx.camera.core.ImageCapture.OutputFileResults);
+  }
+
+  public static final class ImageCapture.OutputFileOptions {
+  }
+
+  public static final class ImageCapture.OutputFileOptions.Builder {
+    ctor public ImageCapture.OutputFileOptions.Builder(android.content.ContentResolver, android.net.Uri, android.content.ContentValues);
+    ctor public ImageCapture.OutputFileOptions.Builder(java.io.File);
+    ctor public ImageCapture.OutputFileOptions.Builder(java.io.OutputStream);
+    method public androidx.camera.core.ImageCapture.OutputFileOptions build();
+    method public androidx.camera.core.ImageCapture.OutputFileOptions.Builder setMetadata(androidx.camera.core.ImageCapture.Metadata);
+  }
+
+  public static class ImageCapture.OutputFileResults {
+    method public android.net.Uri? getSavedUri();
+  }
+
+  @RequiresApi(21) public class ImageCaptureException extends java.lang.Exception {
+    ctor public ImageCaptureException(int, String, Throwable?);
+    method public int getImageCaptureError();
+  }
+
+  @RequiresApi(21) public interface ImageInfo {
+    method public int getRotationDegrees();
+    method public default android.graphics.Matrix getSensorToBufferTransformMatrix();
+    method public long getTimestamp();
+  }
+
+  public interface ImageProcessor {
+    method public androidx.camera.core.ImageProcessor.Response process(androidx.camera.core.ImageProcessor.Request) throws androidx.camera.core.ProcessingException;
+  }
+
+  public static interface ImageProcessor.Request {
+    method public androidx.camera.core.ImageProxy getInputImage();
+    method public int getOutputFormat();
+  }
+
+  public static interface ImageProcessor.Response {
+    method public androidx.camera.core.ImageProxy getOutputImage();
+  }
+
+  @RequiresApi(21) public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method @SuppressCompatibility @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+    method public default android.graphics.Bitmap toBitmap();
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  @RequiresApi(21) public class InitializationException extends java.lang.Exception {
+    ctor public InitializationException(String?);
+    ctor public InitializationException(String?, Throwable?);
+    ctor public InitializationException(Throwable?);
+  }
+
+  @RequiresApi(21) public class MeteringPoint {
+    method public float getSize();
+  }
+
+  @RequiresApi(21) public abstract class MeteringPointFactory {
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  @RequiresApi(21) public class MirrorMode {
+    field public static final int MIRROR_MODE_OFF = 0; // 0x0
+    field public static final int MIRROR_MODE_ON = 1; // 0x1
+    field public static final int MIRROR_MODE_ON_FRONT_ONLY = 2; // 0x2
+  }
+
+  @RequiresApi(21) public final class Preview extends androidx.camera.core.UseCase {
+    method public androidx.camera.core.ResolutionInfo? getResolutionInfo();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector();
+    method public android.util.Range getTargetFrameRate();
+    method public int getTargetRotation();
+    method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?);
+    method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?);
+    method public void setTargetRotation(int);
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector);
+    method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method @Deprecated public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(int);
+  }
+
+  public static interface Preview.SurfaceProvider {
+    method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
+  }
+
+  public class ProcessingException extends java.lang.Exception {
+    ctor public ProcessingException();
+  }
+
+  @RequiresApi(21) public class ResolutionInfo {
+    ctor public ResolutionInfo(android.util.Size, android.graphics.Rect, int);
+    method public android.graphics.Rect getCropRect();
+    method public android.util.Size getResolution();
+    method public int getRotationDegrees();
+  }
+
+  @RequiresApi(21) public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+  }
+
+  public interface SurfaceOutput extends java.io.Closeable {
+    method public void close();
+    method public android.util.Size getSize();
+    method public android.view.Surface getSurface(java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method public int getTargets();
+    method public void updateTransformMatrix(float[], float[]);
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class SurfaceOutput.Event {
+    method public abstract int getEventCode();
+    method public abstract androidx.camera.core.SurfaceOutput getSurfaceOutput();
+    field public static final int EVENT_REQUEST_CLOSE = 0; // 0x0
+  }
+
+  public interface SurfaceProcessor {
+    method public void onInputSurface(androidx.camera.core.SurfaceRequest) throws androidx.camera.core.ProcessingException;
+    method public void onOutputSurface(androidx.camera.core.SurfaceOutput) throws androidx.camera.core.ProcessingException;
+  }
+
+  @RequiresApi(21) public final class SurfaceRequest {
+    method public void addRequestCancellationListener(java.util.concurrent.Executor, Runnable);
+    method public void clearTransformationInfoListener();
+    method public androidx.camera.core.DynamicRange getDynamicRange();
+    method public android.util.Size getResolution();
+    method public boolean invalidate();
+    method public void provideSurface(android.view.Surface, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method public void setTransformationInfoListener(java.util.concurrent.Executor, androidx.camera.core.SurfaceRequest.TransformationInfoListener);
+    method public boolean willNotProvideSurface();
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.Result {
+    method public abstract int getResultCode();
+    method public abstract android.view.Surface getSurface();
+    field public static final int RESULT_INVALID_SURFACE = 2; // 0x2
+    field public static final int RESULT_REQUEST_CANCELLED = 1; // 0x1
+    field public static final int RESULT_SURFACE_ALREADY_PROVIDED = 3; // 0x3
+    field public static final int RESULT_SURFACE_USED_SUCCESSFULLY = 0; // 0x0
+    field public static final int RESULT_WILL_NOT_PROVIDE_SURFACE = 4; // 0x4
+  }
+
+  @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.TransformationInfo {
+    method public abstract android.graphics.Rect getCropRect();
+    method public abstract int getRotationDegrees();
+  }
+
+  public static interface SurfaceRequest.TransformationInfoListener {
+    method public void onTransformationInfoUpdate(androidx.camera.core.SurfaceRequest.TransformationInfo);
+  }
+
+  @RequiresApi(21) public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  @RequiresApi(21) public abstract class UseCase {
+    method public static int snapToSurfaceRotation(@IntRange(from=0, to=359) int);
+  }
+
+  @RequiresApi(21) public final class UseCaseGroup {
+    method public java.util.List getEffects();
+    method public java.util.List getUseCases();
+    method public androidx.camera.core.ViewPort? getViewPort();
+  }
+
+  public static final class UseCaseGroup.Builder {
+    ctor public UseCaseGroup.Builder();
+    method public androidx.camera.core.UseCaseGroup.Builder addEffect(androidx.camera.core.CameraEffect);
+    method public androidx.camera.core.UseCaseGroup.Builder addUseCase(androidx.camera.core.UseCase);
+    method public androidx.camera.core.UseCaseGroup build();
+    method public androidx.camera.core.UseCaseGroup.Builder setViewPort(androidx.camera.core.ViewPort);
+  }
+
+  @RequiresApi(21) public final class ViewPort {
+    method public android.util.Rational getAspectRatio();
+    method public int getLayoutDirection();
+    method public int getRotation();
+    method public int getScaleType();
+    field public static final int FILL_CENTER = 1; // 0x1
+    field public static final int FILL_END = 2; // 0x2
+    field public static final int FILL_START = 0; // 0x0
+    field public static final int FIT = 3; // 0x3
+  }
+
+  public static final class ViewPort.Builder {
+    ctor public ViewPort.Builder(android.util.Rational, int);
+    method public androidx.camera.core.ViewPort build();
+    method public androidx.camera.core.ViewPort.Builder setLayoutDirection(int);
+    method public androidx.camera.core.ViewPort.Builder setScaleType(int);
+  }
+
+  @RequiresApi(21) public interface ZoomState {
+    method public float getLinearZoom();
+    method public float getMaxZoomRatio();
+    method public float getMinZoomRatio();
+    method public float getZoomRatio();
+  }
+
+}
+
+package androidx.camera.core.resolutionselector {
+
+  @RequiresApi(21) public final class AspectRatioStrategy {
+    ctor public AspectRatioStrategy(int, int);
+    method public int getFallbackRule();
+    method public int getPreferredAspectRatio();
+    field public static final int FALLBACK_RULE_AUTO = 1; // 0x1
+    field public static final int FALLBACK_RULE_NONE = 0; // 0x0
+    field public static final androidx.camera.core.resolutionselector.AspectRatioStrategy RATIO_16_9_FALLBACK_AUTO_STRATEGY;
+    field public static final androidx.camera.core.resolutionselector.AspectRatioStrategy RATIO_4_3_FALLBACK_AUTO_STRATEGY;
+  }
+
+  @RequiresApi(21) public interface ResolutionFilter {
+    method public java.util.List filter(java.util.List, int);
+  }
+
+  @RequiresApi(21) public final class ResolutionSelector {
+    method public int getAllowedResolutionMode();
+    method public androidx.camera.core.resolutionselector.AspectRatioStrategy getAspectRatioStrategy();
+    method public androidx.camera.core.resolutionselector.ResolutionFilter? getResolutionFilter();
+    method public androidx.camera.core.resolutionselector.ResolutionStrategy? getResolutionStrategy();
+    field public static final int PREFER_CAPTURE_RATE_OVER_HIGHER_RESOLUTION = 0; // 0x0
+    field public static final int PREFER_HIGHER_RESOLUTION_OVER_CAPTURE_RATE = 1; // 0x1
+  }
+
+  public static final class ResolutionSelector.Builder {
+    ctor public ResolutionSelector.Builder();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector build();
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setAllowedResolutionMode(int);
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setAspectRatioStrategy(androidx.camera.core.resolutionselector.AspectRatioStrategy);
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setResolutionFilter(androidx.camera.core.resolutionselector.ResolutionFilter);
+    method public androidx.camera.core.resolutionselector.ResolutionSelector.Builder setResolutionStrategy(androidx.camera.core.resolutionselector.ResolutionStrategy);
+  }
+
+  @RequiresApi(21) public final class ResolutionStrategy {
+    ctor public ResolutionStrategy(android.util.Size, int);
+    method public android.util.Size? getBoundSize();
+    method public int getFallbackRule();
+    field public static final int FALLBACK_RULE_CLOSEST_HIGHER = 2; // 0x2
+    field public static final int FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER = 1; // 0x1
+    field public static final int FALLBACK_RULE_CLOSEST_LOWER = 4; // 0x4
+    field public static final int FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER = 3; // 0x3
+    field public static final int FALLBACK_RULE_NONE = 0; // 0x0
+    field public static final androidx.camera.core.resolutionselector.ResolutionStrategy HIGHEST_AVAILABLE_STRATEGY;
+  }
+
+}
+
diff --git a/camera/camera-effects-still-portrait/api/1.3.0-beta03.txt b/camera/camera-effects-still-portrait/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/api/res-1.3.0-beta03.txt b/camera/camera-effects-still-portrait/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-effects-still-portrait/api/restricted_1.3.0-beta03.txt b/camera/camera-effects-still-portrait/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects/api/1.3.0-beta03.txt b/camera/camera-effects/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects/api/1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects/api/res-1.3.0-beta03.txt b/camera/camera-effects/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-effects/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-effects/api/restricted_1.3.0-beta03.txt b/camera/camera-effects/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-extensions/api/1.3.0-beta03.txt b/camera/camera-extensions/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..5c6e740
--- /dev/null
+++ b/camera/camera-extensions/api/1.3.0-beta03.txt
@@ -0,0 +1,22 @@
+// Signature format: 4.0
+package androidx.camera.extensions {
+
+  @RequiresApi(21) public final class ExtensionMode {
+    field public static final int AUTO = 5; // 0x5
+    field public static final int BOKEH = 1; // 0x1
+    field public static final int FACE_RETOUCH = 4; // 0x4
+    field public static final int HDR = 2; // 0x2
+    field public static final int NIGHT = 3; // 0x3
+    field public static final int NONE = 0; // 0x0
+  }
+
+  @RequiresApi(21) public final class ExtensionsManager {
+    method public android.util.Range? getEstimatedCaptureLatencyRange(androidx.camera.core.CameraSelector, int);
+    method public androidx.camera.core.CameraSelector getExtensionEnabledCameraSelector(androidx.camera.core.CameraSelector, int);
+    method public static com.google.common.util.concurrent.ListenableFuture getInstanceAsync(android.content.Context, androidx.camera.core.CameraProvider);
+    method public boolean isExtensionAvailable(androidx.camera.core.CameraSelector, int);
+    method public boolean isImageAnalysisSupported(androidx.camera.core.CameraSelector, int);
+  }
+
+}
+
diff --git a/camera/camera-extensions/api/res-1.3.0-beta03.txt b/camera/camera-extensions/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-extensions/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-extensions/api/restricted_1.3.0-beta03.txt b/camera/camera-extensions/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..5c6e740
--- /dev/null
+++ b/camera/camera-extensions/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,22 @@
+// Signature format: 4.0
+package androidx.camera.extensions {
+
+  @RequiresApi(21) public final class ExtensionMode {
+    field public static final int AUTO = 5; // 0x5
+    field public static final int BOKEH = 1; // 0x1
+    field public static final int FACE_RETOUCH = 4; // 0x4
+    field public static final int HDR = 2; // 0x2
+    field public static final int NIGHT = 3; // 0x3
+    field public static final int NONE = 0; // 0x0
+  }
+
+  @RequiresApi(21) public final class ExtensionsManager {
+    method public android.util.Range? getEstimatedCaptureLatencyRange(androidx.camera.core.CameraSelector, int);
+    method public androidx.camera.core.CameraSelector getExtensionEnabledCameraSelector(androidx.camera.core.CameraSelector, int);
+    method public static com.google.common.util.concurrent.ListenableFuture getInstanceAsync(android.content.Context, androidx.camera.core.CameraProvider);
+    method public boolean isExtensionAvailable(androidx.camera.core.CameraSelector, int);
+    method public boolean isImageAnalysisSupported(androidx.camera.core.CameraSelector, int);
+  }
+
+}
+
diff --git a/camera/camera-lifecycle/api/1.3.0-beta03.txt b/camera/camera-lifecycle/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..d0621cb
--- /dev/null
+++ b/camera/camera-lifecycle/api/1.3.0-beta03.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.camera.lifecycle {
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraProviderConfiguration {
+  }
+
+  @RequiresApi(21) public final class ProcessCameraProvider implements androidx.camera.core.CameraProvider {
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
+    method @MainThread public androidx.camera.core.ConcurrentCamera bindToLifecycle(java.util.List);
+    method @SuppressCompatibility @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
+    method public java.util.List getAvailableCameraInfos();
+    method public java.util.List!> getAvailableConcurrentCameraInfos();
+    method public static com.google.common.util.concurrent.ListenableFuture getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method @MainThread public boolean isConcurrentCameraModeOn();
+    method @MainThread public void unbind(androidx.camera.core.UseCase!...);
+    method @MainThread public void unbindAll();
+  }
+
+}
+
diff --git a/camera/camera-lifecycle/api/res-1.3.0-beta03.txt b/camera/camera-lifecycle/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-lifecycle/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-lifecycle/api/restricted_1.3.0-beta03.txt b/camera/camera-lifecycle/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..d0621cb
--- /dev/null
+++ b/camera/camera-lifecycle/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,23 @@
+// Signature format: 4.0
+package androidx.camera.lifecycle {
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraProviderConfiguration {
+  }
+
+  @RequiresApi(21) public final class ProcessCameraProvider implements androidx.camera.core.CameraProvider {
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
+    method @MainThread public androidx.camera.core.ConcurrentCamera bindToLifecycle(java.util.List);
+    method @SuppressCompatibility @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
+    method public java.util.List getAvailableCameraInfos();
+    method public java.util.List!> getAvailableConcurrentCameraInfos();
+    method public static com.google.common.util.concurrent.ListenableFuture getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method @MainThread public boolean isConcurrentCameraModeOn();
+    method @MainThread public void unbind(androidx.camera.core.UseCase!...);
+    method @MainThread public void unbindAll();
+  }
+
+}
+
diff --git a/camera/camera-mlkit-vision/api/1.3.0-beta03.txt b/camera/camera-mlkit-vision/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..0599c25
--- /dev/null
+++ b/camera/camera-mlkit-vision/api/1.3.0-beta03.txt
@@ -0,0 +1,20 @@
+// Signature format: 4.0
+package androidx.camera.mlkit.vision {
+
+  @RequiresApi(21) public class MlKitAnalyzer implements androidx.camera.core.ImageAnalysis.Analyzer {
+    ctor public MlKitAnalyzer(java.util.List!>, int, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method public final void analyze(androidx.camera.core.ImageProxy);
+    method public final android.util.Size getDefaultTargetResolution();
+    method public final int getTargetCoordinateSystem();
+    method public final void updateTransform(android.graphics.Matrix?);
+  }
+
+  public static final class MlKitAnalyzer.Result {
+    ctor public MlKitAnalyzer.Result(java.util.Map!,java.lang.Object!>, long, java.util.Map!,java.lang.Throwable!>);
+    method public Throwable? getThrowable(com.google.mlkit.vision.interfaces.Detector);
+    method public long getTimestamp();
+    method public  T? getValue(com.google.mlkit.vision.interfaces.Detector);
+  }
+
+}
+
diff --git a/camera/camera-mlkit-vision/api/res-1.3.0-beta03.txt b/camera/camera-mlkit-vision/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-mlkit-vision/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-mlkit-vision/api/restricted_1.3.0-beta03.txt b/camera/camera-mlkit-vision/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..0599c25
--- /dev/null
+++ b/camera/camera-mlkit-vision/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,20 @@
+// Signature format: 4.0
+package androidx.camera.mlkit.vision {
+
+  @RequiresApi(21) public class MlKitAnalyzer implements androidx.camera.core.ImageAnalysis.Analyzer {
+    ctor public MlKitAnalyzer(java.util.List!>, int, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method public final void analyze(androidx.camera.core.ImageProxy);
+    method public final android.util.Size getDefaultTargetResolution();
+    method public final int getTargetCoordinateSystem();
+    method public final void updateTransform(android.graphics.Matrix?);
+  }
+
+  public static final class MlKitAnalyzer.Result {
+    ctor public MlKitAnalyzer.Result(java.util.Map!,java.lang.Object!>, long, java.util.Map!,java.lang.Throwable!>);
+    method public Throwable? getThrowable(com.google.mlkit.vision.interfaces.Detector);
+    method public long getTimestamp();
+    method public  T? getValue(com.google.mlkit.vision.interfaces.Detector);
+  }
+
+}
+
diff --git a/camera/camera-video/api/1.3.0-beta03.txt b/camera/camera-video/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..b9cc77a
--- /dev/null
+++ b/camera/camera-video/api/1.3.0-beta03.txt
@@ -0,0 +1,207 @@
+// Signature format: 4.0
+package androidx.camera.video {
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class AudioStats {
+    method public abstract int getAudioState();
+    method public abstract Throwable? getErrorCause();
+    method public boolean hasAudio();
+    method public boolean hasError();
+    field public static final int AUDIO_STATE_ACTIVE = 0; // 0x0
+    field public static final int AUDIO_STATE_DISABLED = 1; // 0x1
+    field public static final int AUDIO_STATE_ENCODER_ERROR = 3; // 0x3
+    field public static final int AUDIO_STATE_MUTED = 5; // 0x5
+    field public static final int AUDIO_STATE_SOURCE_ERROR = 4; // 0x4
+    field public static final int AUDIO_STATE_SOURCE_SILENCED = 2; // 0x2
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalPersistentRecording {
+  }
+
+  @RequiresApi(21) public class FallbackStrategy {
+    method public static androidx.camera.video.FallbackStrategy higherQualityOrLowerThan(androidx.camera.video.Quality);
+    method public static androidx.camera.video.FallbackStrategy higherQualityThan(androidx.camera.video.Quality);
+    method public static androidx.camera.video.FallbackStrategy lowerQualityOrHigherThan(androidx.camera.video.Quality);
+    method public static androidx.camera.video.FallbackStrategy lowerQualityThan(androidx.camera.video.Quality);
+  }
+
+  @RequiresApi(21) public final class FileDescriptorOutputOptions extends androidx.camera.video.OutputOptions {
+    method public android.os.ParcelFileDescriptor getParcelFileDescriptor();
+  }
+
+  @RequiresApi(21) public static final class FileDescriptorOutputOptions.Builder {
+    ctor public FileDescriptorOutputOptions.Builder(android.os.ParcelFileDescriptor);
+    method public androidx.camera.video.FileDescriptorOutputOptions build();
+    method public androidx.camera.video.FileDescriptorOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
+    method public androidx.camera.video.FileDescriptorOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
+    method public androidx.camera.video.FileDescriptorOutputOptions.Builder setLocation(android.location.Location?);
+  }
+
+  @RequiresApi(21) public final class FileOutputOptions extends androidx.camera.video.OutputOptions {
+    method public java.io.File getFile();
+  }
+
+  @RequiresApi(21) public static final class FileOutputOptions.Builder {
+    ctor public FileOutputOptions.Builder(java.io.File);
+    method public androidx.camera.video.FileOutputOptions build();
+    method public androidx.camera.video.FileOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
+    method public androidx.camera.video.FileOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
+    method public androidx.camera.video.FileOutputOptions.Builder setLocation(android.location.Location?);
+  }
+
+  @RequiresApi(21) public final class MediaStoreOutputOptions extends androidx.camera.video.OutputOptions {
+    method public android.net.Uri getCollectionUri();
+    method public android.content.ContentResolver getContentResolver();
+    method public android.content.ContentValues getContentValues();
+    field public static final android.content.ContentValues EMPTY_CONTENT_VALUES;
+  }
+
+  public static final class MediaStoreOutputOptions.Builder {
+    ctor public MediaStoreOutputOptions.Builder(android.content.ContentResolver, android.net.Uri);
+    method public androidx.camera.video.MediaStoreOutputOptions build();
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setContentValues(android.content.ContentValues);
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setLocation(android.location.Location?);
+  }
+
+  @RequiresApi(21) public abstract class OutputOptions {
+    method @IntRange(from=0) public long getDurationLimitMillis();
+    method @IntRange(from=0) public long getFileSizeLimit();
+    method public android.location.Location? getLocation();
+    field public static final int DURATION_UNLIMITED = 0; // 0x0
+    field public static final int FILE_SIZE_UNLIMITED = 0; // 0x0
+  }
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class OutputResults {
+    ctor public OutputResults();
+    method public abstract android.net.Uri getOutputUri();
+  }
+
+  @RequiresApi(21) public final class PendingRecording {
+    method @SuppressCompatibility @androidx.camera.video.ExperimentalPersistentRecording public androidx.camera.video.PendingRecording asPersistentRecording();
+    method @CheckResult public androidx.camera.video.Recording start(java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public androidx.camera.video.PendingRecording withAudioEnabled();
+  }
+
+  @RequiresApi(21) public class Quality {
+    field public static final androidx.camera.video.Quality FHD;
+    field public static final androidx.camera.video.Quality HD;
+    field public static final androidx.camera.video.Quality HIGHEST;
+    field public static final androidx.camera.video.Quality LOWEST;
+    field public static final androidx.camera.video.Quality SD;
+    field public static final androidx.camera.video.Quality UHD;
+  }
+
+  @RequiresApi(21) public final class QualitySelector {
+    method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality);
+    method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality, androidx.camera.video.FallbackStrategy);
+    method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List);
+    method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List, androidx.camera.video.FallbackStrategy);
+    method public static android.util.Size? getResolution(androidx.camera.core.CameraInfo, androidx.camera.video.Quality);
+    method @Deprecated public static java.util.List getSupportedQualities(androidx.camera.core.CameraInfo);
+    method @Deprecated public static boolean isQualitySupported(androidx.camera.core.CameraInfo, androidx.camera.video.Quality);
+  }
+
+  @RequiresApi(21) public final class Recorder implements androidx.camera.video.VideoOutput {
+    method public int getAspectRatio();
+    method public java.util.concurrent.Executor? getExecutor();
+    method public androidx.camera.video.QualitySelector getQualitySelector();
+    method public int getTargetVideoEncodingBitRate();
+    method public static androidx.camera.video.VideoCapabilities getVideoCapabilities(androidx.camera.core.CameraInfo);
+    method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
+    method @RequiresApi(26) public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileDescriptorOutputOptions);
+    method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileOutputOptions);
+    method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.MediaStoreOutputOptions);
+    field public static final androidx.camera.video.QualitySelector DEFAULT_QUALITY_SELECTOR;
+  }
+
+  @RequiresApi(21) public static final class Recorder.Builder {
+    ctor public Recorder.Builder();
+    method public androidx.camera.video.Recorder build();
+    method public androidx.camera.video.Recorder.Builder setAspectRatio(int);
+    method public androidx.camera.video.Recorder.Builder setExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.video.Recorder.Builder setQualitySelector(androidx.camera.video.QualitySelector);
+    method public androidx.camera.video.Recorder.Builder setTargetVideoEncodingBitRate(@IntRange(from=1) int);
+  }
+
+  @RequiresApi(21) public final class Recording implements java.lang.AutoCloseable {
+    method public void close();
+    method @SuppressCompatibility @androidx.camera.video.ExperimentalPersistentRecording public boolean isPersistent();
+    method public void mute(boolean);
+    method public void pause();
+    method public void resume();
+    method public void stop();
+  }
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class RecordingStats {
+    method public abstract androidx.camera.video.AudioStats getAudioStats();
+    method public abstract long getNumBytesRecorded();
+    method public abstract long getRecordedDurationNanos();
+  }
+
+  @RequiresApi(21) public interface VideoCapabilities {
+    method public java.util.Set getSupportedDynamicRanges();
+    method public java.util.List getSupportedQualities(androidx.camera.core.DynamicRange);
+    method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+  }
+
+  @RequiresApi(21) public final class VideoCapture extends androidx.camera.core.UseCase {
+    method public androidx.camera.core.DynamicRange getDynamicRange();
+    method public int getMirrorMode();
+    method public T getOutput();
+    method public android.util.Range getTargetFrameRate();
+    method public int getTargetRotation();
+    method public void setTargetRotation(int);
+    method public static  androidx.camera.video.VideoCapture withOutput(T);
+  }
+
+  @RequiresApi(21) public static final class VideoCapture.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public VideoCapture.Builder(T);
+    method public androidx.camera.video.VideoCapture build();
+    method public androidx.camera.video.VideoCapture.Builder setDynamicRange(androidx.camera.core.DynamicRange);
+    method public androidx.camera.video.VideoCapture.Builder setMirrorMode(int);
+    method public androidx.camera.video.VideoCapture.Builder setTargetFrameRate(android.util.Range);
+    method public androidx.camera.video.VideoCapture.Builder setTargetRotation(int);
+  }
+
+  @RequiresApi(21) public interface VideoOutput {
+    method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
+  }
+
+  @RequiresApi(21) public abstract class VideoRecordEvent {
+    method public androidx.camera.video.OutputOptions getOutputOptions();
+    method public androidx.camera.video.RecordingStats getRecordingStats();
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Finalize extends androidx.camera.video.VideoRecordEvent {
+    method public Throwable? getCause();
+    method public int getError();
+    method public androidx.camera.video.OutputResults getOutputResults();
+    method public boolean hasError();
+    field public static final int ERROR_DURATION_LIMIT_REACHED = 9; // 0x9
+    field public static final int ERROR_ENCODING_FAILED = 6; // 0x6
+    field public static final int ERROR_FILE_SIZE_LIMIT_REACHED = 2; // 0x2
+    field public static final int ERROR_INSUFFICIENT_STORAGE = 3; // 0x3
+    field public static final int ERROR_INVALID_OUTPUT_OPTIONS = 5; // 0x5
+    field public static final int ERROR_NONE = 0; // 0x0
+    field public static final int ERROR_NO_VALID_DATA = 8; // 0x8
+    field public static final int ERROR_RECORDER_ERROR = 7; // 0x7
+    field public static final int ERROR_RECORDING_GARBAGE_COLLECTED = 10; // 0xa
+    field public static final int ERROR_SOURCE_INACTIVE = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Pause extends androidx.camera.video.VideoRecordEvent {
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Resume extends androidx.camera.video.VideoRecordEvent {
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Start extends androidx.camera.video.VideoRecordEvent {
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Status extends androidx.camera.video.VideoRecordEvent {
+  }
+
+}
+
diff --git a/camera/camera-video/api/res-1.3.0-beta03.txt b/camera/camera-video/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-video/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-video/api/restricted_1.3.0-beta03.txt b/camera/camera-video/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..b9cc77a
--- /dev/null
+++ b/camera/camera-video/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,207 @@
+// Signature format: 4.0
+package androidx.camera.video {
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class AudioStats {
+    method public abstract int getAudioState();
+    method public abstract Throwable? getErrorCause();
+    method public boolean hasAudio();
+    method public boolean hasError();
+    field public static final int AUDIO_STATE_ACTIVE = 0; // 0x0
+    field public static final int AUDIO_STATE_DISABLED = 1; // 0x1
+    field public static final int AUDIO_STATE_ENCODER_ERROR = 3; // 0x3
+    field public static final int AUDIO_STATE_MUTED = 5; // 0x5
+    field public static final int AUDIO_STATE_SOURCE_ERROR = 4; // 0x4
+    field public static final int AUDIO_STATE_SOURCE_SILENCED = 2; // 0x2
+  }
+
+  @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalPersistentRecording {
+  }
+
+  @RequiresApi(21) public class FallbackStrategy {
+    method public static androidx.camera.video.FallbackStrategy higherQualityOrLowerThan(androidx.camera.video.Quality);
+    method public static androidx.camera.video.FallbackStrategy higherQualityThan(androidx.camera.video.Quality);
+    method public static androidx.camera.video.FallbackStrategy lowerQualityOrHigherThan(androidx.camera.video.Quality);
+    method public static androidx.camera.video.FallbackStrategy lowerQualityThan(androidx.camera.video.Quality);
+  }
+
+  @RequiresApi(21) public final class FileDescriptorOutputOptions extends androidx.camera.video.OutputOptions {
+    method public android.os.ParcelFileDescriptor getParcelFileDescriptor();
+  }
+
+  @RequiresApi(21) public static final class FileDescriptorOutputOptions.Builder {
+    ctor public FileDescriptorOutputOptions.Builder(android.os.ParcelFileDescriptor);
+    method public androidx.camera.video.FileDescriptorOutputOptions build();
+    method public androidx.camera.video.FileDescriptorOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
+    method public androidx.camera.video.FileDescriptorOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
+    method public androidx.camera.video.FileDescriptorOutputOptions.Builder setLocation(android.location.Location?);
+  }
+
+  @RequiresApi(21) public final class FileOutputOptions extends androidx.camera.video.OutputOptions {
+    method public java.io.File getFile();
+  }
+
+  @RequiresApi(21) public static final class FileOutputOptions.Builder {
+    ctor public FileOutputOptions.Builder(java.io.File);
+    method public androidx.camera.video.FileOutputOptions build();
+    method public androidx.camera.video.FileOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
+    method public androidx.camera.video.FileOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
+    method public androidx.camera.video.FileOutputOptions.Builder setLocation(android.location.Location?);
+  }
+
+  @RequiresApi(21) public final class MediaStoreOutputOptions extends androidx.camera.video.OutputOptions {
+    method public android.net.Uri getCollectionUri();
+    method public android.content.ContentResolver getContentResolver();
+    method public android.content.ContentValues getContentValues();
+    field public static final android.content.ContentValues EMPTY_CONTENT_VALUES;
+  }
+
+  public static final class MediaStoreOutputOptions.Builder {
+    ctor public MediaStoreOutputOptions.Builder(android.content.ContentResolver, android.net.Uri);
+    method public androidx.camera.video.MediaStoreOutputOptions build();
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setContentValues(android.content.ContentValues);
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long);
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long);
+    method public androidx.camera.video.MediaStoreOutputOptions.Builder setLocation(android.location.Location?);
+  }
+
+  @RequiresApi(21) public abstract class OutputOptions {
+    method @IntRange(from=0) public long getDurationLimitMillis();
+    method @IntRange(from=0) public long getFileSizeLimit();
+    method public android.location.Location? getLocation();
+    field public static final int DURATION_UNLIMITED = 0; // 0x0
+    field public static final int FILE_SIZE_UNLIMITED = 0; // 0x0
+  }
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class OutputResults {
+    ctor public OutputResults();
+    method public abstract android.net.Uri getOutputUri();
+  }
+
+  @RequiresApi(21) public final class PendingRecording {
+    method @SuppressCompatibility @androidx.camera.video.ExperimentalPersistentRecording public androidx.camera.video.PendingRecording asPersistentRecording();
+    method @CheckResult public androidx.camera.video.Recording start(java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public androidx.camera.video.PendingRecording withAudioEnabled();
+  }
+
+  @RequiresApi(21) public class Quality {
+    field public static final androidx.camera.video.Quality FHD;
+    field public static final androidx.camera.video.Quality HD;
+    field public static final androidx.camera.video.Quality HIGHEST;
+    field public static final androidx.camera.video.Quality LOWEST;
+    field public static final androidx.camera.video.Quality SD;
+    field public static final androidx.camera.video.Quality UHD;
+  }
+
+  @RequiresApi(21) public final class QualitySelector {
+    method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality);
+    method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality, androidx.camera.video.FallbackStrategy);
+    method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List);
+    method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List, androidx.camera.video.FallbackStrategy);
+    method public static android.util.Size? getResolution(androidx.camera.core.CameraInfo, androidx.camera.video.Quality);
+    method @Deprecated public static java.util.List getSupportedQualities(androidx.camera.core.CameraInfo);
+    method @Deprecated public static boolean isQualitySupported(androidx.camera.core.CameraInfo, androidx.camera.video.Quality);
+  }
+
+  @RequiresApi(21) public final class Recorder implements androidx.camera.video.VideoOutput {
+    method public int getAspectRatio();
+    method public java.util.concurrent.Executor? getExecutor();
+    method public androidx.camera.video.QualitySelector getQualitySelector();
+    method public int getTargetVideoEncodingBitRate();
+    method public static androidx.camera.video.VideoCapabilities getVideoCapabilities(androidx.camera.core.CameraInfo);
+    method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
+    method @RequiresApi(26) public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileDescriptorOutputOptions);
+    method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.FileOutputOptions);
+    method public androidx.camera.video.PendingRecording prepareRecording(android.content.Context, androidx.camera.video.MediaStoreOutputOptions);
+    field public static final androidx.camera.video.QualitySelector DEFAULT_QUALITY_SELECTOR;
+  }
+
+  @RequiresApi(21) public static final class Recorder.Builder {
+    ctor public Recorder.Builder();
+    method public androidx.camera.video.Recorder build();
+    method public androidx.camera.video.Recorder.Builder setAspectRatio(int);
+    method public androidx.camera.video.Recorder.Builder setExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.video.Recorder.Builder setQualitySelector(androidx.camera.video.QualitySelector);
+    method public androidx.camera.video.Recorder.Builder setTargetVideoEncodingBitRate(@IntRange(from=1) int);
+  }
+
+  @RequiresApi(21) public final class Recording implements java.lang.AutoCloseable {
+    method public void close();
+    method @SuppressCompatibility @androidx.camera.video.ExperimentalPersistentRecording public boolean isPersistent();
+    method public void mute(boolean);
+    method public void pause();
+    method public void resume();
+    method public void stop();
+  }
+
+  @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class RecordingStats {
+    method public abstract androidx.camera.video.AudioStats getAudioStats();
+    method public abstract long getNumBytesRecorded();
+    method public abstract long getRecordedDurationNanos();
+  }
+
+  @RequiresApi(21) public interface VideoCapabilities {
+    method public java.util.Set getSupportedDynamicRanges();
+    method public java.util.List getSupportedQualities(androidx.camera.core.DynamicRange);
+    method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+  }
+
+  @RequiresApi(21) public final class VideoCapture extends androidx.camera.core.UseCase {
+    method public androidx.camera.core.DynamicRange getDynamicRange();
+    method public int getMirrorMode();
+    method public T getOutput();
+    method public android.util.Range getTargetFrameRate();
+    method public int getTargetRotation();
+    method public void setTargetRotation(int);
+    method public static  androidx.camera.video.VideoCapture withOutput(T);
+  }
+
+  @RequiresApi(21) public static final class VideoCapture.Builder implements androidx.camera.core.ExtendableBuilder {
+    ctor public VideoCapture.Builder(T);
+    method public androidx.camera.video.VideoCapture build();
+    method public androidx.camera.video.VideoCapture.Builder setDynamicRange(androidx.camera.core.DynamicRange);
+    method public androidx.camera.video.VideoCapture.Builder setMirrorMode(int);
+    method public androidx.camera.video.VideoCapture.Builder setTargetFrameRate(android.util.Range);
+    method public androidx.camera.video.VideoCapture.Builder setTargetRotation(int);
+  }
+
+  @RequiresApi(21) public interface VideoOutput {
+    method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest);
+  }
+
+  @RequiresApi(21) public abstract class VideoRecordEvent {
+    method public androidx.camera.video.OutputOptions getOutputOptions();
+    method public androidx.camera.video.RecordingStats getRecordingStats();
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Finalize extends androidx.camera.video.VideoRecordEvent {
+    method public Throwable? getCause();
+    method public int getError();
+    method public androidx.camera.video.OutputResults getOutputResults();
+    method public boolean hasError();
+    field public static final int ERROR_DURATION_LIMIT_REACHED = 9; // 0x9
+    field public static final int ERROR_ENCODING_FAILED = 6; // 0x6
+    field public static final int ERROR_FILE_SIZE_LIMIT_REACHED = 2; // 0x2
+    field public static final int ERROR_INSUFFICIENT_STORAGE = 3; // 0x3
+    field public static final int ERROR_INVALID_OUTPUT_OPTIONS = 5; // 0x5
+    field public static final int ERROR_NONE = 0; // 0x0
+    field public static final int ERROR_NO_VALID_DATA = 8; // 0x8
+    field public static final int ERROR_RECORDER_ERROR = 7; // 0x7
+    field public static final int ERROR_RECORDING_GARBAGE_COLLECTED = 10; // 0xa
+    field public static final int ERROR_SOURCE_INACTIVE = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Pause extends androidx.camera.video.VideoRecordEvent {
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Resume extends androidx.camera.video.VideoRecordEvent {
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Start extends androidx.camera.video.VideoRecordEvent {
+  }
+
+  @RequiresApi(21) public static final class VideoRecordEvent.Status extends androidx.camera.video.VideoRecordEvent {
+  }
+
+}
+
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java
index 735a24e..5abd8cf 100644
--- a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java
+++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java
@@ -42,6 +42,8 @@
  *     Bug Id: 192431846, 199582287, 218841498, 203481899, 216583006, 278843124, 278855948
  *     Description: Quirk which denotes {@link MediaCodecInfo} queried by {@link MediaCodecList}
  *                  returns incorrect info.
+ *                  
    + *
  • * On Nokia 1, {@link CamcorderProfile} indicates it can support resolutions * 1280x720 and 640x480 for video codec type * {@link android.media.MediaRecorder.VideoEncoder#MPEG_4_SP}, which maps to @@ -54,8 +56,14 @@ * "video/mp4v-es" with 1280x720 or 640x480 can be used to record video. So the * maximum supported resolution 174x174 is probably incorrect for * "video/mp4v-es" and doesn't make sense. See b/192431846#comment3. + *
  • + *
  • * Motc C, X650 and LG-X230 have the same problem as Nokia 1. See b/199582287 + *
  • + *
  • * Positivo Twist 2 Pro have the same problem as Nokia 1. See b/218841498 + *
  • + *
  • * On Huawei Mate9, {@link CamcorderProfile} indicates it can support * resolutions 3840x2160 for video codec type * {@link android.media.MediaRecorder.VideoEncoder#HEVC}, but the current video @@ -65,19 +73,30 @@ * unsupported resolution for 3840x2160, it only support 3840x2112. By * experimental result, H.264 + 3840x2160 can be used to record video on this * device. Hence use quirk to workaround this case. See b/203481899#comment2. - * @link MediaCodecInfo} searched by {@link MediaCodecList#getCodecInfos()} + *
  • + *
  • + * On Redmi Note 8 Pro, {@link CamcorderProfile} indicates it can support + * 3840x2160, but {@link MediaCodecInfo.VideoCapabilities#isSizeSupported} + * returns {@code false} for 3840x2160. By experimental result, 3840x2160 can be + * used to record video on this device. See b/293827733. + *
  • + *
  • + * {@link MediaCodecInfo} searched by {@link MediaCodecList#getCodecInfos()} * shows the maximum supported resolution of the AVC encoder is 1920x1072. * However, the 1920x1080 option can be successfully configured properly. - * See b/216583006, b/278843124, b/278855948. - * Device(s): Nokia 1, Motc C, X650, LG-X230, Positivo Twist 2 Pro, Huawei Mate9, Redmi note 4 - * , LG K10 LTE K430, Samsung Galaxy A03 Core, Vivo Y75, Realme C11 2021 + * See b/216583006, b/278843124, b/278855948, b/293827733. + *
  • + *
+ * Device(s): Nokia 1, Motc C, X650, LG-X230, Positivo Twist 2 Pro, Huawei Mate9, + * Redmi Note 8 Pro, Redmi Note 4, Redmi Note 9, LG K10 LTE K430, + * Samsung Galaxy A03 Core, Vivo Y75, Realme C11 2021 */ @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java public class MediaCodecInfoReportIncorrectInfoQuirk implements Quirk { static boolean load() { return isNokia1() || isMotoC() || isX650() || isX230() || isHuaweiMate9() - || isPositivoTwist2Pro() || isFHDProblematicDevice(); + || isRedmiNote8Pro() || isPositivoTwist2Pro() || isFHDProblematicDevice(); } private static boolean isNokia1() { @@ -101,6 +120,11 @@ return "Huawei".equalsIgnoreCase(Build.BRAND) && "mha-l29".equalsIgnoreCase(Build.MODEL); } + private static boolean isRedmiNote8Pro() { + return "Redmi".equalsIgnoreCase(Build.BRAND) && "Redmi Note 8 Pro".equalsIgnoreCase( + Build.MODEL); + } + private static boolean isPositivoTwist2Pro() { return "positivo".equalsIgnoreCase(Build.BRAND) && "twist 2 pro".equalsIgnoreCase( Build.MODEL); @@ -109,6 +133,7 @@ public static final List INCORRECT_FHD_PROFILE_MODEL_LIST = Arrays.asList( "lg-k430", "redmi note 4", + "m2003j15sc", // Redmi Note 9 "rmx3231", "v2117", "sm-a032f", @@ -121,7 +146,7 @@ MediaFormatResolver formatResolver = new MediaFormatResolver(mediaFormat); if (isNokia1() || isMotoC() || isX650() || isX230() || isPositivoTwist2Pro()) { return formatResolver.isMpeg4(); - } else if (isHuaweiMate9()) { + } else if (isHuaweiMate9() || isRedmiNote8Pro()) { return formatResolver.isVideo() && formatResolver.isSize(3840, 2160); } else if (isFHDProblematicDevice()) { return formatResolver.isAvc() && formatResolver.isSize(1920, 1080);
diff --git a/camera/camera-view/api/1.3.0-beta03.txt b/camera/camera-view/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..6184aeb
--- /dev/null
+++ b/camera/camera-view/api/1.3.0-beta03.txt
@@ -0,0 +1,173 @@
+// Signature format: 4.0
+package androidx.camera.view {
+
+  @RequiresApi(21) public abstract class CameraController {
+    method @MainThread public void clearEffects();
+    method @MainThread public void clearImageAnalysisAnalyzer();
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture enableTorch(boolean);
+    method @MainThread public androidx.camera.core.CameraControl? getCameraControl();
+    method @MainThread public androidx.camera.core.CameraInfo? getCameraInfo();
+    method @MainThread public androidx.camera.core.CameraSelector getCameraSelector();
+    method @MainThread public java.util.concurrent.Executor? getImageAnalysisBackgroundExecutor();
+    method @MainThread public int getImageAnalysisBackpressureStrategy();
+    method @MainThread public int getImageAnalysisImageQueueDepth();
+    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
+    method @MainThread public int getImageCaptureFlashMode();
+    method @MainThread public java.util.concurrent.Executor? getImageCaptureIoExecutor();
+    method @MainThread public int getImageCaptureMode();
+    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
+    method public com.google.common.util.concurrent.ListenableFuture getInitializationFuture();
+    method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+    method @MainThread public androidx.lifecycle.LiveData getTapToFocusState();
+    method @MainThread public androidx.lifecycle.LiveData getTorchState();
+    method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+    method @MainThread public androidx.lifecycle.LiveData getZoomState();
+    method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
+    method @MainThread public boolean isImageAnalysisEnabled();
+    method @MainThread public boolean isImageCaptureEnabled();
+    method @MainThread public boolean isPinchToZoomEnabled();
+    method @MainThread public boolean isRecording();
+    method @MainThread public boolean isTapToFocusEnabled();
+    method @MainThread public boolean isVideoCaptureEnabled();
+    method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector);
+    method @MainThread public void setEffects(java.util.Set);
+    method @MainThread public void setEnabledUseCases(int);
+    method @MainThread public void setImageAnalysisAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?);
+    method @MainThread public void setImageAnalysisBackpressureStrategy(int);
+    method @MainThread public void setImageAnalysisImageQueueDepth(int);
+    method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setImageCaptureFlashMode(int);
+    method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?);
+    method @MainThread public void setImageCaptureMode(int);
+    method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method @MainThread public void setPinchToZoomEnabled(boolean);
+    method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setTapToFocusEnabled(boolean);
+    method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture setZoomRatio(float);
+    method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1
+    field public static final int IMAGE_ANALYSIS = 2; // 0x2
+    field public static final int IMAGE_CAPTURE = 1; // 0x1
+    field public static final int TAP_TO_FOCUS_FAILED = 4; // 0x4
+    field public static final int TAP_TO_FOCUS_FOCUSED = 2; // 0x2
+    field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3
+    field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0
+    field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1
+    field public static final int VIDEO_CAPTURE = 4; // 0x4
+  }
+
+  @RequiresApi(21) public static final class CameraController.OutputSize {
+    ctor public CameraController.OutputSize(android.util.Size);
+    ctor public CameraController.OutputSize(int);
+    method public int getAspectRatio();
+    method public android.util.Size? getResolution();
+    field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
+  }
+
+  @RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController {
+    ctor public LifecycleCameraController(android.content.Context);
+    method @MainThread public void bindToLifecycle(androidx.lifecycle.LifecycleOwner);
+    method @MainThread public void unbind();
+  }
+
+  @RequiresApi(21) public final class PreviewView extends android.widget.FrameLayout {
+    ctor @UiThread public PreviewView(android.content.Context);
+    ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?);
+    ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int);
+    ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int, int);
+    method @UiThread public android.graphics.Bitmap? getBitmap();
+    method @UiThread public androidx.camera.view.CameraController? getController();
+    method @UiThread public androidx.camera.view.PreviewView.ImplementationMode getImplementationMode();
+    method @UiThread public androidx.camera.core.MeteringPointFactory getMeteringPointFactory();
+    method @SuppressCompatibility public androidx.camera.view.transform.OutputTransform? getOutputTransform();
+    method public androidx.lifecycle.LiveData getPreviewStreamState();
+    method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
+    method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort(int);
+    method @UiThread public void setController(androidx.camera.view.CameraController?);
+    method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
+    method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
+  }
+
+  @RequiresApi(21) public enum PreviewView.ImplementationMode {
+    enum_constant public static final androidx.camera.view.PreviewView.ImplementationMode COMPATIBLE;
+    enum_constant public static final androidx.camera.view.PreviewView.ImplementationMode PERFORMANCE;
+  }
+
+  @RequiresApi(21) public enum PreviewView.ScaleType {
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_CENTER;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_END;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_START;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_CENTER;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_END;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_START;
+  }
+
+  public enum PreviewView.StreamState {
+    enum_constant public static final androidx.camera.view.PreviewView.StreamState IDLE;
+    enum_constant public static final androidx.camera.view.PreviewView.StreamState STREAMING;
+  }
+
+  @RequiresApi(21) public final class RotationProvider {
+    ctor public RotationProvider(android.content.Context);
+    method @CheckResult public boolean addListener(java.util.concurrent.Executor, androidx.camera.view.RotationProvider.Listener);
+    method public void removeListener(androidx.camera.view.RotationProvider.Listener);
+  }
+
+  public static interface RotationProvider.Listener {
+    method public void onRotationChanged(int);
+  }
+
+}
+
+package androidx.camera.view.transform {
+
+  @SuppressCompatibility @RequiresApi(21) public final class CoordinateTransform {
+    ctor public CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform);
+    method public void mapPoint(android.graphics.PointF);
+    method public void mapPoints(float[]);
+    method public void mapRect(android.graphics.RectF);
+    method public void transform(android.graphics.Matrix);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) public final class FileTransformFactory {
+    ctor public FileTransformFactory();
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(android.content.ContentResolver, android.net.Uri) throws java.io.IOException;
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.File) throws java.io.IOException;
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.InputStream) throws java.io.IOException;
+    method public boolean isUsingExifOrientation();
+    method public void setUsingExifOrientation(boolean);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) public final class ImageProxyTransformFactory {
+    ctor public ImageProxyTransformFactory();
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(androidx.camera.core.ImageProxy);
+    method public boolean isUsingCropRect();
+    method public boolean isUsingRotationDegrees();
+    method public void setUsingCropRect(boolean);
+    method public void setUsingRotationDegrees(boolean);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) public final class OutputTransform {
+  }
+
+}
+
+package androidx.camera.view.video {
+
+  @RequiresApi(21) public class AudioConfig {
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.camera.view.video.AudioConfig create(boolean);
+    method public boolean getAudioEnabled();
+    field public static final androidx.camera.view.video.AudioConfig AUDIO_DISABLED;
+  }
+
+}
+
diff --git a/camera/camera-view/api/res-1.3.0-beta03.txt b/camera/camera-view/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-view/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-view/api/restricted_1.3.0-beta03.txt b/camera/camera-view/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..6184aeb
--- /dev/null
+++ b/camera/camera-view/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,173 @@
+// Signature format: 4.0
+package androidx.camera.view {
+
+  @RequiresApi(21) public abstract class CameraController {
+    method @MainThread public void clearEffects();
+    method @MainThread public void clearImageAnalysisAnalyzer();
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture enableTorch(boolean);
+    method @MainThread public androidx.camera.core.CameraControl? getCameraControl();
+    method @MainThread public androidx.camera.core.CameraInfo? getCameraInfo();
+    method @MainThread public androidx.camera.core.CameraSelector getCameraSelector();
+    method @MainThread public java.util.concurrent.Executor? getImageAnalysisBackgroundExecutor();
+    method @MainThread public int getImageAnalysisBackpressureStrategy();
+    method @MainThread public int getImageAnalysisImageQueueDepth();
+    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageAnalysisTargetSize();
+    method @MainThread public int getImageCaptureFlashMode();
+    method @MainThread public java.util.concurrent.Executor? getImageCaptureIoExecutor();
+    method @MainThread public int getImageCaptureMode();
+    method @MainThread public androidx.camera.view.CameraController.OutputSize? getImageCaptureTargetSize();
+    method public com.google.common.util.concurrent.ListenableFuture getInitializationFuture();
+    method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+    method @MainThread public androidx.lifecycle.LiveData getTapToFocusState();
+    method @MainThread public androidx.lifecycle.LiveData getTorchState();
+    method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+    method @MainThread public androidx.lifecycle.LiveData getZoomState();
+    method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector);
+    method @MainThread public boolean isImageAnalysisEnabled();
+    method @MainThread public boolean isImageCaptureEnabled();
+    method @MainThread public boolean isPinchToZoomEnabled();
+    method @MainThread public boolean isRecording();
+    method @MainThread public boolean isTapToFocusEnabled();
+    method @MainThread public boolean isVideoCaptureEnabled();
+    method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector);
+    method @MainThread public void setEffects(java.util.Set);
+    method @MainThread public void setEnabledUseCases(int);
+    method @MainThread public void setImageAnalysisAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?);
+    method @MainThread public void setImageAnalysisBackpressureStrategy(int);
+    method @MainThread public void setImageAnalysisImageQueueDepth(int);
+    method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setImageCaptureFlashMode(int);
+    method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?);
+    method @MainThread public void setImageCaptureMode(int);
+    method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method @MainThread public void setPinchToZoomEnabled(boolean);
+    method @MainThread public void setPreviewTargetSize(androidx.camera.view.CameraController.OutputSize?);
+    method @MainThread public void setTapToFocusEnabled(boolean);
+    method @MainThread public void setVideoCaptureQualitySelector(androidx.camera.video.QualitySelector);
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture setZoomRatio(float);
+    method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer);
+    method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1
+    field public static final int IMAGE_ANALYSIS = 2; // 0x2
+    field public static final int IMAGE_CAPTURE = 1; // 0x1
+    field public static final int TAP_TO_FOCUS_FAILED = 4; // 0x4
+    field public static final int TAP_TO_FOCUS_FOCUSED = 2; // 0x2
+    field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3
+    field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0
+    field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1
+    field public static final int VIDEO_CAPTURE = 4; // 0x4
+  }
+
+  @RequiresApi(21) public static final class CameraController.OutputSize {
+    ctor public CameraController.OutputSize(android.util.Size);
+    ctor public CameraController.OutputSize(int);
+    method public int getAspectRatio();
+    method public android.util.Size? getResolution();
+    field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff
+  }
+
+  @RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController {
+    ctor public LifecycleCameraController(android.content.Context);
+    method @MainThread public void bindToLifecycle(androidx.lifecycle.LifecycleOwner);
+    method @MainThread public void unbind();
+  }
+
+  @RequiresApi(21) public final class PreviewView extends android.widget.FrameLayout {
+    ctor @UiThread public PreviewView(android.content.Context);
+    ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?);
+    ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int);
+    ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int, int);
+    method @UiThread public android.graphics.Bitmap? getBitmap();
+    method @UiThread public androidx.camera.view.CameraController? getController();
+    method @UiThread public androidx.camera.view.PreviewView.ImplementationMode getImplementationMode();
+    method @UiThread public androidx.camera.core.MeteringPointFactory getMeteringPointFactory();
+    method @SuppressCompatibility public androidx.camera.view.transform.OutputTransform? getOutputTransform();
+    method public androidx.lifecycle.LiveData getPreviewStreamState();
+    method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
+    method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort(int);
+    method @UiThread public void setController(androidx.camera.view.CameraController?);
+    method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
+    method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
+  }
+
+  @RequiresApi(21) public enum PreviewView.ImplementationMode {
+    enum_constant public static final androidx.camera.view.PreviewView.ImplementationMode COMPATIBLE;
+    enum_constant public static final androidx.camera.view.PreviewView.ImplementationMode PERFORMANCE;
+  }
+
+  @RequiresApi(21) public enum PreviewView.ScaleType {
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_CENTER;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_END;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FILL_START;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_CENTER;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_END;
+    enum_constant public static final androidx.camera.view.PreviewView.ScaleType FIT_START;
+  }
+
+  public enum PreviewView.StreamState {
+    enum_constant public static final androidx.camera.view.PreviewView.StreamState IDLE;
+    enum_constant public static final androidx.camera.view.PreviewView.StreamState STREAMING;
+  }
+
+  @RequiresApi(21) public final class RotationProvider {
+    ctor public RotationProvider(android.content.Context);
+    method @CheckResult public boolean addListener(java.util.concurrent.Executor, androidx.camera.view.RotationProvider.Listener);
+    method public void removeListener(androidx.camera.view.RotationProvider.Listener);
+  }
+
+  public static interface RotationProvider.Listener {
+    method public void onRotationChanged(int);
+  }
+
+}
+
+package androidx.camera.view.transform {
+
+  @SuppressCompatibility @RequiresApi(21) public final class CoordinateTransform {
+    ctor public CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform);
+    method public void mapPoint(android.graphics.PointF);
+    method public void mapPoints(float[]);
+    method public void mapRect(android.graphics.RectF);
+    method public void transform(android.graphics.Matrix);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) public final class FileTransformFactory {
+    ctor public FileTransformFactory();
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(android.content.ContentResolver, android.net.Uri) throws java.io.IOException;
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.File) throws java.io.IOException;
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(java.io.InputStream) throws java.io.IOException;
+    method public boolean isUsingExifOrientation();
+    method public void setUsingExifOrientation(boolean);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) public final class ImageProxyTransformFactory {
+    ctor public ImageProxyTransformFactory();
+    method public androidx.camera.view.transform.OutputTransform getOutputTransform(androidx.camera.core.ImageProxy);
+    method public boolean isUsingCropRect();
+    method public boolean isUsingRotationDegrees();
+    method public void setUsingCropRect(boolean);
+    method public void setUsingRotationDegrees(boolean);
+  }
+
+  @SuppressCompatibility @RequiresApi(21) public final class OutputTransform {
+  }
+
+}
+
+package androidx.camera.view.video {
+
+  @RequiresApi(21) public class AudioConfig {
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public static androidx.camera.view.video.AudioConfig create(boolean);
+    method public boolean getAudioEnabled();
+    field public static final androidx.camera.view.video.AudioConfig AUDIO_DISABLED;
+  }
+
+}
+
diff --git a/camera/camera-viewfinder-compose/api/1.3.0-beta03.txt b/camera/camera-viewfinder-compose/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-viewfinder-compose/api/1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-viewfinder-compose/api/res-1.3.0-beta03.txt b/camera/camera-viewfinder-compose/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-viewfinder-compose/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-viewfinder-compose/api/restricted_1.3.0-beta03.txt b/camera/camera-viewfinder-compose/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-viewfinder-compose/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-viewfinder-core/api/1.3.0-beta03.txt b/camera/camera-viewfinder-core/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-viewfinder-core/api/1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-viewfinder-core/api/res-1.3.0-beta03.txt b/camera/camera-viewfinder-core/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-viewfinder-core/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-viewfinder-core/api/restricted_1.3.0-beta03.txt b/camera/camera-viewfinder-core/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-viewfinder-core/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-viewfinder/api/1.3.0-beta03.txt b/camera/camera-viewfinder/api/1.3.0-beta03.txt
new file mode 100644
index 0000000..a7333d7
--- /dev/null
+++ b/camera/camera-viewfinder/api/1.3.0-beta03.txt
@@ -0,0 +1,58 @@
+// Signature format: 4.0
+package androidx.camera.viewfinder {
+
+  @RequiresApi(21) public final class CameraViewfinder extends android.widget.FrameLayout {
+    ctor @UiThread public CameraViewfinder(android.content.Context);
+    ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?);
+    ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?, int);
+    ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?, int, int);
+    method @UiThread public android.graphics.Bitmap? getBitmap();
+    method @UiThread public androidx.camera.viewfinder.CameraViewfinder.ImplementationMode getImplementationMode();
+    method @UiThread public androidx.camera.viewfinder.CameraViewfinder.ScaleType getScaleType();
+    method @UiThread public com.google.common.util.concurrent.ListenableFuture requestSurfaceAsync(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
+    method @UiThread public void setScaleType(androidx.camera.viewfinder.CameraViewfinder.ScaleType);
+  }
+
+  @RequiresApi(21) public enum CameraViewfinder.ImplementationMode {
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ImplementationMode COMPATIBLE;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ImplementationMode PERFORMANCE;
+  }
+
+  @RequiresApi(21) public enum CameraViewfinder.ScaleType {
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_CENTER;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_END;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_START;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_CENTER;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_END;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_START;
+  }
+
+  @RequiresApi(21) public final class CameraViewfinderExt {
+    method public suspend Object? requestSurface(androidx.camera.viewfinder.CameraViewfinder, androidx.camera.viewfinder.ViewfinderSurfaceRequest viewfinderSurfaceRequest, kotlin.coroutines.Continuation);
+    field public static final androidx.camera.viewfinder.CameraViewfinderExt INSTANCE;
+  }
+
+  @RequiresApi(21) public class ViewfinderSurfaceRequest {
+    method public androidx.camera.viewfinder.CameraViewfinder.ImplementationMode? getImplementationMode();
+    method public int getLensFacing();
+    method public android.util.Size getResolution();
+    method public int getSensorOrientation();
+    method public void markSurfaceSafeToRelease();
+  }
+
+  public static final class ViewfinderSurfaceRequest.Builder {
+    ctor public ViewfinderSurfaceRequest.Builder(android.util.Size);
+    ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
+    ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder);
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest build();
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setImplementationMode(androidx.camera.viewfinder.CameraViewfinder.ImplementationMode?);
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setLensFacing(int);
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setSensorOrientation(int);
+  }
+
+  public final class ViewfinderSurfaceRequestUtil {
+    method @RequiresApi(21) public static androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder populateFromCharacteristics(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder, android.hardware.camera2.CameraCharacteristics cameraCharacteristics);
+  }
+
+}
+
diff --git a/camera/camera-viewfinder/api/res-1.3.0-beta03.txt b/camera/camera-viewfinder/api/res-1.3.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-viewfinder/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-viewfinder/api/restricted_1.3.0-beta03.txt b/camera/camera-viewfinder/api/restricted_1.3.0-beta03.txt
new file mode 100644
index 0000000..a7333d7
--- /dev/null
+++ b/camera/camera-viewfinder/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,58 @@
+// Signature format: 4.0
+package androidx.camera.viewfinder {
+
+  @RequiresApi(21) public final class CameraViewfinder extends android.widget.FrameLayout {
+    ctor @UiThread public CameraViewfinder(android.content.Context);
+    ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?);
+    ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?, int);
+    ctor @UiThread public CameraViewfinder(android.content.Context, android.util.AttributeSet?, int, int);
+    method @UiThread public android.graphics.Bitmap? getBitmap();
+    method @UiThread public androidx.camera.viewfinder.CameraViewfinder.ImplementationMode getImplementationMode();
+    method @UiThread public androidx.camera.viewfinder.CameraViewfinder.ScaleType getScaleType();
+    method @UiThread public com.google.common.util.concurrent.ListenableFuture requestSurfaceAsync(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
+    method @UiThread public void setScaleType(androidx.camera.viewfinder.CameraViewfinder.ScaleType);
+  }
+
+  @RequiresApi(21) public enum CameraViewfinder.ImplementationMode {
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ImplementationMode COMPATIBLE;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ImplementationMode PERFORMANCE;
+  }
+
+  @RequiresApi(21) public enum CameraViewfinder.ScaleType {
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_CENTER;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_END;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FILL_START;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_CENTER;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_END;
+    enum_constant public static final androidx.camera.viewfinder.CameraViewfinder.ScaleType FIT_START;
+  }
+
+  @RequiresApi(21) public final class CameraViewfinderExt {
+    method public suspend Object? requestSurface(androidx.camera.viewfinder.CameraViewfinder, androidx.camera.viewfinder.ViewfinderSurfaceRequest viewfinderSurfaceRequest, kotlin.coroutines.Continuation);
+    field public static final androidx.camera.viewfinder.CameraViewfinderExt INSTANCE;
+  }
+
+  @RequiresApi(21) public class ViewfinderSurfaceRequest {
+    method public androidx.camera.viewfinder.CameraViewfinder.ImplementationMode? getImplementationMode();
+    method public int getLensFacing();
+    method public android.util.Size getResolution();
+    method public int getSensorOrientation();
+    method public void markSurfaceSafeToRelease();
+  }
+
+  public static final class ViewfinderSurfaceRequest.Builder {
+    ctor public ViewfinderSurfaceRequest.Builder(android.util.Size);
+    ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest);
+    ctor public ViewfinderSurfaceRequest.Builder(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder);
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest build();
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setImplementationMode(androidx.camera.viewfinder.CameraViewfinder.ImplementationMode?);
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setLensFacing(int);
+    method public androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder setSensorOrientation(int);
+  }
+
+  public final class ViewfinderSurfaceRequestUtil {
+    method @RequiresApi(21) public static androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder populateFromCharacteristics(androidx.camera.viewfinder.ViewfinderSurfaceRequest.Builder, android.hardware.camera2.CameraCharacteristics cameraCharacteristics);
+  }
+
+}
+
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
index dd14319..13c9cbd 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/VideoCameraSwitchingActivity.java
@@ -26,7 +26,6 @@
 import android.widget.EditText;
 import android.widget.Toast;
 
-import androidx.annotation.IntRange;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.OptIn;
@@ -35,7 +34,6 @@
 import androidx.camera.core.CameraSelector;
 import androidx.camera.core.Logger;
 import androidx.camera.core.Preview;
-import androidx.camera.core.impl.utils.executor.CameraXExecutors;
 import androidx.camera.lifecycle.ProcessCameraProvider;
 import androidx.camera.video.ExperimentalPersistentRecording;
 import androidx.camera.video.FileOutputOptions;
@@ -98,6 +96,7 @@
     private Camera mCamera;
     @Nullable
     private Recording mRecording;
+    private boolean mNotYetSwitched = true;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -197,9 +196,9 @@
     @OptIn(markerClass = ExperimentalPersistentRecording.class)
     private void startRecording() {
         Preconditions.checkNotNull(mVideoCapture, "The video capture use case should not be null.");
-        final long durationMillis = Long.parseLong(mDurationText.getText().toString());
-        final long switchTimeMillis = Long.parseLong(mSwitchTimeText.getText().toString());
-        if (switchTimeMillis >= durationMillis) {
+        final long expectedDurationMillis = Long.parseLong(mDurationText.getText().toString());
+        final long expectedSwitchTimeMillis = Long.parseLong(mSwitchTimeText.getText().toString());
+        if (expectedSwitchTimeMillis >= expectedDurationMillis) {
             String msg = "The switch time should be less than the duration.";
             Logger.d(TAG, msg);
             Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
@@ -214,23 +213,35 @@
         if (DeviceQuirks.get(MediaStoreVideoCannotWrite.class) != null) {
             // Use FileOutputOption for devices in MediaStoreVideoCannotWrite Quirk.
             pendingRecording = mVideoCapture.getOutput().prepareRecording(
-                    this, generateFileOutputOptions(durationMillis));
+                    this, generateFileOutputOptions());
         } else {
             // Use MediaStoreOutputOptions for public share media storage.
             pendingRecording = mVideoCapture.getOutput().prepareRecording(
-                    this, generateMediaStoreOutputOptions(durationMillis));
+                    this, generateMediaStoreOutputOptions());
         }
         mRecording = pendingRecording
                 .asPersistentRecording() // Perform the recording as a persistent recording.
                 .start(ContextCompat.getMainExecutor(this),
                         videoRecordEvent -> {
-                            if (videoRecordEvent instanceof VideoRecordEvent.Start) {
-                                // Switch camera after the specified time.
-                                CameraXExecutors.mainThreadExecutor().schedule(this::switchCamera,
-                                        switchTimeMillis, TimeUnit.MILLISECONDS);
+                            if (videoRecordEvent instanceof VideoRecordEvent.Status) {
+                                long currentDurationMillis = TimeUnit.NANOSECONDS.toMillis(
+                                        videoRecordEvent.getRecordingStats()
+                                                .getRecordedDurationNanos());
+                                if (currentDurationMillis >= expectedSwitchTimeMillis) {
+                                    if (mNotYetSwitched) {
+                                        switchCamera();
+                                        mNotYetSwitched = false;
+                                    }
+                                    if (currentDurationMillis >= expectedDurationMillis) {
+                                        Preconditions.checkNotNull(mRecording, "The in-progress "
+                                                + "recording should not be null.");
+                                        mRecording.stop();
+                                    }
+                                }
                             }
                             if (videoRecordEvent instanceof VideoRecordEvent.Finalize) {
                                 mRecording = null;
+                                mNotYetSwitched = true;
                                 mStartButton.setClickable(true);
                                 mStartButton.setText(R.string.record_button_idling);
                                 mDurationText.setClickable(true);
@@ -240,21 +251,18 @@
     }
 
     @NonNull
-    private FileOutputOptions generateFileOutputOptions(@IntRange(from = 0) long durationMillis) {
+    private FileOutputOptions generateFileOutputOptions() {
         String videoFileName = "video_" + System.currentTimeMillis() + ".mp4";
         File videoFolder = Environment.getExternalStoragePublicDirectory(
                 Environment.DIRECTORY_MOVIES);
         if (!videoFolder.exists() && !videoFolder.mkdirs()) {
             Logger.e(TAG, "Failed to create directory: " + videoFolder);
         }
-        return new FileOutputOptions.Builder(
-                new File(videoFolder, videoFileName)).setDurationLimitMillis(
-                durationMillis).build();
+        return new FileOutputOptions.Builder(new File(videoFolder, videoFileName)).build();
     }
 
     @NonNull
-    private MediaStoreOutputOptions generateMediaStoreOutputOptions(
-            @IntRange(from = 0) long durationMillis) {
+    private MediaStoreOutputOptions generateMediaStoreOutputOptions() {
         String videoFileName = "video_" + System.currentTimeMillis();
         ContentValues contentValues = new ContentValues();
         contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");
@@ -265,7 +273,6 @@
         return new MediaStoreOutputOptions.Builder(getContentResolver(),
                 MediaStore.Video.Media.EXTERNAL_CONTENT_URI)
                 .setContentValues(contentValues)
-                .setDurationLimitMillis(durationMillis)
                 .build();
     }
 
diff --git a/collection/collection-benchmark/build.gradle b/collection/collection-benchmark/build.gradle
index 931098c..11b20b6 100644
--- a/collection/collection-benchmark/build.gradle
+++ b/collection/collection-benchmark/build.gradle
@@ -65,12 +65,12 @@
         androidTest {
             dependsOn(commonTest)
             dependencies {
-                implementation(projectOrArtifact(":benchmark:benchmark-junit4"))
+                implementation("androidx.benchmark:benchmark-junit4:1.1.1")
                 implementation(libs.junit)
-                implementation(libs.testExtJunit)
-                implementation(libs.testCore)
-                implementation(libs.testRunner)
-                implementation(libs.testRules)
+                implementation("androidx.test.ext:junit:1.1.5")
+                implementation("androidx.test:core:1.5.0")
+                implementation("androidx.test:runner:1.5.2")
+                implementation("androidx.test:rules:1.5.0")
             }
         }
 
diff --git a/collection/collection-benchmark/src/androidTest/java/androidx/collection/ArraySetBenchmarkTest.kt b/collection/collection-benchmark/src/androidTest/java/androidx/collection/ArraySetBenchmarkTest.kt
index 1f38347..e80eb0a 100644
--- a/collection/collection-benchmark/src/androidTest/java/androidx/collection/ArraySetBenchmarkTest.kt
+++ b/collection/collection-benchmark/src/androidTest/java/androidx/collection/ArraySetBenchmarkTest.kt
@@ -17,6 +17,7 @@
 package androidx.collection
 
 import androidx.benchmark.junit4.BenchmarkRule
+import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -40,11 +41,13 @@
         benchmark.runCollectionBenchmark(ArraySetContainsElementBenchmark(sourceSet))
     }
 
+    @Ignore("b/293929098") // Flaky / failing in presubmit.
     @Test
     fun indexOf() {
         benchmark.runCollectionBenchmark(ArraySetIndexOfBenchmark(sourceSet))
     }
 
+    @Ignore("b/293929098") // Flaky / failing in presubmit.
     @Test
     fun addAllThenRemoveIndividually() {
         benchmark.runCollectionBenchmark(ArraySetAddAllThenRemoveIndividuallyBenchmark(sourceSet))
diff --git a/collection/collection-ktx/api/1.3.0-beta01.txt b/collection/collection-ktx/api/1.3.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/collection/collection-ktx/api/1.3.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/collection/collection-ktx/api/restricted_1.3.0-beta01.txt b/collection/collection-ktx/api/restricted_1.3.0-beta01.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/collection/collection-ktx/api/restricted_1.3.0-beta01.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/collection/collection/api/1.3.0-beta01.txt b/collection/collection/api/1.3.0-beta01.txt
new file mode 100644
index 0000000..a2fdada
--- /dev/null
+++ b/collection/collection/api/1.3.0-beta01.txt
@@ -0,0 +1,236 @@
+// Signature format: 4.0
+package androidx.collection {
+
+  public class ArrayMap extends androidx.collection.SimpleArrayMap implements java.util.Map {
+    ctor public ArrayMap();
+    ctor public ArrayMap(androidx.collection.SimpleArrayMap?);
+    ctor public ArrayMap(int);
+    method public boolean containsAll(java.util.Collection);
+    method public boolean containsKey(Object?);
+    method public boolean containsValue(Object?);
+    method public java.util.Set!> entrySet();
+    method public V! get(Object?);
+    method public java.util.Set keySet();
+    method public void putAll(java.util.Map);
+    method public V! remove(Object?);
+    method public boolean removeAll(java.util.Collection);
+    method public boolean retainAll(java.util.Collection);
+    method public java.util.Collection values();
+  }
+
+  public final class ArrayMapKt {
+    method public static inline  androidx.collection.ArrayMap arrayMapOf();
+    method public static  androidx.collection.ArrayMap arrayMapOf(kotlin.Pair... pairs);
+  }
+
+  public final class ArraySet implements java.util.Collection kotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set {
+    ctor public ArraySet();
+    ctor public ArraySet(androidx.collection.ArraySet? set);
+    ctor public ArraySet(E![]? array);
+    ctor public ArraySet(optional int capacity);
+    ctor public ArraySet(java.util.Collection? set);
+    method public boolean add(E element);
+    method public void addAll(androidx.collection.ArraySet array);
+    method public boolean addAll(java.util.Collection elements);
+    method public void clear();
+    method public operator boolean contains(E element);
+    method public boolean containsAll(java.util.Collection elements);
+    method public void ensureCapacity(int minimumCapacity);
+    method public int getSize();
+    method public int indexOf(Object? key);
+    method public boolean isEmpty();
+    method public java.util.Iterator iterator();
+    method public boolean remove(E element);
+    method public boolean removeAll(androidx.collection.ArraySet array);
+    method public boolean removeAll(java.util.Collection elements);
+    method public E removeAt(int index);
+    method public boolean retainAll(java.util.Collection elements);
+    method public Object![] toArray();
+    method public  T![] toArray(T![] array);
+    method public E valueAt(int index);
+    property public int size;
+  }
+
+  public final class ArraySetKt {
+    method public static inline  androidx.collection.ArraySet arraySetOf();
+    method public static  androidx.collection.ArraySet arraySetOf(T?... values);
+  }
+
+  public final class CircularArray {
+    ctor public CircularArray();
+    ctor public CircularArray(optional int minCapacity);
+    method public void addFirst(E element);
+    method public void addLast(E element);
+    method public void clear();
+    method public operator E get(int index);
+    method public E getFirst();
+    method public E getLast();
+    method public boolean isEmpty();
+    method public E popFirst();
+    method public E popLast();
+    method public void removeFromEnd(int count);
+    method public void removeFromStart(int count);
+    method public int size();
+    property public final E first;
+    property public final E last;
+  }
+
+  public final class CircularIntArray {
+    ctor public CircularIntArray();
+    ctor public CircularIntArray(optional int minCapacity);
+    method public void addFirst(int element);
+    method public void addLast(int element);
+    method public void clear();
+    method public operator int get(int index);
+    method public int getFirst();
+    method public int getLast();
+    method public boolean isEmpty();
+    method public int popFirst();
+    method public int popLast();
+    method public void removeFromEnd(int count);
+    method public void removeFromStart(int count);
+    method public int size();
+    property public final int first;
+    property public final int last;
+  }
+
+  public class LongSparseArray implements java.lang.Cloneable {
+    ctor public LongSparseArray();
+    ctor public LongSparseArray(optional int initialCapacity);
+    method public void append(long key, E value);
+    method public void clear();
+    method public androidx.collection.LongSparseArray clone();
+    method public boolean containsKey(long key);
+    method public boolean containsValue(E value);
+    method @Deprecated public void delete(long key);
+    method public operator E? get(long key);
+    method public E get(long key, E defaultValue);
+    method public int indexOfKey(long key);
+    method public int indexOfValue(E value);
+    method public boolean isEmpty();
+    method public long keyAt(int index);
+    method public void put(long key, E value);
+    method public void putAll(androidx.collection.LongSparseArray other);
+    method public E? putIfAbsent(long key, E value);
+    method public void remove(long key);
+    method public boolean remove(long key, E value);
+    method public void removeAt(int index);
+    method public E? replace(long key, E value);
+    method public boolean replace(long key, E oldValue, E newValue);
+    method public void setValueAt(int index, E value);
+    method public int size();
+    method public E valueAt(int index);
+  }
+
+  public final class LongSparseArrayKt {
+    method public static inline operator  boolean contains(androidx.collection.LongSparseArray, long key);
+    method public static inline  void forEach(androidx.collection.LongSparseArray, kotlin.jvm.functions.Function2 action);
+    method public static inline  T getOrDefault(androidx.collection.LongSparseArray, long key, T defaultValue);
+    method public static inline  T getOrElse(androidx.collection.LongSparseArray, long key, kotlin.jvm.functions.Function0 defaultValue);
+    method public static inline  int getSize(androidx.collection.LongSparseArray);
+    method public static inline  boolean isNotEmpty(androidx.collection.LongSparseArray);
+    method public static  kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray);
+    method public static operator  androidx.collection.LongSparseArray plus(androidx.collection.LongSparseArray, androidx.collection.LongSparseArray other);
+    method @Deprecated public static  boolean remove(androidx.collection.LongSparseArray, long key, T value);
+    method public static inline operator  void set(androidx.collection.LongSparseArray, long key, T value);
+    method public static  java.util.Iterator valueIterator(androidx.collection.LongSparseArray);
+  }
+
+  public class LruCache {
+    ctor public LruCache(@IntRange(from=1L, to=kotlin.jvm.internal.LongCompanionObject.MAX_VALUE) int maxSize);
+    method protected V? create(K key);
+    method public final int createCount();
+    method protected void entryRemoved(boolean evicted, K key, V oldValue, V? newValue);
+    method public final void evictAll();
+    method public final int evictionCount();
+    method public final operator V? get(K key);
+    method public final int hitCount();
+    method public final int maxSize();
+    method public final int missCount();
+    method public final V? put(K key, V value);
+    method public final int putCount();
+    method public final V? remove(K key);
+    method public void resize(@IntRange(from=1L, to=kotlin.jvm.internal.LongCompanionObject.MAX_VALUE) int maxSize);
+    method public final int size();
+    method protected int sizeOf(K key, V value);
+    method public final java.util.Map snapshot();
+    method public void trimToSize(int maxSize);
+  }
+
+  public final class LruCacheKt {
+    method public static inline  androidx.collection.LruCache lruCache(int maxSize, optional kotlin.jvm.functions.Function2 sizeOf, optional kotlin.jvm.functions.Function1 create, optional kotlin.jvm.functions.Function4 onEntryRemoved);
+  }
+
+  public class SimpleArrayMap {
+    ctor public SimpleArrayMap();
+    ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap? map);
+    ctor public SimpleArrayMap(optional int capacity);
+    method public void clear();
+    method public boolean containsKey(K key);
+    method public boolean containsValue(V value);
+    method public void ensureCapacity(int minimumCapacity);
+    method public operator V? get(K key);
+    method public V getOrDefault(Object? key, V defaultValue);
+    method public int indexOfKey(K key);
+    method public boolean isEmpty();
+    method public K keyAt(int index);
+    method public V? put(K key, V value);
+    method public void putAll(androidx.collection.SimpleArrayMap map);
+    method public V? putIfAbsent(K key, V value);
+    method public V? remove(K key);
+    method public boolean remove(K key, V value);
+    method public V removeAt(int index);
+    method public V? replace(K key, V value);
+    method public boolean replace(K key, V oldValue, V newValue);
+    method public V setValueAt(int index, V value);
+    method public int size();
+    method public V valueAt(int index);
+  }
+
+  public class SparseArrayCompat implements java.lang.Cloneable {
+    ctor public SparseArrayCompat();
+    ctor public SparseArrayCompat(optional int initialCapacity);
+    method public void append(int key, E value);
+    method public void clear();
+    method public androidx.collection.SparseArrayCompat clone();
+    method public boolean containsKey(int key);
+    method public boolean containsValue(E value);
+    method @Deprecated public void delete(int key);
+    method public operator E? get(int key);
+    method public E get(int key, E defaultValue);
+    method public final boolean getIsEmpty();
+    method public int indexOfKey(int key);
+    method public int indexOfValue(E value);
+    method public boolean isEmpty();
+    method public int keyAt(int index);
+    method public void put(int key, E value);
+    method public void putAll(androidx.collection.SparseArrayCompat other);
+    method public E? putIfAbsent(int key, E value);
+    method public void remove(int key);
+    method public boolean remove(int key, Object? value);
+    method public void removeAt(int index);
+    method public void removeAtRange(int index, int size);
+    method public E? replace(int key, E value);
+    method public boolean replace(int key, E oldValue, E newValue);
+    method public void setValueAt(int index, E value);
+    method public int size();
+    method public E valueAt(int index);
+    property public final boolean isEmpty;
+  }
+
+  public final class SparseArrayKt {
+    method public static inline operator  boolean contains(androidx.collection.SparseArrayCompat, int key);
+    method public static inline  void forEach(androidx.collection.SparseArrayCompat, kotlin.jvm.functions.Function2 action);
+    method public static inline  T getOrDefault(androidx.collection.SparseArrayCompat, int key, T defaultValue);
+    method public static inline  T getOrElse(androidx.collection.SparseArrayCompat, int key, kotlin.jvm.functions.Function0 defaultValue);
+    method public static inline  int getSize(androidx.collection.SparseArrayCompat);
+    method public static inline  boolean isNotEmpty(androidx.collection.SparseArrayCompat);
+    method public static  kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat);
+    method public static operator  androidx.collection.SparseArrayCompat plus(androidx.collection.SparseArrayCompat, androidx.collection.SparseArrayCompat other);
+    method @Deprecated public static  boolean remove(androidx.collection.SparseArrayCompat, int key, T value);
+    method public static inline operator  void set(androidx.collection.SparseArrayCompat, int key, T value);
+    method public static  java.util.Iterator valueIterator(androidx.collection.SparseArrayCompat);
+  }
+
+}
+
diff --git a/collection/collection/api/restricted_1.3.0-beta01.txt b/collection/collection/api/restricted_1.3.0-beta01.txt
new file mode 100644
index 0000000..a2fdada
--- /dev/null
+++ b/collection/collection/api/restricted_1.3.0-beta01.txt
@@ -0,0 +1,236 @@
+// Signature format: 4.0
+package androidx.collection {
+
+  public class ArrayMap extends androidx.collection.SimpleArrayMap implements java.util.Map {
+    ctor public ArrayMap();
+    ctor public ArrayMap(androidx.collection.SimpleArrayMap?);
+    ctor public ArrayMap(int);
+    method public boolean containsAll(java.util.Collection);
+    method public boolean containsKey(Object?);
+    method public boolean containsValue(Object?);
+    method public java.util.Set!> entrySet();
+    method public V! get(Object?);
+    method public java.util.Set keySet();
+    method public void putAll(java.util.Map);
+    method public V! remove(Object?);
+    method public boolean removeAll(java.util.Collection);
+    method public boolean retainAll(java.util.Collection);
+    method public java.util.Collection values();
+  }
+
+  public final class ArrayMapKt {
+    method public static inline  androidx.collection.ArrayMap arrayMapOf();
+    method public static  androidx.collection.ArrayMap arrayMapOf(kotlin.Pair... pairs);
+  }
+
+  public final class ArraySet implements java.util.Collection kotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set {
+    ctor public ArraySet();
+    ctor public ArraySet(androidx.collection.ArraySet? set);
+    ctor public ArraySet(E![]? array);
+    ctor public ArraySet(optional int capacity);
+    ctor public ArraySet(java.util.Collection? set);
+    method public boolean add(E element);
+    method public void addAll(androidx.collection.ArraySet array);
+    method public boolean addAll(java.util.Collection elements);
+    method public void clear();
+    method public operator boolean contains(E element);
+    method public boolean containsAll(java.util.Collection elements);
+    method public void ensureCapacity(int minimumCapacity);
+    method public int getSize();
+    method public int indexOf(Object? key);
+    method public boolean isEmpty();
+    method public java.util.Iterator iterator();
+    method public boolean remove(E element);
+    method public boolean removeAll(androidx.collection.ArraySet array);
+    method public boolean removeAll(java.util.Collection elements);
+    method public E removeAt(int index);
+    method public boolean retainAll(java.util.Collection elements);
+    method public Object![] toArray();
+    method public  T![] toArray(T![] array);
+    method public E valueAt(int index);
+    property public int size;
+  }
+
+  public final class ArraySetKt {
+    method public static inline  androidx.collection.ArraySet arraySetOf();
+    method public static  androidx.collection.ArraySet arraySetOf(T?... values);
+  }
+
+  public final class CircularArray {
+    ctor public CircularArray();
+    ctor public CircularArray(optional int minCapacity);
+    method public void addFirst(E element);
+    method public void addLast(E element);
+    method public void clear();
+    method public operator E get(int index);
+    method public E getFirst();
+    method public E getLast();
+    method public boolean isEmpty();
+    method public E popFirst();
+    method public E popLast();
+    method public void removeFromEnd(int count);
+    method public void removeFromStart(int count);
+    method public int size();
+    property public final E first;
+    property public final E last;
+  }
+
+  public final class CircularIntArray {
+    ctor public CircularIntArray();
+    ctor public CircularIntArray(optional int minCapacity);
+    method public void addFirst(int element);
+    method public void addLast(int element);
+    method public void clear();
+    method public operator int get(int index);
+    method public int getFirst();
+    method public int getLast();
+    method public boolean isEmpty();
+    method public int popFirst();
+    method public int popLast();
+    method public void removeFromEnd(int count);
+    method public void removeFromStart(int count);
+    method public int size();
+    property public final int first;
+    property public final int last;
+  }
+
+  public class LongSparseArray implements java.lang.Cloneable {
+    ctor public LongSparseArray();
+    ctor public LongSparseArray(optional int initialCapacity);
+    method public void append(long key, E value);
+    method public void clear();
+    method public androidx.collection.LongSparseArray clone();
+    method public boolean containsKey(long key);
+    method public boolean containsValue(E value);
+    method @Deprecated public void delete(long key);
+    method public operator E? get(long key);
+    method public E get(long key, E defaultValue);
+    method public int indexOfKey(long key);
+    method public int indexOfValue(E value);
+    method public boolean isEmpty();
+    method public long keyAt(int index);
+    method public void put(long key, E value);
+    method public void putAll(androidx.collection.LongSparseArray other);
+    method public E? putIfAbsent(long key, E value);
+    method public void remove(long key);
+    method public boolean remove(long key, E value);
+    method public void removeAt(int index);
+    method public E? replace(long key, E value);
+    method public boolean replace(long key, E oldValue, E newValue);
+    method public void setValueAt(int index, E value);
+    method public int size();
+    method public E valueAt(int index);
+  }
+
+  public final class LongSparseArrayKt {
+    method public static inline operator  boolean contains(androidx.collection.LongSparseArray, long key);
+    method public static inline  void forEach(androidx.collection.LongSparseArray, kotlin.jvm.functions.Function2 action);
+    method public static inline  T getOrDefault(androidx.collection.LongSparseArray, long key, T defaultValue);
+    method public static inline  T getOrElse(androidx.collection.LongSparseArray, long key, kotlin.jvm.functions.Function0 defaultValue);
+    method public static inline  int getSize(androidx.collection.LongSparseArray);
+    method public static inline  boolean isNotEmpty(androidx.collection.LongSparseArray);
+    method public static  kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray);
+    method public static operator  androidx.collection.LongSparseArray plus(androidx.collection.LongSparseArray, androidx.collection.LongSparseArray other);
+    method @Deprecated public static  boolean remove(androidx.collection.LongSparseArray, long key, T value);
+    method public static inline operator  void set(androidx.collection.LongSparseArray, long key, T value);
+    method public static  java.util.Iterator valueIterator(androidx.collection.LongSparseArray);
+  }
+
+  public class LruCache {
+    ctor public LruCache(@IntRange(from=1L, to=kotlin.jvm.internal.LongCompanionObject.MAX_VALUE) int maxSize);
+    method protected V? create(K key);
+    method public final int createCount();
+    method protected void entryRemoved(boolean evicted, K key, V oldValue, V? newValue);
+    method public final void evictAll();
+    method public final int evictionCount();
+    method public final operator V? get(K key);
+    method public final int hitCount();
+    method public final int maxSize();
+    method public final int missCount();
+    method public final V? put(K key, V value);
+    method public final int putCount();
+    method public final V? remove(K key);
+    method public void resize(@IntRange(from=1L, to=kotlin.jvm.internal.LongCompanionObject.MAX_VALUE) int maxSize);
+    method public final int size();
+    method protected int sizeOf(K key, V value);
+    method public final java.util.Map snapshot();
+    method public void trimToSize(int maxSize);
+  }
+
+  public final class LruCacheKt {
+    method public static inline  androidx.collection.LruCache lruCache(int maxSize, optional kotlin.jvm.functions.Function2 sizeOf, optional kotlin.jvm.functions.Function1 create, optional kotlin.jvm.functions.Function4 onEntryRemoved);
+  }
+
+  public class SimpleArrayMap {
+    ctor public SimpleArrayMap();
+    ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap? map);
+    ctor public SimpleArrayMap(optional int capacity);
+    method public void clear();
+    method public boolean containsKey(K key);
+    method public boolean containsValue(V value);
+    method public void ensureCapacity(int minimumCapacity);
+    method public operator V? get(K key);
+    method public V getOrDefault(Object? key, V defaultValue);
+    method public int indexOfKey(K key);
+    method public boolean isEmpty();
+    method public K keyAt(int index);
+    method public V? put(K key, V value);
+    method public void putAll(androidx.collection.SimpleArrayMap map);
+    method public V? putIfAbsent(K key, V value);
+    method public V? remove(K key);
+    method public boolean remove(K key, V value);
+    method public V removeAt(int index);
+    method public V? replace(K key, V value);
+    method public boolean replace(K key, V oldValue, V newValue);
+    method public V setValueAt(int index, V value);
+    method public int size();
+    method public V valueAt(int index);
+  }
+
+  public class SparseArrayCompat implements java.lang.Cloneable {
+    ctor public SparseArrayCompat();
+    ctor public SparseArrayCompat(optional int initialCapacity);
+    method public void append(int key, E value);
+    method public void clear();
+    method public androidx.collection.SparseArrayCompat clone();
+    method public boolean containsKey(int key);
+    method public boolean containsValue(E value);
+    method @Deprecated public void delete(int key);
+    method public operator E? get(int key);
+    method public E get(int key, E defaultValue);
+    method public final boolean getIsEmpty();
+    method public int indexOfKey(int key);
+    method public int indexOfValue(E value);
+    method public boolean isEmpty();
+    method public int keyAt(int index);
+    method public void put(int key, E value);
+    method public void putAll(androidx.collection.SparseArrayCompat other);
+    method public E? putIfAbsent(int key, E value);
+    method public void remove(int key);
+    method public boolean remove(int key, Object? value);
+    method public void removeAt(int index);
+    method public void removeAtRange(int index, int size);
+    method public E? replace(int key, E value);
+    method public boolean replace(int key, E oldValue, E newValue);
+    method public void setValueAt(int index, E value);
+    method public int size();
+    method public E valueAt(int index);
+    property public final boolean isEmpty;
+  }
+
+  public final class SparseArrayKt {
+    method public static inline operator  boolean contains(androidx.collection.SparseArrayCompat, int key);
+    method public static inline  void forEach(androidx.collection.SparseArrayCompat, kotlin.jvm.functions.Function2 action);
+    method public static inline  T getOrDefault(androidx.collection.SparseArrayCompat, int key, T defaultValue);
+    method public static inline  T getOrElse(androidx.collection.SparseArrayCompat, int key, kotlin.jvm.functions.Function0 defaultValue);
+    method public static inline  int getSize(androidx.collection.SparseArrayCompat);
+    method public static inline  boolean isNotEmpty(androidx.collection.SparseArrayCompat);
+    method public static  kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat);
+    method public static operator  androidx.collection.SparseArrayCompat plus(androidx.collection.SparseArrayCompat, androidx.collection.SparseArrayCompat other);
+    method @Deprecated public static  boolean remove(androidx.collection.SparseArrayCompat, int key, T value);
+    method public static inline operator  void set(androidx.collection.SparseArrayCompat, int key, T value);
+    method public static  java.util.Iterator valueIterator(androidx.collection.SparseArrayCompat);
+  }
+
+}
+
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
index f100c5d..e1af9da 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -4117,4 +4117,38 @@
             }
         """
     )
+
+    @Test
+    fun test_ComposableLambdaWithUnusedParameter() = verifyComposeIrTransform(
+        source = """
+            import androidx.compose.runtime.*
+
+            val layoutLambda = @Composable { _: Int ->
+                Layout()
+            }
+        """,
+        extra = """
+            import androidx.compose.runtime.*
+
+            @Composable inline fun Layout() {}
+        """,
+        expectedTransformed = """
+            val layoutLambda: Function3 = ComposableSingletons%TestKt.lambda-1
+            internal object ComposableSingletons%TestKt {
+              val lambda-1: Function3 = composableLambdaInstance(<>, false) { : Int, %composer: Composer?, %changed: Int ->
+                if (%changed and 0b01010001 !== 0b00010000 || !%composer.skipping) {
+                  if (isTraceInProgress()) {
+                    traceEventStart(<>, %changed, -1, <>)
+                  }
+                  Layout(%composer, 0)
+                  if (isTraceInProgress()) {
+                    traceEventEnd()
+                  }
+                } else {
+                  %composer.skipToGroupEnd()
+                }
+              }
+            }
+        """
+    )
 }
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
index 606cc70..98786eb 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
@@ -387,4 +387,88 @@
             }
         """
     )
+
+    @Test
+    fun testComposableFunInterfaceWAnonymousParam() = verifyComposeIrTransform(
+        """
+            import androidx.compose.runtime.*
+
+            fun interface Consumer {
+                @Composable operator fun invoke(t: Int)
+            }
+
+            @Composable fun Test(int: Int) {
+                Example { _ ->
+                }
+            }
+
+            @Composable fun Example(consumer: Consumer) {
+            }
+        """,
+        """
+            interface Consumer {
+              @Composable
+              abstract fun invoke(t: Int, %composer: Composer?, %changed: Int)
+            }
+            @Composable
+            fun Test(int: Int, %composer: Composer?, %changed: Int) {
+              %composer = %composer.startRestartGroup(<>)
+              sourceInformation(%composer, "C(Test):Test.kt")
+              if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+                if (isTraceInProgress()) {
+                  traceEventStart(<>, %changed, -1, <>)
+                }
+                Example(class  : Consumer {
+                  @Composable
+                  override fun invoke(: Int, %composer: Composer?, %changed: Int) {
+                    %composer = %composer.startRestartGroup(<>)
+                    sourceInformation(%composer, "C(invoke):Test.kt")
+                    if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+                      if (isTraceInProgress()) {
+                        traceEventStart(<>, %changed, -1, <>)
+                      }
+                      Unit
+                      if (isTraceInProgress()) {
+                        traceEventEnd()
+                      }
+                    } else {
+                      %composer.skipToGroupEnd()
+                    }
+                    val tmp0_rcvr = 
+                    %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                      tmp0_rcvr.invoke(, %composer, updateChangedFlags(%changed or 0b0001))
+                    }
+                  }
+                }
+                (), %composer, 0)
+                if (isTraceInProgress()) {
+                  traceEventEnd()
+                }
+              } else {
+                %composer.skipToGroupEnd()
+              }
+              %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                Test(int, %composer, updateChangedFlags(%changed or 0b0001))
+              }
+            }
+            @Composable
+            fun Example(consumer: Consumer, %composer: Composer?, %changed: Int) {
+              %composer = %composer.startRestartGroup(<>)
+              sourceInformation(%composer, "C(Example):Test.kt")
+              if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+                if (isTraceInProgress()) {
+                  traceEventStart(<>, %changed, -1, <>)
+                }
+                if (isTraceInProgress()) {
+                  traceEventEnd()
+                }
+              } else {
+                %composer.skipToGroupEnd()
+              }
+              %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+                Example(consumer, %composer, updateChangedFlags(%changed or 0b0001))
+              }
+            }
+        """
+    )
 }
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index e334859..07c13e3 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -1689,12 +1689,20 @@
         )
 
         if (defaultParam == null) {
-            require(parameterCount == defaultIndex) // param count is 1-based, index is 0-based
+            // param count is 1-based, index is 0-based
+            require(parameterCount == defaultIndex) {
+                "Expected $defaultIndex params for ${function.fqNameWhenAvailable}, " +
+                    "found $parameterCount"
+            }
         } else {
+            val expectedParamCount = defaultIndex +
+                defaultParamCount(contextParameterCount + numRealValueParameters)
             require(
-                parameterCount == defaultIndex +
-                    defaultParamCount(contextParameterCount + numRealValueParameters)
-            )
+                parameterCount == expectedParamCount
+            ) {
+                "Expected $expectedParamCount params for ${function.fqNameWhenAvailable}, " +
+                    "found $parameterCount"
+            }
         }
 
         val lambda = irLambdaExpression(
@@ -3875,7 +3883,6 @@
                         paramName.startsWith(KtxNameConventions.CHANGED_PARAMETER.identifier) ->
                             changedParams += param
                         paramName.startsWith("\$context_receiver_") ||
-                        paramName.startsWith("\$anonymous\$parameter") ||
                         paramName.startsWith("\$name\$for\$destructuring") ||
                         paramName.startsWith("\$noName_") ||
                         paramName == "\$this" -> Unit
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
index 04c7f2c..841ab83a 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
@@ -1572,7 +1572,8 @@
         get() = when {
             // FIR generates both  and tmp0_for_iterator...
             origin == IrDeclarationOrigin.FOR_LOOP_ITERATOR -> ""
-            !useFir && origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER -> ""
+            // $anonymous$parameter$x vs $unused$var$x
+            origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER -> ""
             !useFir && name.asString().endsWith("_elvis_lhs") -> ""
             !useFir && name.asString() == "\$this\$null" -> ""
             else -> name.asString()
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt
index a3379dd..735e1e755 100644
--- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt
+++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt
@@ -570,6 +570,7 @@
         }
     }
 
+    @Ignore // b/293919923
     @Test
     fun textField_withActiveSelection_shiftTabSingleLine() {
         keysSequenceTest("text", singleLine = true) {
diff --git a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialPerfettoSdkBenchmark.kt
similarity index 97%
rename from compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
rename to compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialPerfettoSdkBenchmark.kt
index 3115e6b..002886f 100644
--- a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt
+++ b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialPerfettoSdkBenchmark.kt
@@ -41,7 +41,7 @@
  */
 @OptIn(ExperimentalMetricApi::class)
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.R) // TODO(234351579): Support API < 30
-class TrivialTracingBenchmark(private val composableName: String) {
+class TrivialPerfettoSdkBenchmark(private val composableName: String) {
     @get:Rule
     val benchmarkRule = MacrobenchmarkRule()
 
diff --git a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupTracingBenchmark.kt b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt
similarity index 73%
rename from compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupTracingBenchmark.kt
rename to compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt
index 47cbb44..eb9ab43 100644
--- a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupTracingBenchmark.kt
+++ b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt
@@ -26,7 +26,6 @@
 import androidx.testutils.measureStartup
 import org.hamcrest.CoreMatchers.`is`
 import org.hamcrest.MatcherAssert.assertThat
-import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -35,26 +34,23 @@
 @OptIn(ExperimentalMetricApi::class)
 @LargeTest
 @RunWith(Parameterized::class)
-class TrivialStartupTracingBenchmark(
+class TrivialStartupPerfettoSdkBenchmark(
     private val startupMode: StartupMode,
     private val compilationMode: CompilationMode,
-    private val isFullTracingEnabled: Boolean
+    private val isPerfettoSdkEnabled: Boolean
 ) {
     @get:Rule
     val benchmarkRule = MacrobenchmarkRule()
 
-    // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing)
-    @Ignore
     @Test
     fun startup() = try {
-        Arguments.fullTracingEnableOverride = isFullTracingEnabled
-        assertThat(Arguments.fullTracingEnable, `is`(isFullTracingEnabled))
+        Arguments.perfettoSdkTracingEnableOverride = isPerfettoSdkEnabled
+        assertThat(Arguments.perfettoSdkTracingEnable, `is`(isPerfettoSdkEnabled))
 
         try {
             val perfettoSdkTraceSection = TraceSectionMetric(
-                "androidx.compose.integration.macrobenchmark.target." +
-                    "TrivialStartupTracingActivity.onCreate." +
-                    " (TrivialStartupTracingActivity.kt:33)"
+                "%TrivialStartupTracingActivity.onCreate%" +
+                    " (TrivialStartupTracingActivity.kt:%)"
             )
             benchmarkRule.measureStartup(
                 compilationMode = compilationMode,
@@ -67,25 +63,28 @@
                     "TRIVIAL_STARTUP_TRACING_ACTIVITY"
             }
         } catch (e: IllegalArgumentException) {
-            if (!isFullTracingEnabled &&
+            if (!isPerfettoSdkEnabled &&
                 e.message?.contains("Unable to read any metrics during benchmark") == true
             ) {
-                // this is expected, we don't expect Perfetto SDK Tracing section present
-                // when full tracing is disabled
+                // We are relying on the fact that Macrobenchmark will throw an exception when it
+                // cannot find any metrics, and given we are looking for one specific metric
+                // (a Composable function emitted by Compose Tracing), we are able to tell if
+                // Compose Tracing is working (enabled) or not, both of which we want to verify in
+                // this test.
             } else throw e // this is a legitimate failure
         }
     } finally {
-        Arguments.fullTracingEnableOverride = null
+        Arguments.perfettoSdkTracingEnableOverride = null
     }
 
     companion object {
-        @Parameterized.Parameters(name = "startup={0},compilation={1},fullTracing={2}")
+        @Parameterized.Parameters(name = "startup={0},compilation={1},perfettoSdk={2}")
         @JvmStatic
         fun parameters() = listOf(
-            arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* fullTracing = */ true),
-            arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* fullTracing = */ false),
-            arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* fullTracing = */ true),
-            arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* fullTracing = */ false),
+            arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* perfettoSdk = */ true),
+            arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* perfettoSdk = */ false),
+            arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* perfettoSdk = */ true),
+            arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* perfettoSdk = */ false),
         )
     }
 }
diff --git a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkOverheadBenchmark.kt b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkOverheadBenchmark.kt
new file mode 100644
index 0000000..28a6c97
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkOverheadBenchmark.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.integration.macrobenchmark
+
+import androidx.benchmark.Arguments
+import androidx.benchmark.macro.CompilationMode
+import androidx.benchmark.macro.StartupMode
+import androidx.benchmark.macro.junit4.MacrobenchmarkRule
+import androidx.test.filters.LargeTest
+import androidx.testutils.createStartupCompilationParams
+import androidx.testutils.measureStartup
+import org.hamcrest.CoreMatchers.`is`
+import org.hamcrest.MatcherAssert.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@LargeTest
+@RunWith(Parameterized::class)
+class TrivialStartupPerfettoSdkOverheadBenchmark(
+    private val startupMode: StartupMode,
+    private val compilationMode: CompilationMode,
+    private val isPerfettoSdkEnabled: Boolean
+) {
+    @get:Rule
+    val benchmarkRule = MacrobenchmarkRule()
+
+    @Test
+    fun startup() = try {
+        Arguments.perfettoSdkTracingEnableOverride = isPerfettoSdkEnabled
+        assertThat(Arguments.perfettoSdkTracingEnable, `is`(isPerfettoSdkEnabled))
+
+        benchmarkRule.measureStartup(
+            compilationMode = compilationMode,
+            startupMode = startupMode,
+            packageName = "androidx.compose.integration.macrobenchmark.target"
+        ) {
+            action = "androidx.compose.integration.macrobenchmark.target." +
+                "TRIVIAL_STARTUP_TRACING_ACTIVITY"
+        }
+    } finally {
+        Arguments.perfettoSdkTracingEnableOverride = null
+    }
+
+    companion object {
+        // intended for local testing of all possible configurations
+        private const val exhaustiveMode = false
+
+        @Parameterized.Parameters(name = "startup={0},compilation={1},perfettoSdk={2}")
+        @JvmStatic
+        fun parameters() =
+            when {
+                exhaustiveMode ->
+                    // complete set for testing locally
+                    createStartupCompilationParams()
+                        .flatMap { listOf(it + true, it + false) } /* perfetto sdk enabled */
+                else ->
+                    // subset for testing in CI:
+                    // compilation isn't expected to affect this, so we just look at startup time
+                    // for cold and not, since the behavior is very different in those scenarios
+                    createStartupCompilationParams(
+                        listOf(StartupMode.COLD, StartupMode.WARM),
+                        listOf(CompilationMode.DEFAULT)
+                    ).map { it + true } /* perfetto sdk enabled */
+            }
+    }
+}
diff --git a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt
index 49bc878..d34d4bc 100644
--- a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt
+++ b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt
@@ -93,8 +93,10 @@
             }
         }
 
-        return roots.flatMap {
-            it.semanticsOwner.getAllSemanticsNodes(mergingEnabled = !useUnmergedTree)
+        return testOwner.runOnUiThread {
+            roots.flatMap {
+                it.semanticsOwner.getAllSemanticsNodes(mergingEnabled = !useUnmergedTree)
+            }
         }
     }
 }
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
index 93604d6..e905ca7 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
@@ -1953,11 +1953,12 @@
                     // This simulates a child that recomposes, for example due to a transition.
                     content(offset.value)
                 }
-                val assumeLayoutBeforeDraw = @Composable { _: Int ->
+                val assumeLayoutBeforeDraw = @Composable { value: Int ->
                     // This assumes a layout was done before the draw pass.
                     Layout(
                         content = {},
                         modifier = Modifier.drawBehind {
+                            assertEquals(offset.value, value)
                             assertTrue(laidOut)
                             latch.countDown()
                         }
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
index f99c430..0bcfbd9c 100644
--- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
@@ -34,6 +34,7 @@
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.testutils.assertPixels
@@ -164,6 +165,50 @@
         }
     }
 
+    @Test
+    fun testVectorSkipsRecompositionOnNoChange() {
+        val state = mutableIntStateOf(0)
+        var composeCount = 0
+        var vectorComposeCount = 0
+
+        val composeVector: @Composable @VectorComposable (Float, Float) -> Unit = {
+                viewportWidth, viewportHeight ->
+
+            vectorComposeCount++
+            Path(
+                fill = SolidColor(Color.Blue),
+                pathData = PathData {
+                    lineTo(viewportWidth, 0f)
+                    lineTo(viewportWidth, viewportHeight)
+                    lineTo(0f, viewportHeight)
+                    close()
+                }
+            )
+        }
+
+        rule.setContent {
+            composeCount++
+            // Arbitrary read to force composition here and verify the subcomposition below skips
+            state.value
+            val vectorPainter = rememberVectorPainter(
+                defaultWidth = 10.dp,
+                defaultHeight = 10.dp,
+                autoMirror = false,
+                content = composeVector
+            )
+            Image(
+                vectorPainter,
+                null,
+                modifier = Modifier.size(20.dp)
+            )
+        }
+
+        state.value = 1
+        rule.waitForIdle()
+        assertEquals(2, composeCount) // Arbitrary state read should compose twice
+        assertEquals(1, vectorComposeCount) // Vector is identical so should compose once
+    }
+
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
     @Test
     fun testVectorInvalidation() {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
index 2eed50f..4690c99 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
@@ -19,6 +19,8 @@
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.setValue
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.geometry.Size.Companion.Unspecified
 import androidx.compose.ui.graphics.BlendMode
 import androidx.compose.ui.graphics.Brush
@@ -32,6 +34,7 @@
 import androidx.compose.ui.graphics.StrokeJoin
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.graphics.drawscope.Stroke
+import androidx.compose.ui.graphics.drawscope.scale
 import androidx.compose.ui.graphics.drawscope.withTransform
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.util.fastForEach
@@ -88,18 +91,12 @@
 
 internal class VectorComponent : VNode() {
     val root = GroupComponent().apply {
-        pivotX = 0.0f
-        pivotY = 0.0f
         invalidateListener = {
             doInvalidate()
         }
     }
 
-    var name: String
-        get() = root.name
-        set(value) {
-            root.name = value
-        }
+    var name: String = DefaultGroupName
 
     private fun doInvalidate() {
         isDirty = true
@@ -114,29 +111,22 @@
 
     internal var intrinsicColorFilter: ColorFilter? by mutableStateOf(null)
 
-    var viewportWidth = 0f
-        set(value) {
-            if (field != value) {
-                field = value
-                doInvalidate()
-            }
-        }
-
-    var viewportHeight = 0f
-        set(value) {
-            if (field != value) {
-                field = value
-                doInvalidate()
-            }
-        }
+    internal var viewportSize by mutableStateOf(Size.Zero)
 
     private var previousDrawSize = Unspecified
 
+    private var rootScaleX = 1f
+    private var rootScaleY = 1f
+
     /**
      * Cached lambda used to avoid allocating the lambda on each draw invocation
      */
     private val drawVectorBlock: DrawScope.() -> Unit = {
-        with(root) { draw() }
+        with(root) {
+            scale(rootScaleX, rootScaleY, pivot = Offset.Zero) {
+                draw()
+            }
+        }
     }
 
     fun DrawScope.draw(alpha: Float, colorFilter: ColorFilter?) {
@@ -144,8 +134,8 @@
         // If the content of the vector has changed, or we are drawing a different size
         // update the cached image to ensure we are scaling the vector appropriately
         if (isDirty || previousDrawSize != size) {
-            root.scaleX = size.width / viewportWidth
-            root.scaleY = size.height / viewportHeight
+            rootScaleX = size.width / viewportSize.width
+            rootScaleY = size.height / viewportSize.height
             cacheDrawScope.drawCachedImage(
                 IntSize(ceil(size.width).toInt(), ceil(size.height).toInt()),
                 this@draw,
@@ -166,8 +156,8 @@
         return buildString {
             append("Params: ")
             append("\tname: ").append(name).append("\n")
-            append("\tviewportWidth: ").append(viewportWidth).append("\n")
-            append("\tviewportHeight: ").append(viewportHeight).append("\n")
+            append("\tviewportWidth: ").append(viewportSize.width).append("\n")
+            append("\tviewportHeight: ").append(viewportSize.height).append("\n")
         }
     }
 }
@@ -247,29 +237,23 @@
 
     var trimPathStart = DefaultTrimPathStart
         set(value) {
-            if (field != value) {
-                field = value
-                isTrimPathDirty = true
-                invalidate()
-            }
+            field = value
+            isTrimPathDirty = true
+            invalidate()
         }
 
     var trimPathEnd = DefaultTrimPathEnd
         set(value) {
-            if (field != value) {
-                field = value
-                isTrimPathDirty = true
-                invalidate()
-            }
+            field = value
+            isTrimPathDirty = true
+            invalidate()
         }
 
     var trimPathOffset = DefaultTrimPathOffset
         set(value) {
-            if (field != value) {
-                field = value
-                isTrimPathDirty = true
-                invalidate()
-            }
+            field = value
+            isTrimPathDirty = true
+            invalidate()
         }
 
     private var isPathDirty = true
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
index 648babc7..aafdf94 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
@@ -19,8 +19,6 @@
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.ComposableOpenTarget
 import androidx.compose.runtime.Composition
-import androidx.compose.runtime.CompositionContext
-import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableIntStateOf
 import androidx.compose.runtime.mutableStateOf
@@ -145,7 +143,25 @@
         size = Size(widthPx, heightPx)
         this.autoMirror = autoMirror
         this.intrinsicColorFilter = intrinsicColorFilter
-        RenderVector(name, vpWidth, vpHeight, content)
+        this.viewportSize = Size(vpWidth, vpHeight)
+        this.name = name
+
+        val compositionContext = rememberCompositionContext()
+        this.composition = remember(viewportWidth, viewportHeight, content) {
+            val curComp = this.composition
+            val next = if (curComp == null || curComp.isDisposed) {
+                Composition(
+                    VectorApplier(this.vector.root),
+                    compositionContext
+                )
+            } else {
+                curComp
+            }
+            next.setContent {
+                content(vpWidth, vpHeight)
+            }
+            next
+        }
     }
 }
 
@@ -170,6 +186,15 @@
     )
 
 /**
+ * Functional interface to avoid "PrimitiveInLambda" lint errors
+ */
+internal fun interface ComposeVector {
+
+    @Composable
+    fun Content(viewportWidth: Float, viewportHeight: Float)
+}
+
+/**
  * [Painter] implementation that abstracts the drawing of a Vector graphic.
  * This can be represented by either a [ImageVector] or a programmatic
  * composition of a vector
@@ -189,7 +214,19 @@
             vector.intrinsicColorFilter = value
         }
 
-    private val vector = VectorComponent().apply {
+    internal var viewportSize: Size
+        get() = vector.viewportSize
+        set(value) {
+            vector.viewportSize = value
+        }
+
+    internal var name: String
+        get() = vector.name
+        set(value) {
+            vector.name = value
+        }
+
+    internal val vector = VectorComponent().apply {
         invalidateCallback = {
             if (drawCount == invalidateCount) {
                 invalidateCount++
@@ -197,55 +234,11 @@
         }
     }
 
-    private var composition: Composition? = null
-
-    private fun composeVector(
-        parent: CompositionContext,
-        composable: @Composable (viewportWidth: Float, viewportHeight: Float) -> Unit
-    ): Composition {
-        val existing = composition
-        val next = if (existing == null || existing.isDisposed) {
-            Composition(
-                VectorApplier(vector.root),
-                parent
-            )
-        } else {
-            existing
-        }
-        composition = next
-        next.setContent {
-            composable(vector.viewportWidth, vector.viewportHeight)
-        }
-        return next
-    }
+    internal var composition: Composition? = null
 
     // TODO replace with mutableStateOf(Unit, neverEqualPolicy()) after b/291647821 is addressed
     private var invalidateCount by mutableIntStateOf(0)
 
-    @Composable
-    internal fun RenderVector(
-        name: String,
-        viewportWidth: Float,
-        viewportHeight: Float,
-        content: @Composable (viewportWidth: Float, viewportHeight: Float) -> Unit
-    ) {
-        vector.apply {
-            this.name = name
-            this.viewportWidth = viewportWidth
-            this.viewportHeight = viewportHeight
-        }
-        val composition = composeVector(
-            rememberCompositionContext(),
-            content
-        )
-
-        DisposableEffect(composition) {
-            onDispose {
-                composition.dispose()
-            }
-        }
-    }
-
     private var currentAlpha: Float = 1.0f
     private var currentColorFilter: ColorFilter? = null
 
diff --git a/constraintlayout/constraintlayout-core/lint-baseline.xml b/constraintlayout/constraintlayout-core/lint-baseline.xml
index bff62dd..1c3b73f 100644
--- a/constraintlayout/constraintlayout-core/lint-baseline.xml
+++ b/constraintlayout/constraintlayout-core/lint-baseline.xml
@@ -1,5 +1,5 @@
 
-
+
 
     
         id="PrivateConstructorForUtilityClass"
@@ -74,645 +74,6 @@
     
 
     
-        id="SyntheticAccessor"
-        message="Access to `private` field `mId` of class `Constraint` requires synthetic accessor"
-        errorLine1="            return mId;"
-        errorLine2="                   ~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/dsl/Constraint.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                return mWidth - mHorizontalGap;"
-        errorLine2="                                ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                return mHeight - mVerticalGap;"
-        errorLine2="                                 ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor"
-        errorLine1="                int width = getWidgetWidth(widget, mMax);"
-        errorLine2="                            ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                int gap = mHorizontalGap;"
-        errorLine2="                          ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
-        errorLine1="                int height = getWidgetHeight(widget, mMax);"
-        errorLine2="                             ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor"
-        errorLine1="                int width = getWidgetWidth(widget, mMax);"
-        errorLine2="                            ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
-        errorLine1="                int height = getWidgetHeight(widget, mMax);"
-        errorLine2="                             ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                int gap = mVerticalGap;"
-        errorLine2="                          ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
-        errorLine1="                if (mStartIndex + i >= mDisplayedWidgetsCount) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
-        errorLine1="                ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
-        errorLine1="                if (mStartIndex + index >= mDisplayedWidgetsCount) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
-        errorLine1="                ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                verticalWidget.setVerticalChainStyle(mVerticalStyle);"
-        errorLine2="                                                     ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                    padding += mVerticalGap;"
-        errorLine2="                               ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor"
-        errorLine1="                if (mVerticalAlign == VERTICAL_ALIGN_BASELINE && !verticalWidget.hasBaseline()) {"
-        errorLine2="                    ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
-        errorLine1="                        if (mStartIndex + index >= mDisplayedWidgetsCount) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
-        errorLine1="                        ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
-        errorLine1="                    if (mStartIndex + index >= mDisplayedWidgetsCount) {"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
-        errorLine1="                    ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                        int style = mHorizontalStyle;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                        float bias = isInRtl ? (1 - mHorizontalBias) : mHorizontalBias;"
-        errorLine2="                                                    ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                        float bias = isInRtl ? (1 - mHorizontalBias) : mHorizontalBias;"
-        errorLine2="                                                                       ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFirstHorizontalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                        if (mStartIndex == 0 && mFirstHorizontalStyle != UNKNOWN) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFirstHorizontalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                            style = mFirstHorizontalStyle;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFirstHorizontalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                            bias = isInRtl ? (1 - mFirstHorizontalBias) : mFirstHorizontalBias;"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFirstHorizontalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                            bias = isInRtl ? (1 - mFirstHorizontalBias) : mFirstHorizontalBias;"
-        errorLine2="                                                                          ~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastHorizontalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                        } else if (isLastChain && mLastHorizontalStyle != UNKNOWN) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastHorizontalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                            style = mLastHorizontalStyle;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastHorizontalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                            bias = isInRtl ? (1 - mLastHorizontalBias) : mLastHorizontalBias;"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastHorizontalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                            bias = isInRtl ? (1 - mLastHorizontalBias) : mLastHorizontalBias;"
-        errorLine2="                                                                         ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                        widget.mLeft.connect(previous.mRight, mHorizontalGap);"
-        errorLine2="                                                              ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor"
-        errorLine1="                        if (mVerticalAlign == VERTICAL_ALIGN_BASELINE"
-        errorLine2="                            ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor"
-        errorLine1="                            switch (mVerticalAlign) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                horizontalWidget.setHorizontalChainStyle(mHorizontalStyle);"
-        errorLine2="                                                         ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                    padding += mHorizontalGap;"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
-        errorLine1="                    if (mStartIndex + i >= mDisplayedWidgetsCount) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
-        errorLine1="                    ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
-        errorLine2="                                              ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                        int style = mVerticalStyle;"
-        errorLine2="                                    ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                        float bias = mVerticalBias;"
-        errorLine2="                                     ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFirstVerticalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                        if (mStartIndex == 0 && mFirstVerticalStyle != UNKNOWN) {"
-        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFirstVerticalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                            style = mFirstVerticalStyle;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFirstVerticalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                            bias = mFirstVerticalBias;"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastVerticalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                        } else if (isLastChain && mLastVerticalStyle != UNKNOWN) {"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastVerticalStyle` of class `Flow` requires synthetic accessor"
-        errorLine1="                            style = mLastVerticalStyle;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastVerticalBias` of class `Flow` requires synthetic accessor"
-        errorLine1="                            bias = mLastVerticalBias;"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                        widget.mTop.connect(previous.mBottom, mVerticalGap);"
-        errorLine2="                                                              ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalAlign` of class `Flow` requires synthetic accessor"
-        errorLine1="                            switch (mHorizontalAlign) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalAlign` of class `Flow` requires synthetic accessor"
-        errorLine1="                            switch (mHorizontalAlign) {"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
-        errorLine1="                if (mStartIndex + i >= mDisplayedWidgetsCount) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
-        errorLine1="                ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
-        errorLine1="                if (mStartIndex + i >= mDisplayedWidgetsCount) {"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
-        errorLine1="                ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                    int gap = mHorizontalGap;"
-        errorLine2="                              ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
-        errorLine1="                    int height = getWidgetHeight(widget, mMax);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor"
-        errorLine1="                    int width = getWidgetWidth(widget, mMax);"
-        errorLine2="                                ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
-        errorLine1="                    int height = getWidgetHeight(widget, mMax);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
-        errorLine1="                    int gap = mVerticalGap;"
-        errorLine2="                              ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                        && list.mBiggest != null;"
-        errorLine2="                                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                        && list.mBiggest != null;"
-        errorLine2="                                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                    bottom = next.mBiggest.mTop;"
-        errorLine2="                                  ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                ConstraintAnchor currentBottom = current.mBiggest.mBottom;"
-        errorLine2="                                                         ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                    right = next.mBiggest.mLeft;"
-        errorLine2="                                 ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                ConstraintAnchor currentRight = current.mBiggest.mRight;"
-        errorLine2="                                                        ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                        && list.mBiggest != null;"
-        errorLine2="                                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                        && list.mBiggest != null;"
-        errorLine2="                                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                    bottom = next.mBiggest.mTop;"
-        errorLine2="                                  ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                ConstraintAnchor currentBottom = current.mBiggest.mBottom;"
-        errorLine2="                                                         ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                    right = next.mBiggest.mLeft;"
-        errorLine2="                                 ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
-        errorLine1="                ConstraintAnchor currentRight = current.mBiggest.mRight;"
-        errorLine2="                                                        ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `removeGoal` of class `PriorityGoalRow` requires synthetic accessor"
-        errorLine1="                    removeGoal(mVariable);"
-        errorLine2="                    ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/core/PriorityGoalRow.java"/>
-    
-
-    
         id="KotlinPropertyAccess"
         message="The getter return type (`CLElement`) and setter parameter type (`CLContainer`) getter and setter methods for property `container` should have exactly the same type to allow be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
         errorLine1="    public CLElement getContainer() {"
diff --git a/constraintlayout/constraintlayout/lint-baseline.xml b/constraintlayout/constraintlayout/lint-baseline.xml
index a9b5204..03b1210 100644
--- a/constraintlayout/constraintlayout/lint-baseline.xml
+++ b/constraintlayout/constraintlayout/lint-baseline.xml
@@ -1,5 +1,5 @@
 
-
+
 
     
         id="NewApi"
@@ -1118,3138 +1118,6 @@
     
 
     
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
-        errorLine1="            mMotionLayout.setProgress(0);"
-        errorLine2="            ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `updateItems` of class `Carousel` requires synthetic accessor"
-        errorLine1="            updateItems();"
-        errorLine2="            ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor"
-        errorLine1="            mAdapter.onNewItem(mIndex);"
-        errorLine2="            ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="            mAdapter.onNewItem(mIndex);"
-        errorLine2="                               ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
-        errorLine1="            float velocity = mMotionLayout.getVelocity();"
-        errorLine2="                             ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchUpMode` of class `Carousel` requires synthetic accessor"
-        errorLine1="            if (mTouchUpMode == TOUCH_UP_CARRY_ON && velocity > mVelocityThreshold"
-        errorLine2="                ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mVelocityThreshold` of class `Carousel` requires synthetic accessor"
-        errorLine1="            if (mTouchUpMode == TOUCH_UP_CARRY_ON && velocity > mVelocityThreshold"
-        errorLine2="                                                                ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor"
-        errorLine1="                    && mIndex < mAdapter.count() - 1) {"
-        errorLine2="                                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="                    && mIndex < mAdapter.count() - 1) {"
-        errorLine2="                       ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDampening` of class `Carousel` requires synthetic accessor"
-        errorLine1="                final float v = velocity * mDampening;"
-        errorLine2="                                           ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="                if (mIndex == 0 && mPreviousIndex > mIndex) {"
-        errorLine2="                    ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="                if (mIndex == 0 && mPreviousIndex > mIndex) {"
-        errorLine2="                                                    ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPreviousIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="                if (mIndex == 0 && mPreviousIndex > mIndex) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor"
-        errorLine1="                if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
-        errorLine2="                              ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="                if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
-        errorLine2="                    ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="                if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
-        errorLine2="                                                                       ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPreviousIndex` of class `Carousel` requires synthetic accessor"
-        errorLine1="                if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
-        errorLine1="                mMotionLayout.post(new Runnable() {"
-        errorLine2="                ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
-        errorLine1="                        mMotionLayout.touchAnimateTo(MotionLayout.TOUCH_UP_DECELERATE_AND_COMPLETE,"
-        errorLine2="                        ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="            if (mMetrics != null) {"
-        errorLine2="                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="                mMetrics.mNumberOfMeasures++;"
-        errorLine2="                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOptimizationLevel` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="            if (container != null && Optimizer.enabled(mOptimizationLevel,"
-        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOptimizationLevel` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="                boolean optimizeDirect = Optimizer.enabled(mOptimizationLevel,"
-        errorLine2="                                                           ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="            if (mMetrics != null) {"
-        errorLine2="                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="                mMetrics.measuresWidgetsDuration += (endMeasure - startMeasure);"
-        errorLine2="                ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintHelpers` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="            final int helperCount = mLayout.mConstraintHelpers.size();"
-        errorLine2="                                            ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintHelpers` of class `ConstraintLayout` requires synthetic accessor"
-        errorLine1="                    ConstraintHelper helper = mLayout.mConstraintHelpers.get(i);"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `fillFrom` of class `Constraint` requires synthetic accessor"
-        errorLine1="                constraint.fillFrom(id, param);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        leftToLeft = lookupID(a, attr, leftToLeft);"
-        errorLine2="                                     ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        leftToRight = lookupID(a, attr, leftToRight);"
-        errorLine2="                                      ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        rightToLeft = lookupID(a, attr, rightToLeft);"
-        errorLine2="                                      ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        rightToRight = lookupID(a, attr, rightToRight);"
-        errorLine2="                                       ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        topToTop = lookupID(a, attr, topToTop);"
-        errorLine2="                                   ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        topToBottom = lookupID(a, attr, topToBottom);"
-        errorLine2="                                      ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        bottomToTop = lookupID(a, attr, bottomToTop);"
-        errorLine2="                                      ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        bottomToBottom = lookupID(a, attr, bottomToBottom);"
-        errorLine2="                                         ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        baselineToBaseline = lookupID(a, attr, baselineToBaseline);"
-        errorLine2="                                             ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        baselineToTop = lookupID(a, attr, baselineToTop);"
-        errorLine2="                                        ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        baselineToBottom = lookupID(a, attr, baselineToBottom);"
-        errorLine2="                                           ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        startToEnd = lookupID(a, attr, startToEnd);"
-        errorLine2="                                     ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        startToStart = lookupID(a, attr, startToStart);"
-        errorLine2="                                       ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        endToStart = lookupID(a, attr, endToStart);"
-        errorLine2="                                     ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        endToEnd = lookupID(a, attr, endToEnd);"
-        errorLine2="                                   ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        circleConstraint = lookupID(a, attr, circleConstraint);"
-        errorLine2="                                           ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        transformPivotTarget = lookupID(a, attr, transformPivotTarget);"
-        errorLine2="                                               ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                        mAnimateRelativeTo = lookupID(a, attr, mAnimateRelativeTo);"
-        errorLine2="                                             ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                    setDeltaValue(c, mTypeInt[i], mValueInt[i]);"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                    setDeltaValue(c, mTypeFloat[i], mValueFloat[i]);"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                    setDeltaValue(c, mTypeString[i], mValueString[i]);"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                    setDeltaValue(c, mTypeBoolean[i], mValueBoolean[i]);"
-        errorLine2="                    ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `fillFrom` of class `Constraint` requires synthetic accessor"
-        errorLine1="            constraint.fillFrom(id, param);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `fillFromConstraints` of class `Constraint` requires synthetic accessor"
-        errorLine1="                constraint.fillFromConstraints(helper, id, param);"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `fillFromConstraints` of class `Constraint` requires synthetic accessor"
-        errorLine1="            constraint.fillFromConstraints(id, param);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setIntValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="        get(viewId).setIntValue(attributeName, value);"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setColorValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="        get(viewId).setColorValue(attributeName, value);"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="        get(viewId).setFloatValue(attributeName, value);"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setStringValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="        get(viewId).setStringValue(attributeName, value);"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="                set.setFloatValue(attr[0], Integer.decode(attr[1]));"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setColorValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="                set.setColorValue(attr[0], Color.parseColor(attr[1]));"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="                set.setFloatValue(attr[0], Float.parseFloat(attr[1]));"
-        errorLine2="                ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setStringValue` of class `Constraint` requires synthetic accessor"
-        errorLine1="            set.setStringValue(attr[0], attr[1]);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="            for (Integer id : mConstraints.keySet()) {"
-        errorLine2="                              ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                Constraint c = mConstraints.get(id);"
-        errorLine2="                               ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="            for (Integer id : mConstraints.keySet()) {"
-        errorLine2="                              ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
-        errorLine1="                Constraint c = mConstraints.get(id);"
-        errorLine2="                               ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRoundPercent` of class `ImageFilterButton` requires synthetic accessor"
-        errorLine1="                            float r = Math.min(w, h) * mRoundPercent / 2;"
-        errorLine2="                                                       ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterButton.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRound` of class `ImageFilterButton` requires synthetic accessor"
-        errorLine1="                            outline.setRoundRect(0, 0, w, h, mRound);"
-        errorLine2="                                                             ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterButton.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRoundPercent` of class `ImageFilterView` requires synthetic accessor"
-        errorLine1="                            float r = Math.min(w, h) * mRoundPercent / 2;"
-        errorLine2="                                                       ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterView.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRound` of class `ImageFilterView` requires synthetic accessor"
-        errorLine1="                            outline.setRoundRect(0, 0, w, h, mRound);"
-        errorLine2="                                                             ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterView.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAlpha` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mAlpha = a.getFloat(attr, c.mAlpha);"
-        errorLine2="                          ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAlpha` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mAlpha = a.getFloat(attr, c.mAlpha);"
-        errorLine2="                                                      ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mElevation` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mElevation = a.getDimension(attr, c.mElevation);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mElevation` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mElevation = a.getDimension(attr, c.mElevation);"
-        errorLine2="                                                              ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotation` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mRotation = a.getFloat(attr, c.mRotation);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotation` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mRotation = a.getFloat(attr, c.mRotation);"
-        errorLine2="                                                         ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurveFit` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurveFit` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
-        errorLine2="                                                           ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mScaleX = a.getFloat(attr, c.mScaleX);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mScaleX = a.getFloat(attr, c.mScaleX);"
-        errorLine2="                                                       ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mRotationX = a.getFloat(attr, c.mRotationX);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mRotationX = a.getFloat(attr, c.mRotationX);"
-        errorLine2="                                                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mRotationY = a.getFloat(attr, c.mRotationY);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mRotationY = a.getFloat(attr, c.mRotationY);"
-        errorLine2="                                                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPivotX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mPivotX = a.getDimension(attr, c.mPivotX);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPivotX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mPivotX = a.getDimension(attr, c.mPivotX);"
-        errorLine2="                                                           ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPivotY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mPivotY = a.getDimension(attr, c.mPivotY);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPivotY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mPivotY = a.getDimension(attr, c.mPivotY);"
-        errorLine2="                                                           ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionEasing` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mTransitionEasing = a.getString(attr);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mScaleY = a.getFloat(attr, c.mScaleY);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mScaleY = a.getFloat(attr, c.mScaleY);"
-        errorLine2="                                                       ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionPathRotate` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionPathRotate` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationX` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationY` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationZ` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                            c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
-        errorLine2="                              ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationZ` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                            c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mProgress` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mProgress = a.getFloat(attr, c.mProgress);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mProgress` of class `KeyAttributes` requires synthetic accessor"
-        errorLine1="                        c.mProgress = a.getFloat(attr, c.mProgress);"
-        errorLine2="                                                         ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `read` of class `Loader` requires synthetic accessor"
-        errorLine1="        Loader.read(this, a);"
-        errorLine2="        ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionEasing` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mTransitionEasing = a.getString(attr);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurveFit` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurveFit` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
-        errorLine2="                                                           ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCustomWaveShape` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mCustomWaveShape = a.getString(attr);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveShape = Oscillator.CUSTOM;"
-        errorLine2="                              ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveShape = a.getInt(attr, c.mWaveShape);"
-        errorLine2="                              ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveShape = a.getInt(attr, c.mWaveShape);"
-        errorLine2="                                                            ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWavePeriod` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
-        errorLine2="                          ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWavePeriod` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
-        errorLine2="                                                           ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
-        errorLine2="                              ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
-        errorLine2="                                                                   ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
-        errorLine2="                              ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
-        errorLine2="                                                               ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveVariesBy` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mWaveVariesBy = a.getInt(attr, c.mWaveVariesBy);"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveVariesBy` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mWaveVariesBy = a.getInt(attr, c.mWaveVariesBy);"
-        errorLine2="                                                           ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAlpha` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mAlpha = a.getFloat(attr, c.mAlpha);"
-        errorLine2="                          ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAlpha` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mAlpha = a.getFloat(attr, c.mAlpha);"
-        errorLine2="                                                      ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mElevation` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mElevation = a.getDimension(attr, c.mElevation);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mElevation` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mElevation = a.getDimension(attr, c.mElevation);"
-        errorLine2="                                                              ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotation` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotation = a.getFloat(attr, c.mRotation);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotation` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotation = a.getFloat(attr, c.mRotation);"
-        errorLine2="                                                         ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationX` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationX = a.getFloat(attr, c.mRotationX);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationX` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationX = a.getFloat(attr, c.mRotationX);"
-        errorLine2="                                                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationY` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationY = a.getFloat(attr, c.mRotationY);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationY` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationY = a.getFloat(attr, c.mRotationY);"
-        errorLine2="                                                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionPathRotate` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionPathRotate` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleX` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleX = a.getFloat(attr, c.mScaleX);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleX` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleX = a.getFloat(attr, c.mScaleX);"
-        errorLine2="                                                       ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleY` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleY = a.getFloat(attr, c.mScaleY);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleY` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleY = a.getFloat(attr, c.mScaleY);"
-        errorLine2="                                                       ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationX` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationX` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationY` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationY` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationZ` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
-        errorLine2="                              ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationZ` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                            c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mProgress` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mProgress = a.getFloat(attr, c.mProgress);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mProgress` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mProgress = a.getFloat(attr, c.mProgress);"
-        errorLine2="                                                         ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWavePhase` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mWavePhase = a.getFloat(attr, c.mWavePhase) / 360;"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWavePhase` of class `KeyCycle` requires synthetic accessor"
-        errorLine1="                        c.mWavePhase = a.getFloat(attr, c.mWavePhase) / 360;"
-        errorLine2="                                                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `read` of class `Loader` requires synthetic accessor"
-        errorLine1="        Loader.read(this, a);"
-        errorLine2="        ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyPosition.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAlpha` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mAlpha = a.getFloat(attr, c.mAlpha);"
-        errorLine2="                          ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAlpha` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mAlpha = a.getFloat(attr, c.mAlpha);"
-        errorLine2="                                                      ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mElevation` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mElevation = a.getDimension(attr, c.mElevation);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mElevation` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mElevation = a.getDimension(attr, c.mElevation);"
-        errorLine2="                                                              ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotation` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotation = a.getFloat(attr, c.mRotation);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotation` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotation = a.getFloat(attr, c.mRotation);"
-        errorLine2="                                                         ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurveFit` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCurveFit` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
-        errorLine2="                                                           ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCustomWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mCustomWaveShape = a.getString(attr);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveShape = Oscillator.CUSTOM;"
-        errorLine2="                              ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveShape = a.getInt(attr, c.mWaveShape);"
-        errorLine2="                              ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveShape = a.getInt(attr, c.mWaveShape);"
-        errorLine2="                                                            ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWavePeriod` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
-        errorLine2="                          ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWavePeriod` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
-        errorLine2="                                                           ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
-        errorLine2="                              ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
-        errorLine2="                                                                   ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
-        errorLine2="                              ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
-        errorLine2="                                                               ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleX` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleX = a.getFloat(attr, c.mScaleX);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleX` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleX = a.getFloat(attr, c.mScaleX);"
-        errorLine2="                                                       ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationX` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationX = a.getFloat(attr, c.mRotationX);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationX` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationX = a.getFloat(attr, c.mRotationX);"
-        errorLine2="                                                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationY` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationY = a.getFloat(attr, c.mRotationY);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRotationY` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mRotationY = a.getFloat(attr, c.mRotationY);"
-        errorLine2="                                                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionEasing` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mTransitionEasing = a.getString(attr);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleY` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleY = a.getFloat(attr, c.mScaleY);"
-        errorLine2="                          ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mScaleY` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mScaleY = a.getFloat(attr, c.mScaleY);"
-        errorLine2="                                                       ~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionPathRotate` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTransitionPathRotate` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationX` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationX` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationY` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
-        errorLine2="                          ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationY` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
-        errorLine2="                                                                 ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationZ` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
-        errorLine2="                              ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTranslationZ` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                            c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mProgress` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mProgress = a.getFloat(attr, c.mProgress);"
-        errorLine2="                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mProgress` of class `KeyTimeCycle` requires synthetic accessor"
-        errorLine1="                        c.mProgress = a.getFloat(attr, c.mProgress);"
-        errorLine2="                                                         ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mFireThreshold` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mFireThreshold = (c.mFramePosition + .5f) / 100f;"
-        errorLine2="                          ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mNegativeCross` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mNegativeCross = a.getString(attr);"
-        errorLine2="                          ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPositiveCross` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mPositiveCross = a.getString(attr);"
-        errorLine2="                          ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mCross` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mCross = a.getString(attr);"
-        errorLine2="                          ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTriggerID` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mTriggerID = a.getResourceId(attr, c.mTriggerID);"
-        errorLine2="                          ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTriggerID` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mTriggerID = a.getResourceId(attr, c.mTriggerID);"
-        errorLine2="                                                               ~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTriggerCollisionId` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mTriggerCollisionId = a.getResourceId(attr, c.mTriggerCollisionId);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTriggerCollisionId` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mTriggerCollisionId = a.getResourceId(attr, c.mTriggerCollisionId);"
-        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPostLayout` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mPostLayout = a.getBoolean(attr, c.mPostLayout);"
-        errorLine2="                          ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPostLayout` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mPostLayout = a.getBoolean(attr, c.mPostLayout);"
-        errorLine2="                                                             ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTriggerReceiver` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mTriggerReceiver = a.getResourceId(attr, c.mTriggerReceiver);"
-        errorLine2="                          ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTriggerReceiver` of class `KeyTrigger` requires synthetic accessor"
-        errorLine1="                        c.mTriggerReceiver = a.getResourceId(attr, c.mTriggerReceiver);"
-        errorLine2="                                                                     ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRoundPercent` of class `MotionButton` requires synthetic accessor"
-        errorLine1="                            float r = Math.min(w, h) * mRoundPercent / 2;"
-        errorLine2="                                                       ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/MotionButton.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRound` of class `MotionButton` requires synthetic accessor"
-        errorLine1="                            outline.setRoundRect(0, 0, w, h, mRound);"
-        errorLine2="                                                             ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/MotionButton.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRoundPercent` of class `MotionLabel` requires synthetic accessor"
-        errorLine1="                            float r = Math.min(w, h) * mRoundPercent / 2;"
-        errorLine2="                                                       ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/MotionLabel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mRound` of class `MotionLabel` requires synthetic accessor"
-        errorLine1="                            outline.setRoundRect(0, 0, w, h, mRound);"
-        errorLine2="                                                             ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/utils/widget/MotionLabel.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mStateCache` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                                        mStateCache.apply();"
-        errorLine2="                                        ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mEndState` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="            mEndState = MotionLayout.this.mEndState;"
-        errorLine2="                                          ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mBeginState` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="            mStartState = MotionLayout.this.mBeginState;"
-        errorLine2="                                            ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mInRotation` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                mInRotation = false;"
-        errorLine2="                ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastHeightMeasureSpec` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="            measure(mLastWidthMeasureSpec, mLastHeightMeasureSpec);"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLastWidthMeasureSpec` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="            measure(mLastWidthMeasureSpec, mLastHeightMeasureSpec);"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `setupMotionViews` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="            setupMotionViews();"
-        errorLine2="            ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `toRect` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                        motionController.setStartState(toRect(startWidget), mStart,"
-        errorLine2="                                                       ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mInRotation` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                    if (mInRotation) {"
-        errorLine2="                        ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPreRotateHeight` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                                mPreRotateWidth, mPreRotateHeight);"
-        errorLine2="                                                 ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPreRotateWidth` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                                mPreRotateWidth, mPreRotateHeight);"
-        errorLine2="                                ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `toRect` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                        motionController.setEndState(toRect(endWidget), mEnd,"
-        errorLine2="                                                     ~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mEndState` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                String str = getContext().getResources().getResourceName(mEndState)"
-        errorLine2="                                                                         ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mStateCache` of class `MotionLayout` requires synthetic accessor"
-        errorLine1="                        mStateCache.apply();"
-        errorLine2="                        ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (mCurrentTransition.mConstraintSetEnd == endId"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="                    && mCurrentTransition.mConstraintSetStart == beginId) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="            if ((transition.mConstraintSetEnd == end"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="                    && transition.mConstraintSetStart == start)"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                    || (transition.mConstraintSetEnd == endId"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="                    && transition.mConstraintSetStart == beginId)) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                                     ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                    mCurrentTransition.mTouchResponse.setRTL(mRtl);"
-        errorLine2="                                       ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mConstraintSetEnd == endId) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="        t.mConstraintSetStart = start;"
-        errorLine2="          ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="        t.mConstraintSetEnd = end;"
-        errorLine2="          ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mId` of class `Transition` requires synthetic accessor"
-        errorLine1="        int id = transition.mId;"
-        errorLine2="                            ~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mId` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (mTransitionList.get(index).mId == id) {"
-        errorLine2="                                           ~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            mCurrentTransition.mTouchResponse.setRTL(mRtl);"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mConstraintSetStart == stateId"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                    || transition.mConstraintSetEnd == stateId) {"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mOnClicks.size() > 0) {"
-        errorLine2="                           ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="                for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
-        errorLine2="                                                                       ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mOnClicks.size() > 0) {"
-        errorLine2="                           ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="                for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
-        errorLine2="                                                                       ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mOnClicks.size() > 0) {"
-        errorLine2="                           ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="                for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
-        errorLine2="                                                                       ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mOnClicks.size() > 0) {"
-        errorLine2="                           ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
-        errorLine1="                for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
-        errorLine2="                                                                       ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDisable` of class `Transition` requires synthetic accessor"
-        errorLine1="                if (transition.mDisable) {"
-        errorLine2="                               ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                if (transition.mTouchResponse != null) {"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                    transition.mTouchResponse.setRTL(mRtl);"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                    RectF region = transition.mTouchResponse.getTouchRegion(mMotionLayout, cache);"
-        errorLine2="                                              ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                    region = transition.mTouchResponse.getLimitBoundsTo(mMotionLayout, cache);"
-        errorLine2="                                        ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                    float val = transition.mTouchResponse.dot(dx, dy);"
-        errorLine2="                                           ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                    if (transition.mTouchResponse.mIsRotateMode && lastTouchDown != null) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                                - transition.mTouchResponse.mRotateCenterX;"
-        errorLine2="                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                                - transition.mTouchResponse.mRotateCenterY;"
-        errorLine2="                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                    if (transition.mConstraintSetEnd == currentState) { // flip because backwards"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mId` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mId == id) {"
-        errorLine2="                           ~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mAutoTransition == Transition.AUTO_NONE) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (currentState == transition.mConstraintSetStart && ("
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
-        errorLine1="                    transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_END"
-        errorLine2="                               ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
-        errorLine1="                            || transition.mAutoTransition == Transition.AUTO_JUMP_TO_END)) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
-        errorLine1="                if (transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_END) {"
-        errorLine2="                               ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (currentState == transition.mConstraintSetEnd && ("
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
-        errorLine1="                    transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_START"
-        errorLine2="                               ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
-        errorLine1="                            || transition.mAutoTransition == Transition.AUTO_JUMP_TO_START)) {"
-        errorLine2="                                          ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
-        errorLine1="                if (transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_START) {"
-        errorLine2="                               ~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            mCurrentTransition.mTouchResponse.setRTL(mRtl);"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `MotionScene` requires synthetic accessor"
-        errorLine1="                    : new TouchResponse(mMotionScene.mMotionLayout, onSwipe);"
-        errorLine2="                                                     ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="                int start = transition.mConstraintSetStart;"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                int end = transition.mConstraintSetEnd;"
-        errorLine2="                                     ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                int dest = mTransition.mConstraintSetEnd;"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="                int from = mTransition.mConstraintSetStart;"
-        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `MotionScene` requires synthetic accessor"
-        errorLine1="                MotionLayout tl = mTransition.mMotionScene.mMotionLayout;"
-        errorLine2="                                                           ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
-        errorLine1="                MotionLayout tl = mTransition.mMotionScene.mMotionLayout;"
-        errorLine2="                                              ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="                if (mTransition.mConstraintSetStart == UNSET) {"
-        errorLine2="                                ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                        tl.transitionToState(mTransition.mConstraintSetEnd);"
-        errorLine2="                                                         ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
-        errorLine1="                    Transition t = new Transition(mTransition.mMotionScene, mTransition);"
-        errorLine2="                                                              ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="                    t.mConstraintSetStart = currentState;"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                    t.mConstraintSetEnd = mTransition.mConstraintSetEnd;"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                    t.mConstraintSetEnd = mTransition.mConstraintSetEnd;"
-        errorLine2="                                                      ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
-        errorLine1="                Transition current = mTransition.mMotionScene.mCurrentTransition;"
-        errorLine2="                                                 ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
-        errorLine1="                    if (mTransition.mMotionScene.mCurrentTransition != mTransition) {"
-        errorLine2="                                    ~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor"
-        errorLine1="            mDuration = motionScene.mDefaultDuration;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor"
-        errorLine1="            mDuration = motionScene.mDefaultDuration;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLayoutDuringTransition` of class `MotionScene` requires synthetic accessor"
-        errorLine1="            mLayoutDuringTransition = motionScene.mLayoutDuringTransition;"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor"
-        errorLine1="            mDuration = motionScene.mDefaultDuration;"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mLayoutDuringTransition` of class `MotionScene` requires synthetic accessor"
-        errorLine1="            mLayoutDuringTransition = motionScene.mLayoutDuringTransition;"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetMap` of class `MotionScene` requires synthetic accessor"
-        errorLine1="                        motionScene.mConstraintSetMap.append(mConstraintSetEnd, cSet);"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `parseInclude` of class `MotionScene` requires synthetic accessor"
-        errorLine1="                        int id = motionScene.parseInclude(context, mConstraintSetEnd);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetMap` of class `MotionScene` requires synthetic accessor"
-        errorLine1="                        motionScene.mConstraintSetMap.append(mConstraintSetStart, cSet);"
-        errorLine2="                                    ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `parseInclude` of class `MotionScene` requires synthetic accessor"
-        errorLine1="                        int id = motionScene.parseInclude(context, mConstraintSetStart);"
-        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIsAbstract` of class `Transition` requires synthetic accessor"
-        errorLine1="                                if (mCurrentTransition == null && !transition.mIsAbstract) {"
-        errorLine2="                                                                              ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                                            && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                                  ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                                        mCurrentTransition.mTouchResponse.setRTL(mRtl);"
-        errorLine2="                                                           ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mIsAbstract` of class `Transition` requires synthetic accessor"
-        errorLine1="                                if (transition.mIsAbstract) { // global transition only one for now"
-        errorLine2="                                               ~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="                                    if (transition.mConstraintSetEnd == UNSET) {"
-        errorLine2="                                                   ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                                    transition.mTouchResponse ="
-        errorLine2="                                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
-        errorLine1="                                    transition.mKeyFramesList.add(keyFrames);"
-        errorLine2="                                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
-        errorLine1="                for (KeyFrames keyFrames : mDefaultTransition.mKeyFramesList) {"
-        errorLine2="                                                              ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
-        errorLine1="        for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
-        errorLine1="        for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mConstraintSetStart == stateId) {"
-        errorLine2="                           ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
-        errorLine1="        for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
-        errorLine1="        for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
-        errorLine2="                                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            if (transition.mTouchResponse != null) {"
-        errorLine2="                           ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        return mCurrentTransition != null && mCurrentTransition.mTouchResponse != null;"
-        errorLine2="                                                                ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                    if (mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                           ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                        region = mCurrentTransition.mTouchResponse"
-        errorLine2="                                                    ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                        region = mCurrentTransition.mTouchResponse"
-        errorLine2="                                                    ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                        mCurrentTransition.mTouchResponse.setDown(mLastTouchX, mLastTouchY);"
-        errorLine2="                                           ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                                .mTouchResponse.getTouchRegion(mMotionLayout, cache);"
-        errorLine2="                                 ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="                        mCurrentTransition.mTouchResponse.setUpTouchEvent(mLastTouchX, mLastTouchY);"
-        errorLine2="                                           ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            mCurrentTransition.mTouchResponse.processTouchEvent(event,"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            mCurrentTransition.mTouchResponse.scrollMove(dx, dy);"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            mCurrentTransition.mTouchResponse.scrollUp(dx, dy);"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getProgressDirection(dx, dy);"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
-        errorLine1="        return mCurrentTransition.mConstraintSetStart;"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
-        errorLine1="        return mCurrentTransition.mConstraintSetEnd;"
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultInterpolator` of class `Transition` requires synthetic accessor"
-        errorLine1="        switch (mCurrentTransition.mDefaultInterpolator) {"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultInterpolatorString` of class `Transition` requires synthetic accessor"
-        errorLine1="                        .getInterpolator(mCurrentTransition.mDefaultInterpolatorString);"
-        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDefaultInterpolatorID` of class `Transition` requires synthetic accessor"
-        errorLine1="                        mCurrentTransition.mDefaultInterpolatorID);"
-        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mDuration` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mDuration;"
-        errorLine2="                                      ~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mPathMotionArc` of class `Transition` requires synthetic accessor"
-        errorLine1="        return (mCurrentTransition != null) ? mCurrentTransition.mPathMotionArc : UNSET;"
-        errorLine2="                                                                 ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mStagger` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mStagger;"
-        errorLine2="                                      ~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getMaxAcceleration();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getMaxVelocity();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getSpringStiffness();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getSpringMass();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getSpringDamping();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getSpringStopThreshold();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getSpringBoundary();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getAutoCompleteMode();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            mCurrentTransition.mTouchResponse.setupTouch();"
-        errorLine2="                               ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="        if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
-        errorLine2="                                                             ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
-        errorLine1="            return mCurrentTransition.mTouchResponse.getMoveWhenScrollAtTop();"
-        errorLine2="                                      ~~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                int count = mMotionLayout.getChildCount();"
-        errorLine2="                                            ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                    View view = mMotionLayout.getChildAt(i);"
-        errorLine2="                                                ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                        int currentId = mMotionLayout.getCurrentState();"
-        errorLine2="                                                        ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                                mMotionLayout.getConstraintSet(currentId);"
-        errorLine2="                                                ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                                ViewTransitionController.this, mMotionLayout,"
-        errorLine2="                                                                               ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                int count = mMotionLayout.getChildCount();"
-        errorLine2="                                            ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                    View view = mMotionLayout.getChildAt(i);"
-        errorLine2="                                                ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                        int currentId = mMotionLayout.getCurrentState();"
-        errorLine2="                                                        ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                                mMotionLayout.getConstraintSet(currentId);"
-        errorLine2="                                                ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
-        errorLine1="                                                ViewTransitionController.this, mMotionLayout,"
-        errorLine2="                                                                               ~~~~~~~~~~~~~">
-        
-            file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
-    
-
-    
         id="KotlinPropertyAccess"
         message="The getter return type (`String[]`) and setter parameter type (`String`) getter and setter methods for property `stateLabels` should have exactly the same type to allow be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes"
         errorLine1="    public String[] getStateLabels() {"
diff --git a/core/core-performance-play-services/api/current.txt b/core/core-performance-play-services/api/current.txt
index dbd1b15..7e46ef7 100644
--- a/core/core-performance-play-services/api/current.txt
+++ b/core/core-performance-play-services/api/current.txt
@@ -7,17 +7,5 @@
     property public int mediaPerformanceClass;
   }
 
-  @Deprecated public final class PlayServicesDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier {
-    ctor @Deprecated public PlayServicesDevicePerformanceSupplier();
-    method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context);
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-    field @Deprecated public static final androidx.core.performance.play.services.PlayServicesDevicePerformanceSupplier.Companion Companion;
-  }
-
-  @Deprecated public static final class PlayServicesDevicePerformanceSupplier.Companion {
-    method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context);
-  }
-
 }
 
diff --git a/core/core-performance-play-services/api/restricted_current.txt b/core/core-performance-play-services/api/restricted_current.txt
index dbd1b15..7e46ef7 100644
--- a/core/core-performance-play-services/api/restricted_current.txt
+++ b/core/core-performance-play-services/api/restricted_current.txt
@@ -7,17 +7,5 @@
     property public int mediaPerformanceClass;
   }
 
-  @Deprecated public final class PlayServicesDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier {
-    ctor @Deprecated public PlayServicesDevicePerformanceSupplier();
-    method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context);
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-    field @Deprecated public static final androidx.core.performance.play.services.PlayServicesDevicePerformanceSupplier.Companion Companion;
-  }
-
-  @Deprecated public static final class PlayServicesDevicePerformanceSupplier.Companion {
-    method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context);
-  }
-
 }
 
diff --git a/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplier.kt b/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplier.kt
deleted file mode 100644
index e0da88c..0000000
--- a/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplier.kt
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2023 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.
- */
-
-@file:Suppress("DEPRECATION")
-
-package androidx.core.performance.play.services
-
-import android.content.Context
-import androidx.core.performance.DevicePerformance
-import androidx.core.performance.DevicePerformanceSupplier
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.flow
-
-/** Uses Google Play Services to supply media performance class data. */
-@Deprecated(
-    message = "Replaced by DevicePerformance related implementations.",
-    level = DeprecationLevel.WARNING
-)
-class PlayServicesDevicePerformanceSupplier : DevicePerformanceSupplier {
-
-    companion object {
-        /**
-         * Create DevicePerformance from the context backed by StaticDevicePerformanceSupplier.
-         *
-         * This should be done in [android.app.Application.onCreate].
-         */
-        @JvmStatic
-        fun createDevicePerformance(
-            // Real implementations will require a context
-            @Suppress("UNUSED_PARAMETER") context: Context
-        ): DevicePerformance =
-            DevicePerformance.create(PlayServicesDevicePerformanceSupplier())
-    }
-
-    override val mediaPerformanceClassFlow: Flow = flow {
-        emit(0)
-        // TODO(281079628): implement
-    }
-}
diff --git a/core/core-performance-play-services/src/test/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplierTest.kt b/core/core-performance-play-services/src/test/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplierTest.kt
deleted file mode 100644
index 4646c9c..0000000
--- a/core/core-performance-play-services/src/test/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplierTest.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2023 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.core.performance.play.services
-
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-
-/** Unit tests for [PlayServicesDevicePerformanceSupplier]. */
-class PlayServicesDevicePerformanceSupplierTest {
-
-    @Test
-    fun mediaPerformanceClassFlow_30() {
-        // TODO: b/289279260 - Correctly handle threads in tests without leaking.
-        assertThat(true).isEqualTo(true)
-    }
-}
diff --git a/core/core-performance-testing/api/current.txt b/core/core-performance-testing/api/current.txt
index f6e4c8e..6e565c7c 100644
--- a/core/core-performance-testing/api/current.txt
+++ b/core/core-performance-testing/api/current.txt
@@ -7,11 +7,5 @@
     property public int mediaPerformanceClass;
   }
 
-  @Deprecated public final class FakeDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier {
-    ctor @Deprecated public FakeDevicePerformanceSupplier(int mediaPerformanceClass);
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-  }
-
 }
 
diff --git a/core/core-performance-testing/api/restricted_current.txt b/core/core-performance-testing/api/restricted_current.txt
index f6e4c8e..6e565c7c 100644
--- a/core/core-performance-testing/api/restricted_current.txt
+++ b/core/core-performance-testing/api/restricted_current.txt
@@ -7,11 +7,5 @@
     property public int mediaPerformanceClass;
   }
 
-  @Deprecated public final class FakeDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier {
-    ctor @Deprecated public FakeDevicePerformanceSupplier(int mediaPerformanceClass);
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-  }
-
 }
 
diff --git a/core/core-performance-testing/src/main/java/androidx/core/performance/testing/FakeDevicePerformanceSupplier.kt b/core/core-performance-testing/src/main/java/androidx/core/performance/testing/FakeDevicePerformanceSupplier.kt
deleted file mode 100644
index cb5baab..0000000
--- a/core/core-performance-testing/src/main/java/androidx/core/performance/testing/FakeDevicePerformanceSupplier.kt
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2023 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.
- */
-
-@file:Suppress("DEPRECATION")
-
-package androidx.core.performance.testing
-
-import androidx.core.performance.DevicePerformanceSupplier
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.flow
-
-/**
- * A DevicePerformanceSupplier that immediately emits the `mediaPerformanceClass` provided and
- * completes the flow.
- *
- * @param mediaPerformanceClass The media performance class value to emit.
- */
-@Deprecated(
-    message = "Replaced by DevicePerformance related implementations.",
-    level = DeprecationLevel.WARNING
-)
-class FakeDevicePerformanceSupplier(private val mediaPerformanceClass: Int) :
-    DevicePerformanceSupplier {
-    override val mediaPerformanceClassFlow: Flow = flow {
-        emit(mediaPerformanceClass)
-    }
-}
diff --git a/core/core-performance-testing/src/test/java/androidx/core/performance/testing/FakeDevicePerformanceSupplierTest.kt b/core/core-performance-testing/src/test/java/androidx/core/performance/testing/FakeDevicePerformanceSupplierTest.kt
deleted file mode 100644
index 76787d6..0000000
--- a/core/core-performance-testing/src/test/java/androidx/core/performance/testing/FakeDevicePerformanceSupplierTest.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2023 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.core.performance.testing
-
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-
-/** Unit tests for [FakeDevicePerformanceSupplier]. */
-class FakeDevicePerformanceSupplierTest {
-
-    @Test
-    fun mediaPerformanceClassFlow_30() {
-        // TODO: b/289279260 - Correctly handle threads in tests without leaking.
-        assertThat(true).isEqualTo(true)
-    }
-}
diff --git a/core/core-performance/api/current.txt b/core/core-performance/api/current.txt
index bb15bcb..05ff76d2 100644
--- a/core/core-performance/api/current.txt
+++ b/core/core-performance/api/current.txt
@@ -7,50 +7,9 @@
     property public int mediaPerformanceClass;
   }
 
-  public final class DefaultDevicePerformanceRetriever implements androidx.core.performance.DevicePerformanceRetriever {
-    ctor public DefaultDevicePerformanceRetriever();
-    method public int getPerformanceClass();
-  }
-
   @kotlin.jvm.JvmDefaultWithCompatibility public interface DevicePerformance {
-    method @Deprecated public static androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier);
     method public int getMediaPerformanceClass();
     property public abstract int mediaPerformanceClass;
-    field @Deprecated public static final androidx.core.performance.DevicePerformance.Companion Companion;
-  }
-
-  @Deprecated public static final class DevicePerformance.Companion {
-    method @Deprecated public androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier);
-  }
-
-  public interface DevicePerformanceRetriever {
-    method public int getPerformanceClass();
-  }
-
-  @Deprecated public interface DevicePerformanceSupplier {
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public abstract kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-  }
-
-  public interface MediaPerformance {
-    method public static int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever);
-    field public static final androidx.core.performance.MediaPerformance.Companion Companion;
-  }
-
-  public static final class MediaPerformance.Companion {
-    method public int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever);
-  }
-
-  @Deprecated public final class StaticDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier {
-    ctor @Deprecated public StaticDevicePerformanceSupplier();
-    method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance();
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-    field @Deprecated public static final androidx.core.performance.StaticDevicePerformanceSupplier.Companion Companion;
-  }
-
-  @Deprecated public static final class StaticDevicePerformanceSupplier.Companion {
-    method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance();
   }
 
 }
diff --git a/core/core-performance/api/restricted_current.txt b/core/core-performance/api/restricted_current.txt
index bb15bcb..05ff76d2 100644
--- a/core/core-performance/api/restricted_current.txt
+++ b/core/core-performance/api/restricted_current.txt
@@ -7,50 +7,9 @@
     property public int mediaPerformanceClass;
   }
 
-  public final class DefaultDevicePerformanceRetriever implements androidx.core.performance.DevicePerformanceRetriever {
-    ctor public DefaultDevicePerformanceRetriever();
-    method public int getPerformanceClass();
-  }
-
   @kotlin.jvm.JvmDefaultWithCompatibility public interface DevicePerformance {
-    method @Deprecated public static androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier);
     method public int getMediaPerformanceClass();
     property public abstract int mediaPerformanceClass;
-    field @Deprecated public static final androidx.core.performance.DevicePerformance.Companion Companion;
-  }
-
-  @Deprecated public static final class DevicePerformance.Companion {
-    method @Deprecated public androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier);
-  }
-
-  public interface DevicePerformanceRetriever {
-    method public int getPerformanceClass();
-  }
-
-  @Deprecated public interface DevicePerformanceSupplier {
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public abstract kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-  }
-
-  public interface MediaPerformance {
-    method public static int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever);
-    field public static final androidx.core.performance.MediaPerformance.Companion Companion;
-  }
-
-  public static final class MediaPerformance.Companion {
-    method public int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever);
-  }
-
-  @Deprecated public final class StaticDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier {
-    ctor @Deprecated public StaticDevicePerformanceSupplier();
-    method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance();
-    method @Deprecated public kotlinx.coroutines.flow.Flow getMediaPerformanceClassFlow();
-    property @Deprecated public kotlinx.coroutines.flow.Flow mediaPerformanceClassFlow;
-    field @Deprecated public static final androidx.core.performance.StaticDevicePerformanceSupplier.Companion Companion;
-  }
-
-  @Deprecated public static final class StaticDevicePerformanceSupplier.Companion {
-    method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance();
   }
 
 }
diff --git a/core/core-performance/integration-tests/testapp/build.gradle b/core/core-performance/integration-tests/testapp/build.gradle
new file mode 100644
index 0000000..2925db8
--- /dev/null
+++ b/core/core-performance/integration-tests/testapp/build.gradle
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.application")
+    id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+    api(libs.kotlinStdlib)
+    implementation(project(":core:core-performance"))
+    implementation libs.constraintLayout
+}
+
+android {
+    defaultConfig {
+        applicationId "androidx.core.performance.testapp"
+        minSdkVersion 24
+    }
+
+    namespace "androidx.core.performance.testapp"
+}
\ No newline at end of file
diff --git a/core/core-performance/integration-tests/testapp/src/main/AndroidManifest.xml b/core/core-performance/integration-tests/testapp/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..e4235b71e
--- /dev/null
+++ b/core/core-performance/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -0,0 +1,32 @@
+
+
+
+
+    
+        
+            android:name=".MpcActivity"
+
+            android:exported="true">
+            
+                
+                
+                
+            
+        
+    
+
+
\ No newline at end of file
diff --git a/core/core-performance/integration-tests/testapp/src/main/java/androidx/core/performance/testapp/MpcActivity.kt b/core/core-performance/integration-tests/testapp/src/main/java/androidx/core/performance/testapp/MpcActivity.kt
new file mode 100644
index 0000000..b4c68ab
--- /dev/null
+++ b/core/core-performance/integration-tests/testapp/src/main/java/androidx/core/performance/testapp/MpcActivity.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2023 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.core.performance.testapp
+
+import android.app.Activity
+import android.os.Bundle
+import android.view.View
+import android.widget.TextView
+
+/** Sample Media Performance Class activity. */
+class MpcActivity : Activity() {
+
+    private lateinit var resultTextView: TextView
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_mpc)
+        resultTextView = findViewById(R.id.resultTextView)
+    }
+
+    fun doSomething(view: View) {
+        resultTextView.text = view.context.getString(getExperienceStringId())
+    }
+
+    private fun getExperienceStringId(): Int {
+        return R.string.mpc_0_experience_string
+    }
+}
diff --git a/core/core-performance/integration-tests/testapp/src/main/res/layout/activity_mpc.xml b/core/core-performance/integration-tests/testapp/src/main/res/layout/activity_mpc.xml
new file mode 100644
index 0000000..7a2010c
--- /dev/null
+++ b/core/core-performance/integration-tests/testapp/src/main/res/layout/activity_mpc.xml
@@ -0,0 +1,47 @@
+
+
+
+
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MpcActivity">
+
+    
+        android:id="@+id/doSomething"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="16dp"
+        android:onClick="doSomething"
+        android:text="Do something"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    
+        android:id="@+id/resultTextView"
+
+        android:layout_width="0dp"
+        android:layout_height="87dp"
+        android:layout_marginEnd="8dp"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="@+id/doSomething"
+        app:layout_constraintTop_toBottomOf="@+id/doSomething" />
+
\ No newline at end of file
diff --git a/core/core-performance/integration-tests/testapp/src/main/res/values/strings.xml b/core/core-performance/integration-tests/testapp/src/main/res/values/strings.xml
new file mode 100644
index 0000000..4c2d1b7
--- /dev/null
+++ b/core/core-performance/integration-tests/testapp/src/main/res/values/strings.xml
@@ -0,0 +1,23 @@
+
+
+
+    Default and simple experience.
+    Media Performance Class 10 experience.
+    Media Performance Class 11 experience.
+    Media Performance Class 12 experience.
+    Media Performance Class 13 experience.
+
\ No newline at end of file
diff --git a/core/core-performance/samples/build.gradle b/core/core-performance/samples/build.gradle
index 0087990..ef28e3c 100644
--- a/core/core-performance/samples/build.gradle
+++ b/core/core-performance/samples/build.gradle
@@ -30,7 +30,7 @@
 }
 
 androidx {
-    name = "cSamples"
+    name = "Core Performance Samples"
     type = LibraryType.SAMPLES
     mavenVersion = LibraryVersions.CORE_PERFORMANCE
     inceptionYear = "2021"
diff --git a/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt b/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt
index ac4214b..5f5be1c 100644
--- a/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt
+++ b/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt
@@ -14,11 +14,10 @@
  * limitations under the License.
  */
 
-@file:Suppress("DEPRECATION")
-
 package androidx.core.performance.samples
 
 import android.app.Application
+import android.os.Build
 import androidx.annotation.Sampled
 import androidx.core.performance.DefaultDevicePerformance
 import androidx.core.performance.DevicePerformance
@@ -36,6 +35,17 @@
         }
 
         fun doSomeThing() {
+            when {
+                devicePerformance.mediaPerformanceClass >= Build.VERSION_CODES.TIRAMISU -> {
+                    // Provide the most premium experience for highest performing devices
+                }
+                devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.R -> {
+                    // Provide a high quality experience
+                }
+                else -> {
+                    // Remove extras to keep experience functional
+                }
+            }
         }
     }
 }
diff --git a/core/core-performance/src/main/java/androidx/core/performance/DefaultDevicePerformance.kt b/core/core-performance/src/main/java/androidx/core/performance/DefaultDevicePerformance.kt
new file mode 100644
index 0000000..3917fad
--- /dev/null
+++ b/core/core-performance/src/main/java/androidx/core/performance/DefaultDevicePerformance.kt
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2023 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.core.performance
+
+import android.os.Build
+
+/**
+ * Reports the media performance class of the device. Contains statically specified values
+ * and can be used as a fallback alternative to suppliers with dynamic values.
+ */
+class DefaultDevicePerformance() : DevicePerformance {
+    private val PERFCLASS_11: Int = Build.VERSION_CODES.R
+    private val PERFCLASS_12: Int = Build.VERSION_CODES.S
+    private val PERFCLASS_13: Int = Build.VERSION_CODES.TIRAMISU
+    private val PERFCLASS_NONE: Int = 0
+
+    private val fingerprints: HashMap = hashMapOf(
+        // for unit testing, no actual products with these
+        "robolectric-BrandX/ProductX/Device30:11" to PERFCLASS_11,
+        "robolectric-BrandX/ProductX/Device31:12" to PERFCLASS_12,
+
+        // actual devices in the field
+        "OPPO/CPH2025EEA/OP4BA2L1:12" to PERFCLASS_11,
+        "OPPO/CPH2207EEA/OP4F0BL1:12" to PERFCLASS_11,
+        "OPPO/PENM00/OP4EC1:11" to PERFCLASS_11,
+        "OnePlus/OnePlus7TTMO/OnePlus7TTMO:11" to PERFCLASS_11,
+        "OnePlus/OnePlus8_BETA/OnePlus8:11" to PERFCLASS_11,
+        "Xiaomi/umi_global/umi:11" to PERFCLASS_11,
+        "realme/RMX2085/RMX2085L1:11" to PERFCLASS_11,
+        "samsung/c1qsqw/c1q:12" to PERFCLASS_11,
+        "samsung/o1quew/o1q:12" to PERFCLASS_11,
+        "samsung/r0quew/r0q:12" to PERFCLASS_11,
+        "samsung/r0sxxx/r0s:12" to PERFCLASS_11,
+    )
+
+    override val mediaPerformanceClass = getCalculatedMediaPerformanceClass()
+
+    private fun getMediaPerformanceClassFromFingerprint(): Int {
+
+        val brand = Build.BRAND
+        val product = Build.PRODUCT
+        val device = Build.DEVICE
+        val release = Build.VERSION.RELEASE
+
+        val synthesized = "$brand/$product/$device:$release"
+        var pc = fingerprints[synthesized]
+
+        if (pc == null) {
+            pc = PERFCLASS_NONE
+        }
+        return pc
+    }
+
+    private fun getMediaPerformanceClassFromProperty(): Int {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
+            return Build.VERSION.MEDIA_PERFORMANCE_CLASS
+        }
+
+        return PERFCLASS_NONE
+    }
+
+    private fun isPerformanceClassValid(pc: Int): Boolean = pc >= PERFCLASS_11
+
+    private fun getCalculatedMediaPerformanceClass(): Int {
+
+        // device's declared property takes precedence over our in-library table.
+        val mpcViaProperty: Int =
+            getMediaPerformanceClassFromProperty()
+
+        if (isPerformanceClassValid(mpcViaProperty)) {
+            return mpcViaProperty
+        }
+
+        val mpcViaFingerprint: Int =
+            getMediaPerformanceClassFromFingerprint()
+
+        if (isPerformanceClassValid(mpcViaFingerprint)) {
+            return mpcViaFingerprint
+        }
+
+        return PERFCLASS_NONE
+    }
+}
diff --git a/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt b/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt
index 264ba89..8b187f1 100644
--- a/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt
+++ b/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt
@@ -14,14 +14,8 @@
  * limitations under the License.
  */
 
-@file:Suppress("DEPRECATION")
-
 package androidx.core.performance
 
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.last
-import kotlinx.coroutines.runBlocking
-
 @JvmDefaultWithCompatibility
 /**
  * Reports the media performance class of the device.
@@ -49,71 +43,4 @@
      *
      */
     val mediaPerformanceClass: Int
-
-    @Deprecated(
-        message = "Replaced by DevicePerformance related implementations.",
-        level = DeprecationLevel.WARNING
-    )
-    companion object {
-        /**
-         * Create PerformanceClass from the context.
-         *
-         * This should be done in [android.app.Application.onCreate].
-         *
-         * Developers should call the createDevicePerformance companion method of
-         * the desired DevicePerformanceSupplier implementation.
-         *
-         * @param devicePerformanceSupplier Supplies device performance.
-         */
-        @JvmStatic
-        @Deprecated(
-            message = "Replaced by DevicePerformance related implementations.",
-            level = DeprecationLevel.WARNING
-        )
-        fun create(
-            devicePerformanceSupplier: DevicePerformanceSupplier
-        ): DevicePerformance = DefaultDevicePerformanceImpl(devicePerformanceSupplier)
-    }
-}
-
-/**
- * Default DevicePerformance implementation that always provides 0.
- */
-class DefaultDevicePerformance() : DevicePerformance {
-    override val mediaPerformanceClass = 0
-}
-
-/**
- * Supplies a flow of mediaPerformanceClass
- */
-@Deprecated(
-    message = "Replaced by DevicePerformance related implementations.",
-    level = DeprecationLevel.WARNING
-)
-interface DevicePerformanceSupplier {
-
-    val mediaPerformanceClassFlow: Flow
-}
-
-/**
- * Lazy caches the mediaPerformanceClass
- */
-@Deprecated(
-    message = "Replaced by DevicePerformance related implementations.",
-    level = DeprecationLevel.WARNING
-)
-private class DefaultDevicePerformanceImpl(
-    val devicePerformanceSupplier: DevicePerformanceSupplier
-) : DevicePerformance {
-    private val logTag = "DefaultDevicePerformanceImpl"
-
-    @Deprecated(
-        message = "Replaced by DevicePerformance related implementations.",
-        level = DeprecationLevel.WARNING
-    )
-    override val mediaPerformanceClass by lazy(mode = LazyThreadSafetyMode.PUBLICATION) {
-        runBlocking {
-            devicePerformanceSupplier.mediaPerformanceClassFlow.last()
-        }
-    }
 }
diff --git a/core/core-performance/src/main/java/androidx/core/performance/MediaPerformance.kt b/core/core-performance/src/main/java/androidx/core/performance/MediaPerformance.kt
deleted file mode 100644
index 35282c9..0000000
--- a/core/core-performance/src/main/java/androidx/core/performance/MediaPerformance.kt
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2023 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.core.performance
-
-/**
- * Interface implemented by all device performance retrievers.
- */
-interface DevicePerformanceRetriever {
-    fun getPerformanceClass(): Int
-}
-
-/**
- * Default implementation for a device performance retriever.
- */
-class DefaultDevicePerformanceRetriever : DevicePerformanceRetriever {
-    override fun getPerformanceClass(): Int = 0
-}
-
-/**
- * Main interface used to get the performance class using a specific retriever.
- */
-interface MediaPerformance {
-    companion object {
-        @JvmStatic
-        fun getPerformanceClass(
-            retriever: DevicePerformanceRetriever =
-                DefaultDevicePerformanceRetriever()
-        ): Int = retriever.getPerformanceClass()
-    }
-}
diff --git a/core/core-performance/src/main/java/androidx/core/performance/StaticDevicePerformanceSupplier.kt b/core/core-performance/src/main/java/androidx/core/performance/StaticDevicePerformanceSupplier.kt
deleted file mode 100644
index 3a3579d..0000000
--- a/core/core-performance/src/main/java/androidx/core/performance/StaticDevicePerformanceSupplier.kt
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2023 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.
- */
-
-@file:Suppress("DEPRECATION")
-
-package androidx.core.performance
-
-import android.os.Build
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.flow
-
-/**
- * Reports the media performance class of the device. Contains statically specified values
- * and can be used as a fallback alternative to suppliers with dynamic values.
- */
-@Deprecated(
-    message = "Replaced by DevicePerformance related implementations.",
-    level = DeprecationLevel.WARNING
-)
-class StaticDevicePerformanceSupplier : DevicePerformanceSupplier {
-
-    companion object {
-        /**
-         * Create DevicePerformance from the context backed by StaticDevicePerformanceSupplier.
-         *
-         * This should be done in [android.app.Application.onCreate].
-         */
-        @JvmStatic
-        fun createDevicePerformance(): DevicePerformance =
-            DevicePerformance.create(StaticDevicePerformanceSupplier())
-    }
-
-    override val mediaPerformanceClassFlow: Flow = flow {
-        emit(calculateMediaPerformanceClass())
-    }
-
-    // the next code isn't published/finalized until late
-    private val PERFCLASS_11: Int = Build.VERSION_CODES.R
-    private val PERFCLASS_12: Int = Build.VERSION_CODES.S
-    private val PERFCLASS_13: Int = 33
-
-    // we synthesize our own fingerprint:
-    //       Brand/Product/Device:api
-    // this is currently the prefix in the actual build fingerprints,
-    // so it is easy to cut&paste info from there into this list.
-    //
-    private val fingerprints: HashMap = hashMapOf(
-        // for unit testing, no actual products with these
-        "robolectric-BrandX/ProductX/Device30:11" to PERFCLASS_11,
-        "robolectric-BrandX/ProductX/Device31:12" to PERFCLASS_12,
-
-        // actual devices in the field
-        "OPPO/CPH2025EEA/OP4BA2L1:12" to PERFCLASS_11,
-        "OPPO/CPH2207EEA/OP4F0BL1:12" to PERFCLASS_11,
-        "OPPO/PENM00/OP4EC1:11" to PERFCLASS_11,
-        "OnePlus/OnePlus7TTMO/OnePlus7TTMO:11" to PERFCLASS_11,
-        "OnePlus/OnePlus8_BETA/OnePlus8:11" to PERFCLASS_11,
-        "Xiaomi/umi_global/umi:11" to PERFCLASS_11,
-        "realme/RMX2085/RMX2085L1:11" to PERFCLASS_11,
-        "samsung/c1qsqw/c1q:12" to PERFCLASS_11,
-        "samsung/o1quew/o1q:12" to PERFCLASS_11,
-        "samsung/r0quew/r0q:12" to PERFCLASS_11,
-        "samsung/r0sxxx/r0s:12" to PERFCLASS_11,
-    )
-
-    private fun calculateMediaPerformanceClassFromFingerprint(): Int {
-
-        val brand = Build.BRAND
-        val product = Build.PRODUCT
-        val device = Build.DEVICE
-        val release = Build.VERSION.RELEASE
-
-        val synthesized = "$brand/$product/$device:$release"
-        var pc = fingerprints[synthesized]
-
-        if (pc == null) {
-            pc = 0
-        }
-        return pc
-    }
-
-    private fun calculateMediaPerformanceClassFromProperty(): Int {
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
-            return Build.VERSION.MEDIA_PERFORMANCE_CLASS
-        }
-        return 0
-    }
-
-    // discard illegal performance class numbers
-    private fun boundPC(pc: Int): Int {
-        if (pc < PERFCLASS_11) {
-            // performance class 11 is the first legal value for performance class
-            return 0
-        }
-        return pc
-    }
-
-    private fun calculateMediaPerformanceClass(): Int {
-
-        // device's declared property takes precedence over our in-library table.
-        //
-        // what this flow doesn't let us express is a device with property PC11
-        // to actually upgraded to PC12 via the table.
-        //
-        val viaProperty: Int = boundPC(calculateMediaPerformanceClassFromProperty())
-        if (viaProperty > 0) {
-            return viaProperty
-        }
-        val viaFingerprint: Int = calculateMediaPerformanceClassFromFingerprint()
-        return boundPC(viaFingerprint)
-    }
-}
diff --git a/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt b/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt
index 33eafcf..5a5b514 100644
--- a/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt
+++ b/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt
@@ -16,15 +16,61 @@
 
 package androidx.core.performance
 
+import android.os.Build.VERSION_CODES.R
+import android.os.Build.VERSION_CODES.S
 import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.test.runTest
 import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+import org.robolectric.shadows.ShadowBuild
+import org.robolectric.shadows.ShadowSystemProperties
 
 /** Unit tests for [DefaultDevicePerformance]. */
+@RunWith(RobolectricTestRunner::class)
 class DefaultDevicePerformanceTest {
 
     @Test
-    fun mediaPerformanceClass() {
+    @Config(maxSdk = R, minSdk = R)
+    fun mediaPerformanceClass_SdkR_DeclaredMpc() = runTest {
+        ShadowSystemProperties.override("ro.odm.build.media_performance_class", "30")
+        ShadowBuild.reset()
         val mpc = DefaultDevicePerformance().mediaPerformanceClass
         assertThat(mpc).isEqualTo(0)
     }
+
+    @Test
+    @Config(minSdk = S)
+    fun mediaPerformanceClass_SdkS_DeclaredMpc() = runTest {
+        ShadowSystemProperties.override("ro.odm.build.media_performance_class", "30")
+        ShadowBuild.reset()
+        val mpc = DefaultDevicePerformance().mediaPerformanceClass
+        assertThat(mpc).isEqualTo(30)
+    }
+
+    @Test
+    @Config(minSdk = S)
+    fun mediaPerformanceClass_SdkS_BuildFingerprintMatch() = runTest {
+        ShadowBuild.reset()
+        ShadowBuild.setBrand("robolectric-BrandX")
+        ShadowBuild.setProduct("ProductX")
+        ShadowBuild.setDevice("Device31")
+        ShadowBuild.setVersionRelease("12")
+        val mpc = DefaultDevicePerformance().mediaPerformanceClass
+        assertThat(mpc).isEqualTo(31)
+    }
+
+    @Test
+    @Config(minSdk = S)
+    fun mediaPerformanceClass_SdkS_DeclaredMpc_BuildFingerprintMatch() = runTest {
+        ShadowSystemProperties.override("ro.odm.build.media_performance_class", "30")
+        ShadowBuild.reset()
+        ShadowBuild.setBrand("robolectric-BrandX")
+        ShadowBuild.setProduct("ProductX")
+        ShadowBuild.setDevice("Device31")
+        ShadowBuild.setVersionRelease("12")
+        val mpc = DefaultDevicePerformance().mediaPerformanceClass
+        assertThat(mpc).isEqualTo(30)
+    }
 }
diff --git a/core/core-performance/src/test/java/androidx/core/performance/DevicePerformanceTest.kt b/core/core-performance/src/test/java/androidx/core/performance/DevicePerformanceTest.kt
deleted file mode 100644
index 9914490..0000000
--- a/core/core-performance/src/test/java/androidx/core/performance/DevicePerformanceTest.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2023 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.core.performance
-
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-
-/** Unit tests for [DevicePerformance]. */
-class DevicePerformanceTest {
-
-    @Test
-    fun mediaPerformanceClass() {
-        // TODO: b/289279260 - Correctly handle threads in tests without leaking.
-        assertThat(true).isEqualTo(true)
-    }
-}
diff --git a/core/core-performance/src/test/java/androidx/core/performance/StaticDevicePerformanceTest.kt b/core/core-performance/src/test/java/androidx/core/performance/StaticDevicePerformanceTest.kt
deleted file mode 100644
index e27e43d..0000000
--- a/core/core-performance/src/test/java/androidx/core/performance/StaticDevicePerformanceTest.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.core.performance
-
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-
-/** Unit tests for [StaticDevicePerformanceSupplier]. */
-class StaticDevicePerformanceTest {
-
-    @Test
-    fun getMediaPerformanceClass_sdk30() {
-        // TODO: b/289279260 - Correctly handle threads in tests without leaking.
-        assertThat(true).isEqualTo(true)
-    }
-}
diff --git a/credentials/credentials-play-services-auth/api/1.2.0-beta02.txt b/credentials/credentials-play-services-auth/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/credentials/credentials-play-services-auth/api/1.2.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/credentials/credentials-play-services-auth/api/res-1.2.0-beta02.txt b/credentials/credentials-play-services-auth/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/credentials/credentials-play-services-auth/api/res-1.2.0-beta02.txt
diff --git a/credentials/credentials-play-services-auth/api/restricted_1.2.0-beta02.txt b/credentials/credentials-play-services-auth/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/credentials/credentials-play-services-auth/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt
index a18deea..4032e6e 100644
--- a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt
+++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt
@@ -74,7 +74,7 @@
 
         private val JSON_KEY_CLIENT_DATA = "clientDataJSON"
         private val JSON_KEY_ATTESTATION_OBJ = "attestationObject"
-        private val JSON_KEY_AUTH_DATA = "authenticationData"
+        private val JSON_KEY_AUTH_DATA = "authenticatorData"
         private val JSON_KEY_SIGNATURE = "signature"
         private val JSON_KEY_USER_HANDLE = "userHandle"
         private val JSON_KEY_RESPONSE = "response"
diff --git a/credentials/credentials/api/1.2.0-beta02.txt b/credentials/credentials/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..8c9cf86
--- /dev/null
+++ b/credentials/credentials/api/1.2.0-beta02.txt
@@ -0,0 +1,902 @@
+// Signature format: 4.0
+package androidx.credentials {
+
+  public final class ClearCredentialStateRequest {
+    ctor public ClearCredentialStateRequest();
+  }
+
+  public abstract class CreateCredentialRequest {
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final android.os.Bundle getCredentialData();
+    method public final androidx.credentials.CreateCredentialRequest.DisplayInfo getDisplayInfo();
+    method public final String? getOrigin();
+    method public final boolean getPreferImmediatelyAvailableCredentials();
+    method public final String getType();
+    method public final boolean isAutoSelectAllowed();
+    method public final boolean isSystemProviderRequired();
+    property public final android.os.Bundle candidateQueryData;
+    property public final android.os.Bundle credentialData;
+    property public final androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo;
+    property public final boolean isAutoSelectAllowed;
+    property public final boolean isSystemProviderRequired;
+    property public final String? origin;
+    property public final boolean preferImmediatelyAvailableCredentials;
+    property public final String type;
+  }
+
+  public static final class CreateCredentialRequest.DisplayInfo {
+    ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId);
+    ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
+    ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, CharSequence? userDisplayName, String? preferDefaultProvider);
+    method public CharSequence? getUserDisplayName();
+    method public CharSequence getUserId();
+    property public final CharSequence? userDisplayName;
+    property public final CharSequence userId;
+  }
+
+  public abstract class CreateCredentialResponse {
+    method public final android.os.Bundle getData();
+    method public final String getType();
+    property public final android.os.Bundle data;
+    property public final String type;
+  }
+
+  public class CreateCustomCredentialRequest extends androidx.credentials.CreateCredentialRequest {
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo);
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin, optional boolean preferImmediatelyAvailableCredentials);
+  }
+
+  public class CreateCustomCredentialResponse extends androidx.credentials.CreateCredentialResponse {
+    ctor public CreateCustomCredentialResponse(String type, android.os.Bundle data);
+  }
+
+  public final class CreatePasswordRequest extends androidx.credentials.CreateCredentialRequest {
+    ctor public CreatePasswordRequest(String id, String password);
+    ctor public CreatePasswordRequest(String id, String password, optional String? origin);
+    ctor public CreatePasswordRequest(String id, String password, optional String? origin, optional boolean preferImmediatelyAvailableCredentials);
+    ctor public CreatePasswordRequest(String id, String password, optional String? origin, optional boolean preferImmediatelyAvailableCredentials, optional boolean isAutoSelectAllowed);
+    ctor public CreatePasswordRequest(String id, String password, String? origin, String? preferDefaultProvider, boolean preferImmediatelyAvailableCredentials, boolean isAutoSelectAllowed);
+    method public String getId();
+    method public String getPassword();
+    property public final String id;
+    property public final String password;
+  }
+
+  public final class CreatePasswordResponse extends androidx.credentials.CreateCredentialResponse {
+    ctor public CreatePasswordResponse();
+  }
+
+  public final class CreatePublicKeyCredentialRequest extends androidx.credentials.CreateCredentialRequest {
+    ctor public CreatePublicKeyCredentialRequest(String requestJson);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin, optional boolean isAutoSelectAllowed);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, byte[]? clientDataHash, boolean preferImmediatelyAvailableCredentials, String? origin, String? preferDefaultProvider, boolean isAutoSelectAllowed);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public final class CreatePublicKeyCredentialResponse extends androidx.credentials.CreateCredentialResponse {
+    ctor public CreatePublicKeyCredentialResponse(String registrationResponseJson);
+    method public String getRegistrationResponseJson();
+    property public final String registrationResponseJson;
+  }
+
+  public abstract class Credential {
+    method public final android.os.Bundle getData();
+    method public final String getType();
+    property public final android.os.Bundle data;
+    property public final String type;
+  }
+
+  @RequiresApi(16) public interface CredentialManager {
+    method public default suspend Object? clearCredentialState(androidx.credentials.ClearCredentialStateRequest request, kotlin.coroutines.Continuation);
+    method public void clearCredentialStateAsync(androidx.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method public static androidx.credentials.CredentialManager create(android.content.Context context);
+    method public default suspend Object? createCredential(android.content.Context context, androidx.credentials.CreateCredentialRequest request, kotlin.coroutines.Continuation);
+    method public void createCredentialAsync(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public android.app.PendingIntent createSettingsPendingIntent();
+    method public default suspend Object? getCredential(android.content.Context context, androidx.credentials.GetCredentialRequest request, kotlin.coroutines.Continuation);
+    method @RequiresApi(34) public default suspend Object? getCredential(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, kotlin.coroutines.Continuation);
+    method public void getCredentialAsync(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public void getCredentialAsync(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public default suspend Object? prepareGetCredential(androidx.credentials.GetCredentialRequest request, kotlin.coroutines.Continuation);
+    method @RequiresApi(34) public void prepareGetCredentialAsync(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    field public static final androidx.credentials.CredentialManager.Companion Companion;
+  }
+
+  public static final class CredentialManager.Companion {
+    method public androidx.credentials.CredentialManager create(android.content.Context context);
+  }
+
+  public interface CredentialManagerCallback {
+    method public void onError(E e);
+    method public void onResult(R result);
+  }
+
+  public abstract class CredentialOption {
+    method public final java.util.Set getAllowedProviders();
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final android.os.Bundle getRequestData();
+    method public final String getType();
+    method public final boolean isAutoSelectAllowed();
+    method public final boolean isSystemProviderRequired();
+    property public final java.util.Set allowedProviders;
+    property public final android.os.Bundle candidateQueryData;
+    property public final boolean isAutoSelectAllowed;
+    property public final boolean isSystemProviderRequired;
+    property public final android.os.Bundle requestData;
+    property public final String type;
+  }
+
+  public interface CredentialProvider {
+    method public boolean isAvailableOnDevice();
+    method public void onClearCredential(androidx.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method public void onCreateCredential(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method public void onGetCredential(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public default void onGetCredential(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public default void onPrepareCredential(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+  }
+
+  public class CustomCredential extends androidx.credentials.Credential {
+    ctor public CustomCredential(String type, android.os.Bundle data);
+  }
+
+  public final class GetCredentialRequest {
+    ctor public GetCredentialRequest(java.util.List credentialOptions);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin, optional boolean preferIdentityDocUi);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName, optional boolean preferImmediatelyAvailableCredentials);
+    method public java.util.List getCredentialOptions();
+    method public String? getOrigin();
+    method public boolean getPreferIdentityDocUi();
+    method public boolean getPreferImmediatelyAvailableCredentials();
+    method public android.content.ComponentName? getPreferUiBrandingComponentName();
+    property public final java.util.List credentialOptions;
+    property public final String? origin;
+    property public final boolean preferIdentityDocUi;
+    property public final boolean preferImmediatelyAvailableCredentials;
+    property public final android.content.ComponentName? preferUiBrandingComponentName;
+  }
+
+  public static final class GetCredentialRequest.Builder {
+    ctor public GetCredentialRequest.Builder();
+    method public androidx.credentials.GetCredentialRequest.Builder addCredentialOption(androidx.credentials.CredentialOption credentialOption);
+    method public androidx.credentials.GetCredentialRequest build();
+    method public androidx.credentials.GetCredentialRequest.Builder setCredentialOptions(java.util.List credentialOptions);
+    method public androidx.credentials.GetCredentialRequest.Builder setOrigin(String origin);
+    method public androidx.credentials.GetCredentialRequest.Builder setPreferIdentityDocUi(boolean preferIdentityDocUi);
+    method public androidx.credentials.GetCredentialRequest.Builder setPreferImmediatelyAvailableCredentials(boolean preferImmediatelyAvailableCredentials);
+    method public androidx.credentials.GetCredentialRequest.Builder setPreferUiBrandingComponentName(android.content.ComponentName? component);
+  }
+
+  public final class GetCredentialResponse {
+    ctor public GetCredentialResponse(androidx.credentials.Credential credential);
+    method public androidx.credentials.Credential getCredential();
+    property public final androidx.credentials.Credential credential;
+  }
+
+  public class GetCustomCredentialOption extends androidx.credentials.CredentialOption {
+    ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired);
+    ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
+    ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed, optional java.util.Set allowedProviders);
+  }
+
+  public final class GetPasswordOption extends androidx.credentials.CredentialOption {
+    ctor public GetPasswordOption();
+    ctor public GetPasswordOption(optional java.util.Set allowedUserIds);
+    ctor public GetPasswordOption(optional java.util.Set allowedUserIds, optional boolean isAutoSelectAllowed);
+    ctor public GetPasswordOption(optional java.util.Set allowedUserIds, optional boolean isAutoSelectAllowed, optional java.util.Set allowedProviders);
+    method public java.util.Set getAllowedUserIds();
+    property public final java.util.Set allowedUserIds;
+  }
+
+  public final class GetPublicKeyCredentialOption extends androidx.credentials.CredentialOption {
+    ctor public GetPublicKeyCredentialOption(String requestJson);
+    ctor public GetPublicKeyCredentialOption(String requestJson, optional byte[]? clientDataHash);
+    ctor public GetPublicKeyCredentialOption(String requestJson, optional byte[]? clientDataHash, optional java.util.Set allowedProviders);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public final class PasswordCredential extends androidx.credentials.Credential {
+    ctor public PasswordCredential(String id, String password);
+    method public String getId();
+    method public String getPassword();
+    property public final String id;
+    property public final String password;
+    field public static final androidx.credentials.PasswordCredential.Companion Companion;
+    field public static final String TYPE_PASSWORD_CREDENTIAL = "android.credentials.TYPE_PASSWORD_CREDENTIAL";
+  }
+
+  public static final class PasswordCredential.Companion {
+  }
+
+  @RequiresApi(34) public final class PrepareGetCredentialResponse {
+    method public kotlin.jvm.functions.Function1? getCredentialTypeDelegate();
+    method public kotlin.jvm.functions.Function0? getHasAuthResultsDelegate();
+    method public kotlin.jvm.functions.Function0? getHasRemoteResultsDelegate();
+    method public androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? getPendingGetCredentialHandle();
+    method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasAuthenticationResults();
+    method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasCredentialResults(String credentialType);
+    method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasRemoteResults();
+    method public boolean isNullHandlesForTest();
+    property public final kotlin.jvm.functions.Function1? credentialTypeDelegate;
+    property public final kotlin.jvm.functions.Function0? hasAuthResultsDelegate;
+    property public final kotlin.jvm.functions.Function0? hasRemoteResultsDelegate;
+    property public final boolean isNullHandlesForTest;
+    property public final androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? pendingGetCredentialHandle;
+  }
+
+  @RequiresApi(34) public static final class PrepareGetCredentialResponse.PendingGetCredentialHandle {
+    ctor public PrepareGetCredentialResponse.PendingGetCredentialHandle(android.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? frameworkHandle);
+  }
+
+  @VisibleForTesting public static final class PrepareGetCredentialResponse.TestBuilder {
+    ctor public PrepareGetCredentialResponse.TestBuilder();
+    method public androidx.credentials.PrepareGetCredentialResponse build();
+    method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setCredentialTypeDelegate(kotlin.jvm.functions.Function1 handler);
+    method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasAuthResultsDelegate(kotlin.jvm.functions.Function0 handler);
+    method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasRemoteResultsDelegate(kotlin.jvm.functions.Function0 handler);
+  }
+
+  public final class PublicKeyCredential extends androidx.credentials.Credential {
+    ctor public PublicKeyCredential(String authenticationResponseJson);
+    method public String getAuthenticationResponseJson();
+    property public final String authenticationResponseJson;
+    field public static final androidx.credentials.PublicKeyCredential.Companion Companion;
+    field public static final String TYPE_PUBLIC_KEY_CREDENTIAL = "androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL";
+  }
+
+  public static final class PublicKeyCredential.Companion {
+  }
+
+}
+
+package androidx.credentials.exceptions {
+
+  public final class ClearCredentialCustomException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialCustomException(String type);
+    ctor public ClearCredentialCustomException(String type, optional CharSequence? errorMessage);
+    method public String getType();
+    property public String type;
+  }
+
+  public abstract class ClearCredentialException extends java.lang.Exception {
+  }
+
+  public final class ClearCredentialInterruptedException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialInterruptedException();
+    ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
+  }
+
+  public final class ClearCredentialProviderConfigurationException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialProviderConfigurationException();
+    ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
+  }
+
+  public final class ClearCredentialUnknownException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialUnknownException();
+    ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
+  }
+
+  public final class ClearCredentialUnsupportedException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialUnsupportedException();
+    ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialCancellationException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialCancellationException();
+    ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialCustomException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialCustomException(String type);
+    ctor public CreateCredentialCustomException(String type, optional CharSequence? errorMessage);
+    method public String getType();
+    property public String type;
+  }
+
+  public abstract class CreateCredentialException extends java.lang.Exception {
+  }
+
+  public final class CreateCredentialInterruptedException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialInterruptedException();
+    ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialNoCreateOptionException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialNoCreateOptionException();
+    ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialProviderConfigurationException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialProviderConfigurationException();
+    ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialUnknownException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialUnknownException();
+    ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialUnsupportedException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialUnsupportedException();
+    ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialCancellationException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialCancellationException();
+    ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialCustomException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialCustomException(String type);
+    ctor public GetCredentialCustomException(String type, optional CharSequence? errorMessage);
+    method public String getType();
+    property public String type;
+  }
+
+  public abstract class GetCredentialException extends java.lang.Exception {
+  }
+
+  public final class GetCredentialInterruptedException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialInterruptedException();
+    ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialProviderConfigurationException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialProviderConfigurationException();
+    ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialUnknownException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialUnknownException();
+    ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialUnsupportedException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialUnsupportedException();
+    ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
+  }
+
+  public final class NoCredentialException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public NoCredentialException();
+    ctor public NoCredentialException(optional CharSequence? errorMessage);
+  }
+
+}
+
+package androidx.credentials.exceptions.domerrors {
+
+  public final class AbortError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public AbortError();
+  }
+
+  public final class ConstraintError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public ConstraintError();
+  }
+
+  public final class DataCloneError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public DataCloneError();
+  }
+
+  public final class DataError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public DataError();
+  }
+
+  public abstract class DomError {
+    ctor public DomError(String type);
+  }
+
+  public final class EncodingError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public EncodingError();
+  }
+
+  public final class HierarchyRequestError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public HierarchyRequestError();
+  }
+
+  public final class InUseAttributeError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InUseAttributeError();
+  }
+
+  public final class InvalidCharacterError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidCharacterError();
+  }
+
+  public final class InvalidModificationError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidModificationError();
+  }
+
+  public final class InvalidNodeTypeError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidNodeTypeError();
+  }
+
+  public final class InvalidStateError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidStateError();
+  }
+
+  public final class NamespaceError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NamespaceError();
+  }
+
+  public final class NetworkError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NetworkError();
+  }
+
+  public final class NoModificationAllowedError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NoModificationAllowedError();
+  }
+
+  public final class NotAllowedError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotAllowedError();
+  }
+
+  public final class NotFoundError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotFoundError();
+  }
+
+  public final class NotReadableError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotReadableError();
+  }
+
+  public final class NotSupportedError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotSupportedError();
+  }
+
+  public final class OperationError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public OperationError();
+  }
+
+  public final class OptOutError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public OptOutError();
+  }
+
+  public final class QuotaExceededError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public QuotaExceededError();
+  }
+
+  public final class ReadOnlyError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public ReadOnlyError();
+  }
+
+  public final class SecurityError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public SecurityError();
+  }
+
+  public final class SyntaxError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public SyntaxError();
+  }
+
+  public final class TimeoutError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public TimeoutError();
+  }
+
+  public final class TransactionInactiveError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public TransactionInactiveError();
+  }
+
+  public final class UnknownError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public UnknownError();
+  }
+
+  public final class VersionError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public VersionError();
+  }
+
+  public final class WrongDocumentError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public WrongDocumentError();
+  }
+
+}
+
+package androidx.credentials.exceptions.publickeycredential {
+
+  public final class CreatePublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialException {
+    ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+    ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
+    method public androidx.credentials.exceptions.domerrors.DomError getDomError();
+    property public final androidx.credentials.exceptions.domerrors.DomError domError;
+  }
+
+  public class CreatePublicKeyCredentialException extends androidx.credentials.exceptions.CreateCredentialException {
+  }
+
+  public final class GetPublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.GetPublicKeyCredentialException {
+    ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+    ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
+    method public androidx.credentials.exceptions.domerrors.DomError getDomError();
+    property public final androidx.credentials.exceptions.domerrors.DomError domError;
+  }
+
+  public class GetPublicKeyCredentialException extends androidx.credentials.exceptions.GetCredentialException {
+  }
+
+}
+
+package androidx.credentials.provider {
+
+  public final class Action {
+    ctor public Action(CharSequence title, android.app.PendingIntent pendingIntent, optional CharSequence? subtitle);
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence? getSubtitle();
+    method public CharSequence getTitle();
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence? subtitle;
+    property public final CharSequence title;
+  }
+
+  public static final class Action.Builder {
+    ctor public Action.Builder(CharSequence title, android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.Action build();
+    method public androidx.credentials.provider.Action.Builder setSubtitle(CharSequence? subtitle);
+  }
+
+  public final class AuthenticationAction {
+    ctor public AuthenticationAction(CharSequence title, android.app.PendingIntent pendingIntent);
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getTitle();
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence title;
+  }
+
+  public static final class AuthenticationAction.Builder {
+    ctor public AuthenticationAction.Builder(CharSequence title, android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.AuthenticationAction build();
+  }
+
+  public abstract class BeginCreateCredentialRequest {
+    ctor public BeginCreateCredentialRequest(String type, android.os.Bundle candidateQueryData, androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+    method public static final android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialRequest request);
+    method public static final androidx.credentials.provider.BeginCreateCredentialRequest? fromBundle(android.os.Bundle bundle);
+    method public final androidx.credentials.provider.CallingAppInfo? getCallingAppInfo();
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final String getType();
+    property public final androidx.credentials.provider.CallingAppInfo? callingAppInfo;
+    property public final android.os.Bundle candidateQueryData;
+    property public final String type;
+    field public static final androidx.credentials.provider.BeginCreateCredentialRequest.Companion Companion;
+  }
+
+  public static final class BeginCreateCredentialRequest.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialRequest request);
+    method public androidx.credentials.provider.BeginCreateCredentialRequest? fromBundle(android.os.Bundle bundle);
+  }
+
+  public final class BeginCreateCredentialResponse {
+    ctor public BeginCreateCredentialResponse(optional java.util.List createEntries, optional androidx.credentials.provider.RemoteEntry? remoteEntry);
+    method public static android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialResponse response);
+    method public static androidx.credentials.provider.BeginCreateCredentialResponse? fromBundle(android.os.Bundle bundle);
+    method public java.util.List getCreateEntries();
+    method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+    property public final java.util.List createEntries;
+    property public final androidx.credentials.provider.RemoteEntry? remoteEntry;
+    field public static final androidx.credentials.provider.BeginCreateCredentialResponse.Companion Companion;
+  }
+
+  public static final class BeginCreateCredentialResponse.Builder {
+    ctor public BeginCreateCredentialResponse.Builder();
+    method public androidx.credentials.provider.BeginCreateCredentialResponse.Builder addCreateEntry(androidx.credentials.provider.CreateEntry createEntry);
+    method public androidx.credentials.provider.BeginCreateCredentialResponse build();
+    method public androidx.credentials.provider.BeginCreateCredentialResponse.Builder setCreateEntries(java.util.List createEntries);
+    method public androidx.credentials.provider.BeginCreateCredentialResponse.Builder setRemoteEntry(androidx.credentials.provider.RemoteEntry? remoteEntry);
+  }
+
+  public static final class BeginCreateCredentialResponse.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialResponse response);
+    method public androidx.credentials.provider.BeginCreateCredentialResponse? fromBundle(android.os.Bundle bundle);
+  }
+
+  public class BeginCreateCustomCredentialRequest extends androidx.credentials.provider.BeginCreateCredentialRequest {
+    ctor public BeginCreateCustomCredentialRequest(String type, android.os.Bundle candidateQueryData, androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+  }
+
+  public final class BeginCreatePasswordCredentialRequest extends androidx.credentials.provider.BeginCreateCredentialRequest {
+    ctor public BeginCreatePasswordCredentialRequest(androidx.credentials.provider.CallingAppInfo? callingAppInfo, android.os.Bundle candidateQueryData);
+  }
+
+  public final class BeginCreatePublicKeyCredentialRequest extends androidx.credentials.provider.BeginCreateCredentialRequest {
+    ctor public BeginCreatePublicKeyCredentialRequest(String requestJson, androidx.credentials.provider.CallingAppInfo? callingAppInfo, android.os.Bundle candidateQueryData);
+    ctor public BeginCreatePublicKeyCredentialRequest(String requestJson, androidx.credentials.provider.CallingAppInfo? callingAppInfo, android.os.Bundle candidateQueryData, optional byte[]? clientDataHash);
+    method @VisibleForTesting public static androidx.credentials.provider.BeginCreatePublicKeyCredentialRequest createForTest(android.os.Bundle data, androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public abstract class BeginGetCredentialOption {
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final String getId();
+    method public final String getType();
+    property public final android.os.Bundle candidateQueryData;
+    property public final String id;
+    property public final String type;
+  }
+
+  public final class BeginGetCredentialRequest {
+    ctor public BeginGetCredentialRequest(java.util.List beginGetCredentialOptions);
+    ctor public BeginGetCredentialRequest(java.util.List beginGetCredentialOptions, optional androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+    method public static android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialRequest request);
+    method public static androidx.credentials.provider.BeginGetCredentialRequest? fromBundle(android.os.Bundle bundle);
+    method public java.util.List getBeginGetCredentialOptions();
+    method public androidx.credentials.provider.CallingAppInfo? getCallingAppInfo();
+    property public final java.util.List beginGetCredentialOptions;
+    property public final androidx.credentials.provider.CallingAppInfo? callingAppInfo;
+    field public static final androidx.credentials.provider.BeginGetCredentialRequest.Companion Companion;
+  }
+
+  public static final class BeginGetCredentialRequest.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialRequest request);
+    method public androidx.credentials.provider.BeginGetCredentialRequest? fromBundle(android.os.Bundle bundle);
+  }
+
+  public final class BeginGetCredentialResponse {
+    ctor public BeginGetCredentialResponse(optional java.util.List credentialEntries, optional java.util.List actions, optional java.util.List authenticationActions, optional androidx.credentials.provider.RemoteEntry? remoteEntry);
+    method public static android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public static androidx.credentials.provider.BeginGetCredentialResponse? fromBundle(android.os.Bundle bundle);
+    method public java.util.List getActions();
+    method public java.util.List getAuthenticationActions();
+    method public java.util.List getCredentialEntries();
+    method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+    property public final java.util.List actions;
+    property public final java.util.List authenticationActions;
+    property public final java.util.List credentialEntries;
+    property public final androidx.credentials.provider.RemoteEntry? remoteEntry;
+    field public static final androidx.credentials.provider.BeginGetCredentialResponse.Companion Companion;
+  }
+
+  public static final class BeginGetCredentialResponse.Builder {
+    ctor public BeginGetCredentialResponse.Builder();
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder addAction(androidx.credentials.provider.Action action);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder addAuthenticationAction(androidx.credentials.provider.AuthenticationAction authenticationAction);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder addCredentialEntry(androidx.credentials.provider.CredentialEntry entry);
+    method public androidx.credentials.provider.BeginGetCredentialResponse build();
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setActions(java.util.List actions);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setAuthenticationActions(java.util.List authenticationEntries);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setCredentialEntries(java.util.List entries);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setRemoteEntry(androidx.credentials.provider.RemoteEntry? remoteEntry);
+  }
+
+  public static final class BeginGetCredentialResponse.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public androidx.credentials.provider.BeginGetCredentialResponse? fromBundle(android.os.Bundle bundle);
+  }
+
+  public class BeginGetCustomCredentialOption extends androidx.credentials.provider.BeginGetCredentialOption {
+    ctor public BeginGetCustomCredentialOption(String id, String type, android.os.Bundle candidateQueryData);
+  }
+
+  public final class BeginGetPasswordOption extends androidx.credentials.provider.BeginGetCredentialOption {
+    ctor public BeginGetPasswordOption(java.util.Set allowedUserIds, android.os.Bundle candidateQueryData, String id);
+    method @VisibleForTesting public static androidx.credentials.provider.BeginGetPasswordOption createForTest(android.os.Bundle data, String id);
+    method public java.util.Set getAllowedUserIds();
+    property public final java.util.Set allowedUserIds;
+  }
+
+  public final class BeginGetPublicKeyCredentialOption extends androidx.credentials.provider.BeginGetCredentialOption {
+    ctor public BeginGetPublicKeyCredentialOption(android.os.Bundle candidateQueryData, String id, String requestJson);
+    ctor public BeginGetPublicKeyCredentialOption(android.os.Bundle candidateQueryData, String id, String requestJson, optional byte[]? clientDataHash);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public final class CallingAppInfo {
+    ctor public CallingAppInfo(String packageName, android.content.pm.SigningInfo signingInfo);
+    ctor public CallingAppInfo(String packageName, android.content.pm.SigningInfo signingInfo, optional String? origin);
+    method public String? getOrigin(String privilegedAllowlist);
+    method public String getPackageName();
+    method public android.content.pm.SigningInfo getSigningInfo();
+    method public boolean isOriginPopulated();
+    property public final String packageName;
+    property public final android.content.pm.SigningInfo signingInfo;
+  }
+
+  @RequiresApi(26) public final class CreateEntry {
+    ctor public CreateEntry(CharSequence accountName, android.app.PendingIntent pendingIntent, optional CharSequence? description, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon? icon, optional Integer? passwordCredentialCount, optional Integer? publicKeyCredentialCount, optional Integer? totalCredentialCount, optional boolean isAutoSelectAllowed);
+    method public CharSequence getAccountName();
+    method public CharSequence? getDescription();
+    method public android.graphics.drawable.Icon? getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public Integer? getPasswordCredentialCount();
+    method public android.app.PendingIntent getPendingIntent();
+    method public Integer? getPublicKeyCredentialCount();
+    method public Integer? getTotalCredentialCount();
+    method public boolean isAutoSelectAllowed();
+    property public final CharSequence accountName;
+    property public final CharSequence? description;
+    property public final android.graphics.drawable.Icon? icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+  }
+
+  public static final class CreateEntry.Builder {
+    ctor public CreateEntry.Builder(CharSequence accountName, android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.CreateEntry build();
+    method public androidx.credentials.provider.CreateEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.CreateEntry.Builder setDescription(CharSequence? description);
+    method public androidx.credentials.provider.CreateEntry.Builder setIcon(android.graphics.drawable.Icon? icon);
+    method public androidx.credentials.provider.CreateEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+    method public androidx.credentials.provider.CreateEntry.Builder setPasswordCredentialCount(int count);
+    method public androidx.credentials.provider.CreateEntry.Builder setPublicKeyCredentialCount(int count);
+    method public androidx.credentials.provider.CreateEntry.Builder setTotalCredentialCount(int count);
+  }
+
+  public abstract class CredentialEntry {
+    method public final androidx.credentials.provider.BeginGetCredentialOption getBeginGetCredentialOption();
+    property public final androidx.credentials.provider.BeginGetCredentialOption beginGetCredentialOption;
+  }
+
+  @RequiresApi(34) public abstract class CredentialProviderService extends android.service.credentials.CredentialProviderService {
+    ctor public CredentialProviderService();
+    method public final void onBeginCreateCredential(android.service.credentials.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public abstract void onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public final void onBeginGetCredential(android.service.credentials.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public abstract void onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public final void onClearCredentialState(android.service.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public abstract void onClearCredentialStateRequest(androidx.credentials.provider.ProviderClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+  }
+
+  @RequiresApi(26) public final class CustomCredentialEntry extends androidx.credentials.provider.CredentialEntry {
+    ctor public CustomCredentialEntry(android.content.Context context, CharSequence title, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetCredentialOption beginGetCredentialOption, optional CharSequence? subtitle, optional CharSequence? typeDisplayName, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon icon, optional boolean isAutoSelectAllowed);
+    method public android.graphics.drawable.Icon getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence? getSubtitle();
+    method public CharSequence getTitle();
+    method public String getType();
+    method public CharSequence? getTypeDisplayName();
+    method public boolean isAutoSelectAllowed();
+    property public final android.graphics.drawable.Icon icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence? subtitle;
+    property public final CharSequence title;
+    property public String type;
+    property public final CharSequence? typeDisplayName;
+  }
+
+  public static final class CustomCredentialEntry.Builder {
+    ctor public CustomCredentialEntry.Builder(android.content.Context context, String type, CharSequence title, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetCredentialOption beginGetCredentialOption);
+    method public androidx.credentials.provider.CustomCredentialEntry build();
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setIcon(android.graphics.drawable.Icon icon);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setSubtitle(CharSequence? subtitle);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setTypeDisplayName(CharSequence? typeDisplayName);
+  }
+
+  public final class IntentHandlerConverters {
+    method @RequiresApi(34) public static androidx.credentials.provider.BeginGetCredentialResponse? getBeginGetResponse(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.CreateCredentialResponse? getCreateCredentialCredentialResponse(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.CreateCredentialException? getCreateCredentialException(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.GetCredentialException? getGetCredentialException(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.GetCredentialResponse? getGetCredentialResponse(android.content.Intent);
+  }
+
+  @RequiresApi(26) public final class PasswordCredentialEntry extends androidx.credentials.provider.CredentialEntry {
+    ctor public PasswordCredentialEntry(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPasswordOption beginGetPasswordOption, optional CharSequence? displayName, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon icon, optional boolean isAutoSelectAllowed);
+    method public CharSequence? getDisplayName();
+    method public android.graphics.drawable.Icon getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getTypeDisplayName();
+    method public CharSequence getUsername();
+    method public boolean isAutoSelectAllowed();
+    property public final CharSequence? displayName;
+    property public final android.graphics.drawable.Icon icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence typeDisplayName;
+    property public final CharSequence username;
+  }
+
+  public static final class PasswordCredentialEntry.Builder {
+    ctor public PasswordCredentialEntry.Builder(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPasswordOption beginGetPasswordOption);
+    method public androidx.credentials.provider.PasswordCredentialEntry build();
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setDisplayName(CharSequence? displayName);
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setIcon(android.graphics.drawable.Icon icon);
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+  }
+
+  @RequiresApi(34) public final class PendingIntentHandler {
+    ctor public PendingIntentHandler();
+    method public static androidx.credentials.provider.BeginGetCredentialRequest? retrieveBeginGetCredentialRequest(android.content.Intent intent);
+    method public static androidx.credentials.provider.ProviderCreateCredentialRequest? retrieveProviderCreateCredentialRequest(android.content.Intent intent);
+    method public static androidx.credentials.provider.ProviderGetCredentialRequest? retrieveProviderGetCredentialRequest(android.content.Intent intent);
+    method public static void setBeginGetCredentialResponse(android.content.Intent intent, androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public static void setCreateCredentialException(android.content.Intent intent, androidx.credentials.exceptions.CreateCredentialException exception);
+    method public static void setCreateCredentialResponse(android.content.Intent intent, androidx.credentials.CreateCredentialResponse response);
+    method public static void setGetCredentialException(android.content.Intent intent, androidx.credentials.exceptions.GetCredentialException exception);
+    method public static void setGetCredentialResponse(android.content.Intent intent, androidx.credentials.GetCredentialResponse response);
+    field public static final androidx.credentials.provider.PendingIntentHandler.Companion Companion;
+  }
+
+  public static final class PendingIntentHandler.Companion {
+    method public androidx.credentials.provider.BeginGetCredentialRequest? retrieveBeginGetCredentialRequest(android.content.Intent intent);
+    method public androidx.credentials.provider.ProviderCreateCredentialRequest? retrieveProviderCreateCredentialRequest(android.content.Intent intent);
+    method public androidx.credentials.provider.ProviderGetCredentialRequest? retrieveProviderGetCredentialRequest(android.content.Intent intent);
+    method public void setBeginGetCredentialResponse(android.content.Intent intent, androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public void setCreateCredentialException(android.content.Intent intent, androidx.credentials.exceptions.CreateCredentialException exception);
+    method public void setCreateCredentialResponse(android.content.Intent intent, androidx.credentials.CreateCredentialResponse response);
+    method public void setGetCredentialException(android.content.Intent intent, androidx.credentials.exceptions.GetCredentialException exception);
+    method public void setGetCredentialResponse(android.content.Intent intent, androidx.credentials.GetCredentialResponse response);
+  }
+
+  public final class ProviderClearCredentialStateRequest {
+    ctor public ProviderClearCredentialStateRequest(androidx.credentials.provider.CallingAppInfo callingAppInfo);
+    method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+    property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+  }
+
+  public final class ProviderCreateCredentialRequest {
+    ctor public ProviderCreateCredentialRequest(androidx.credentials.CreateCredentialRequest callingRequest, androidx.credentials.provider.CallingAppInfo callingAppInfo);
+    method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+    method public androidx.credentials.CreateCredentialRequest getCallingRequest();
+    property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+    property public final androidx.credentials.CreateCredentialRequest callingRequest;
+  }
+
+  public final class ProviderGetCredentialRequest {
+    ctor public ProviderGetCredentialRequest(java.util.List credentialOptions, androidx.credentials.provider.CallingAppInfo callingAppInfo);
+    method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+    method public java.util.List getCredentialOptions();
+    property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+    property public final java.util.List credentialOptions;
+  }
+
+  @RequiresApi(26) public final class PublicKeyCredentialEntry extends androidx.credentials.provider.CredentialEntry {
+    ctor public PublicKeyCredentialEntry(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPublicKeyCredentialOption beginGetPublicKeyCredentialOption, optional CharSequence? displayName, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon icon, optional boolean isAutoSelectAllowed);
+    method public CharSequence? getDisplayName();
+    method public android.graphics.drawable.Icon getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getTypeDisplayName();
+    method public CharSequence getUsername();
+    method public boolean isAutoSelectAllowed();
+    property public final CharSequence? displayName;
+    property public final android.graphics.drawable.Icon icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence typeDisplayName;
+    property public final CharSequence username;
+  }
+
+  public static final class PublicKeyCredentialEntry.Builder {
+    ctor public PublicKeyCredentialEntry.Builder(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPublicKeyCredentialOption beginGetPublicKeyCredentialOption);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry build();
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setDisplayName(CharSequence? displayName);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setIcon(android.graphics.drawable.Icon icon);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+  }
+
+  public final class RemoteEntry {
+    ctor public RemoteEntry(android.app.PendingIntent pendingIntent);
+    method public android.app.PendingIntent getPendingIntent();
+    property public final android.app.PendingIntent pendingIntent;
+  }
+
+  public static final class RemoteEntry.Builder {
+    ctor public RemoteEntry.Builder(android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.RemoteEntry build();
+  }
+
+}
+
diff --git a/credentials/credentials/api/res-1.2.0-beta02.txt b/credentials/credentials/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/credentials/credentials/api/res-1.2.0-beta02.txt
diff --git a/credentials/credentials/api/restricted_1.2.0-beta02.txt b/credentials/credentials/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..8c9cf86
--- /dev/null
+++ b/credentials/credentials/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1,902 @@
+// Signature format: 4.0
+package androidx.credentials {
+
+  public final class ClearCredentialStateRequest {
+    ctor public ClearCredentialStateRequest();
+  }
+
+  public abstract class CreateCredentialRequest {
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final android.os.Bundle getCredentialData();
+    method public final androidx.credentials.CreateCredentialRequest.DisplayInfo getDisplayInfo();
+    method public final String? getOrigin();
+    method public final boolean getPreferImmediatelyAvailableCredentials();
+    method public final String getType();
+    method public final boolean isAutoSelectAllowed();
+    method public final boolean isSystemProviderRequired();
+    property public final android.os.Bundle candidateQueryData;
+    property public final android.os.Bundle credentialData;
+    property public final androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo;
+    property public final boolean isAutoSelectAllowed;
+    property public final boolean isSystemProviderRequired;
+    property public final String? origin;
+    property public final boolean preferImmediatelyAvailableCredentials;
+    property public final String type;
+  }
+
+  public static final class CreateCredentialRequest.DisplayInfo {
+    ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId);
+    ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName);
+    ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, CharSequence? userDisplayName, String? preferDefaultProvider);
+    method public CharSequence? getUserDisplayName();
+    method public CharSequence getUserId();
+    property public final CharSequence? userDisplayName;
+    property public final CharSequence userId;
+  }
+
+  public abstract class CreateCredentialResponse {
+    method public final android.os.Bundle getData();
+    method public final String getType();
+    property public final android.os.Bundle data;
+    property public final String type;
+  }
+
+  public class CreateCustomCredentialRequest extends androidx.credentials.CreateCredentialRequest {
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo);
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed);
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin);
+    ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin, optional boolean preferImmediatelyAvailableCredentials);
+  }
+
+  public class CreateCustomCredentialResponse extends androidx.credentials.CreateCredentialResponse {
+    ctor public CreateCustomCredentialResponse(String type, android.os.Bundle data);
+  }
+
+  public final class CreatePasswordRequest extends androidx.credentials.CreateCredentialRequest {
+    ctor public CreatePasswordRequest(String id, String password);
+    ctor public CreatePasswordRequest(String id, String password, optional String? origin);
+    ctor public CreatePasswordRequest(String id, String password, optional String? origin, optional boolean preferImmediatelyAvailableCredentials);
+    ctor public CreatePasswordRequest(String id, String password, optional String? origin, optional boolean preferImmediatelyAvailableCredentials, optional boolean isAutoSelectAllowed);
+    ctor public CreatePasswordRequest(String id, String password, String? origin, String? preferDefaultProvider, boolean preferImmediatelyAvailableCredentials, boolean isAutoSelectAllowed);
+    method public String getId();
+    method public String getPassword();
+    property public final String id;
+    property public final String password;
+  }
+
+  public final class CreatePasswordResponse extends androidx.credentials.CreateCredentialResponse {
+    ctor public CreatePasswordResponse();
+  }
+
+  public final class CreatePublicKeyCredentialRequest extends androidx.credentials.CreateCredentialRequest {
+    ctor public CreatePublicKeyCredentialRequest(String requestJson);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin, optional boolean isAutoSelectAllowed);
+    ctor public CreatePublicKeyCredentialRequest(String requestJson, byte[]? clientDataHash, boolean preferImmediatelyAvailableCredentials, String? origin, String? preferDefaultProvider, boolean isAutoSelectAllowed);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public final class CreatePublicKeyCredentialResponse extends androidx.credentials.CreateCredentialResponse {
+    ctor public CreatePublicKeyCredentialResponse(String registrationResponseJson);
+    method public String getRegistrationResponseJson();
+    property public final String registrationResponseJson;
+  }
+
+  public abstract class Credential {
+    method public final android.os.Bundle getData();
+    method public final String getType();
+    property public final android.os.Bundle data;
+    property public final String type;
+  }
+
+  @RequiresApi(16) public interface CredentialManager {
+    method public default suspend Object? clearCredentialState(androidx.credentials.ClearCredentialStateRequest request, kotlin.coroutines.Continuation);
+    method public void clearCredentialStateAsync(androidx.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method public static androidx.credentials.CredentialManager create(android.content.Context context);
+    method public default suspend Object? createCredential(android.content.Context context, androidx.credentials.CreateCredentialRequest request, kotlin.coroutines.Continuation);
+    method public void createCredentialAsync(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public android.app.PendingIntent createSettingsPendingIntent();
+    method public default suspend Object? getCredential(android.content.Context context, androidx.credentials.GetCredentialRequest request, kotlin.coroutines.Continuation);
+    method @RequiresApi(34) public default suspend Object? getCredential(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, kotlin.coroutines.Continuation);
+    method public void getCredentialAsync(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public void getCredentialAsync(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public default suspend Object? prepareGetCredential(androidx.credentials.GetCredentialRequest request, kotlin.coroutines.Continuation);
+    method @RequiresApi(34) public void prepareGetCredentialAsync(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    field public static final androidx.credentials.CredentialManager.Companion Companion;
+  }
+
+  public static final class CredentialManager.Companion {
+    method public androidx.credentials.CredentialManager create(android.content.Context context);
+  }
+
+  public interface CredentialManagerCallback {
+    method public void onError(E e);
+    method public void onResult(R result);
+  }
+
+  public abstract class CredentialOption {
+    method public final java.util.Set getAllowedProviders();
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final android.os.Bundle getRequestData();
+    method public final String getType();
+    method public final boolean isAutoSelectAllowed();
+    method public final boolean isSystemProviderRequired();
+    property public final java.util.Set allowedProviders;
+    property public final android.os.Bundle candidateQueryData;
+    property public final boolean isAutoSelectAllowed;
+    property public final boolean isSystemProviderRequired;
+    property public final android.os.Bundle requestData;
+    property public final String type;
+  }
+
+  public interface CredentialProvider {
+    method public boolean isAvailableOnDevice();
+    method public void onClearCredential(androidx.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method public void onCreateCredential(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method public void onGetCredential(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public default void onGetCredential(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+    method @RequiresApi(34) public default void onPrepareCredential(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback callback);
+  }
+
+  public class CustomCredential extends androidx.credentials.Credential {
+    ctor public CustomCredential(String type, android.os.Bundle data);
+  }
+
+  public final class GetCredentialRequest {
+    ctor public GetCredentialRequest(java.util.List credentialOptions);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin, optional boolean preferIdentityDocUi);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName);
+    ctor public GetCredentialRequest(java.util.List credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName, optional boolean preferImmediatelyAvailableCredentials);
+    method public java.util.List getCredentialOptions();
+    method public String? getOrigin();
+    method public boolean getPreferIdentityDocUi();
+    method public boolean getPreferImmediatelyAvailableCredentials();
+    method public android.content.ComponentName? getPreferUiBrandingComponentName();
+    property public final java.util.List credentialOptions;
+    property public final String? origin;
+    property public final boolean preferIdentityDocUi;
+    property public final boolean preferImmediatelyAvailableCredentials;
+    property public final android.content.ComponentName? preferUiBrandingComponentName;
+  }
+
+  public static final class GetCredentialRequest.Builder {
+    ctor public GetCredentialRequest.Builder();
+    method public androidx.credentials.GetCredentialRequest.Builder addCredentialOption(androidx.credentials.CredentialOption credentialOption);
+    method public androidx.credentials.GetCredentialRequest build();
+    method public androidx.credentials.GetCredentialRequest.Builder setCredentialOptions(java.util.List credentialOptions);
+    method public androidx.credentials.GetCredentialRequest.Builder setOrigin(String origin);
+    method public androidx.credentials.GetCredentialRequest.Builder setPreferIdentityDocUi(boolean preferIdentityDocUi);
+    method public androidx.credentials.GetCredentialRequest.Builder setPreferImmediatelyAvailableCredentials(boolean preferImmediatelyAvailableCredentials);
+    method public androidx.credentials.GetCredentialRequest.Builder setPreferUiBrandingComponentName(android.content.ComponentName? component);
+  }
+
+  public final class GetCredentialResponse {
+    ctor public GetCredentialResponse(androidx.credentials.Credential credential);
+    method public androidx.credentials.Credential getCredential();
+    property public final androidx.credentials.Credential credential;
+  }
+
+  public class GetCustomCredentialOption extends androidx.credentials.CredentialOption {
+    ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired);
+    ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed);
+    ctor public GetCustomCredentialOption(String type, android.os.Bundle requestData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, optional boolean isAutoSelectAllowed, optional java.util.Set allowedProviders);
+  }
+
+  public final class GetPasswordOption extends androidx.credentials.CredentialOption {
+    ctor public GetPasswordOption();
+    ctor public GetPasswordOption(optional java.util.Set allowedUserIds);
+    ctor public GetPasswordOption(optional java.util.Set allowedUserIds, optional boolean isAutoSelectAllowed);
+    ctor public GetPasswordOption(optional java.util.Set allowedUserIds, optional boolean isAutoSelectAllowed, optional java.util.Set allowedProviders);
+    method public java.util.Set getAllowedUserIds();
+    property public final java.util.Set allowedUserIds;
+  }
+
+  public final class GetPublicKeyCredentialOption extends androidx.credentials.CredentialOption {
+    ctor public GetPublicKeyCredentialOption(String requestJson);
+    ctor public GetPublicKeyCredentialOption(String requestJson, optional byte[]? clientDataHash);
+    ctor public GetPublicKeyCredentialOption(String requestJson, optional byte[]? clientDataHash, optional java.util.Set allowedProviders);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public final class PasswordCredential extends androidx.credentials.Credential {
+    ctor public PasswordCredential(String id, String password);
+    method public String getId();
+    method public String getPassword();
+    property public final String id;
+    property public final String password;
+    field public static final androidx.credentials.PasswordCredential.Companion Companion;
+    field public static final String TYPE_PASSWORD_CREDENTIAL = "android.credentials.TYPE_PASSWORD_CREDENTIAL";
+  }
+
+  public static final class PasswordCredential.Companion {
+  }
+
+  @RequiresApi(34) public final class PrepareGetCredentialResponse {
+    method public kotlin.jvm.functions.Function1? getCredentialTypeDelegate();
+    method public kotlin.jvm.functions.Function0? getHasAuthResultsDelegate();
+    method public kotlin.jvm.functions.Function0? getHasRemoteResultsDelegate();
+    method public androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? getPendingGetCredentialHandle();
+    method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasAuthenticationResults();
+    method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasCredentialResults(String credentialType);
+    method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasRemoteResults();
+    method public boolean isNullHandlesForTest();
+    property public final kotlin.jvm.functions.Function1? credentialTypeDelegate;
+    property public final kotlin.jvm.functions.Function0? hasAuthResultsDelegate;
+    property public final kotlin.jvm.functions.Function0? hasRemoteResultsDelegate;
+    property public final boolean isNullHandlesForTest;
+    property public final androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? pendingGetCredentialHandle;
+  }
+
+  @RequiresApi(34) public static final class PrepareGetCredentialResponse.PendingGetCredentialHandle {
+    ctor public PrepareGetCredentialResponse.PendingGetCredentialHandle(android.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? frameworkHandle);
+  }
+
+  @VisibleForTesting public static final class PrepareGetCredentialResponse.TestBuilder {
+    ctor public PrepareGetCredentialResponse.TestBuilder();
+    method public androidx.credentials.PrepareGetCredentialResponse build();
+    method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setCredentialTypeDelegate(kotlin.jvm.functions.Function1 handler);
+    method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasAuthResultsDelegate(kotlin.jvm.functions.Function0 handler);
+    method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasRemoteResultsDelegate(kotlin.jvm.functions.Function0 handler);
+  }
+
+  public final class PublicKeyCredential extends androidx.credentials.Credential {
+    ctor public PublicKeyCredential(String authenticationResponseJson);
+    method public String getAuthenticationResponseJson();
+    property public final String authenticationResponseJson;
+    field public static final androidx.credentials.PublicKeyCredential.Companion Companion;
+    field public static final String TYPE_PUBLIC_KEY_CREDENTIAL = "androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL";
+  }
+
+  public static final class PublicKeyCredential.Companion {
+  }
+
+}
+
+package androidx.credentials.exceptions {
+
+  public final class ClearCredentialCustomException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialCustomException(String type);
+    ctor public ClearCredentialCustomException(String type, optional CharSequence? errorMessage);
+    method public String getType();
+    property public String type;
+  }
+
+  public abstract class ClearCredentialException extends java.lang.Exception {
+  }
+
+  public final class ClearCredentialInterruptedException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialInterruptedException();
+    ctor public ClearCredentialInterruptedException(optional CharSequence? errorMessage);
+  }
+
+  public final class ClearCredentialProviderConfigurationException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialProviderConfigurationException();
+    ctor public ClearCredentialProviderConfigurationException(optional CharSequence? errorMessage);
+  }
+
+  public final class ClearCredentialUnknownException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialUnknownException();
+    ctor public ClearCredentialUnknownException(optional CharSequence? errorMessage);
+  }
+
+  public final class ClearCredentialUnsupportedException extends androidx.credentials.exceptions.ClearCredentialException {
+    ctor public ClearCredentialUnsupportedException();
+    ctor public ClearCredentialUnsupportedException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialCancellationException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialCancellationException();
+    ctor public CreateCredentialCancellationException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialCustomException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialCustomException(String type);
+    ctor public CreateCredentialCustomException(String type, optional CharSequence? errorMessage);
+    method public String getType();
+    property public String type;
+  }
+
+  public abstract class CreateCredentialException extends java.lang.Exception {
+  }
+
+  public final class CreateCredentialInterruptedException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialInterruptedException();
+    ctor public CreateCredentialInterruptedException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialNoCreateOptionException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialNoCreateOptionException();
+    ctor public CreateCredentialNoCreateOptionException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialProviderConfigurationException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialProviderConfigurationException();
+    ctor public CreateCredentialProviderConfigurationException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialUnknownException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialUnknownException();
+    ctor public CreateCredentialUnknownException(optional CharSequence? errorMessage);
+  }
+
+  public final class CreateCredentialUnsupportedException extends androidx.credentials.exceptions.CreateCredentialException {
+    ctor public CreateCredentialUnsupportedException();
+    ctor public CreateCredentialUnsupportedException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialCancellationException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialCancellationException();
+    ctor public GetCredentialCancellationException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialCustomException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialCustomException(String type);
+    ctor public GetCredentialCustomException(String type, optional CharSequence? errorMessage);
+    method public String getType();
+    property public String type;
+  }
+
+  public abstract class GetCredentialException extends java.lang.Exception {
+  }
+
+  public final class GetCredentialInterruptedException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialInterruptedException();
+    ctor public GetCredentialInterruptedException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialProviderConfigurationException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialProviderConfigurationException();
+    ctor public GetCredentialProviderConfigurationException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialUnknownException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialUnknownException();
+    ctor public GetCredentialUnknownException(optional CharSequence? errorMessage);
+  }
+
+  public final class GetCredentialUnsupportedException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public GetCredentialUnsupportedException();
+    ctor public GetCredentialUnsupportedException(optional CharSequence? errorMessage);
+  }
+
+  public final class NoCredentialException extends androidx.credentials.exceptions.GetCredentialException {
+    ctor public NoCredentialException();
+    ctor public NoCredentialException(optional CharSequence? errorMessage);
+  }
+
+}
+
+package androidx.credentials.exceptions.domerrors {
+
+  public final class AbortError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public AbortError();
+  }
+
+  public final class ConstraintError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public ConstraintError();
+  }
+
+  public final class DataCloneError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public DataCloneError();
+  }
+
+  public final class DataError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public DataError();
+  }
+
+  public abstract class DomError {
+    ctor public DomError(String type);
+  }
+
+  public final class EncodingError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public EncodingError();
+  }
+
+  public final class HierarchyRequestError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public HierarchyRequestError();
+  }
+
+  public final class InUseAttributeError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InUseAttributeError();
+  }
+
+  public final class InvalidCharacterError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidCharacterError();
+  }
+
+  public final class InvalidModificationError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidModificationError();
+  }
+
+  public final class InvalidNodeTypeError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidNodeTypeError();
+  }
+
+  public final class InvalidStateError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public InvalidStateError();
+  }
+
+  public final class NamespaceError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NamespaceError();
+  }
+
+  public final class NetworkError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NetworkError();
+  }
+
+  public final class NoModificationAllowedError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NoModificationAllowedError();
+  }
+
+  public final class NotAllowedError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotAllowedError();
+  }
+
+  public final class NotFoundError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotFoundError();
+  }
+
+  public final class NotReadableError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotReadableError();
+  }
+
+  public final class NotSupportedError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public NotSupportedError();
+  }
+
+  public final class OperationError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public OperationError();
+  }
+
+  public final class OptOutError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public OptOutError();
+  }
+
+  public final class QuotaExceededError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public QuotaExceededError();
+  }
+
+  public final class ReadOnlyError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public ReadOnlyError();
+  }
+
+  public final class SecurityError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public SecurityError();
+  }
+
+  public final class SyntaxError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public SyntaxError();
+  }
+
+  public final class TimeoutError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public TimeoutError();
+  }
+
+  public final class TransactionInactiveError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public TransactionInactiveError();
+  }
+
+  public final class UnknownError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public UnknownError();
+  }
+
+  public final class VersionError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public VersionError();
+  }
+
+  public final class WrongDocumentError extends androidx.credentials.exceptions.domerrors.DomError {
+    ctor public WrongDocumentError();
+  }
+
+}
+
+package androidx.credentials.exceptions.publickeycredential {
+
+  public final class CreatePublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.CreatePublicKeyCredentialException {
+    ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+    ctor public CreatePublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
+    method public androidx.credentials.exceptions.domerrors.DomError getDomError();
+    property public final androidx.credentials.exceptions.domerrors.DomError domError;
+  }
+
+  public class CreatePublicKeyCredentialException extends androidx.credentials.exceptions.CreateCredentialException {
+  }
+
+  public final class GetPublicKeyCredentialDomException extends androidx.credentials.exceptions.publickeycredential.GetPublicKeyCredentialException {
+    ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError);
+    ctor public GetPublicKeyCredentialDomException(androidx.credentials.exceptions.domerrors.DomError domError, optional CharSequence? errorMessage);
+    method public androidx.credentials.exceptions.domerrors.DomError getDomError();
+    property public final androidx.credentials.exceptions.domerrors.DomError domError;
+  }
+
+  public class GetPublicKeyCredentialException extends androidx.credentials.exceptions.GetCredentialException {
+  }
+
+}
+
+package androidx.credentials.provider {
+
+  public final class Action {
+    ctor public Action(CharSequence title, android.app.PendingIntent pendingIntent, optional CharSequence? subtitle);
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence? getSubtitle();
+    method public CharSequence getTitle();
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence? subtitle;
+    property public final CharSequence title;
+  }
+
+  public static final class Action.Builder {
+    ctor public Action.Builder(CharSequence title, android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.Action build();
+    method public androidx.credentials.provider.Action.Builder setSubtitle(CharSequence? subtitle);
+  }
+
+  public final class AuthenticationAction {
+    ctor public AuthenticationAction(CharSequence title, android.app.PendingIntent pendingIntent);
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getTitle();
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence title;
+  }
+
+  public static final class AuthenticationAction.Builder {
+    ctor public AuthenticationAction.Builder(CharSequence title, android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.AuthenticationAction build();
+  }
+
+  public abstract class BeginCreateCredentialRequest {
+    ctor public BeginCreateCredentialRequest(String type, android.os.Bundle candidateQueryData, androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+    method public static final android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialRequest request);
+    method public static final androidx.credentials.provider.BeginCreateCredentialRequest? fromBundle(android.os.Bundle bundle);
+    method public final androidx.credentials.provider.CallingAppInfo? getCallingAppInfo();
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final String getType();
+    property public final androidx.credentials.provider.CallingAppInfo? callingAppInfo;
+    property public final android.os.Bundle candidateQueryData;
+    property public final String type;
+    field public static final androidx.credentials.provider.BeginCreateCredentialRequest.Companion Companion;
+  }
+
+  public static final class BeginCreateCredentialRequest.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialRequest request);
+    method public androidx.credentials.provider.BeginCreateCredentialRequest? fromBundle(android.os.Bundle bundle);
+  }
+
+  public final class BeginCreateCredentialResponse {
+    ctor public BeginCreateCredentialResponse(optional java.util.List createEntries, optional androidx.credentials.provider.RemoteEntry? remoteEntry);
+    method public static android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialResponse response);
+    method public static androidx.credentials.provider.BeginCreateCredentialResponse? fromBundle(android.os.Bundle bundle);
+    method public java.util.List getCreateEntries();
+    method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+    property public final java.util.List createEntries;
+    property public final androidx.credentials.provider.RemoteEntry? remoteEntry;
+    field public static final androidx.credentials.provider.BeginCreateCredentialResponse.Companion Companion;
+  }
+
+  public static final class BeginCreateCredentialResponse.Builder {
+    ctor public BeginCreateCredentialResponse.Builder();
+    method public androidx.credentials.provider.BeginCreateCredentialResponse.Builder addCreateEntry(androidx.credentials.provider.CreateEntry createEntry);
+    method public androidx.credentials.provider.BeginCreateCredentialResponse build();
+    method public androidx.credentials.provider.BeginCreateCredentialResponse.Builder setCreateEntries(java.util.List createEntries);
+    method public androidx.credentials.provider.BeginCreateCredentialResponse.Builder setRemoteEntry(androidx.credentials.provider.RemoteEntry? remoteEntry);
+  }
+
+  public static final class BeginCreateCredentialResponse.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginCreateCredentialResponse response);
+    method public androidx.credentials.provider.BeginCreateCredentialResponse? fromBundle(android.os.Bundle bundle);
+  }
+
+  public class BeginCreateCustomCredentialRequest extends androidx.credentials.provider.BeginCreateCredentialRequest {
+    ctor public BeginCreateCustomCredentialRequest(String type, android.os.Bundle candidateQueryData, androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+  }
+
+  public final class BeginCreatePasswordCredentialRequest extends androidx.credentials.provider.BeginCreateCredentialRequest {
+    ctor public BeginCreatePasswordCredentialRequest(androidx.credentials.provider.CallingAppInfo? callingAppInfo, android.os.Bundle candidateQueryData);
+  }
+
+  public final class BeginCreatePublicKeyCredentialRequest extends androidx.credentials.provider.BeginCreateCredentialRequest {
+    ctor public BeginCreatePublicKeyCredentialRequest(String requestJson, androidx.credentials.provider.CallingAppInfo? callingAppInfo, android.os.Bundle candidateQueryData);
+    ctor public BeginCreatePublicKeyCredentialRequest(String requestJson, androidx.credentials.provider.CallingAppInfo? callingAppInfo, android.os.Bundle candidateQueryData, optional byte[]? clientDataHash);
+    method @VisibleForTesting public static androidx.credentials.provider.BeginCreatePublicKeyCredentialRequest createForTest(android.os.Bundle data, androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public abstract class BeginGetCredentialOption {
+    method public final android.os.Bundle getCandidateQueryData();
+    method public final String getId();
+    method public final String getType();
+    property public final android.os.Bundle candidateQueryData;
+    property public final String id;
+    property public final String type;
+  }
+
+  public final class BeginGetCredentialRequest {
+    ctor public BeginGetCredentialRequest(java.util.List beginGetCredentialOptions);
+    ctor public BeginGetCredentialRequest(java.util.List beginGetCredentialOptions, optional androidx.credentials.provider.CallingAppInfo? callingAppInfo);
+    method public static android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialRequest request);
+    method public static androidx.credentials.provider.BeginGetCredentialRequest? fromBundle(android.os.Bundle bundle);
+    method public java.util.List getBeginGetCredentialOptions();
+    method public androidx.credentials.provider.CallingAppInfo? getCallingAppInfo();
+    property public final java.util.List beginGetCredentialOptions;
+    property public final androidx.credentials.provider.CallingAppInfo? callingAppInfo;
+    field public static final androidx.credentials.provider.BeginGetCredentialRequest.Companion Companion;
+  }
+
+  public static final class BeginGetCredentialRequest.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialRequest request);
+    method public androidx.credentials.provider.BeginGetCredentialRequest? fromBundle(android.os.Bundle bundle);
+  }
+
+  public final class BeginGetCredentialResponse {
+    ctor public BeginGetCredentialResponse(optional java.util.List credentialEntries, optional java.util.List actions, optional java.util.List authenticationActions, optional androidx.credentials.provider.RemoteEntry? remoteEntry);
+    method public static android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public static androidx.credentials.provider.BeginGetCredentialResponse? fromBundle(android.os.Bundle bundle);
+    method public java.util.List getActions();
+    method public java.util.List getAuthenticationActions();
+    method public java.util.List getCredentialEntries();
+    method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+    property public final java.util.List actions;
+    property public final java.util.List authenticationActions;
+    property public final java.util.List credentialEntries;
+    property public final androidx.credentials.provider.RemoteEntry? remoteEntry;
+    field public static final androidx.credentials.provider.BeginGetCredentialResponse.Companion Companion;
+  }
+
+  public static final class BeginGetCredentialResponse.Builder {
+    ctor public BeginGetCredentialResponse.Builder();
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder addAction(androidx.credentials.provider.Action action);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder addAuthenticationAction(androidx.credentials.provider.AuthenticationAction authenticationAction);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder addCredentialEntry(androidx.credentials.provider.CredentialEntry entry);
+    method public androidx.credentials.provider.BeginGetCredentialResponse build();
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setActions(java.util.List actions);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setAuthenticationActions(java.util.List authenticationEntries);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setCredentialEntries(java.util.List entries);
+    method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setRemoteEntry(androidx.credentials.provider.RemoteEntry? remoteEntry);
+  }
+
+  public static final class BeginGetCredentialResponse.Companion {
+    method public android.os.Bundle asBundle(androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public androidx.credentials.provider.BeginGetCredentialResponse? fromBundle(android.os.Bundle bundle);
+  }
+
+  public class BeginGetCustomCredentialOption extends androidx.credentials.provider.BeginGetCredentialOption {
+    ctor public BeginGetCustomCredentialOption(String id, String type, android.os.Bundle candidateQueryData);
+  }
+
+  public final class BeginGetPasswordOption extends androidx.credentials.provider.BeginGetCredentialOption {
+    ctor public BeginGetPasswordOption(java.util.Set allowedUserIds, android.os.Bundle candidateQueryData, String id);
+    method @VisibleForTesting public static androidx.credentials.provider.BeginGetPasswordOption createForTest(android.os.Bundle data, String id);
+    method public java.util.Set getAllowedUserIds();
+    property public final java.util.Set allowedUserIds;
+  }
+
+  public final class BeginGetPublicKeyCredentialOption extends androidx.credentials.provider.BeginGetCredentialOption {
+    ctor public BeginGetPublicKeyCredentialOption(android.os.Bundle candidateQueryData, String id, String requestJson);
+    ctor public BeginGetPublicKeyCredentialOption(android.os.Bundle candidateQueryData, String id, String requestJson, optional byte[]? clientDataHash);
+    method public byte[]? getClientDataHash();
+    method public String getRequestJson();
+    property public final byte[]? clientDataHash;
+    property public final String requestJson;
+  }
+
+  public final class CallingAppInfo {
+    ctor public CallingAppInfo(String packageName, android.content.pm.SigningInfo signingInfo);
+    ctor public CallingAppInfo(String packageName, android.content.pm.SigningInfo signingInfo, optional String? origin);
+    method public String? getOrigin(String privilegedAllowlist);
+    method public String getPackageName();
+    method public android.content.pm.SigningInfo getSigningInfo();
+    method public boolean isOriginPopulated();
+    property public final String packageName;
+    property public final android.content.pm.SigningInfo signingInfo;
+  }
+
+  @RequiresApi(26) public final class CreateEntry {
+    ctor public CreateEntry(CharSequence accountName, android.app.PendingIntent pendingIntent, optional CharSequence? description, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon? icon, optional Integer? passwordCredentialCount, optional Integer? publicKeyCredentialCount, optional Integer? totalCredentialCount, optional boolean isAutoSelectAllowed);
+    method public CharSequence getAccountName();
+    method public CharSequence? getDescription();
+    method public android.graphics.drawable.Icon? getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public Integer? getPasswordCredentialCount();
+    method public android.app.PendingIntent getPendingIntent();
+    method public Integer? getPublicKeyCredentialCount();
+    method public Integer? getTotalCredentialCount();
+    method public boolean isAutoSelectAllowed();
+    property public final CharSequence accountName;
+    property public final CharSequence? description;
+    property public final android.graphics.drawable.Icon? icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+  }
+
+  public static final class CreateEntry.Builder {
+    ctor public CreateEntry.Builder(CharSequence accountName, android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.CreateEntry build();
+    method public androidx.credentials.provider.CreateEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.CreateEntry.Builder setDescription(CharSequence? description);
+    method public androidx.credentials.provider.CreateEntry.Builder setIcon(android.graphics.drawable.Icon? icon);
+    method public androidx.credentials.provider.CreateEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+    method public androidx.credentials.provider.CreateEntry.Builder setPasswordCredentialCount(int count);
+    method public androidx.credentials.provider.CreateEntry.Builder setPublicKeyCredentialCount(int count);
+    method public androidx.credentials.provider.CreateEntry.Builder setTotalCredentialCount(int count);
+  }
+
+  public abstract class CredentialEntry {
+    method public final androidx.credentials.provider.BeginGetCredentialOption getBeginGetCredentialOption();
+    property public final androidx.credentials.provider.BeginGetCredentialOption beginGetCredentialOption;
+  }
+
+  @RequiresApi(34) public abstract class CredentialProviderService extends android.service.credentials.CredentialProviderService {
+    ctor public CredentialProviderService();
+    method public final void onBeginCreateCredential(android.service.credentials.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public abstract void onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public final void onBeginGetCredential(android.service.credentials.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public abstract void onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public final void onClearCredentialState(android.service.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+    method public abstract void onClearCredentialStateRequest(androidx.credentials.provider.ProviderClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver callback);
+  }
+
+  @RequiresApi(26) public final class CustomCredentialEntry extends androidx.credentials.provider.CredentialEntry {
+    ctor public CustomCredentialEntry(android.content.Context context, CharSequence title, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetCredentialOption beginGetCredentialOption, optional CharSequence? subtitle, optional CharSequence? typeDisplayName, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon icon, optional boolean isAutoSelectAllowed);
+    method public android.graphics.drawable.Icon getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence? getSubtitle();
+    method public CharSequence getTitle();
+    method public String getType();
+    method public CharSequence? getTypeDisplayName();
+    method public boolean isAutoSelectAllowed();
+    property public final android.graphics.drawable.Icon icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence? subtitle;
+    property public final CharSequence title;
+    property public String type;
+    property public final CharSequence? typeDisplayName;
+  }
+
+  public static final class CustomCredentialEntry.Builder {
+    ctor public CustomCredentialEntry.Builder(android.content.Context context, String type, CharSequence title, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetCredentialOption beginGetCredentialOption);
+    method public androidx.credentials.provider.CustomCredentialEntry build();
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setIcon(android.graphics.drawable.Icon icon);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setSubtitle(CharSequence? subtitle);
+    method public androidx.credentials.provider.CustomCredentialEntry.Builder setTypeDisplayName(CharSequence? typeDisplayName);
+  }
+
+  public final class IntentHandlerConverters {
+    method @RequiresApi(34) public static androidx.credentials.provider.BeginGetCredentialResponse? getBeginGetResponse(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.CreateCredentialResponse? getCreateCredentialCredentialResponse(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.CreateCredentialException? getCreateCredentialException(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.GetCredentialException? getGetCredentialException(android.content.Intent);
+    method @RequiresApi(34) public static android.credentials.GetCredentialResponse? getGetCredentialResponse(android.content.Intent);
+  }
+
+  @RequiresApi(26) public final class PasswordCredentialEntry extends androidx.credentials.provider.CredentialEntry {
+    ctor public PasswordCredentialEntry(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPasswordOption beginGetPasswordOption, optional CharSequence? displayName, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon icon, optional boolean isAutoSelectAllowed);
+    method public CharSequence? getDisplayName();
+    method public android.graphics.drawable.Icon getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getTypeDisplayName();
+    method public CharSequence getUsername();
+    method public boolean isAutoSelectAllowed();
+    property public final CharSequence? displayName;
+    property public final android.graphics.drawable.Icon icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence typeDisplayName;
+    property public final CharSequence username;
+  }
+
+  public static final class PasswordCredentialEntry.Builder {
+    ctor public PasswordCredentialEntry.Builder(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPasswordOption beginGetPasswordOption);
+    method public androidx.credentials.provider.PasswordCredentialEntry build();
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setDisplayName(CharSequence? displayName);
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setIcon(android.graphics.drawable.Icon icon);
+    method public androidx.credentials.provider.PasswordCredentialEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+  }
+
+  @RequiresApi(34) public final class PendingIntentHandler {
+    ctor public PendingIntentHandler();
+    method public static androidx.credentials.provider.BeginGetCredentialRequest? retrieveBeginGetCredentialRequest(android.content.Intent intent);
+    method public static androidx.credentials.provider.ProviderCreateCredentialRequest? retrieveProviderCreateCredentialRequest(android.content.Intent intent);
+    method public static androidx.credentials.provider.ProviderGetCredentialRequest? retrieveProviderGetCredentialRequest(android.content.Intent intent);
+    method public static void setBeginGetCredentialResponse(android.content.Intent intent, androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public static void setCreateCredentialException(android.content.Intent intent, androidx.credentials.exceptions.CreateCredentialException exception);
+    method public static void setCreateCredentialResponse(android.content.Intent intent, androidx.credentials.CreateCredentialResponse response);
+    method public static void setGetCredentialException(android.content.Intent intent, androidx.credentials.exceptions.GetCredentialException exception);
+    method public static void setGetCredentialResponse(android.content.Intent intent, androidx.credentials.GetCredentialResponse response);
+    field public static final androidx.credentials.provider.PendingIntentHandler.Companion Companion;
+  }
+
+  public static final class PendingIntentHandler.Companion {
+    method public androidx.credentials.provider.BeginGetCredentialRequest? retrieveBeginGetCredentialRequest(android.content.Intent intent);
+    method public androidx.credentials.provider.ProviderCreateCredentialRequest? retrieveProviderCreateCredentialRequest(android.content.Intent intent);
+    method public androidx.credentials.provider.ProviderGetCredentialRequest? retrieveProviderGetCredentialRequest(android.content.Intent intent);
+    method public void setBeginGetCredentialResponse(android.content.Intent intent, androidx.credentials.provider.BeginGetCredentialResponse response);
+    method public void setCreateCredentialException(android.content.Intent intent, androidx.credentials.exceptions.CreateCredentialException exception);
+    method public void setCreateCredentialResponse(android.content.Intent intent, androidx.credentials.CreateCredentialResponse response);
+    method public void setGetCredentialException(android.content.Intent intent, androidx.credentials.exceptions.GetCredentialException exception);
+    method public void setGetCredentialResponse(android.content.Intent intent, androidx.credentials.GetCredentialResponse response);
+  }
+
+  public final class ProviderClearCredentialStateRequest {
+    ctor public ProviderClearCredentialStateRequest(androidx.credentials.provider.CallingAppInfo callingAppInfo);
+    method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+    property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+  }
+
+  public final class ProviderCreateCredentialRequest {
+    ctor public ProviderCreateCredentialRequest(androidx.credentials.CreateCredentialRequest callingRequest, androidx.credentials.provider.CallingAppInfo callingAppInfo);
+    method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+    method public androidx.credentials.CreateCredentialRequest getCallingRequest();
+    property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+    property public final androidx.credentials.CreateCredentialRequest callingRequest;
+  }
+
+  public final class ProviderGetCredentialRequest {
+    ctor public ProviderGetCredentialRequest(java.util.List credentialOptions, androidx.credentials.provider.CallingAppInfo callingAppInfo);
+    method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+    method public java.util.List getCredentialOptions();
+    property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+    property public final java.util.List credentialOptions;
+  }
+
+  @RequiresApi(26) public final class PublicKeyCredentialEntry extends androidx.credentials.provider.CredentialEntry {
+    ctor public PublicKeyCredentialEntry(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPublicKeyCredentialOption beginGetPublicKeyCredentialOption, optional CharSequence? displayName, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon icon, optional boolean isAutoSelectAllowed);
+    method public CharSequence? getDisplayName();
+    method public android.graphics.drawable.Icon getIcon();
+    method public java.time.Instant? getLastUsedTime();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getTypeDisplayName();
+    method public CharSequence getUsername();
+    method public boolean isAutoSelectAllowed();
+    property public final CharSequence? displayName;
+    property public final android.graphics.drawable.Icon icon;
+    property public final boolean isAutoSelectAllowed;
+    property public final java.time.Instant? lastUsedTime;
+    property public final android.app.PendingIntent pendingIntent;
+    property public final CharSequence typeDisplayName;
+    property public final CharSequence username;
+  }
+
+  public static final class PublicKeyCredentialEntry.Builder {
+    ctor public PublicKeyCredentialEntry.Builder(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPublicKeyCredentialOption beginGetPublicKeyCredentialOption);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry build();
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setDisplayName(CharSequence? displayName);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setIcon(android.graphics.drawable.Icon icon);
+    method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime);
+  }
+
+  public final class RemoteEntry {
+    ctor public RemoteEntry(android.app.PendingIntent pendingIntent);
+    method public android.app.PendingIntent getPendingIntent();
+    property public final android.app.PendingIntent pendingIntent;
+  }
+
+  public static final class RemoteEntry.Builder {
+    ctor public RemoteEntry.Builder(android.app.PendingIntent pendingIntent);
+    method public androidx.credentials.provider.RemoteEntry build();
+  }
+
+}
+
diff --git a/datastore/datastore-core/lint-baseline.xml b/datastore/datastore-core/lint-baseline.xml
deleted file mode 100644
index b8e7866..0000000
--- a/datastore/datastore-core/lint-baseline.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                coordinator.lock {"
-        errorLine2="                ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                        version = coordinator.getVersion()"
-        errorLine2="                                  ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                    coordinator.updateNotifications.conflate().collect {"
-        errorLine2="                    ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `readDataAndUpdateCache` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                            readDataAndUpdateCache(requireLock = true)"
-        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                coordinator.lock { block() }"
-        errorLine2="                ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                    val data = readDataFromFileOrDefault()"
-        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                    Data(data, data.hashCode(), version = coordinator.getVersion())"
-        errorLine2="                                                          ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                    val preLockVersion = coordinator.getVersion()"
-        errorLine2="                                         ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                    coordinator.tryLock { locked ->"
-        errorLine2="                    ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                        val data = readDataFromFileOrDefault()"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                        val version = if (locked) coordinator.getVersion() else preLockVersion"
-        errorLine2="                                                  ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                            newData = readDataFromFileOrDefault()"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-    
-        id="SyntheticAccessor"
-        message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
-        errorLine1="                            version = coordinator.getVersion()"
-        errorLine2="                                      ~~~~~~~~~~~">
-        
-            file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
-    
-
-
diff --git a/development/plot-benchmarks/src/lib/Dataset.svelte b/development/plot-benchmarks/src/lib/Dataset.svelte
index 6e81cc0..a435bae 100644
--- a/development/plot-benchmarks/src/lib/Dataset.svelte
+++ b/development/plot-benchmarks/src/lib/Dataset.svelte
@@ -1,19 +1,23 @@