Merge "Filter ExerciseEventCapabilities if unknown" 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 7f6b19a..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<java.lang.Double> 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<java.lang.Long> 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<java.lang.Long> 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<java.lang.String> 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<java.lang.String> getNames();
+ property public final java.util.List<java.lang.String> names;
+ }
+
+ @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class MicrobenchmarkConfig {
+ ctor public MicrobenchmarkConfig(optional java.util.List<? extends androidx.benchmark.MetricCapture> metrics, optional boolean shouldEnableTraceAppTag, optional boolean shouldEnablePerfettoSdkTracing, optional androidx.benchmark.ProfilerConfig? profiler);
+ method public java.util.List<androidx.benchmark.MetricCapture> getMetrics();
+ method public androidx.benchmark.ProfilerConfig? getProfiler();
+ method public boolean getShouldEnablePerfettoSdkTracing();
+ method public boolean getShouldEnableTraceAppTag();
+ property public final java.util.List<androidx.benchmark.MetricCapture> 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<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> 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<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> 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<java.lang.Double> 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<java.lang.Long> 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<java.lang.Long> 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<java.lang.String> 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<java.lang.String> getNames();
+ property public final java.util.List<java.lang.String> names;
+ }
+
+ @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public final class MicrobenchmarkConfig {
+ ctor public MicrobenchmarkConfig(optional java.util.List<? extends androidx.benchmark.MetricCapture> metrics, optional boolean shouldEnableTraceAppTag, optional boolean shouldEnablePerfettoSdkTracing, optional androidx.benchmark.ProfilerConfig? profiler);
+ method public java.util.List<androidx.benchmark.MetricCapture> getMetrics();
+ method public androidx.benchmark.ProfilerConfig? getProfiler();
+ method public boolean getShouldEnablePerfettoSdkTracing();
+ method public boolean getShouldEnableTraceAppTag();
+ property public final java.util.List<androidx.benchmark.MetricCapture> 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<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public static void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> 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<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, optional java.util.List<java.lang.String> appTagPackages, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+ method public void record(String fileLabel, kotlin.jvm.functions.Function0<kotlin.Unit> 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<RuleType>
@@ -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> T runWithTimingDisabled(kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+ public final class BenchmarkRuleKt {
+ method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1<? super androidx.benchmark.junit4.BenchmarkRule.Scope,kotlin.Unit> 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<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? 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<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? getTraceCallback();
+ property public final boolean enableAppTagTracing;
+ property public final boolean enableUserspaceTracing;
+ property public final kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? 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> T runWithTimingDisabled(kotlin.jvm.functions.Function0<? extends T> block);
+ }
+
+ public final class BenchmarkRuleKt {
+ method public static inline void measureRepeated(androidx.benchmark.junit4.BenchmarkRule, kotlin.jvm.functions.Function1<? super androidx.benchmark.junit4.BenchmarkRule.Scope,kotlin.Unit> 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<? super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? 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<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? getTraceCallback();
+ property public final boolean enableAppTagTracing;
+ property public final boolean enableUserspaceTracing;
+ property public final kotlin.jvm.functions.Function1<androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? 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<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> 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<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> 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<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> 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<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> 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<? super java.lang.String,java.lang.Boolean> filterPredicate, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, optional int stableIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, optional int maxIterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> profileBlock);
+ method public void collect(String packageName, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> 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<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, optional androidx.benchmark.macro.StartupMode? startupMode, @IntRange(from=1L) int iterations, optional kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> setupBlock, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, optional androidx.benchmark.macro.CompilationMode compilationMode, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> measureBlock);
+ method public void measureRepeated(String packageName, java.util.List<? extends androidx.benchmark.macro.Metric> metrics, @IntRange(from=1L) int iterations, kotlin.jvm.functions.Function1<? super androidx.benchmark.macro.MacrobenchmarkScope,kotlin.Unit> 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<? super android.content.Intent,kotlin.Unit> 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<androidx.benchmark.macro.Metric.Measurement> 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<? extends androidx.benchmark.macro.MemoryUsageMetric.SubMetric> subMetrics);
+ method public java.util.List<androidx.benchmark.macro.Metric.Measurement> 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<java.lang.Double> dataSamples);
+ method public String component1();
+ method public java.util.List<java.lang.Double> component2();
+ method public boolean component3();
+ method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List<java.lang.Double> data, boolean requireSingleValue);
+ method public java.util.List<java.lang.Double> getData();
+ method public String getName();
+ method public boolean getRequireSingleValue();
+ property public final java.util.List<java.lang.Double> 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<androidx.benchmark.macro.Metric.Measurement> expected, java.util.List<androidx.benchmark.macro.Metric.Measurement> 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<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> 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<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ }
+
+ public abstract static sealed class PowerMetric.Type {
+ method public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> getCategories();
+ method public final void setCategories(java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel>);
+ property public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> 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<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> energyCategories);
+ }
+
+ public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> 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<androidx.benchmark.macro.Metric.Measurement> 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> T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block);
+ method public static <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+ }
+
+ public static final class PerfettoTraceProcessor.Companion {
+ method public <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ }
+
+ public static final class PerfettoTraceProcessor.Session {
+ method public kotlin.sequences.Sequence<androidx.benchmark.perfetto.Row> 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<java.lang.String,java.lang.Object> {
+ ctor public Row(java.util.Map<java.lang.String,?> 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<java.lang.String,?>... 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<? super android.content.Intent,kotlin.Unit> 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<androidx.benchmark.macro.Metric.Measurement> 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<? extends androidx.benchmark.macro.MemoryUsageMetric.SubMetric> subMetrics);
+ method public java.util.List<androidx.benchmark.macro.Metric.Measurement> 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<java.lang.Double> dataSamples);
+ method public String component1();
+ method public java.util.List<java.lang.Double> component2();
+ method public boolean component3();
+ method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.List<java.lang.Double> data, boolean requireSingleValue);
+ method public java.util.List<java.lang.Double> getData();
+ method public String getName();
+ method public boolean getRequireSingleValue();
+ property public final java.util.List<java.lang.Double> 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<androidx.benchmark.macro.Metric.Measurement> expected, java.util.List<androidx.benchmark.macro.Metric.Measurement> 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<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> 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<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> categories);
+ }
+
+ public abstract static sealed class PowerMetric.Type {
+ method public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> getCategories();
+ method public final void setCategories(java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel>);
+ property public final java.util.Map<androidx.benchmark.macro.PowerCategory,androidx.benchmark.macro.PowerCategoryDisplayLevel> 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<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> energyCategories);
+ }
+
+ public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type {
+ ctor public PowerMetric.Type.Power(optional java.util.Map<androidx.benchmark.macro.PowerCategory,? extends androidx.benchmark.macro.PowerCategoryDisplayLevel> 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<androidx.benchmark.macro.Metric.Measurement> 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> T loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block);
+ method public static <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ field public static final androidx.benchmark.perfetto.PerfettoTraceProcessor.Companion Companion;
+ }
+
+ public static final class PerfettoTraceProcessor.Companion {
+ method public <T> T runServer(kotlin.jvm.functions.Function1<? super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block);
+ }
+
+ public static final class PerfettoTraceProcessor.Session {
+ method public kotlin.sequences.Sequence<androidx.benchmark.perfetto.Row> 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<java.lang.String,java.lang.Object> {
+ ctor public Row(java.util.Map<java.lang.String,?> 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<java.lang.String,?>... pairs);
+ }
+
+}
+
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<KotlinStdlibDependenciesRule>(
+ "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<java.lang.Void!> addCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> 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<java.lang.Void!> 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> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T!>);
+ method public String getCameraId();
+ }
+
+ @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+ }
+
+ @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
+ ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+ method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+ method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setPhysicalCameraId(String);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+ method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setStreamUseCase(long);
+ }
+
+ @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+ method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ }
+
+ @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.interop.CaptureRequestOptions> {
+ ctor public CaptureRequestOptions.Builder();
+ method public androidx.camera.camera2.interop.CaptureRequestOptions build();
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, 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<java.lang.Void!> addCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> 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<java.lang.Void!> 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> T? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key<T!>);
+ method public String getCameraId();
+ }
+
+ @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+ }
+
+ @RequiresApi(21) public static final class Camera2Interop.Extender<T> {
+ ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+ method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+ method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setPhysicalCameraId(String);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+ method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+ method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setStreamUseCase(long);
+ }
+
+ @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions {
+ method public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ }
+
+ @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.interop.CaptureRequestOptions> {
+ ctor public CaptureRequestOptions.Builder();
+ method public androidx.camera.camera2.interop.CaptureRequestOptions build();
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>);
+ method public <ValueT> androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, 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<java.lang.Void!> cancelFocusAndMetering();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> setExposureCompensationIndex(int);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> 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<java.lang.Throwable!>);
+ ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.SurfaceProcessor, androidx.core.util.Consumer<java.lang.Throwable!>);
+ method public androidx.core.util.Consumer<java.lang.Throwable!> 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<androidx.camera.core.CameraInfo!> filter(java.util.List<androidx.camera.core.CameraInfo!>);
+ }
+
+ @RequiresApi(21) public interface CameraInfo {
+ method public androidx.camera.core.CameraSelector getCameraSelector();
+ method public androidx.lifecycle.LiveData<androidx.camera.core.CameraState!> 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<android.util.Range<java.lang.Integer!>!> getSupportedFrameRateRanges();
+ method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+ method public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> 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<androidx.camera.core.CameraInfo!> 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<androidx.camera.core.CameraInfo!> filter(java.util.List<androidx.camera.core.CameraInfo!>);
+ 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<androidx.camera.core.Camera!>);
+ method public java.util.List<androidx.camera.core.Camera!> 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<java.lang.Integer!> getExposureCompensationRange();
+ method public android.util.Rational getExposureCompensationStep();
+ method public boolean isExposureCompensationSupported();
+ }
+
+ @RequiresApi(21) public interface ExtendableBuilder<T> {
+ method public T build();
+ }
+
+ @RequiresApi(21) public final class FocusMeteringAction {
+ method public long getAutoCancelDurationInMillis();
+ method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+ method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+ method public java.util.List<androidx.camera.core.MeteringPoint!> 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<androidx.camera.core.ImageAnalysis> {
+ 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<androidx.camera.core.ImageCapture> {
+ 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<java.lang.Integer!> 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<androidx.camera.core.Preview> {
+ 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<java.lang.Integer!>);
+ 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<androidx.camera.core.SurfaceOutput.Event!>);
+ 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<androidx.camera.core.SurfaceRequest.Result!>);
+ 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<androidx.camera.core.CameraEffect!> getEffects();
+ method public java.util.List<androidx.camera.core.UseCase!> 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<android.util.Size!> filter(java.util.List<android.util.Size!>, 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<java.lang.Void!> cancelFocusAndMetering();
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> setExposureCompensationIndex(int);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+ method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+ method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> 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<java.lang.Throwable!>);
+ ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.SurfaceProcessor, androidx.core.util.Consumer<java.lang.Throwable!>);
+ method public androidx.core.util.Consumer<java.lang.Throwable!> 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<androidx.camera.core.CameraInfo!> filter(java.util.List<androidx.camera.core.CameraInfo!>);
+ }
+
+ @RequiresApi(21) public interface CameraInfo {
+ method public androidx.camera.core.CameraSelector getCameraSelector();
+ method public androidx.lifecycle.LiveData<androidx.camera.core.CameraState!> 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<android.util.Range<java.lang.Integer!>!> getSupportedFrameRateRanges();
+ method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+ method public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> 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<androidx.camera.core.CameraInfo!> 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<androidx.camera.core.CameraInfo!> filter(java.util.List<androidx.camera.core.CameraInfo!>);
+ 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<androidx.camera.core.Camera!>);
+ method public java.util.List<androidx.camera.core.Camera!> 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<java.lang.Integer!> getExposureCompensationRange();
+ method public android.util.Rational getExposureCompensationStep();
+ method public boolean isExposureCompensationSupported();
+ }
+
+ @RequiresApi(21) public interface ExtendableBuilder<T> {
+ method public T build();
+ }
+
+ @RequiresApi(21) public final class FocusMeteringAction {
+ method public long getAutoCancelDurationInMillis();
+ method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+ method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+ method public java.util.List<androidx.camera.core.MeteringPoint!> 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<androidx.camera.core.ImageAnalysis> {
+ 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<androidx.camera.core.ImageCapture> {
+ 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<java.lang.Integer!> 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<androidx.camera.core.Preview> {
+ 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<java.lang.Integer!>);
+ 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<androidx.camera.core.SurfaceOutput.Event!>);
+ 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<androidx.camera.core.SurfaceRequest.Result!>);
+ 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<androidx.camera.core.CameraEffect!> getEffects();
+ method public java.util.List<androidx.camera.core.UseCase!> 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<android.util.Size!> filter(java.util.List<android.util.Size!>, 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<java.lang.Long!>? 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<androidx.camera.extensions.ExtensionsManager!> 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<java.lang.Long!>? 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<androidx.camera.extensions.ExtensionsManager!> 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<androidx.camera.core.ConcurrentCamera.SingleCameraConfig!>);
+ method @SuppressCompatibility @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
+ method public java.util.List<androidx.camera.core.CameraInfo!> getAvailableCameraInfos();
+ method public java.util.List<java.util.List<androidx.camera.core.CameraInfo!>!> getAvailableConcurrentCameraInfos();
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> 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<androidx.camera.core.ConcurrentCamera.SingleCameraConfig!>);
+ method @SuppressCompatibility @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
+ method public java.util.List<androidx.camera.core.CameraInfo!> getAvailableCameraInfos();
+ method public java.util.List<java.util.List<androidx.camera.core.CameraInfo!>!> getAvailableConcurrentCameraInfos();
+ method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> 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<com.google.mlkit.vision.interfaces.Detector<?>!>, int, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.mlkit.vision.MlKitAnalyzer.Result!>);
+ 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<com.google.mlkit.vision.interfaces.Detector<?>!,java.lang.Object!>, long, java.util.Map<com.google.mlkit.vision.interfaces.Detector<?>!,java.lang.Throwable!>);
+ method public Throwable? getThrowable(com.google.mlkit.vision.interfaces.Detector<?>);
+ method public long getTimestamp();
+ method public <T> T? getValue(com.google.mlkit.vision.interfaces.Detector<T!>);
+ }
+
+}
+
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<com.google.mlkit.vision.interfaces.Detector<?>!>, int, java.util.concurrent.Executor, androidx.core.util.Consumer<androidx.camera.mlkit.vision.MlKitAnalyzer.Result!>);
+ 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<com.google.mlkit.vision.interfaces.Detector<?>!,java.lang.Object!>, long, java.util.Map<com.google.mlkit.vision.interfaces.Detector<?>!,java.lang.Throwable!>);
+ method public Throwable? getThrowable(com.google.mlkit.vision.interfaces.Detector<?>);
+ method public long getTimestamp();
+ method public <T> T? getValue(com.google.mlkit.vision.interfaces.Detector<T!>);
+ }
+
+}
+
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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.video.Quality!>);
+ method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List<androidx.camera.video.Quality!>, 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<androidx.camera.video.Quality!> 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<androidx.camera.core.DynamicRange!> getSupportedDynamicRanges();
+ method public java.util.List<androidx.camera.video.Quality!> getSupportedQualities(androidx.camera.core.DynamicRange);
+ method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+ }
+
+ @RequiresApi(21) public final class VideoCapture<T extends androidx.camera.video.VideoOutput> 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<java.lang.Integer!> getTargetFrameRate();
+ method public int getTargetRotation();
+ method public void setTargetRotation(int);
+ method public static <T extends androidx.camera.video.VideoOutput> androidx.camera.video.VideoCapture<T!> withOutput(T);
+ }
+
+ @RequiresApi(21) public static final class VideoCapture.Builder<T extends androidx.camera.video.VideoOutput> implements androidx.camera.core.ExtendableBuilder<androidx.camera.video.VideoCapture> {
+ ctor public VideoCapture.Builder(T);
+ method public androidx.camera.video.VideoCapture<T!> build();
+ method public androidx.camera.video.VideoCapture.Builder<T!> setDynamicRange(androidx.camera.core.DynamicRange);
+ method public androidx.camera.video.VideoCapture.Builder<T!> setMirrorMode(int);
+ method public androidx.camera.video.VideoCapture.Builder<T!> setTargetFrameRate(android.util.Range<java.lang.Integer!>);
+ method public androidx.camera.video.VideoCapture.Builder<T!> 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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.video.Quality!>);
+ method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List<androidx.camera.video.Quality!>, 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<androidx.camera.video.Quality!> 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<androidx.camera.core.DynamicRange!> getSupportedDynamicRanges();
+ method public java.util.List<androidx.camera.video.Quality!> getSupportedQualities(androidx.camera.core.DynamicRange);
+ method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange);
+ }
+
+ @RequiresApi(21) public final class VideoCapture<T extends androidx.camera.video.VideoOutput> 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<java.lang.Integer!> getTargetFrameRate();
+ method public int getTargetRotation();
+ method public void setTargetRotation(int);
+ method public static <T extends androidx.camera.video.VideoOutput> androidx.camera.video.VideoCapture<T!> withOutput(T);
+ }
+
+ @RequiresApi(21) public static final class VideoCapture.Builder<T extends androidx.camera.video.VideoOutput> implements androidx.camera.core.ExtendableBuilder<androidx.camera.video.VideoCapture> {
+ ctor public VideoCapture.Builder(T);
+ method public androidx.camera.video.VideoCapture<T!> build();
+ method public androidx.camera.video.VideoCapture.Builder<T!> setDynamicRange(androidx.camera.core.DynamicRange);
+ method public androidx.camera.video.VideoCapture.Builder<T!> setMirrorMode(int);
+ method public androidx.camera.video.VideoCapture.Builder<T!> setTargetFrameRate(android.util.Range<java.lang.Integer!>);
+ method public androidx.camera.video.VideoCapture.Builder<T!> 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.
+ * <ul>
+ * <li>
* 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.
+ * </li>
+ * <li>
* Motc C, X650 and LG-X230 have the same problem as Nokia 1. See b/199582287
+ * </li>
+ * <li>
* Positivo Twist 2 Pro have the same problem as Nokia 1. See b/218841498
+ * </li>
+ * <li>
* 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()}
+ * </li>
+ * <li>
+ * 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.
+ * </li>
+ * <li>
+ * {@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.
+ * </li>
+ * </ul>
+ * 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<String> 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<java.lang.Void!> 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<java.lang.Void!> getInitializationFuture();
+ method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+ method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
+ method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+ method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+ method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> 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<androidx.camera.core.CameraEffect!>);
+ 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<java.lang.Void!> 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<java.lang.Void!> 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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.view.PreviewView.StreamState!> 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<java.lang.Void!> 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<java.lang.Void!> getInitializationFuture();
+ method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize();
+ method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTapToFocusState();
+ method @MainThread public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+ method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector();
+ method @MainThread public androidx.lifecycle.LiveData<androidx.camera.core.ZoomState!> 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<androidx.camera.core.CameraEffect!>);
+ 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<java.lang.Void!> 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<java.lang.Void!> 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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.video.VideoRecordEvent!>);
+ 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<androidx.camera.view.PreviewView.StreamState!> 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<android.view.Surface!> 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<? super android.view.Surface>);
+ 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<android.view.Surface!> 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<? super android.view.Surface>);
+ 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<K, V> extends androidx.collection.SimpleArrayMap<K,V> implements java.util.Map<K,V> {
+ 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<java.util.Map.Entry<K!,V!>!> entrySet();
+ method public V! get(Object?);
+ method public java.util.Set<K!> keySet();
+ method public void putAll(java.util.Map<? extends K,? extends V>);
+ method public V! remove(Object?);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public java.util.Collection<V!> values();
+ }
+
+ public final class ArrayMapKt {
+ method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
+ method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ }
+
+ public final class ArraySet<E> implements java.util.Collection<E> kotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set<E> {
+ ctor public ArraySet();
+ ctor public ArraySet(androidx.collection.ArraySet<? extends E>? set);
+ ctor public ArraySet(E![]? array);
+ ctor public ArraySet(optional int capacity);
+ ctor public ArraySet(java.util.Collection<? extends E>? set);
+ method public boolean add(E element);
+ method public void addAll(androidx.collection.ArraySet<? extends E> array);
+ method public boolean addAll(java.util.Collection<? extends E> elements);
+ method public void clear();
+ method public operator boolean contains(E element);
+ method public boolean containsAll(java.util.Collection<E!> 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<E> iterator();
+ method public boolean remove(E element);
+ method public boolean removeAll(androidx.collection.ArraySet<? extends E> array);
+ method public boolean removeAll(java.util.Collection<E!> elements);
+ method public E removeAt(int index);
+ method public boolean retainAll(java.util.Collection<E!> elements);
+ method public Object![] toArray();
+ method public <T> T![] toArray(T![] array);
+ method public E valueAt(int index);
+ property public int size;
+ }
+
+ public final class ArraySetKt {
+ method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
+ method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
+ }
+
+ public final class CircularArray<E> {
+ 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<E> 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<E> 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<? extends E> 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 <T> boolean contains(androidx.collection.LongSparseArray<T>, long key);
+ method public static inline <T> void forEach(androidx.collection.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method public static inline <T> T getOrDefault(androidx.collection.LongSparseArray<T>, long key, T defaultValue);
+ method public static inline <T> T getOrElse(androidx.collection.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(androidx.collection.LongSparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(androidx.collection.LongSparseArray<T>);
+ method public static <T> kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray<T>);
+ method public static operator <T> androidx.collection.LongSparseArray<T> plus(androidx.collection.LongSparseArray<T>, androidx.collection.LongSparseArray<T> other);
+ method @Deprecated public static <T> boolean remove(androidx.collection.LongSparseArray<T>, long key, T value);
+ method public static inline operator <T> void set(androidx.collection.LongSparseArray<T>, long key, T value);
+ method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.LongSparseArray<T>);
+ }
+
+ public class LruCache<K, V> {
+ 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<K,V> snapshot();
+ method public void trimToSize(int maxSize);
+ }
+
+ public final class LruCacheKt {
+ method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+ }
+
+ public class SimpleArrayMap<K, V> {
+ ctor public SimpleArrayMap();
+ ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap<? extends K,? extends V>? 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<? extends K,? extends V> 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<E> 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<E> 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<? extends E> 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 <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
+ method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T defaultValue);
+ method public static inline <T> T getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
+ method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
+ method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
+ method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T value);
+ method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T value);
+ method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
+ }
+
+}
+
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<K, V> extends androidx.collection.SimpleArrayMap<K,V> implements java.util.Map<K,V> {
+ 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<java.util.Map.Entry<K!,V!>!> entrySet();
+ method public V! get(Object?);
+ method public java.util.Set<K!> keySet();
+ method public void putAll(java.util.Map<? extends K,? extends V>);
+ method public V! remove(Object?);
+ method public boolean removeAll(java.util.Collection<?>);
+ method public boolean retainAll(java.util.Collection<?>);
+ method public java.util.Collection<V!> values();
+ }
+
+ public final class ArrayMapKt {
+ method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
+ method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+ }
+
+ public final class ArraySet<E> implements java.util.Collection<E> kotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set<E> {
+ ctor public ArraySet();
+ ctor public ArraySet(androidx.collection.ArraySet<? extends E>? set);
+ ctor public ArraySet(E![]? array);
+ ctor public ArraySet(optional int capacity);
+ ctor public ArraySet(java.util.Collection<? extends E>? set);
+ method public boolean add(E element);
+ method public void addAll(androidx.collection.ArraySet<? extends E> array);
+ method public boolean addAll(java.util.Collection<? extends E> elements);
+ method public void clear();
+ method public operator boolean contains(E element);
+ method public boolean containsAll(java.util.Collection<E!> 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<E> iterator();
+ method public boolean remove(E element);
+ method public boolean removeAll(androidx.collection.ArraySet<? extends E> array);
+ method public boolean removeAll(java.util.Collection<E!> elements);
+ method public E removeAt(int index);
+ method public boolean retainAll(java.util.Collection<E!> elements);
+ method public Object![] toArray();
+ method public <T> T![] toArray(T![] array);
+ method public E valueAt(int index);
+ property public int size;
+ }
+
+ public final class ArraySetKt {
+ method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
+ method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
+ }
+
+ public final class CircularArray<E> {
+ 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<E> 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<E> 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<? extends E> 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 <T> boolean contains(androidx.collection.LongSparseArray<T>, long key);
+ method public static inline <T> void forEach(androidx.collection.LongSparseArray<T>, kotlin.jvm.functions.Function2<? super java.lang.Long,? super T,kotlin.Unit> action);
+ method public static inline <T> T getOrDefault(androidx.collection.LongSparseArray<T>, long key, T defaultValue);
+ method public static inline <T> T getOrElse(androidx.collection.LongSparseArray<T>, long key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(androidx.collection.LongSparseArray<T>);
+ method public static inline <T> boolean isNotEmpty(androidx.collection.LongSparseArray<T>);
+ method public static <T> kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray<T>);
+ method public static operator <T> androidx.collection.LongSparseArray<T> plus(androidx.collection.LongSparseArray<T>, androidx.collection.LongSparseArray<T> other);
+ method @Deprecated public static <T> boolean remove(androidx.collection.LongSparseArray<T>, long key, T value);
+ method public static inline operator <T> void set(androidx.collection.LongSparseArray<T>, long key, T value);
+ method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.LongSparseArray<T>);
+ }
+
+ public class LruCache<K, V> {
+ 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<K,V> snapshot();
+ method public void trimToSize(int maxSize);
+ }
+
+ public final class LruCacheKt {
+ method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+ }
+
+ public class SimpleArrayMap<K, V> {
+ ctor public SimpleArrayMap();
+ ctor public SimpleArrayMap(androidx.collection.SimpleArrayMap<? extends K,? extends V>? 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<? extends K,? extends V> 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<E> 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<E> 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<? extends E> 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 <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
+ method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+ method public static inline <T> T getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T defaultValue);
+ method public static inline <T> T getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+ method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
+ method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
+ method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
+ method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
+ method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T value);
+ method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T value);
+ method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
+ }
+
+}
+
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<Int, Composer, Int, Unit> = ComposableSingletons%TestKt.lambda-1
+ internal object ComposableSingletons%TestKt {
+ val lambda-1: Function3<Int, Composer, Int, Unit> = composableLambdaInstance(<>, false) { <unused var>: 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)<Exampl...>:Test.kt")
+ if (%changed and 0b0001 !== 0 || !%composer.skipping) {
+ if (isTraceInProgress()) {
+ traceEventStart(<>, %changed, -1, <>)
+ }
+ Example(class <no name provided> : Consumer {
+ @Composable
+ override fun invoke(<unused var>: 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 = <this>
+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+ tmp0_rcvr.invoke(<unused var>, %composer, updateChangedFlags(%changed or 0b0001))
+ }
+ }
+ }
+ <no name provided>(), %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 <iterator> and tmp0_for_iterator...
origin == IrDeclarationOrigin.FOR_LOOP_ITERATOR -> "<iterator>"
- !useFir && origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER -> "<unused var>"
+ // $anonymous$parameter$x vs $unused$var$x
+ origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER -> "<unused var>"
!useFir && name.asString().endsWith("_elvis_lhs") -> "<elvis>"
!useFir && name.asString() == "\$this\$null" -> "<this>"
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/TrivialStartupPerfettoSdkBenchmark.kt b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt
index f9ca454..eb9ab43 100644
--- a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt
+++ b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt
@@ -37,15 +37,15 @@
class TrivialStartupPerfettoSdkBenchmark(
private val startupMode: StartupMode,
private val compilationMode: CompilationMode,
- private val isFullTracingEnabled: Boolean
+ private val isPerfettoSdkEnabled: Boolean
) {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() = try {
- Arguments.fullTracingEnableOverride = isFullTracingEnabled
- assertThat(Arguments.fullTracingEnable, `is`(isFullTracingEnabled))
+ Arguments.perfettoSdkTracingEnableOverride = isPerfettoSdkEnabled
+ assertThat(Arguments.perfettoSdkTracingEnable, `is`(isPerfettoSdkEnabled))
try {
val perfettoSdkTraceSection = TraceSectionMetric(
@@ -63,7 +63,7 @@
"TRIVIAL_STARTUP_TRACING_ACTIVITY"
}
} catch (e: IllegalArgumentException) {
- if (!isFullTracingEnabled &&
+ if (!isPerfettoSdkEnabled &&
e.message?.contains("Unable to read any metrics during benchmark") == true
) {
// We are relying on the fact that Macrobenchmark will throw an exception when it
@@ -74,17 +74,17 @@
} 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
index 0e22752..28a6c97 100644
--- 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
@@ -35,15 +35,15 @@
class TrivialStartupPerfettoSdkOverheadBenchmark(
private val startupMode: StartupMode,
private val compilationMode: CompilationMode,
- private val isFullTracingEnabled: Boolean
+ private val isPerfettoSdkEnabled: Boolean
) {
@get:Rule
val benchmarkRule = MacrobenchmarkRule()
@Test
fun startup() = try {
- Arguments.fullTracingEnableOverride = isFullTracingEnabled
- assertThat(Arguments.fullTracingEnable, `is`(isFullTracingEnabled))
+ Arguments.perfettoSdkTracingEnableOverride = isPerfettoSdkEnabled
+ assertThat(Arguments.perfettoSdkTracingEnable, `is`(isPerfettoSdkEnabled))
benchmarkRule.measureStartup(
compilationMode = compilationMode,
@@ -54,21 +54,21 @@
"TRIVIAL_STARTUP_TRACING_ACTIVITY"
}
} finally {
- Arguments.fullTracingEnableOverride = null
+ 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},fullTracing={2}")
+ @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) } /* full tracing enabled */
+ .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
@@ -76,7 +76,7 @@
createStartupCompilationParams(
listOf(StartupMode.COLD, StartupMode.WARM),
listOf(CompilationMode.DEFAULT)
- ).map { it + true } /* full tracing enabled */
+ ).map { it + true } /* perfetto sdk enabled */
}
}
}
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 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.4.0-alpha08" type="baseline" client="gradle" dependencies="false" name="AGP (7.4.0-alpha08)" variant="all" version="7.4.0-alpha08">
+<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
<issue
id="PrivateConstructorForUtilityClass"
@@ -74,645 +74,6 @@
</issue>
<issue
- id="SyntheticAccessor"
- message="Access to `private` field `mId` of class `Constraint` requires synthetic accessor"
- errorLine1=" return mId;"
- errorLine2=" ~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/dsl/Constraint.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" return mWidth - mHorizontalGap;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" return mHeight - mVerticalGap;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor"
- errorLine1=" int width = getWidgetWidth(widget, mMax);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" int gap = mHorizontalGap;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
- errorLine1=" int height = getWidgetHeight(widget, mMax);"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor"
- errorLine1=" int width = getWidgetWidth(widget, mMax);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
- errorLine1=" int height = getWidgetHeight(widget, mMax);"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" int gap = mVerticalGap;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
- errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex + index >= mDisplayedWidgetsCount) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
- errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" verticalWidget.setVerticalChainStyle(mVerticalStyle);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" padding += mVerticalGap;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mVerticalAlign == VERTICAL_ALIGN_BASELINE && !verticalWidget.hasBaseline()) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex + index >= mDisplayedWidgetsCount) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
- errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex + index >= mDisplayedWidgetsCount) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
- errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" int style = mHorizontalStyle;"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" float bias = isInRtl ? (1 - mHorizontalBias) : mHorizontalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" float bias = isInRtl ? (1 - mHorizontalBias) : mHorizontalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFirstHorizontalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex == 0 && mFirstHorizontalStyle != UNKNOWN) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFirstHorizontalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" style = mFirstHorizontalStyle;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFirstHorizontalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" bias = isInRtl ? (1 - mFirstHorizontalBias) : mFirstHorizontalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFirstHorizontalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" bias = isInRtl ? (1 - mFirstHorizontalBias) : mFirstHorizontalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastHorizontalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" } else if (isLastChain && mLastHorizontalStyle != UNKNOWN) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastHorizontalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" style = mLastHorizontalStyle;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastHorizontalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" bias = isInRtl ? (1 - mLastHorizontalBias) : mLastHorizontalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastHorizontalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" bias = isInRtl ? (1 - mLastHorizontalBias) : mLastHorizontalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" widget.mLeft.connect(previous.mRight, mHorizontalGap);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mVerticalAlign == VERTICAL_ALIGN_BASELINE"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor"
- errorLine1=" switch (mVerticalAlign) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" horizontalWidget.setHorizontalChainStyle(mHorizontalStyle);"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" padding += mHorizontalGap;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
- errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" int style = mVerticalStyle;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" float bias = mVerticalBias;"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFirstVerticalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex == 0 && mFirstVerticalStyle != UNKNOWN) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFirstVerticalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" style = mFirstVerticalStyle;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFirstVerticalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" bias = mFirstVerticalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastVerticalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" } else if (isLastChain && mLastVerticalStyle != UNKNOWN) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastVerticalStyle` of class `Flow` requires synthetic accessor"
- errorLine1=" style = mLastVerticalStyle;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastVerticalBias` of class `Flow` requires synthetic accessor"
- errorLine1=" bias = mLastVerticalBias;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" widget.mTop.connect(previous.mBottom, mVerticalGap);"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalAlign` of class `Flow` requires synthetic accessor"
- errorLine1=" switch (mHorizontalAlign) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalAlign` of class `Flow` requires synthetic accessor"
- errorLine1=" switch (mHorizontalAlign) {"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
- errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor"
- errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor"
- errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" int gap = mHorizontalGap;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
- errorLine1=" int height = getWidgetHeight(widget, mMax);"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor"
- errorLine1=" int width = getWidgetWidth(widget, mMax);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor"
- errorLine1=" int height = getWidgetHeight(widget, mMax);"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor"
- errorLine1=" int gap = mVerticalGap;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" && list.mBiggest != null;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" && list.mBiggest != null;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" bottom = next.mBiggest.mTop;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" ConstraintAnchor currentBottom = current.mBiggest.mBottom;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" right = next.mBiggest.mLeft;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" ConstraintAnchor currentRight = current.mBiggest.mRight;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" && list.mBiggest != null;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" && list.mBiggest != null;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" bottom = next.mBiggest.mTop;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" ConstraintAnchor currentBottom = current.mBiggest.mBottom;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" right = next.mBiggest.mLeft;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor"
- errorLine1=" ConstraintAnchor currentRight = current.mBiggest.mRight;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `removeGoal` of class `PriorityGoalRow` requires synthetic accessor"
- errorLine1=" removeGoal(mVariable);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/core/PriorityGoalRow.java"/>
- </issue>
-
- <issue
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 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.0.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.0.0-alpha07)" variant="all" version="8.0.0-alpha07">
+<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
<issue
id="NewApi"
@@ -1118,3138 +1118,6 @@
</issue>
<issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
- errorLine1=" mMotionLayout.setProgress(0);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `updateItems` of class `Carousel` requires synthetic accessor"
- errorLine1=" updateItems();"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor"
- errorLine1=" mAdapter.onNewItem(mIndex);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" mAdapter.onNewItem(mIndex);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
- errorLine1=" float velocity = mMotionLayout.getVelocity();"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchUpMode` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mTouchUpMode == TOUCH_UP_CARRY_ON && velocity > mVelocityThreshold"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mVelocityThreshold` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mTouchUpMode == TOUCH_UP_CARRY_ON && velocity > mVelocityThreshold"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor"
- errorLine1=" && mIndex < mAdapter.count() - 1) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" && mIndex < mAdapter.count() - 1) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDampening` of class `Carousel` requires synthetic accessor"
- errorLine1=" final float v = velocity * mDampening;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mIndex == 0 && mPreviousIndex > mIndex) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mIndex == 0 && mPreviousIndex > mIndex) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPreviousIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mIndex == 0 && mPreviousIndex > mIndex) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPreviousIndex` of class `Carousel` requires synthetic accessor"
- errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
- errorLine1=" mMotionLayout.post(new Runnable() {"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor"
- errorLine1=" mMotionLayout.touchAnimateTo(MotionLayout.TOUCH_UP_DECELERATE_AND_COMPLETE,"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" if (mMetrics != null) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" mMetrics.mNumberOfMeasures++;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOptimizationLevel` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" if (container != null && Optimizer.enabled(mOptimizationLevel,"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOptimizationLevel` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" boolean optimizeDirect = Optimizer.enabled(mOptimizationLevel,"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" if (mMetrics != null) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" mMetrics.measuresWidgetsDuration += (endMeasure - startMeasure);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintHelpers` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" final int helperCount = mLayout.mConstraintHelpers.size();"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintHelpers` of class `ConstraintLayout` requires synthetic accessor"
- errorLine1=" ConstraintHelper helper = mLayout.mConstraintHelpers.get(i);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `fillFrom` of class `Constraint` requires synthetic accessor"
- errorLine1=" constraint.fillFrom(id, param);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" leftToLeft = lookupID(a, attr, leftToLeft);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" leftToRight = lookupID(a, attr, leftToRight);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" rightToLeft = lookupID(a, attr, rightToLeft);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" rightToRight = lookupID(a, attr, rightToRight);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" topToTop = lookupID(a, attr, topToTop);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" topToBottom = lookupID(a, attr, topToBottom);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" bottomToTop = lookupID(a, attr, bottomToTop);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" bottomToBottom = lookupID(a, attr, bottomToBottom);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" baselineToBaseline = lookupID(a, attr, baselineToBaseline);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" baselineToTop = lookupID(a, attr, baselineToTop);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" baselineToBottom = lookupID(a, attr, baselineToBottom);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" startToEnd = lookupID(a, attr, startToEnd);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" startToStart = lookupID(a, attr, startToStart);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" endToStart = lookupID(a, attr, endToStart);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" endToEnd = lookupID(a, attr, endToEnd);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" circleConstraint = lookupID(a, attr, circleConstraint);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" transformPivotTarget = lookupID(a, attr, transformPivotTarget);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" mAnimateRelativeTo = lookupID(a, attr, mAnimateRelativeTo);"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" setDeltaValue(c, mTypeInt[i], mValueInt[i]);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" setDeltaValue(c, mTypeFloat[i], mValueFloat[i]);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" setDeltaValue(c, mTypeString[i], mValueString[i]);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" setDeltaValue(c, mTypeBoolean[i], mValueBoolean[i]);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `fillFrom` of class `Constraint` requires synthetic accessor"
- errorLine1=" constraint.fillFrom(id, param);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `fillFromConstraints` of class `Constraint` requires synthetic accessor"
- errorLine1=" constraint.fillFromConstraints(helper, id, param);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `fillFromConstraints` of class `Constraint` requires synthetic accessor"
- errorLine1=" constraint.fillFromConstraints(id, param);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setIntValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" get(viewId).setIntValue(attributeName, value);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setColorValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" get(viewId).setColorValue(attributeName, value);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" get(viewId).setFloatValue(attributeName, value);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setStringValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" get(viewId).setStringValue(attributeName, value);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" set.setFloatValue(attr[0], Integer.decode(attr[1]));"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setColorValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" set.setColorValue(attr[0], Color.parseColor(attr[1]));"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" set.setFloatValue(attr[0], Float.parseFloat(attr[1]));"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setStringValue` of class `Constraint` requires synthetic accessor"
- errorLine1=" set.setStringValue(attr[0], attr[1]);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" for (Integer id : mConstraints.keySet()) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" Constraint c = mConstraints.get(id);"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" for (Integer id : mConstraints.keySet()) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor"
- errorLine1=" Constraint c = mConstraints.get(id);"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRoundPercent` of class `ImageFilterButton` requires synthetic accessor"
- errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterButton.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRound` of class `ImageFilterButton` requires synthetic accessor"
- errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterButton.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRoundPercent` of class `ImageFilterView` requires synthetic accessor"
- errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterView.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRound` of class `ImageFilterView` requires synthetic accessor"
- errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterView.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAlpha` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAlpha` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mElevation` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mElevation` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotation` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotation` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCurveFit` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCurveFit` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPivotX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mPivotX = a.getDimension(attr, c.mPivotX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPivotX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mPivotX = a.getDimension(attr, c.mPivotX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPivotY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mPivotY = a.getDimension(attr, c.mPivotY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPivotY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mPivotY = a.getDimension(attr, c.mPivotY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionEasing` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTransitionEasing = a.getString(attr);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionPathRotate` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionPathRotate` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationX` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationY` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationZ` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationZ` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mProgress` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mProgress` of class `KeyAttributes` requires synthetic accessor"
- errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `read` of class `Loader` requires synthetic accessor"
- errorLine1=" Loader.read(this, a);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionEasing` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTransitionEasing = a.getString(attr);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCurveFit` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCurveFit` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCustomWaveShape` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mCustomWaveShape = a.getString(attr);"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveShape = Oscillator.CUSTOM;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWavePeriod` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWavePeriod` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveVariesBy` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveVariesBy = a.getInt(attr, c.mWaveVariesBy);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveVariesBy` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWaveVariesBy = a.getInt(attr, c.mWaveVariesBy);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAlpha` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAlpha` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mElevation` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mElevation` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotation` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotation` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationX` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationX` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationY` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationY` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionPathRotate` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionPathRotate` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleX` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleX` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleY` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleY` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationX` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationX` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationY` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationY` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationZ` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationZ` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mProgress` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mProgress` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWavePhase` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWavePhase = a.getFloat(attr, c.mWavePhase) / 360;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWavePhase` of class `KeyCycle` requires synthetic accessor"
- errorLine1=" c.mWavePhase = a.getFloat(attr, c.mWavePhase) / 360;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `read` of class `Loader` requires synthetic accessor"
- errorLine1=" Loader.read(this, a);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyPosition.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAlpha` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAlpha` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mElevation` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mElevation` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotation` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotation` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCurveFit` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCurveFit` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCustomWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mCustomWaveShape = a.getString(attr);"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWaveShape = Oscillator.CUSTOM;"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWavePeriod` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWavePeriod` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleX` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleX` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationX` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationX` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationY` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRotationY` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionEasing` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTransitionEasing = a.getString(attr);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleY` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mScaleY` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);"
- errorLine2=" ~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionPathRotate` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTransitionPathRotate` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationX` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationX` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationY` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationY` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationZ` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTranslationZ` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mProgress` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mProgress` of class `KeyTimeCycle` requires synthetic accessor"
- errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mFireThreshold` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mFireThreshold = (c.mFramePosition + .5f) / 100f;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mNegativeCross` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mNegativeCross = a.getString(attr);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPositiveCross` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mPositiveCross = a.getString(attr);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCross` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mCross = a.getString(attr);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTriggerID` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mTriggerID = a.getResourceId(attr, c.mTriggerID);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTriggerID` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mTriggerID = a.getResourceId(attr, c.mTriggerID);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTriggerCollisionId` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mTriggerCollisionId = a.getResourceId(attr, c.mTriggerCollisionId);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTriggerCollisionId` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mTriggerCollisionId = a.getResourceId(attr, c.mTriggerCollisionId);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPostLayout` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mPostLayout = a.getBoolean(attr, c.mPostLayout);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPostLayout` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mPostLayout = a.getBoolean(attr, c.mPostLayout);"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTriggerReceiver` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mTriggerReceiver = a.getResourceId(attr, c.mTriggerReceiver);"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTriggerReceiver` of class `KeyTrigger` requires synthetic accessor"
- errorLine1=" c.mTriggerReceiver = a.getResourceId(attr, c.mTriggerReceiver);"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRoundPercent` of class `MotionButton` requires synthetic accessor"
- errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/MotionButton.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRound` of class `MotionButton` requires synthetic accessor"
- errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/MotionButton.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRoundPercent` of class `MotionLabel` requires synthetic accessor"
- errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/MotionLabel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mRound` of class `MotionLabel` requires synthetic accessor"
- errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/utils/widget/MotionLabel.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mStateCache` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" mStateCache.apply();"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mEndState` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" mEndState = MotionLayout.this.mEndState;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mBeginState` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" mStartState = MotionLayout.this.mBeginState;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mInRotation` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" mInRotation = false;"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastHeightMeasureSpec` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" measure(mLastWidthMeasureSpec, mLastHeightMeasureSpec);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLastWidthMeasureSpec` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" measure(mLastWidthMeasureSpec, mLastHeightMeasureSpec);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `setupMotionViews` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" setupMotionViews();"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `toRect` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" motionController.setStartState(toRect(startWidget), mStart,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mInRotation` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" if (mInRotation) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPreRotateHeight` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" mPreRotateWidth, mPreRotateHeight);"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPreRotateWidth` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" mPreRotateWidth, mPreRotateHeight);"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `toRect` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" motionController.setEndState(toRect(endWidget), mEnd,"
- errorLine2=" ~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mEndState` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" String str = getContext().getResources().getResourceName(mEndState)"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mStateCache` of class `MotionLayout` requires synthetic accessor"
- errorLine1=" mStateCache.apply();"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition.mConstraintSetEnd == endId"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" && mCurrentTransition.mConstraintSetStart == beginId) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" if ((transition.mConstraintSetEnd == end"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" && transition.mConstraintSetStart == start)"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" || (transition.mConstraintSetEnd == endId"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" && transition.mConstraintSetStart == beginId)) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mConstraintSetEnd == endId) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" t.mConstraintSetStart = start;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" t.mConstraintSetEnd = end;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mId` of class `Transition` requires synthetic accessor"
- errorLine1=" int id = transition.mId;"
- errorLine2=" ~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mId` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mTransitionList.get(index).mId == id) {"
- errorLine2=" ~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mConstraintSetStart == stateId"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" || transition.mConstraintSetEnd == stateId) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mOnClicks.size() > 0) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mOnClicks.size() > 0) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mOnClicks.size() > 0) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mOnClicks.size() > 0) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor"
- errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDisable` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mDisable) {"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" transition.mTouchResponse.setRTL(mRtl);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" RectF region = transition.mTouchResponse.getTouchRegion(mMotionLayout, cache);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" region = transition.mTouchResponse.getLimitBoundsTo(mMotionLayout, cache);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" float val = transition.mTouchResponse.dot(dx, dy);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mTouchResponse.mIsRotateMode && lastTouchDown != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" - transition.mTouchResponse.mRotateCenterX;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" - transition.mTouchResponse.mRotateCenterY;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mConstraintSetEnd == currentState) { // flip because backwards"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mId` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mId == id) {"
- errorLine2=" ~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mAutoTransition == Transition.AUTO_NONE) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" if (currentState == transition.mConstraintSetStart && ("
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
- errorLine1=" transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_END"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
- errorLine1=" || transition.mAutoTransition == Transition.AUTO_JUMP_TO_END)) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_END) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" if (currentState == transition.mConstraintSetEnd && ("
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
- errorLine1=" transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_START"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
- errorLine1=" || transition.mAutoTransition == Transition.AUTO_JUMP_TO_START)) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_START) {"
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `MotionScene` requires synthetic accessor"
- errorLine1=" : new TouchResponse(mMotionScene.mMotionLayout, onSwipe);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" int start = transition.mConstraintSetStart;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" int end = transition.mConstraintSetEnd;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" int dest = mTransition.mConstraintSetEnd;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" int from = mTransition.mConstraintSetStart;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `MotionScene` requires synthetic accessor"
- errorLine1=" MotionLayout tl = mTransition.mMotionScene.mMotionLayout;"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
- errorLine1=" MotionLayout tl = mTransition.mMotionScene.mMotionLayout;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mTransition.mConstraintSetStart == UNSET) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" tl.transitionToState(mTransition.mConstraintSetEnd);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
- errorLine1=" Transition t = new Transition(mTransition.mMotionScene, mTransition);"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" t.mConstraintSetStart = currentState;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" t.mConstraintSetEnd = mTransition.mConstraintSetEnd;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" t.mConstraintSetEnd = mTransition.mConstraintSetEnd;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
- errorLine1=" Transition current = mTransition.mMotionScene.mCurrentTransition;"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mTransition.mMotionScene.mCurrentTransition != mTransition) {"
- errorLine2=" ~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor"
- errorLine1=" mDuration = motionScene.mDefaultDuration;"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor"
- errorLine1=" mDuration = motionScene.mDefaultDuration;"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLayoutDuringTransition` of class `MotionScene` requires synthetic accessor"
- errorLine1=" mLayoutDuringTransition = motionScene.mLayoutDuringTransition;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor"
- errorLine1=" mDuration = motionScene.mDefaultDuration;"
- errorLine2=" ~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mLayoutDuringTransition` of class `MotionScene` requires synthetic accessor"
- errorLine1=" mLayoutDuringTransition = motionScene.mLayoutDuringTransition;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetMap` of class `MotionScene` requires synthetic accessor"
- errorLine1=" motionScene.mConstraintSetMap.append(mConstraintSetEnd, cSet);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `parseInclude` of class `MotionScene` requires synthetic accessor"
- errorLine1=" int id = motionScene.parseInclude(context, mConstraintSetEnd);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetMap` of class `MotionScene` requires synthetic accessor"
- errorLine1=" motionScene.mConstraintSetMap.append(mConstraintSetStart, cSet);"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `parseInclude` of class `MotionScene` requires synthetic accessor"
- errorLine1=" int id = motionScene.parseInclude(context, mConstraintSetStart);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mIsAbstract` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition == null && !transition.mIsAbstract) {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- 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=" ~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mConstraintSetEnd == UNSET) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" transition.mTouchResponse ="
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
- errorLine1=" transition.mKeyFramesList.add(keyFrames);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
- errorLine1=" for (KeyFrames keyFrames : mDefaultTransition.mKeyFramesList) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
- errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
- errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mConstraintSetStart == stateId) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
- errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor"
- errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (transition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition != null && mCurrentTransition.mTouchResponse != null;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" region = mCurrentTransition.mTouchResponse"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" region = mCurrentTransition.mTouchResponse"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.setDown(mLastTouchX, mLastTouchY);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" .mTouchResponse.getTouchRegion(mMotionLayout, cache);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.setUpTouchEvent(mLastTouchX, mLastTouchY);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.processTouchEvent(event,"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.scrollMove(dx, dy);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.scrollUp(dx, dy);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getProgressDirection(dx, dy);"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mConstraintSetStart;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mConstraintSetEnd;"
- errorLine2=" ~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDefaultInterpolator` of class `Transition` requires synthetic accessor"
- errorLine1=" switch (mCurrentTransition.mDefaultInterpolator) {"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDefaultInterpolatorString` of class `Transition` requires synthetic accessor"
- errorLine1=" .getInterpolator(mCurrentTransition.mDefaultInterpolatorString);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDefaultInterpolatorID` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mDefaultInterpolatorID);"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mDuration` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mDuration;"
- errorLine2=" ~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mPathMotionArc` of class `Transition` requires synthetic accessor"
- errorLine1=" return (mCurrentTransition != null) ? mCurrentTransition.mPathMotionArc : UNSET;"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mStagger` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mStagger;"
- errorLine2=" ~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getMaxAcceleration();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getMaxVelocity();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getSpringStiffness();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getSpringMass();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getSpringDamping();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getSpringStopThreshold();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getSpringBoundary();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getAutoCompleteMode();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" mCurrentTransition.mTouchResponse.setupTouch();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor"
- errorLine1=" return mCurrentTransition.mTouchResponse.getMoveWhenScrollAtTop();"
- errorLine2=" ~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" int count = mMotionLayout.getChildCount();"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" View view = mMotionLayout.getChildAt(i);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" int currentId = mMotionLayout.getCurrentState();"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" mMotionLayout.getConstraintSet(currentId);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" ViewTransitionController.this, mMotionLayout,"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" int count = mMotionLayout.getChildCount();"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" View view = mMotionLayout.getChildAt(i);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" int currentId = mMotionLayout.getCurrentState();"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" mMotionLayout.getConstraintSet(currentId);"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor"
- errorLine1=" ViewTransitionController.this, mMotionLayout,"
- errorLine2=" ~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/>
- </issue>
-
- <issue
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/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..386cf33
--- /dev/null
+++ b/core/core-performance/src/main/java/androidx/core/performance/DefaultDevicePerformance.kt
@@ -0,0 +1,99 @@
+/*
+ * 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
+
+/**
+ * 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<String, Int> = 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..98e947c 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
@@ -77,13 +77,6 @@
}
/**
- * Default DevicePerformance implementation that always provides 0.
- */
-class DefaultDevicePerformance() : DevicePerformance {
- override val mediaPerformanceClass = 0
-}
-
-/**
* Supplies a flow of mediaPerformanceClass
*/
@Deprecated(
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/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<? super kotlin.Unit>);
+ method public void clearCredentialStateAsync(androidx.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<java.lang.Void,androidx.credentials.exceptions.ClearCredentialException> 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<? super androidx.credentials.CreateCredentialResponse>);
+ method public void createCredentialAsync(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.CreateCredentialResponse,androidx.credentials.exceptions.CreateCredentialException> 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<? super androidx.credentials.GetCredentialResponse>);
+ method @RequiresApi(34) public default suspend Object? getCredential(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, kotlin.coroutines.Continuation<? super androidx.credentials.GetCredentialResponse>);
+ method public void getCredentialAsync(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> callback);
+ method @RequiresApi(34) public default suspend Object? prepareGetCredential(androidx.credentials.GetCredentialRequest request, kotlin.coroutines.Continuation<? super androidx.credentials.PrepareGetCredentialResponse>);
+ method @RequiresApi(34) public void prepareGetCredentialAsync(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.PrepareGetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<R, E> {
+ method public void onError(E e);
+ method public void onResult(R result);
+ }
+
+ public abstract class CredentialOption {
+ method public final java.util.Set<android.content.ComponentName> 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<android.content.ComponentName> 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<java.lang.Void,androidx.credentials.exceptions.ClearCredentialException> 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<androidx.credentials.CreateCredentialResponse,androidx.credentials.exceptions.CreateCredentialException> 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<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> callback);
+ method @RequiresApi(34) public default void onPrepareCredential(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.PrepareGetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<? extends androidx.credentials.CredentialOption> credentialOptions);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin, optional boolean preferIdentityDocUi);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName, optional boolean preferImmediatelyAvailableCredentials);
+ method public java.util.List<androidx.credentials.CredentialOption> 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<androidx.credentials.CredentialOption> 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<? extends androidx.credentials.CredentialOption> 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<android.content.ComponentName> allowedProviders);
+ }
+
+ public final class GetPasswordOption extends androidx.credentials.CredentialOption {
+ ctor public GetPasswordOption();
+ ctor public GetPasswordOption(optional java.util.Set<java.lang.String> allowedUserIds);
+ ctor public GetPasswordOption(optional java.util.Set<java.lang.String> allowedUserIds, optional boolean isAutoSelectAllowed);
+ ctor public GetPasswordOption(optional java.util.Set<java.lang.String> allowedUserIds, optional boolean isAutoSelectAllowed, optional java.util.Set<android.content.ComponentName> allowedProviders);
+ method public java.util.Set<java.lang.String> getAllowedUserIds();
+ property public final java.util.Set<java.lang.String> 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<android.content.ComponentName> 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<java.lang.String,java.lang.Boolean>? getCredentialTypeDelegate();
+ method public kotlin.jvm.functions.Function0<java.lang.Boolean>? getHasAuthResultsDelegate();
+ method public kotlin.jvm.functions.Function0<java.lang.Boolean>? 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<java.lang.String,java.lang.Boolean>? credentialTypeDelegate;
+ property public final kotlin.jvm.functions.Function0<java.lang.Boolean>? hasAuthResultsDelegate;
+ property public final kotlin.jvm.functions.Function0<java.lang.Boolean>? 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<? super java.lang.String,java.lang.Boolean> handler);
+ method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasAuthResultsDelegate(kotlin.jvm.functions.Function0<java.lang.Boolean> handler);
+ method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasRemoteResultsDelegate(kotlin.jvm.functions.Function0<java.lang.Boolean> 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<androidx.credentials.provider.CreateEntry> 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<androidx.credentials.provider.CreateEntry> getCreateEntries();
+ method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+ property public final java.util.List<androidx.credentials.provider.CreateEntry> 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<androidx.credentials.provider.CreateEntry> 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<? extends androidx.credentials.provider.BeginGetCredentialOption> beginGetCredentialOptions);
+ ctor public BeginGetCredentialRequest(java.util.List<? extends androidx.credentials.provider.BeginGetCredentialOption> 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<androidx.credentials.provider.BeginGetCredentialOption> getBeginGetCredentialOptions();
+ method public androidx.credentials.provider.CallingAppInfo? getCallingAppInfo();
+ property public final java.util.List<androidx.credentials.provider.BeginGetCredentialOption> 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<? extends androidx.credentials.provider.CredentialEntry> credentialEntries, optional java.util.List<androidx.credentials.provider.Action> actions, optional java.util.List<androidx.credentials.provider.AuthenticationAction> 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<androidx.credentials.provider.Action> getActions();
+ method public java.util.List<androidx.credentials.provider.AuthenticationAction> getAuthenticationActions();
+ method public java.util.List<androidx.credentials.provider.CredentialEntry> getCredentialEntries();
+ method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+ property public final java.util.List<androidx.credentials.provider.Action> actions;
+ property public final java.util.List<androidx.credentials.provider.AuthenticationAction> authenticationActions;
+ property public final java.util.List<androidx.credentials.provider.CredentialEntry> 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<androidx.credentials.provider.Action> actions);
+ method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setAuthenticationActions(java.util.List<androidx.credentials.provider.AuthenticationAction> authenticationEntries);
+ method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setCredentialEntries(java.util.List<? extends androidx.credentials.provider.CredentialEntry> 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<java.lang.String> 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<java.lang.String> getAllowedUserIds();
+ property public final java.util.Set<java.lang.String> 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<android.service.credentials.BeginCreateCredentialResponse,android.credentials.CreateCredentialException> callback);
+ method public abstract void onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<androidx.credentials.provider.BeginCreateCredentialResponse,androidx.credentials.exceptions.CreateCredentialException> callback);
+ method public final void onBeginGetCredential(android.service.credentials.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<android.service.credentials.BeginGetCredentialResponse,android.credentials.GetCredentialException> callback);
+ method public abstract void onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<androidx.credentials.provider.BeginGetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> callback);
+ method public final void onClearCredentialState(android.service.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<java.lang.Void,android.credentials.ClearCredentialStateException> callback);
+ method public abstract void onClearCredentialStateRequest(androidx.credentials.provider.ProviderClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<java.lang.Void,androidx.credentials.exceptions.ClearCredentialException> 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<? extends androidx.credentials.CredentialOption> credentialOptions, androidx.credentials.provider.CallingAppInfo callingAppInfo);
+ method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+ method public java.util.List<androidx.credentials.CredentialOption> getCredentialOptions();
+ property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+ property public final java.util.List<androidx.credentials.CredentialOption> 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<? super kotlin.Unit>);
+ method public void clearCredentialStateAsync(androidx.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<java.lang.Void,androidx.credentials.exceptions.ClearCredentialException> 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<? super androidx.credentials.CreateCredentialResponse>);
+ method public void createCredentialAsync(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.CreateCredentialResponse,androidx.credentials.exceptions.CreateCredentialException> 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<? super androidx.credentials.GetCredentialResponse>);
+ method @RequiresApi(34) public default suspend Object? getCredential(android.content.Context context, androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle pendingGetCredentialHandle, kotlin.coroutines.Continuation<? super androidx.credentials.GetCredentialResponse>);
+ method public void getCredentialAsync(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> callback);
+ method @RequiresApi(34) public default suspend Object? prepareGetCredential(androidx.credentials.GetCredentialRequest request, kotlin.coroutines.Continuation<? super androidx.credentials.PrepareGetCredentialResponse>);
+ method @RequiresApi(34) public void prepareGetCredentialAsync(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.PrepareGetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<R, E> {
+ method public void onError(E e);
+ method public void onResult(R result);
+ }
+
+ public abstract class CredentialOption {
+ method public final java.util.Set<android.content.ComponentName> 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<android.content.ComponentName> 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<java.lang.Void,androidx.credentials.exceptions.ClearCredentialException> 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<androidx.credentials.CreateCredentialResponse,androidx.credentials.exceptions.CreateCredentialException> 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<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<androidx.credentials.GetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> callback);
+ method @RequiresApi(34) public default void onPrepareCredential(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallback<androidx.credentials.PrepareGetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> 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<? extends androidx.credentials.CredentialOption> credentialOptions);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin, optional boolean preferIdentityDocUi);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName);
+ ctor public GetCredentialRequest(java.util.List<? extends androidx.credentials.CredentialOption> credentialOptions, optional String? origin, optional boolean preferIdentityDocUi, optional android.content.ComponentName? preferUiBrandingComponentName, optional boolean preferImmediatelyAvailableCredentials);
+ method public java.util.List<androidx.credentials.CredentialOption> 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<androidx.credentials.CredentialOption> 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<? extends androidx.credentials.CredentialOption> 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<android.content.ComponentName> allowedProviders);
+ }
+
+ public final class GetPasswordOption extends androidx.credentials.CredentialOption {
+ ctor public GetPasswordOption();
+ ctor public GetPasswordOption(optional java.util.Set<java.lang.String> allowedUserIds);
+ ctor public GetPasswordOption(optional java.util.Set<java.lang.String> allowedUserIds, optional boolean isAutoSelectAllowed);
+ ctor public GetPasswordOption(optional java.util.Set<java.lang.String> allowedUserIds, optional boolean isAutoSelectAllowed, optional java.util.Set<android.content.ComponentName> allowedProviders);
+ method public java.util.Set<java.lang.String> getAllowedUserIds();
+ property public final java.util.Set<java.lang.String> 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<android.content.ComponentName> 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<java.lang.String,java.lang.Boolean>? getCredentialTypeDelegate();
+ method public kotlin.jvm.functions.Function0<java.lang.Boolean>? getHasAuthResultsDelegate();
+ method public kotlin.jvm.functions.Function0<java.lang.Boolean>? 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<java.lang.String,java.lang.Boolean>? credentialTypeDelegate;
+ property public final kotlin.jvm.functions.Function0<java.lang.Boolean>? hasAuthResultsDelegate;
+ property public final kotlin.jvm.functions.Function0<java.lang.Boolean>? 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<? super java.lang.String,java.lang.Boolean> handler);
+ method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasAuthResultsDelegate(kotlin.jvm.functions.Function0<java.lang.Boolean> handler);
+ method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasRemoteResultsDelegate(kotlin.jvm.functions.Function0<java.lang.Boolean> 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<androidx.credentials.provider.CreateEntry> 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<androidx.credentials.provider.CreateEntry> getCreateEntries();
+ method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+ property public final java.util.List<androidx.credentials.provider.CreateEntry> 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<androidx.credentials.provider.CreateEntry> 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<? extends androidx.credentials.provider.BeginGetCredentialOption> beginGetCredentialOptions);
+ ctor public BeginGetCredentialRequest(java.util.List<? extends androidx.credentials.provider.BeginGetCredentialOption> 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<androidx.credentials.provider.BeginGetCredentialOption> getBeginGetCredentialOptions();
+ method public androidx.credentials.provider.CallingAppInfo? getCallingAppInfo();
+ property public final java.util.List<androidx.credentials.provider.BeginGetCredentialOption> 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<? extends androidx.credentials.provider.CredentialEntry> credentialEntries, optional java.util.List<androidx.credentials.provider.Action> actions, optional java.util.List<androidx.credentials.provider.AuthenticationAction> 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<androidx.credentials.provider.Action> getActions();
+ method public java.util.List<androidx.credentials.provider.AuthenticationAction> getAuthenticationActions();
+ method public java.util.List<androidx.credentials.provider.CredentialEntry> getCredentialEntries();
+ method public androidx.credentials.provider.RemoteEntry? getRemoteEntry();
+ property public final java.util.List<androidx.credentials.provider.Action> actions;
+ property public final java.util.List<androidx.credentials.provider.AuthenticationAction> authenticationActions;
+ property public final java.util.List<androidx.credentials.provider.CredentialEntry> 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<androidx.credentials.provider.Action> actions);
+ method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setAuthenticationActions(java.util.List<androidx.credentials.provider.AuthenticationAction> authenticationEntries);
+ method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setCredentialEntries(java.util.List<? extends androidx.credentials.provider.CredentialEntry> 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<java.lang.String> 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<java.lang.String> getAllowedUserIds();
+ property public final java.util.Set<java.lang.String> 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<android.service.credentials.BeginCreateCredentialResponse,android.credentials.CreateCredentialException> callback);
+ method public abstract void onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<androidx.credentials.provider.BeginCreateCredentialResponse,androidx.credentials.exceptions.CreateCredentialException> callback);
+ method public final void onBeginGetCredential(android.service.credentials.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<android.service.credentials.BeginGetCredentialResponse,android.credentials.GetCredentialException> callback);
+ method public abstract void onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<androidx.credentials.provider.BeginGetCredentialResponse,androidx.credentials.exceptions.GetCredentialException> callback);
+ method public final void onClearCredentialState(android.service.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<java.lang.Void,android.credentials.ClearCredentialStateException> callback);
+ method public abstract void onClearCredentialStateRequest(androidx.credentials.provider.ProviderClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceiver<java.lang.Void,androidx.credentials.exceptions.ClearCredentialException> 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<? extends androidx.credentials.CredentialOption> credentialOptions, androidx.credentials.provider.CallingAppInfo callingAppInfo);
+ method public androidx.credentials.provider.CallingAppInfo getCallingAppInfo();
+ method public java.util.List<androidx.credentials.CredentialOption> getCredentialOptions();
+ property public final androidx.credentials.provider.CallingAppInfo callingAppInfo;
+ property public final java.util.List<androidx.credentials.CredentialOption> 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 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta05" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta05)" variant="all" version="8.1.0-beta05">
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" coordinator.lock {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" version = coordinator.getVersion()"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" coordinator.updateNotifications.conflate().collect {"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `readDataAndUpdateCache` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" readDataAndUpdateCache(requireLock = true)"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" coordinator.lock { block() }"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" val data = readDataFromFileOrDefault()"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" Data(data, data.hashCode(), version = coordinator.getVersion())"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" val preLockVersion = coordinator.getVersion()"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" coordinator.tryLock { locked ->"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" val data = readDataFromFileOrDefault()"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" val version = if (locked) coordinator.getVersion() else preLockVersion"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" newData = readDataFromFileOrDefault()"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor"
- errorLine1=" version = coordinator.getVersion()"
- errorLine2=" ~~~~~~~~~~~">
- <location
- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/>
- </issue>
-
-</issues>
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 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
- import { Session, type IndexedWrapper } from "../wrappers/session.js";
- import type {
- SelectionEvent,
- Selection,
- StatEvent,
- StatInfo,
- StatType,
+ import {
+ type DatasetSelection,
+ type DatasetSelectionEvent,
+ type MetricSelection,
+ type MetricSelectionEvent,
+ type StatEvent,
+ type StatInfo,
+ type StatType,
} from "../types/events.js";
+ import { Session, type IndexedWrapper } from "../wrappers/session.js";
export let name: string;
export let datasetGroup: IndexedWrapper[];
+ export let suppressedMetrics: Set<string>;
// Dispatchers
- let selectionDispatcher = createEventDispatcher<SelectionEvent>();
+ let datasetDispatcher = createEventDispatcher<DatasetSelectionEvent>();
+ let metricsDispatcher = createEventDispatcher<MetricSelectionEvent>();
let statDispatcher = createEventDispatcher<StatEvent>();
// State
let selected: boolean = true;
@@ -27,11 +31,11 @@
event.stopPropagation();
const target = event.target as HTMLInputElement;
selected = target.checked;
- const selection: Selection = {
+ const selection: DatasetSelection = {
name: name,
enabled: selected,
};
- selectionDispatcher("selections", [selection]);
+ datasetDispatcher("datasetSelections", [selection]);
};
let stat = function (type: StatType) {
@@ -42,15 +46,27 @@
const stat: StatInfo = {
name: name,
type: type,
- enabled: compute
+ enabled: compute,
};
statDispatcher("info", [stat]);
};
};
+ let metricSelection = function (metric: string) {
+ return function (event: Event) {
+ event.stopPropagation();
+ const target = event.target as HTMLInputElement;
+ const checked = target.checked;
+ const selection: MetricSelection = {
+ name: metric,
+ enabled: checked,
+ };
+ metricsDispatcher("metricSelections", [selection]);
+ };
+ };
+
$: {
sources = Session.sources(datasetGroup);
-
let labels = datasetGroup
.map((indexed) => indexed.value.metricLabels())
.flat();
@@ -103,15 +119,37 @@
</div>
{#if metrics.size > 0}
<div class="metrics">
- {#each metrics as metric}
- <div>📏 <small>{metric}</small></div>
+ {#each metrics as metric (metric)}
+ <fieldset class="metric">
+ <label for={metric}>
+ <input
+ type="checkbox"
+ name={metric}
+ id={metric}
+ checked={!suppressedMetrics.has(metric)}
+ on:change={metricSelection(metric)}
+ />
+ 📏 {metric}
+ </label>
+ </fieldset>
{/each}
</div>
{/if}
{#if sampledMetrics.size > 0}
<div class="sampled">
- {#each sampledMetrics as metric}
- <div>📏 <small>{metric}</small></div>
+ {#each sampledMetrics as metric (metric)}
+ <fieldset class="metric">
+ <label for={metric}>
+ <input
+ type="checkbox"
+ name={metric}
+ id={metric}
+ checked={!suppressedMetrics.has(metric)}
+ on:change={metricSelection(metric)}
+ />
+ 📏 {metric}
+ </label>
+ </fieldset>
{/each}
</div>
{/if}
@@ -142,14 +180,18 @@
.section .item {
margin: 0px 10px;
}
-
.actions {
display: flex;
flex-direction: row;
justify-content: flex-end;
}
-
.actions fieldset {
margin-left: 5px;
}
+ .metric {
+ margin-bottom: 0;
+ }
+ .metric label {
+ font-size: 0.875em;
+ }
</style>
diff --git a/development/plot-benchmarks/src/lib/Group.svelte b/development/plot-benchmarks/src/lib/Group.svelte
index 6dcee76..c5f4da6 100644
--- a/development/plot-benchmarks/src/lib/Group.svelte
+++ b/development/plot-benchmarks/src/lib/Group.svelte
@@ -1,8 +1,10 @@
<script lang="ts">
import { createEventDispatcher } from "svelte";
import type {
- Selection,
- SelectionEvent,
+ DatasetSelection,
+ DatasetSelectionEvent,
+ MetricSelection,
+ MetricSelectionEvent,
StatEvent,
StatInfo,
} from "../types/events.js";
@@ -11,19 +13,26 @@
export let className: string;
export let datasetGroup: IndexedWrapper[];
+ export let suppressedMetrics: Set<string>;
- let selectionDispatcher = createEventDispatcher<SelectionEvent>();
+ let datasetDispatcher = createEventDispatcher<DatasetSelectionEvent>();
+ let metricsDispatcher = createEventDispatcher<MetricSelectionEvent>();
let statDispatcher = createEventDispatcher<StatEvent>();
let datasetNames: Set<string>;
// Forward events.
- let selection = function (event: CustomEvent<Selection[]>) {
- selectionDispatcher("selections", event.detail);
+ let datasetSelection = function (event: CustomEvent<DatasetSelection[]>) {
+ datasetDispatcher("datasetSelections", event.detail);
};
+
let stat = function (event: CustomEvent<StatInfo[]>) {
statDispatcher("info", event.detail);
};
+ let metricSelection = function (event: CustomEvent<MetricSelection[]>) {
+ metricsDispatcher("metricSelections", event.detail);
+ };
+
$: {
datasetNames = Session.datasetNames(datasetGroup);
}
@@ -33,7 +42,14 @@
<summary>{className}</summary>
<div class="details">
{#each datasetNames as name (name)}
- <Dataset {datasetGroup} {name} on:selections={selection} on:info={stat} />
+ <Dataset
+ {datasetGroup}
+ {suppressedMetrics}
+ {name}
+ on:datasetSelections={datasetSelection}
+ on:metricSelections={metricSelection}
+ on:info={stat}
+ />
{/each}
</div>
</details>
diff --git a/development/plot-benchmarks/src/lib/Session.svelte b/development/plot-benchmarks/src/lib/Session.svelte
index 3a0a062..e70f88c 100644
--- a/development/plot-benchmarks/src/lib/Session.svelte
+++ b/development/plot-benchmarks/src/lib/Session.svelte
@@ -14,8 +14,9 @@
import type { Metrics } from "../types/data.js";
import type {
FileMetadataEvent,
- Selection,
+ DatasetSelection,
StatInfo,
+ MetricSelection,
} from "../types/events.js";
import type { FileMetadata } from "../types/files.js";
import { Session, type IndexedWrapper } from "../wrappers/session.js";
@@ -40,6 +41,7 @@
// Stores
let activeDragDrop: Writable<boolean> = writable(false);
let suppressed: Writable<Set<string>> = writable(new Set());
+ let suppressedMetrics: Writable<Set<string>> = writable(new Set());
let activeStats: Writable<StatInfo[]> = writable([]);
let active: Readable<Set<string>> = derived(activeStats, ($activeStats) => {
const datasets = [];
@@ -51,8 +53,8 @@
});
// Events
- let selectionHandler = function (event: CustomEvent<Selection[]>) {
- const selections: Selection[] = event.detail;
+ let datasetHandler = function (event: CustomEvent<DatasetSelection[]>) {
+ const selections: DatasetSelection[] = event.detail;
for (let i = 0; i < selections.length; i += 1) {
const selection = selections[i];
if (!selection.enabled) {
@@ -64,6 +66,19 @@
$suppressed = $suppressed;
};
+ let metricsHandler = function (event: CustomEvent<MetricSelection[]>) {
+ const selections: MetricSelection[] = event.detail;
+ for (let i = 0; i < selections.length; i += 1) {
+ const selection = selections[i];
+ if (!selection.enabled) {
+ $suppressedMetrics.add(selection.name);
+ } else {
+ $suppressedMetrics.delete(selection.name);
+ }
+ }
+ $suppressedMetrics = $suppressedMetrics;
+ };
+
let statHandler = function (event: CustomEvent<StatInfo[]>) {
const statistics = event.detail;
for (let i = 0; i < statistics.length; i += 1) {
@@ -84,7 +99,7 @@
$: {
session = new Session(fileEntries);
- metrics = Transforms.buildMetrics(session, $suppressed);
+ metrics = Transforms.buildMetrics(session, $suppressed, $suppressedMetrics);
activeSeries = service.pSeries(metrics, $active);
series = ChartDataTransforms.mapToSeries(metrics, STANDARD_MAPPER);
chartData = ChartDataTransforms.mapToDataset(series);
@@ -159,7 +174,9 @@
<Group
{className}
datasetGroup={wrappers}
- on:selections={selectionHandler}
+ suppressedMetrics={$suppressedMetrics}
+ on:datasetSelections={datasetHandler}
+ on:metricSelections={metricsHandler}
on:info={statHandler}
/>
{/each}
@@ -173,7 +190,10 @@
<article aria-busy="true" />
{:then chartData}
{#if chartData.length > 0}
- <Chart data={ChartDataTransforms.mapToDataset(chartData)} isExperimental={true} />
+ <Chart
+ data={ChartDataTransforms.mapToDataset(chartData)}
+ isExperimental={true}
+ />
{/if}
{/await}
{/if}
diff --git a/development/plot-benchmarks/src/transforms/metric-transforms.ts b/development/plot-benchmarks/src/transforms/metric-transforms.ts
index 571b4ae..370b6a6 100644
--- a/development/plot-benchmarks/src/transforms/metric-transforms.ts
+++ b/development/plot-benchmarks/src/transforms/metric-transforms.ts
@@ -9,7 +9,7 @@
// static helpers.
}
- static buildMetrics(session: Session, suppressed: Set<string>): Metrics<number> {
+ static buildMetrics(session: Session, suppressed: Set<string>, suppressedMetrics: Set<string>): Metrics<number> {
const classGroups = Object.entries(session.classGroups);
const standard: Metric<number>[] = [];
const sampled: Metric<number[]>[] = [];
@@ -27,6 +27,9 @@
let labels = wrapper.value.metricLabels();
for (let k = 0; k < labels.length; k += 1) {
const label = labels[k];
+ if (suppressedMetrics.has(label)) {
+ continue;
+ }
const metric = wrapper.value.metric(label);
const charData: ChartData<number> = {
values: metric.runs
@@ -44,6 +47,9 @@
labels = wrapper.value.sampledLabels();
for (let k = 0; k < labels.length; k += 1) {
const label = labels[k];
+ if (suppressedMetrics.has(label)) {
+ continue;
+ }
const metric = wrapper.value.sampled(label);
const charData: ChartData<number[]> = {
values: metric.runs
diff --git a/development/plot-benchmarks/src/types/events.ts b/development/plot-benchmarks/src/types/events.ts
index ae8c3c7..72890d4 100644
--- a/development/plot-benchmarks/src/types/events.ts
+++ b/development/plot-benchmarks/src/types/events.ts
@@ -4,12 +4,21 @@
entries: FileMetadata[];
}
-export interface Selection {
+export interface DatasetSelection {
name: string;
enabled: boolean;
}
-export interface SelectionEvent {
- selections: Selection[];
+export interface DatasetSelectionEvent {
+ datasetSelections: DatasetSelection[];
+}
+
+export interface MetricSelectionEvent {
+ metricSelections: MetricSelection[];
+}
+
+export interface MetricSelection {
+ name: string;
+ enabled: boolean;
}
export type StatType = 'p';
diff --git a/development/plot-benchmarks/src/wrappers/session.ts b/development/plot-benchmarks/src/wrappers/session.ts
index 2581f92..80209dd 100644
--- a/development/plot-benchmarks/src/wrappers/session.ts
+++ b/development/plot-benchmarks/src/wrappers/session.ts
@@ -68,5 +68,4 @@
}
return sources;
}
-
}
diff --git a/docs/api_guidelines/compat.md b/docs/api_guidelines/compat.md
index 6ec06be..a86ad2a 100644
--- a/docs/api_guidelines/compat.md
+++ b/docs/api_guidelines/compat.md
@@ -404,43 +404,75 @@
### Inter-process communication {#ipc}
Protocols and data structures used for IPC must support interoperability between
-different versions of libraries and should be treated similarly to public API;
-however, AndroidX does not currently implement compatibility tracking for IPC.
-
-We recommend the following, in order of preference:
-
-1. Stable AIDL if (1) your project lives partially in the Android platform and
- has access to Stable AIDL build rules and (2) you need to support Android's
- `Parcelable` data types. The AndroidX workflow **does not** provide Stable
- AIDL compilation or compatibility checks, so these would need to happen in
- the platform build and the resulting `.java` files would need to be copied
- out.
-2. Protobuf if (1) your project needs to persist data to disk or (2) you need
- interoperability with systems already using Protobuf. Similar to Stable
- AIDL, the AndroidX workflow **does not** provide built-in support Protobuf
- compilation or compatibility checks. It is possible to use a Proto plug-in,
- but you will be responsible for bundling the runtime and maintaining
- compatibility on your own.
-3. `Bundle` if you have a very simple data model that is unlikely to change in
- the future. `Bundle` has the weakest type safety and compatibility
- guarantees of any recommendation, and it has many caveats that make it a
- poor choice.
-4. `VersionedParcelable` if your project is already using Versioned Parcelable
- and is aware of its compatibility constraints.
-
-We are currently evaluating Square's [Wire](https://github.com/square/wire) and
-Google's [gRPC](https://grpc.io/) libraries for recommendation. If either of
-these libraries meets your team's needs based on your own research, feel free to
-use them.
+different versions of libraries and should be treated similarly to public API.
**Do not** design your own serialization mechanism or wire format for disk
storage or inter-process communication. Preserving and verifying compatibility
is difficult and error-prone.
-In all cases, **do not** expose your serialization mechanism in your API
-surface. Neither Stable AIDL nor Protobuf generate stable language APIs.
+**Do not** expose your serialization mechanism in your API surface. Neither
+Stable AIDL nor Protobuf generate stable language APIs.
-#### Annotating unstable IPC
+Generally, any communication prototcol, handshake, etc. must maintain
+compatibility consistent with SemVer guidelines. Consider how your protocol will
+handle addition and removal of operations or constants, compatibility-breaking
+changes, and other modifications without crashing either the host or client
+process.
+
+We recommend the following IPC mechanisms, in order of preference:
+
+#### Stable AIDL <a name="ipc-stableaidl"></a>
+
+Stable AIDL is used by the Android platform and AndroidX to provide a
+platform-native IPC mechanism with strong inter-process compatibility
+guarantees. It supports a subset of standard AIDL.
+
+Use Stable AIDL if your library:
+
+- Needs to send and receive Android's `Parcelable` data types
+- Communicates directly with the Android platform, System UI, or other AOSP
+ components *or* is likely to do so in the future
+
+**Do not** use Stable AIDL to persist data to disk.
+
+##### Using Stable AIDL {#ipc-stableaidl-using}
+
+To add Stable AIDL definitions to your project:
+
+1. Add the Stable AIDL plugin to `build.gradle`:
+
+ ```
+ plugins {
+ id("androidx.stableaidl")
+ }
+ ```
+
+2. Enable the AIDL build feature and specify an initial version for your Stable
+ AIDL interfaces in `build.gradle`:
+
+ ```
+ android {
+ buildFeatures {
+ aidl = true
+ }
+ buildTypes.all {
+ stableAidl {
+ version 1
+ }
+ }
+ }
+ ```
+
+3. Migrate existing AIDL files or create new AIDL files under
+ `<project>/src/main/stableAidl`
+
+4. Generate an initial set of Stable AIDL API tracking files by running
+
+ ```
+ ./gradlew :path:to:project:updateAidlApi
+ ```
+
+##### Annotating unstable AIDL {#ipc-stableaidl-unstable}
Once an API that relies on an IPC contract ships to production in an app, the
contract is locked in and must maintain compatibility to prevent crashing either
@@ -485,25 +517,29 @@
annotations are required for Stable AIDL definition files under
`src/stableAidl`.
-#### Parcelable {#ipc-parcelable}
+#### Protobuf <a name="ipc-protobuf"></a>
-**Do not** implement `Parcelable` for any class that may be used for IPC or
-otherwise exposed as public API. By default, `Parcelable` does not provide any
-compatibility guarantees and will result in crashes if fields are added or
-removed between library versions. If you are using Stable AIDL, you *may* use
-AIDL-defined parcelables for IPC but not public API.
+Protobuf is used by many Google applications and services to provide an IPC and
+disk persistence mechanism with strong inter-process compatibility guarantees.
-NOTE As of 2022/12/16, we are working on experimental support for compiling and
-tracking Stable AIDL definitions within the AndroidX workflow.
+Use Protobuf if your library:
-#### Protobuf {#ipc-protobuf}
+- Communicates directly with other applications or services already using
+ Protobuf
+- Your data structure is complex and likely to change over time - Needs to
+ persist data to disk
-Developers **should** use protocol buffers for most cases. See
-[Protobuf](#dependencies-protobuf) for more information on using protocol
-buffers in your library. **Do** use protocol buffers if your data structure is
-complex and likely to change over time. If your data includes `FileDescriptor`s,
-`Binder`s, or other platform-defined `Parcelable` data structures, they will
-need to be stored alongside the protobuf bytes in a `Bundle`.
+If your data includes `FileDescriptor`s, `Binder`s, or other platform-defined
+`Parcelable` data structures, consider using Stable AIDL instead. Protobuf
+cannot directly handle these types, and they will need to be stored alongside
+the serialized Protobuf bytes in a `Bundle`.
+
+See [Protobuf](#dependencies-protobuf) for more information on using protocol
+buffers in your library.
+
+WARNING While Protobuf is capable of maintaining inter-process compatibility,
+AndroidX does not currently provide compatibility tracking or enforcement.
+Library owners must perform their own validation.
NOTE We are currently investigating the suitability of Square's
[`wire` library](https://github.com/square/wire) for handling protocol buffers
@@ -511,12 +547,24 @@
Libraries that expose their serialization mechanism in their API surface *will
not be able to migrate*.
-#### Bundle {#ipc-bundle}
+#### Bundle <a name="ipc-bundle"></a>
-Developers **may** use `Bundle` in simple cases that require sending `Binder`s,
-`FileDescriptor`s, or platform `Parcelable`s across IPC
-([example](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java;l=820)).
-Note that `Bundle` has several caveats:
+`Bundle` is used by the Android platform and AndroidX as a lightweight IPC
+mechanism. It has the weakest type safety and compatibility guarantees of any
+recommendation, and it has many caveats that make it a poor choice.
+
+In some cases, you may need to use a `Bundle` to wrap another IPC mechanism so
+that it can be passed through Android platform APIs, e.g. a `Bundle` that wraps
+a `byte[]` representing a serialized Protobuf.
+
+Use `Bundle` if your library:
+
+- Has a very simple data model that is unlikely to change in the future
+- Needs to send or receive `Binder`s, `FileDescriptor`s, or platform-defined
+ `Parcelable`s
+ ([example](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:core/core/src/main/java/androidx/core/graphics/drawable/IconCompat.java;l=820))
+
+Caveats for `Bundle` include:
- When running on Android S and below, accessing *any* entry in a `Bundle`
will result in the platform attempting to deserialize *every* entry. This
@@ -535,9 +583,39 @@
are responsible for providing their own system for guaranteeing wire format
compatibility between versions.
-#### Communication protocols {#ipc-protocol}
+#### Versioned Parcelable <a name="ipc-versionedparcelable"></a>
-Any communication prototcol, handshake, etc. must maintain compatibility
-consistent with SemVer guidelines. Consider how your protocol will handle
-addition and removal of operations or constants, compatibility-breaking changes,
-and other modifications without crashing either the host or client process.
+`VersionedParcelable` is a deprecated library that was intended to provide
+compatibility guarantees around the Android platform's `Parcelable` class;
+however, the initial version contained bugs and it was not actively maintained.
+
+Use `VersionedParcelable` if your library:
+
+- Is already using `VersionedParcelable` and you are aware of its
+ compatibility constraints
+
+**Do not** use `VersionedParcelable` in all other cases.
+
+#### Wire <a name="ipc-wire"></a>
+
+We are currently evaluating Square's [Wire](https://github.com/square/wire) as a
+front-end to Protobuf. If this library meets your team's needs based on your own
+research, feel free to use it.
+
+#### gRPC <a name="ipc-grpc"></a>
+
+Some clients have requested to use Google's [gRPC](https://grpc.io/) library to
+align with other Google products. It's okay to use gRPC for network
+communication or communication with libraries and services outside of AndroidX
+that are already using gRPC.
+
+**Do not** use gRPC to communicate between AndroidX libraries or with the
+Android platform.
+
+#### Parcelable <a name="ipc-parcelable"></a>
+
+**Do not** implement `Parcelable` for any class that may be used for IPC or
+otherwise exposed as public API. By default, `Parcelable` does not provide any
+compatibility guarantees and will result in crashes if fields are added or
+removed between library versions. If you are using Stable AIDL, you *may* use
+AIDL-defined parcelables for IPC but not public API.
diff --git a/health/health-services-client/lint-baseline.xml b/health/health-services-client/lint-baseline.xml
index c9edad9..f42a2d4 100644
--- a/health/health-services-client/lint-baseline.xml
+++ b/health/health-services-client/lint-baseline.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.1.0-beta02" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0-beta02)" variant="all" version="8.1.0-beta02">
+<issues format="6" by="lint 8.1.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.1.0)" variant="all" version="8.1.0">
<issue
id="BanParcelableUsage"
@@ -38,78 +38,6 @@
</issue>
<issue
- id="SyntheticAccessor"
- message="Access to `private` field `mCurrentVersion` of class `Client` requires synthetic accessor"
- errorLine1=" mCurrentVersion ="
- errorLine2=" ~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConnectionConfiguration` of class `Client` requires synthetic accessor"
- errorLine1=" return mConnectionConfiguration;"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConnectionManager` of class `Client` requires synthetic accessor"
- errorLine1=" mConnectionManager.scheduleForExecution("
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConnectionConfiguration` of class `Client` requires synthetic accessor"
- errorLine1=" new BaseQueueOperation(mConnectionConfiguration));"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` field `mConnectionManager` of class `Client` requires synthetic accessor"
- errorLine1=" mConnectionManager.scheduleForExecution("
- errorLine2=" ~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `createQueueOperation` of class `Client` requires synthetic accessor"
- errorLine1=" createQueueOperation(operation, settableFuture));"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` method `getService` of class `Client` requires synthetic accessor"
- errorLine1=" operation.execute(getService(binder), settableFuture);"
- errorLine2=" ~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/>
- </issue>
-
- <issue
- id="SyntheticAccessor"
- message="Access to `private` constructor of class `MeasureCallbackStub` requires synthetic accessor"
- errorLine1=" measureCallbackStub = MeasureCallbackStub(callbackKey, measureCallback)"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="src/main/java/androidx/health/services/client/impl/MeasureCallbackStub.kt"/>
- </issue>
-
- <issue
id="LambdaLast"
message="Functional interface parameters (such as parameter 1, "operation", in androidx.health.services.client.impl.ipc.Client.executeWithVersionCheck) should be last to improve Kotlin interoperability; see https://kotlinlang.org/docs/reference/java-interop.html#sam-conversions"
errorLine1=" RemoteFutureOperation<S, R> operation, int minApiVersion) {"
diff --git a/input/input-motionprediction/api/1.0.0-beta03.txt b/input/input-motionprediction/api/1.0.0-beta03.txt
new file mode 100644
index 0000000..b0eef8e
--- /dev/null
+++ b/input/input-motionprediction/api/1.0.0-beta03.txt
@@ -0,0 +1,11 @@
+// Signature format: 4.0
+package androidx.input.motionprediction {
+
+ public interface MotionEventPredictor {
+ method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
+ method public android.view.MotionEvent? predict();
+ method public void record(android.view.MotionEvent);
+ }
+
+}
+
diff --git a/input/input-motionprediction/api/res-1.0.0-beta03.txt b/input/input-motionprediction/api/res-1.0.0-beta03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/input/input-motionprediction/api/res-1.0.0-beta03.txt
diff --git a/input/input-motionprediction/api/restricted_1.0.0-beta03.txt b/input/input-motionprediction/api/restricted_1.0.0-beta03.txt
new file mode 100644
index 0000000..b0eef8e
--- /dev/null
+++ b/input/input-motionprediction/api/restricted_1.0.0-beta03.txt
@@ -0,0 +1,11 @@
+// Signature format: 4.0
+package androidx.input.motionprediction {
+
+ public interface MotionEventPredictor {
+ method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
+ method public android.view.MotionEvent? predict();
+ method public void record(android.view.MotionEvent);
+ }
+
+}
+
diff --git a/libraryversions.toml b/libraryversions.toml
index cdb7b5b..9c45f40 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -4,46 +4,46 @@
ANNOTATION_EXPERIMENTAL = "1.4.0-alpha01"
APPACTIONS_BUILTINTYPES = "1.0.0-alpha01"
APPACTIONS_INTERACTION = "1.0.0-alpha01"
-APPCOMPAT = "1.7.0-alpha03"
+APPCOMPAT = "1.7.0-alpha04"
APPSEARCH = "1.1.0-alpha04"
ARCH_CORE = "2.3.0-alpha01"
ASYNCLAYOUTINFLATER = "1.1.0-alpha02"
AUTOFILL = "1.3.0-alpha02"
-BENCHMARK = "1.2.0-beta02"
+BENCHMARK = "1.2.0-beta03"
BIOMETRIC = "1.2.0-alpha06"
BLUETOOTH = "1.0.0-alpha01"
-BROWSER = "1.6.0-rc01"
+BROWSER = "1.7.0-alpha01"
BUILDSRC_TESTS = "1.0.0-alpha01"
-CAMERA = "1.3.0-beta02"
+CAMERA = "1.3.0-beta03"
CAMERA_PIPE = "1.0.0-alpha01"
CARDVIEW = "1.1.0-alpha01"
CAR_APP = "1.4.0-beta01"
-COLLECTION = "1.3.0-alpha05"
-COMPOSE = "1.6.0-alpha02"
+COLLECTION = "1.3.0-beta01"
+COMPOSE = "1.6.0-alpha03"
COMPOSE_COMPILER = "1.5.1"
COMPOSE_MATERIAL3 = "1.2.0-alpha05"
COMPOSE_MATERIAL3_ADAPTIVE = "1.0.0-alpha01"
COMPOSE_RUNTIME_TRACING = "1.0.0-alpha03"
-CONSTRAINTLAYOUT = "2.2.0-alpha11"
-CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha11"
-CONSTRAINTLAYOUT_CORE = "1.1.0-alpha11"
+CONSTRAINTLAYOUT = "2.2.0-alpha12"
+CONSTRAINTLAYOUT_COMPOSE = "1.1.0-alpha12"
+CONSTRAINTLAYOUT_CORE = "1.1.0-alpha12"
CONTENTPAGER = "1.1.0-alpha01"
COORDINATORLAYOUT = "1.3.0-alpha01"
CORE = "1.12.0-rc01"
CORE_ANIMATION = "1.0.0-rc01"
CORE_ANIMATION_TESTING = "1.0.0-rc01"
CORE_APPDIGEST = "1.0.0-alpha01"
-CORE_GOOGLE_SHORTCUTS = "1.2.0-alpha01"
+CORE_GOOGLE_SHORTCUTS = "1.2.0-alpha02"
CORE_HAPTICS = "1.0.0-alpha01"
-CORE_I18N = "1.0.0-alpha01"
-CORE_LOCATION_ALTITUDE = "1.0.0-alpha01"
+CORE_I18N = "1.0.0-alpha02"
+CORE_LOCATION_ALTITUDE = "1.0.0-alpha02"
CORE_PERFORMANCE = "1.0.0-alpha03"
-CORE_REMOTEVIEWS = "1.0.0-rc01"
+CORE_REMOTEVIEWS = "1.1.0-alpha01"
CORE_ROLE = "1.2.0-alpha01"
CORE_SPLASHSCREEN = "1.1.0-alpha01"
CORE_TELECOM = "1.0.0-alpha01"
-CORE_UWB = "1.0.0-alpha06"
-CREDENTIALS = "1.2.0-rc01"
+CORE_UWB = "1.0.0-alpha07"
+CREDENTIALS = "1.2.0-beta02"
CURSORADAPTER = "1.1.0-alpha01"
CUSTOMVIEW = "1.2.0-alpha03"
CUSTOMVIEW_POOLINGCONTAINER = "1.1.0-alpha01"
@@ -54,7 +54,7 @@
DYNAMICANIMATION = "1.1.0-alpha04"
DYNAMICANIMATION_KTX = "1.0.0-alpha04"
EMOJI = "1.2.0-alpha03"
-EMOJI2 = "1.4.0-rc01"
+EMOJI2 = "1.5.0-alpha01"
ENTERPRISE = "1.1.0-rc01"
EXIFINTERFACE = "1.4.0-alpha01"
FRAGMENT = "1.7.0-alpha02"
@@ -64,17 +64,17 @@
GLANCE_TEMPLATE = "1.0.0-alpha06"
GLANCE_WEAR_TILES = "1.0.0-alpha06"
GRAPHICS_CORE = "1.0.0-alpha04"
-GRAPHICS_PATH = "1.0.0-alpha02"
GRAPHICS_FILTERS = "1.0.0-alpha01"
+GRAPHICS_PATH = "1.0.0-alpha02"
GRAPHICS_SHAPES = "1.0.0-alpha03"
GRIDLAYOUT = "1.1.0-beta02"
HEALTH_CONNECT = "1.1.0-alpha04"
HEALTH_SERVICES_CLIENT = "1.1.0-alpha01"
-HEIFWRITER = "1.1.0-alpha02"
+HEIFWRITER = "1.1.0-alpha03"
HILT = "1.1.0-alpha01"
HILT_NAVIGATION = "1.1.0-alpha03"
HILT_NAVIGATION_COMPOSE = "1.1.0-alpha02"
-INPUT_MOTIONPREDICTION = "1.0.0-beta02"
+INPUT_MOTIONPREDICTION = "1.0.0-beta03"
INSPECTION = "1.0.0"
INTERPOLATOR = "1.1.0-alpha01"
JAVASCRIPTENGINE = "1.0.0-alpha06"
@@ -86,14 +86,14 @@
LEANBACK_TAB = "1.1.0-beta01"
LEGACY = "1.1.0-alpha01"
LIBYUV = "0.1.0-dev01"
-LIFECYCLE = "2.7.0-alpha01"
+LIFECYCLE = "2.7.0-alpha02"
LIFECYCLE_EXTENSIONS = "2.2.0"
LOADER = "1.2.0-alpha01"
MEDIA = "1.7.0-beta01"
MEDIA2 = "1.3.0-alpha01"
MEDIAROUTER = "1.6.0-beta01"
METRICS = "1.0.0-alpha05"
-NAVIGATION = "2.7.0-rc01"
+NAVIGATION = "2.8.0-alpha01"
PAGING = "3.3.0-alpha01"
PALETTE = "1.1.0-alpha01"
PERCENTLAYOUT = "1.1.0-alpha01"
@@ -101,9 +101,9 @@
PRINT = "1.1.0-beta01"
PRIVACYSANDBOX_ADS = "1.1.0-alpha01"
PRIVACYSANDBOX_PLUGINS = "1.0.0-alpha02"
-PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha07"
+PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha08"
PRIVACYSANDBOX_TOOLS = "1.0.0-alpha05"
-PRIVACYSANDBOX_UI = "1.0.0-alpha04"
+PRIVACYSANDBOX_UI = "1.0.0-alpha05"
PROFILEINSTALLER = "1.4.0-alpha01"
RECOMMENDATION = "1.1.0-alpha01"
RECYCLERVIEW = "1.4.0-alpha01"
@@ -131,12 +131,12 @@
SWIPEREFRESHLAYOUT = "1.2.0-alpha01"
TESTEXT = "1.0.0-alpha02"
TESTSCREENSHOT = "1.0.0-alpha01"
-TEST_UIAUTOMATOR = "2.3.0-alpha04"
+TEST_UIAUTOMATOR = "2.3.0-alpha05"
TEXT = "1.0.0-alpha01"
TRACING = "1.3.0-alpha02"
TRACING_PERFETTO = "1.0.0-beta01"
TRANSITION = "1.5.0-alpha01"
-TV = "1.0.0-alpha08"
+TV = "1.0.0-alpha09"
TVPROVIDER = "1.1.0-alpha02"
VECTORDRAWABLE = "1.2.0-rc01"
VECTORDRAWABLE_ANIMATED = "1.2.0-rc01"
@@ -145,8 +145,8 @@
VIEWPAGER = "1.1.0-alpha02"
VIEWPAGER2 = "1.1.0-beta03"
WEAR = "1.3.0-rc01"
-WEAR_COMPOSE = "1.3.0-alpha02"
-WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha08"
+WEAR_COMPOSE = "1.3.0-alpha03"
+WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha09"
WEAR_INPUT = "1.2.0-alpha03"
WEAR_INPUT_TESTING = "1.2.0-alpha03"
WEAR_ONGOING = "1.1.0-alpha01"
@@ -156,11 +156,11 @@
WEAR_TILES = "1.3.0-alpha01"
WEAR_WATCHFACE = "1.2.0-alpha09"
WEBKIT = "1.8.0-rc01"
-WINDOW = "1.2.0-beta01"
+WINDOW = "1.2.0-beta02"
WINDOW_EXTENSIONS = "1.2.0-rc01"
WINDOW_EXTENSIONS_CORE = "1.1.0-alpha01"
WINDOW_SIDECAR = "1.0.0-rc01"
-WORK = "2.9.0-alpha02"
+WORK = "2.9.0-alpha03"
[groups]
ACTIVITY = { group = "androidx.activity", atomicGroupVersion = "versions.ACTIVITY" }
diff --git a/lifecycle/lifecycle-common/src/test/java/androidx/lifecycle/observers/Interface2.java b/lifecycle/lifecycle-common/src/test/java/androidx/lifecycle/observers/Interface2.kt
similarity index 74%
rename from lifecycle/lifecycle-common/src/test/java/androidx/lifecycle/observers/Interface2.java
rename to lifecycle/lifecycle-common/src/test/java/androidx/lifecycle/observers/Interface2.kt
index f272601..b3faa538a 100644
--- a/lifecycle/lifecycle-common/src/test/java/androidx/lifecycle/observers/Interface2.java
+++ b/lifecycle/lifecycle-common/src/test/java/androidx/lifecycle/observers/Interface2.kt
@@ -13,18 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package androidx.lifecycle.observers
-package androidx.lifecycle.observers;
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleObserver
-import androidx.lifecycle.Lifecycle;
-import androidx.lifecycle.LifecycleObserver;
-
-@SuppressWarnings("deprecation")
-public interface Interface2 extends LifecycleObserver {
-
+@Suppress("DEPRECATION")
+interface Interface2 : LifecycleObserver {
@androidx.lifecycle.OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
- void onCreate();
+ fun onCreate()
@androidx.lifecycle.OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
- void onDestroy();
+ fun onDestroy()
}
diff --git a/mediarouter/mediarouter/api/1.6.0-beta01.txt b/mediarouter/mediarouter/api/1.6.0-beta01.txt
index 00e0b0a..bc026c9 100644
--- a/mediarouter/mediarouter/api/1.6.0-beta01.txt
+++ b/mediarouter/mediarouter/api/1.6.0-beta01.txt
@@ -572,7 +572,7 @@
public final class RouteListingPreference {
method public java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!> getItems();
method public android.content.ComponentName? getLinkedItemComponentName();
- method public boolean getUseSystemOrdering();
+ method public boolean isSystemOrderingEnabled();
field public static final String ACTION_TRANSFER_MEDIA = "android.media.action.TRANSFER_MEDIA";
field public static final String EXTRA_ROUTE_ID = "android.media.extra.ROUTE_ID";
}
@@ -582,7 +582,7 @@
method public androidx.mediarouter.media.RouteListingPreference build();
method public androidx.mediarouter.media.RouteListingPreference.Builder setItems(java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!>);
method public androidx.mediarouter.media.RouteListingPreference.Builder setLinkedItemComponentName(android.content.ComponentName?);
- method public androidx.mediarouter.media.RouteListingPreference.Builder setUseSystemOrdering(boolean);
+ method public androidx.mediarouter.media.RouteListingPreference.Builder setSystemOrderingEnabled(boolean);
}
public static final class RouteListingPreference.Item {
diff --git a/mediarouter/mediarouter/api/current.ignore b/mediarouter/mediarouter/api/current.ignore
new file mode 100644
index 0000000..e3f190d
--- /dev/null
+++ b/mediarouter/mediarouter/api/current.ignore
@@ -0,0 +1,11 @@
+// Baseline format: 1.0
+AddedMethod: androidx.mediarouter.media.RouteListingPreference#isSystemOrderingEnabled():
+ Added method androidx.mediarouter.media.RouteListingPreference.isSystemOrderingEnabled()
+AddedMethod: androidx.mediarouter.media.RouteListingPreference.Builder#setSystemOrderingEnabled(boolean):
+ Added method androidx.mediarouter.media.RouteListingPreference.Builder.setSystemOrderingEnabled(boolean)
+
+
+RemovedMethod: androidx.mediarouter.media.RouteListingPreference#getUseSystemOrdering():
+ Removed method androidx.mediarouter.media.RouteListingPreference.getUseSystemOrdering()
+RemovedMethod: androidx.mediarouter.media.RouteListingPreference.Builder#setUseSystemOrdering(boolean):
+ Removed method androidx.mediarouter.media.RouteListingPreference.Builder.setUseSystemOrdering(boolean)
diff --git a/mediarouter/mediarouter/api/current.txt b/mediarouter/mediarouter/api/current.txt
index 00e0b0a..bc026c9 100644
--- a/mediarouter/mediarouter/api/current.txt
+++ b/mediarouter/mediarouter/api/current.txt
@@ -572,7 +572,7 @@
public final class RouteListingPreference {
method public java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!> getItems();
method public android.content.ComponentName? getLinkedItemComponentName();
- method public boolean getUseSystemOrdering();
+ method public boolean isSystemOrderingEnabled();
field public static final String ACTION_TRANSFER_MEDIA = "android.media.action.TRANSFER_MEDIA";
field public static final String EXTRA_ROUTE_ID = "android.media.extra.ROUTE_ID";
}
@@ -582,7 +582,7 @@
method public androidx.mediarouter.media.RouteListingPreference build();
method public androidx.mediarouter.media.RouteListingPreference.Builder setItems(java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!>);
method public androidx.mediarouter.media.RouteListingPreference.Builder setLinkedItemComponentName(android.content.ComponentName?);
- method public androidx.mediarouter.media.RouteListingPreference.Builder setUseSystemOrdering(boolean);
+ method public androidx.mediarouter.media.RouteListingPreference.Builder setSystemOrderingEnabled(boolean);
}
public static final class RouteListingPreference.Item {
diff --git a/mediarouter/mediarouter/api/restricted_1.6.0-beta01.txt b/mediarouter/mediarouter/api/restricted_1.6.0-beta01.txt
index 00e0b0a..bc026c9 100644
--- a/mediarouter/mediarouter/api/restricted_1.6.0-beta01.txt
+++ b/mediarouter/mediarouter/api/restricted_1.6.0-beta01.txt
@@ -572,7 +572,7 @@
public final class RouteListingPreference {
method public java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!> getItems();
method public android.content.ComponentName? getLinkedItemComponentName();
- method public boolean getUseSystemOrdering();
+ method public boolean isSystemOrderingEnabled();
field public static final String ACTION_TRANSFER_MEDIA = "android.media.action.TRANSFER_MEDIA";
field public static final String EXTRA_ROUTE_ID = "android.media.extra.ROUTE_ID";
}
@@ -582,7 +582,7 @@
method public androidx.mediarouter.media.RouteListingPreference build();
method public androidx.mediarouter.media.RouteListingPreference.Builder setItems(java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!>);
method public androidx.mediarouter.media.RouteListingPreference.Builder setLinkedItemComponentName(android.content.ComponentName?);
- method public androidx.mediarouter.media.RouteListingPreference.Builder setUseSystemOrdering(boolean);
+ method public androidx.mediarouter.media.RouteListingPreference.Builder setSystemOrderingEnabled(boolean);
}
public static final class RouteListingPreference.Item {
diff --git a/mediarouter/mediarouter/api/restricted_current.ignore b/mediarouter/mediarouter/api/restricted_current.ignore
new file mode 100644
index 0000000..e3f190d
--- /dev/null
+++ b/mediarouter/mediarouter/api/restricted_current.ignore
@@ -0,0 +1,11 @@
+// Baseline format: 1.0
+AddedMethod: androidx.mediarouter.media.RouteListingPreference#isSystemOrderingEnabled():
+ Added method androidx.mediarouter.media.RouteListingPreference.isSystemOrderingEnabled()
+AddedMethod: androidx.mediarouter.media.RouteListingPreference.Builder#setSystemOrderingEnabled(boolean):
+ Added method androidx.mediarouter.media.RouteListingPreference.Builder.setSystemOrderingEnabled(boolean)
+
+
+RemovedMethod: androidx.mediarouter.media.RouteListingPreference#getUseSystemOrdering():
+ Removed method androidx.mediarouter.media.RouteListingPreference.getUseSystemOrdering()
+RemovedMethod: androidx.mediarouter.media.RouteListingPreference.Builder#setUseSystemOrdering(boolean):
+ Removed method androidx.mediarouter.media.RouteListingPreference.Builder.setUseSystemOrdering(boolean)
diff --git a/mediarouter/mediarouter/api/restricted_current.txt b/mediarouter/mediarouter/api/restricted_current.txt
index 00e0b0a..bc026c9 100644
--- a/mediarouter/mediarouter/api/restricted_current.txt
+++ b/mediarouter/mediarouter/api/restricted_current.txt
@@ -572,7 +572,7 @@
public final class RouteListingPreference {
method public java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!> getItems();
method public android.content.ComponentName? getLinkedItemComponentName();
- method public boolean getUseSystemOrdering();
+ method public boolean isSystemOrderingEnabled();
field public static final String ACTION_TRANSFER_MEDIA = "android.media.action.TRANSFER_MEDIA";
field public static final String EXTRA_ROUTE_ID = "android.media.extra.ROUTE_ID";
}
@@ -582,7 +582,7 @@
method public androidx.mediarouter.media.RouteListingPreference build();
method public androidx.mediarouter.media.RouteListingPreference.Builder setItems(java.util.List<androidx.mediarouter.media.RouteListingPreference.Item!>);
method public androidx.mediarouter.media.RouteListingPreference.Builder setLinkedItemComponentName(android.content.ComponentName?);
- method public androidx.mediarouter.media.RouteListingPreference.Builder setUseSystemOrdering(boolean);
+ method public androidx.mediarouter.media.RouteListingPreference.Builder setSystemOrderingEnabled(boolean);
}
public static final class RouteListingPreference.Item {
diff --git a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouterTest.java b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouterTest.java
index 4f37053..6f7b964 100644
--- a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouterTest.java
+++ b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/MediaRouterTest.java
@@ -279,13 +279,13 @@
@UiThreadTest
public void testReset() {
assertNotNull(mRouter);
- assertNotNull(MediaRouter.getGlobalRouter());
+ assertNotNull(MediaRouter.sGlobal);
MediaRouterTestHelper.resetMediaRouter();
- assertNull(MediaRouter.getGlobalRouter());
+ assertNull(MediaRouter.sGlobal);
MediaRouter newInstance = MediaRouter.getInstance(mContext);
- assertNotNull(MediaRouter.getGlobalRouter());
+ assertNotNull(MediaRouter.sGlobal);
assertFalse(newInstance.getRoutes().isEmpty());
}
diff --git a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/RouteListingPreferenceTest.java b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/RouteListingPreferenceTest.java
index e99c4e9..5bcc40d 100644
--- a/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/RouteListingPreferenceTest.java
+++ b/mediarouter/mediarouter/src/androidTest/java/androidx/mediarouter/media/RouteListingPreferenceTest.java
@@ -93,7 +93,7 @@
new RouteListingPreference.Builder()
.setItems(Collections.singletonList(fakeRlpItem))
.setLinkedItemComponentName(FAKE_COMPONENT_NAME)
- .setUseSystemOrdering(false)
+ .setSystemOrderingEnabled(false)
.build();
android.media.RouteListingPreference platformRlp =
fakeRouteListingPreference.toPlatformRouteListingPreference();
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
index b18543e..e2f4e1f 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteChooserDialog.java
@@ -19,7 +19,10 @@
import static androidx.mediarouter.media.MediaRouter.RouteInfo.CONNECTION_STATE_CONNECTED;
import static androidx.mediarouter.media.MediaRouter.RouteInfo.CONNECTION_STATE_CONNECTING;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -98,6 +101,7 @@
private ProgressBar mSearchingProgressBar;
private ListView mListView;
private RouteAdapter mAdapter;
+ private ScreenOnOffReceiver mScreenOnOffReceiver;
private boolean mAttachedToWindow;
private long mLastUpdateTime;
@@ -140,6 +144,7 @@
mRouter = MediaRouter.getInstance(context);
mCallback = new MediaRouterCallback();
+ mScreenOnOffReceiver = new ScreenOnOffReceiver();
}
/**
@@ -249,6 +254,27 @@
mListView.setEmptyView(findViewById(android.R.id.empty));
updateLayout();
+
+ registerBroadcastReceiver();
+ }
+
+ private void registerBroadcastReceiver() {
+ IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
+ getContext().registerReceiver(mScreenOnOffReceiver, filter);
+ }
+
+ @Override
+ public void dismiss() {
+ unregisterBroadcastReceiver();
+ super.dismiss();
+ }
+
+ private void unregisterBroadcastReceiver() {
+ try {
+ getContext().unregisterReceiver(mScreenOnOffReceiver);
+ } catch (IllegalArgumentException e) {
+ // May already be unregistered; ignore.
+ }
}
/**
@@ -563,4 +589,13 @@
return lhs.getName().compareToIgnoreCase(rhs.getName());
}
}
+
+ final class ScreenOnOffReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
+ dismiss();
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
index 3091883..00c0ad0 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
@@ -142,10 +142,7 @@
*/
public static final int UNSELECT_REASON_ROUTE_CHANGED = 3;
- // Maintains global media router state for the process.
- // This field is initialized lazily when it is necessary.
- // Access this field directly only when you don't want to initialize it.
- // Use {@link #getGlobalRouter()} to get a valid instance.
+ /** Maintains global media router state for the process. */
static GlobalMediaRouter sGlobal;
// Context-bound state of the media router.
@@ -326,14 +323,14 @@
sGlobal = null;
}
- /**
- * Gets the initialized global router.
- */
+ /** Gets the initialized global router. */
+ @RestrictTo(LIBRARY_GROUP)
+ @NonNull
static GlobalMediaRouter getGlobalRouter() {
if (sGlobal == null) {
- return null;
+ throw new IllegalStateException(
+ "getGlobalRouter cannot be called when sGlobal is " + "null");
}
- sGlobal.ensureInitialized();
return sGlobal;
}
@@ -347,9 +344,7 @@
@NonNull
public List<RouteInfo> getRoutes() {
checkCallingThread();
- GlobalMediaRouter globalMediaRouter = getGlobalRouter();
- return globalMediaRouter == null ? Collections.emptyList() :
- globalMediaRouter.getRoutes();
+ return getGlobalRouter().getRoutes();
}
/**
@@ -362,9 +357,7 @@
@NonNull
public List<ProviderInfo> getProviders() {
checkCallingThread();
- GlobalMediaRouter globalMediaRouter = getGlobalRouter();
- return globalMediaRouter == null ? Collections.emptyList() :
- globalMediaRouter.getProviders();
+ return getGlobalRouter().getProviders();
}
/**
@@ -395,8 +388,7 @@
@Nullable
public RouteInfo getBluetoothRoute() {
checkCallingThread();
- GlobalMediaRouter globalMediaRouter = getGlobalRouter();
- return globalMediaRouter == null ? null : globalMediaRouter.getBluetoothRoute();
+ return getGlobalRouter().getBluetoothRoute();
}
/**
@@ -980,8 +972,7 @@
@Nullable
public MediaRouterParams getRouterParams() {
checkCallingThread();
- GlobalMediaRouter globalMediaRouter = getGlobalRouter();
- return globalMediaRouter == null ? null : globalMediaRouter.getRouterParams();
+ return getGlobalRouter().getRouterParams();
}
/**
@@ -1079,8 +1070,7 @@
* Returns whether transferring media from remote to local is enabled.
*/
static boolean isTransferToLocalEnabled() {
- GlobalMediaRouter globalMediaRouter = getGlobalRouter();
- return globalMediaRouter != null && globalMediaRouter.isTransferToLocalEnabled();
+ return getGlobalRouter().isTransferToLocalEnabled();
}
/**
@@ -1534,7 +1524,7 @@
}
checkCallingThread();
- for (IntentFilter intentFilter: mControlFilters) {
+ for (IntentFilter intentFilter : mControlFilters) {
if (intentFilter.hasCategory(category)) {
return true;
}
@@ -1572,7 +1562,7 @@
}
checkCallingThread();
- for (IntentFilter intentFilter: mControlFilters) {
+ for (IntentFilter intentFilter : mControlFilters) {
if (intentFilter.hasCategory(category) && intentFilter.hasAction(action)) {
return true;
}
@@ -1603,7 +1593,7 @@
checkCallingThread();
ContentResolver contentResolver = getGlobalRouter().getContentResolver();
- for (IntentFilter intentFilter: mControlFilters) {
+ for (IntentFilter intentFilter : mControlFilters) {
if (intentFilter.match(contentResolver, intent, true, TAG) >= 0) {
return true;
}
@@ -2264,7 +2254,7 @@
}
RouteInfo findRouteByDescriptorId(String id) {
- for (RouteInfo route: mRoutes) {
+ for (RouteInfo route : mRoutes) {
if (route.mDescriptorId.equals(id)) {
return route;
}
@@ -2561,7 +2551,6 @@
implements SystemMediaRouteProvider.SyncCallback,
RegisteredMediaRouteProviderWatcher.Callback {
final Context mApplicationContext;
- private boolean mIsInitialized;
SystemMediaRouteProvider mSystemProvider;
@VisibleForTesting
@@ -2625,27 +2614,15 @@
ActivityManagerCompat.isLowRamDevice(
(ActivityManager)
applicationContext.getSystemService(Context.ACTIVITY_SERVICE));
- }
- @SuppressLint({"NewApi", "SyntheticAccessor"})
- void ensureInitialized() {
- if (mIsInitialized) {
- return;
- }
- mIsInitialized = true;
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
- mTransferReceiverDeclared = MediaTransferReceiver.isDeclared(mApplicationContext);
- } else {
- mTransferReceiverDeclared = false;
- }
-
- if (mTransferReceiverDeclared) {
- mMr2Provider = new MediaRoute2Provider(
- mApplicationContext, new Mr2ProviderCallback());
- } else {
- mMr2Provider = null;
- }
+ mTransferReceiverDeclared =
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
+ && MediaTransferReceiver.isDeclared(mApplicationContext);
+ mMr2Provider =
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && mTransferReceiverDeclared
+ ? new MediaRoute2Provider(
+ mApplicationContext, new Mr2ProviderCallback())
+ : null;
// Add the system media route provider for interoperating with
// the framework media router. This one is special and receives
@@ -2655,7 +2632,6 @@
}
private void start() {
- // Using lambda would break some apps.
mActiveScanThrottlingHelper =
new MediaRouterActiveScanThrottlingHelper(this::updateDiscoveryRequest);
addProvider(mSystemProvider, /* treatRouteDescriptorIdsAsUnique= */ true);
@@ -2671,15 +2647,13 @@
}
void reset() {
- if (!mIsInitialized) {
- return;
- }
- mRegisteredProviderWatcher.stop();
mActiveScanThrottlingHelper.reset();
setRouteListingPreference(null);
-
setMediaSessionCompat(null);
+
+ mRegisteredProviderWatcher.stop();
+
for (RemoteControlClientRecord record : mRemoteControlClients) {
record.disconnect();
}
@@ -3036,7 +3010,7 @@
}
// Notify providers.
- for (ProviderInfo providerInfo: mProviders) {
+ for (ProviderInfo providerInfo : mProviders) {
MediaRouteProvider provider = providerInfo.mProviderInstance;
if (provider == mMr2Provider) {
// MediaRoute2Provider is handled by updateMr2ProviderDiscoveryRequest().
@@ -3167,7 +3141,7 @@
}
private ProviderInfo findProviderInfo(MediaRouteProvider providerInstance) {
- for (ProviderInfo providerInfo: mProviders) {
+ for (ProviderInfo providerInfo : mProviders) {
if (providerInfo.mProviderInstance == providerInstance) {
return providerInfo;
}
@@ -3433,31 +3407,7 @@
&& route.mDescriptorId.equals(SystemMediaRouteProvider.DEFAULT_ROUTE_ID);
}
- void selectRouteInternal(@NonNull RouteInfo route,
- @UnselectReason int unselectReason) {
- // TODO: Remove the following logging when no longer needed.
- if (sGlobal == null || (mBluetoothRoute != null && route.isDefault())) {
- final StackTraceElement[] callStack = Thread.currentThread().getStackTrace();
- StringBuilder sb = new StringBuilder();
- // callStack[3] is the caller of this method.
- for (int i = 3; i < callStack.length; i++) {
- StackTraceElement caller = callStack[i];
- sb.append(caller.getClassName())
- .append(".")
- .append(caller.getMethodName())
- .append(":")
- .append(caller.getLineNumber())
- .append(" ");
- }
- if (sGlobal == null) {
- Log.w(TAG, "setSelectedRouteInternal is called while sGlobal is null: pkgName="
- + mApplicationContext.getPackageName() + ", callers=" + sb);
- } else {
- Log.w(TAG, "Default route is selected while a BT route is available: pkgName="
- + mApplicationContext.getPackageName() + ", callers=" + sb);
- }
- }
-
+ void selectRouteInternal(@NonNull RouteInfo route, @UnselectReason int unselectReason) {
if (mSelectedRoute == route) {
return;
}
@@ -3719,7 +3669,7 @@
mPlaybackInfo.volumeControlId = null;
}
- for (RemoteControlClientRecord remoteControlClientRecord: mRemoteControlClients) {
+ for (RemoteControlClientRecord remoteControlClientRecord : mRemoteControlClients) {
remoteControlClientRecord.updatePlaybackInfo();
}
if (mMediaSession != null) {
@@ -3832,32 +3782,30 @@
mVpCompat.setCurrentVolume(current);
} else {
// Otherwise create a new provider and update
- mVpCompat = new VolumeProviderCompat(controlType, max, current,
- volumeControlId) {
- @Override
- public void onSetVolumeTo(final int volume) {
- mCallbackHandler.post(new Runnable() {
+ mVpCompat =
+ new VolumeProviderCompat(
+ controlType, max, current, volumeControlId) {
@Override
- public void run() {
- if (mSelectedRoute != null) {
- mSelectedRoute.requestSetVolume(volume);
- }
+ public void onSetVolumeTo(final int volume) {
+ mCallbackHandler.post(
+ () -> {
+ if (mSelectedRoute != null) {
+ mSelectedRoute.requestSetVolume(volume);
+ }
+ });
}
- });
- }
- @Override
- public void onAdjustVolume(final int direction) {
- mCallbackHandler.post(new Runnable() {
@Override
- public void run() {
- if (mSelectedRoute != null) {
- mSelectedRoute.requestUpdateVolume(direction);
- }
+ public void onAdjustVolume(final int direction) {
+ mCallbackHandler.post(
+ () -> {
+ if (mSelectedRoute != null) {
+ mSelectedRoute.requestUpdateVolume(
+ direction);
+ }
+ });
}
- });
- }
- };
+ };
mMsCompat.setPlaybackToRemote(mVpCompat);
}
}
@@ -3982,9 +3930,8 @@
}
}
- final int callbackCount = mTempCallbackRecords.size();
- for (int i = 0; i < callbackCount; i++) {
- invokeCallback(mTempCallbackRecords.get(i), what, obj, arg);
+ for (CallbackRecord tempCallbackRecord : mTempCallbackRecords) {
+ invokeCallback(tempCallbackRecord, what, obj, arg);
}
} finally {
mTempCallbackRecords.clear();
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RouteListingPreference.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RouteListingPreference.java
index 9f9735b..5ea089f 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RouteListingPreference.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/RouteListingPreference.java
@@ -73,13 +73,13 @@
public static final String EXTRA_ROUTE_ID = android.media.RouteListingPreference.EXTRA_ROUTE_ID;
@NonNull private final List<RouteListingPreference.Item> mItems;
- private final boolean mUseSystemOrdering;
+ private final boolean mIsSystemOrderingEnabled;
@Nullable private final ComponentName mLinkedItemComponentName;
// Must be package private to avoid a synthetic accessor for the builder.
/* package */ RouteListingPreference(RouteListingPreference.Builder builder) {
mItems = builder.mItems;
- mUseSystemOrdering = builder.mUseSystemOrdering;
+ mIsSystemOrderingEnabled = builder.mIsSystemOrderingEnabled;
mLinkedItemComponentName = builder.mLinkedItemComponentName;
}
@@ -100,8 +100,8 @@
* <p>The system's ordering strategy is implementation-dependent, but may take into account each
* route's recency or frequency of use in order to rank them.
*/
- public boolean getUseSystemOrdering() {
- return mUseSystemOrdering;
+ public boolean isSystemOrderingEnabled() {
+ return mIsSystemOrderingEnabled;
}
/**
@@ -134,13 +134,13 @@
}
RouteListingPreference that = (RouteListingPreference) other;
return mItems.equals(that.mItems)
- && mUseSystemOrdering == that.mUseSystemOrdering
+ && mIsSystemOrderingEnabled == that.mIsSystemOrderingEnabled
&& Objects.equals(mLinkedItemComponentName, that.mLinkedItemComponentName);
}
@Override
public int hashCode() {
- return Objects.hash(mItems, mUseSystemOrdering, mLinkedItemComponentName);
+ return Objects.hash(mItems, mIsSystemOrderingEnabled, mLinkedItemComponentName);
}
// Internal methods.
@@ -158,13 +158,13 @@
// The builder fields must be package private to avoid synthetic accessors.
/* package */ List<RouteListingPreference.Item> mItems;
- /* package */ boolean mUseSystemOrdering;
+ /* package */ boolean mIsSystemOrderingEnabled;
/* package */ ComponentName mLinkedItemComponentName;
/** Creates a new instance with default values (documented in the setters). */
public Builder() {
mItems = Collections.emptyList();
- mUseSystemOrdering = true;
+ mIsSystemOrderingEnabled = true;
}
/**
@@ -180,15 +180,14 @@
}
/**
- * See {@link #getUseSystemOrdering()}
+ * See {@link #isSystemOrderingEnabled()}
*
* <p>The default value is {@code true}.
*/
- // Lint requires "isUseSystemOrdering", but "getUseSystemOrdering" is a better name.
- @SuppressWarnings("MissingGetterMatchingBuilder")
@NonNull
- public RouteListingPreference.Builder setUseSystemOrdering(boolean useSystemOrdering) {
- mUseSystemOrdering = useSystemOrdering;
+ public RouteListingPreference.Builder setSystemOrderingEnabled(
+ boolean systemOrderingEnabled) {
+ mIsSystemOrderingEnabled = systemOrderingEnabled;
return this;
}
@@ -576,7 +575,7 @@
return new android.media.RouteListingPreference.Builder()
.setItems(platformRlpItems)
.setLinkedItemComponentName(routeListingPreference.getLinkedItemComponentName())
- .setUseSystemOrdering(routeListingPreference.getUseSystemOrdering())
+ .setUseSystemOrdering(routeListingPreference.isSystemOrderingEnabled())
.build();
}
diff --git a/privacysandbox/ads/ads-adservices/api/current.txt b/privacysandbox/ads/ads-adservices/api/current.txt
index 6a4905b..7af040f 100644
--- a/privacysandbox/ads/ads-adservices/api/current.txt
+++ b/privacysandbox/ads/ads-adservices/api/current.txt
@@ -100,20 +100,13 @@
package androidx.privacysandbox.ads.adservices.common {
public final class AdData {
- ctor public AdData(optional android.net.Uri renderUri, optional String metadata);
+ ctor public AdData(android.net.Uri renderUri, String metadata);
method public String getMetadata();
method public android.net.Uri getRenderUri();
property public final String metadata;
property public final android.net.Uri renderUri;
}
- @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class AdData.Builder {
- ctor public AdData.Builder();
- method public androidx.privacysandbox.ads.adservices.common.AdData build();
- method public androidx.privacysandbox.ads.adservices.common.AdData.Builder setMetadata(String metadata);
- method public androidx.privacysandbox.ads.adservices.common.AdData.Builder setRenderUri(android.net.Uri renderUri);
- }
-
public final class AdSelectionSignals {
ctor public AdSelectionSignals(String signals);
method public String getSignals();
@@ -198,20 +191,13 @@
}
public final class TrustedBiddingData {
- ctor public TrustedBiddingData(optional android.net.Uri trustedBiddingUri, optional java.util.List<java.lang.String> trustedBiddingKeys);
+ ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.List<java.lang.String> trustedBiddingKeys);
method public java.util.List<java.lang.String> getTrustedBiddingKeys();
method public android.net.Uri getTrustedBiddingUri();
property public final java.util.List<java.lang.String> trustedBiddingKeys;
property public final android.net.Uri trustedBiddingUri;
}
- @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class TrustedBiddingData.Builder {
- ctor public TrustedBiddingData.Builder();
- method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData build();
- method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData.Builder setTrustedBiddingKeys(java.util.List<java.lang.String> trustedBiddingKeys);
- method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData.Builder setTrustedBiddingUri(android.net.Uri trustedBiddingUri);
- }
-
}
package androidx.privacysandbox.ads.adservices.measurement {
diff --git a/privacysandbox/ads/ads-adservices/api/restricted_current.txt b/privacysandbox/ads/ads-adservices/api/restricted_current.txt
index 6a4905b..7af040f 100644
--- a/privacysandbox/ads/ads-adservices/api/restricted_current.txt
+++ b/privacysandbox/ads/ads-adservices/api/restricted_current.txt
@@ -100,20 +100,13 @@
package androidx.privacysandbox.ads.adservices.common {
public final class AdData {
- ctor public AdData(optional android.net.Uri renderUri, optional String metadata);
+ ctor public AdData(android.net.Uri renderUri, String metadata);
method public String getMetadata();
method public android.net.Uri getRenderUri();
property public final String metadata;
property public final android.net.Uri renderUri;
}
- @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class AdData.Builder {
- ctor public AdData.Builder();
- method public androidx.privacysandbox.ads.adservices.common.AdData build();
- method public androidx.privacysandbox.ads.adservices.common.AdData.Builder setMetadata(String metadata);
- method public androidx.privacysandbox.ads.adservices.common.AdData.Builder setRenderUri(android.net.Uri renderUri);
- }
-
public final class AdSelectionSignals {
ctor public AdSelectionSignals(String signals);
method public String getSignals();
@@ -198,20 +191,13 @@
}
public final class TrustedBiddingData {
- ctor public TrustedBiddingData(optional android.net.Uri trustedBiddingUri, optional java.util.List<java.lang.String> trustedBiddingKeys);
+ ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.List<java.lang.String> trustedBiddingKeys);
method public java.util.List<java.lang.String> getTrustedBiddingKeys();
method public android.net.Uri getTrustedBiddingUri();
property public final java.util.List<java.lang.String> trustedBiddingKeys;
property public final android.net.Uri trustedBiddingUri;
}
- @RequiresApi(android.os.Build.VERSION_CODES.TIRAMISU) public static final class TrustedBiddingData.Builder {
- ctor public TrustedBiddingData.Builder();
- method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData build();
- method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData.Builder setTrustedBiddingKeys(java.util.List<java.lang.String> trustedBiddingKeys);
- method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData.Builder setTrustedBiddingUri(android.net.Uri trustedBiddingUri);
- }
-
}
package androidx.privacysandbox.ads.adservices.measurement {
diff --git a/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/common/AdDataTest.kt b/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/common/AdDataTest.kt
index cc86a64..c140524 100644
--- a/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/common/AdDataTest.kt
+++ b/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/common/AdDataTest.kt
@@ -17,10 +17,7 @@
package androidx.privacysandbox.ads.adservices.common
import android.net.Uri
-import android.os.Build
-import androidx.annotation.RequiresApi
import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
import org.junit.Test
@@ -28,10 +25,10 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
-@SdkSuppress(minSdkVersion = 33)
class AdDataTest {
private val uri: Uri = Uri.parse("abc.com")
private val metadata = "metadata"
+
@Test
fun testToString() {
val result = "AdData: renderUri=$uri, metadata='$metadata'"
@@ -45,14 +42,4 @@
var adData2 = AdData(Uri.parse("abc.com"), "metadata")
Truth.assertThat(adData1 == adData2).isTrue()
}
-
- @Test
- @RequiresApi(Build.VERSION_CODES.TIRAMISU)
- fun testBuilderSetters() {
- val constructed = AdData(uri, metadata)
- val builder = AdData.Builder()
- .setRenderUri(uri)
- .setMetadata(metadata)
- Truth.assertThat(builder.build()).isEqualTo(constructed)
- }
}
diff --git a/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingDataTest.kt b/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingDataTest.kt
index 5b74ef1..4cb9357 100644
--- a/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingDataTest.kt
+++ b/privacysandbox/ads/ads-adservices/src/androidTest/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingDataTest.kt
@@ -17,10 +17,7 @@
package androidx.privacysandbox.ads.adservices.customaudience
import android.net.Uri
-import android.os.Build
-import androidx.annotation.RequiresApi
import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth
import org.junit.Test
@@ -28,24 +25,14 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
-@SdkSuppress(minSdkVersion = 33)
class TrustedBiddingDataTest {
private val uri = Uri.parse("abc.com")
private val keys = listOf("key1", "key2")
+
@Test
fun testToString() {
val result = "TrustedBiddingData: trustedBiddingUri=abc.com trustedBiddingKeys=[key1, key2]"
val trustedBiddingData = TrustedBiddingData(uri, keys)
Truth.assertThat(trustedBiddingData.toString()).isEqualTo(result)
}
-
- @RequiresApi(Build.VERSION_CODES.TIRAMISU)
- @Test
- fun testBuilderSetters() {
- val constructed = TrustedBiddingData(uri, keys)
- val builder = TrustedBiddingData.Builder()
- .setTrustedBiddingUri(uri)
- .setTrustedBiddingKeys(keys)
- Truth.assertThat(builder.build()).isEqualTo(constructed)
- }
}
diff --git a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/common/AdData.kt b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/common/AdData.kt
index a274659..c12afe8 100644
--- a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/common/AdData.kt
+++ b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/common/AdData.kt
@@ -17,8 +17,6 @@
package androidx.privacysandbox.ads.adservices.common
import android.net.Uri
-import android.os.Build
-import androidx.annotation.RequiresApi
/**
* Represents data specific to an ad that is necessary for ad selection and rendering.
@@ -26,8 +24,8 @@
* @param metadata buyer ad metadata represented as a JSON string
*/
class AdData public constructor(
- val renderUri: Uri = Uri.EMPTY,
- val metadata: String = ""
+ val renderUri: Uri,
+ val metadata: String
) {
/** Checks whether two [AdData] objects contain the same information. */
@@ -49,42 +47,4 @@
override fun toString(): String {
return "AdData: renderUri=$renderUri, metadata='$metadata'"
}
-
- /** Builder for [AdData] objects. */
- @RequiresApi(Build.VERSION_CODES.TIRAMISU)
- public class Builder {
- private var renderUri: Uri = Uri.EMPTY
- private var metadata: String = ""
-
- /**
- * Sets the URI that points to the ad's rendering assets. The URI must use HTTPS.
- *
- * @param renderUri a URI pointing to the ad's rendering assets
- */
- fun setRenderUri(renderUri: Uri): Builder = apply {
- this.renderUri = renderUri
- }
-
- /**
- * Sets the buyer ad metadata used during the ad selection process.
- *
- * @param metadata The metadata should be a valid JSON object serialized as a string.
- * Metadata represents ad-specific bidding information that will be used during ad selection
- * as part of bid generation and used in buyer JavaScript logic, which is executed in an
- * isolated execution environment.
- *
- * If the metadata is not a valid JSON object that can be consumed by the buyer's JS, the
- * ad will not be eligible for ad selection.
- */
- fun setMetadata(metadata: String): Builder = apply {
- this.metadata = metadata
- }
-
- /**
- * Builds an instance of [AdData]
- */
- fun build(): AdData {
- return AdData(renderUri, metadata)
- }
- }
}
diff --git a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingData.kt b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingData.kt
index 077c397..64c7d67 100644
--- a/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingData.kt
+++ b/privacysandbox/ads/ads-adservices/src/main/java/androidx/privacysandbox/ads/adservices/customaudience/TrustedBiddingData.kt
@@ -17,8 +17,6 @@
package androidx.privacysandbox.ads.adservices.customaudience
import android.net.Uri
-import android.os.Build
-import androidx.annotation.RequiresApi
/**
* Represents data used during the ad selection process to fetch buyer bidding signals from a
@@ -31,8 +29,8 @@
* bidding signals.
*/
class TrustedBiddingData public constructor(
- val trustedBiddingUri: Uri = Uri.EMPTY,
- val trustedBiddingKeys: List<String> = emptyList()
+ val trustedBiddingUri: Uri,
+ val trustedBiddingKeys: List<String>
) {
/**
* @return `true` if two [TrustedBiddingData] objects contain the same information
@@ -55,38 +53,4 @@
return "TrustedBiddingData: trustedBiddingUri=$trustedBiddingUri " +
"trustedBiddingKeys=$trustedBiddingKeys"
}
-
- /** Builder for [TrustedBiddingData] objects. */
- @RequiresApi(Build.VERSION_CODES.TIRAMISU)
- public class Builder {
- private var trustedBiddingUri: Uri = Uri.EMPTY
- private var trustedBiddingKeys: List<String> = emptyList()
-
- /**
- * Sets the trusted Bidding Uri
- *
- * @param trustedBiddingUri the URI pointing to the trusted key-value server holding bidding
- * signals. The URI must use HTTPS.
- */
- fun setTrustedBiddingUri(trustedBiddingUri: Uri): Builder = apply {
- this.trustedBiddingUri = trustedBiddingUri
- }
-
- /**
- * Sets the trusted Bidding keys.
- *
- * @param trustedBiddingKeys list of keys to query the trusted key-value server with.
- * This list is permitted to be empty.
- */
- fun setTrustedBiddingKeys(trustedBiddingKeys: List<String>): Builder = apply {
- this.trustedBiddingKeys = trustedBiddingKeys
- }
-
- /**
- * Builds and instance of [TrustedBiddingData]
- */
- fun build(): TrustedBiddingData {
- return TrustedBiddingData(trustedBiddingUri, trustedBiddingKeys)
- }
- }
}
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
index 704d543..3c7ef5e 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
@@ -15,6 +15,7 @@
*/
import androidx.build.LibraryType
+import javax.inject.Inject
plugins {
id("AndroidXPlugin")
@@ -22,6 +23,72 @@
id("org.jetbrains.kotlin.android")
}
+abstract class BundleTestSdkDexTask extends DefaultTask {
+
+ @InputFiles
+ @PathSensitive(PathSensitivity.NAME_ONLY)
+ abstract ConfigurableFileCollection getTestSdkApkFolders()
+
+ @OutputDirectory
+ abstract DirectoryProperty getOutputDir()
+
+ @Inject
+ abstract FileSystemOperations getFileSystemOperations()
+
+ @Inject
+ abstract ArchiveOperations getArchiveOperations()
+
+ @TaskAction
+ def exec() {
+ for (File folder : testSdkApkFolders.files) {
+ for (File file : folder.listFiles()) {
+ String fileName = file.name
+ if (!fileName.endsWith(".apk")) {
+ continue
+ }
+
+ int projectNameEnd = fileName.indexOf("-")
+ String projectName = projectNameEnd > 0 ? fileName.substring(0, projectNameEnd) : fileName
+
+ fileSystemOperations.copy {
+ from(archiveOperations.zipTree(file))
+ into(outputDir.dir("test-sdks/$projectName/"))
+ include('*.dex')
+ }
+ }
+ }
+ }
+}
+
+def bundleTestSdkDexTaskProvider = tasks.register("bundleTestSdkDexTask", BundleTestSdkDexTask) {
+ description("Bundle DEX from the androidTestBundleDex configuration into assets folder")
+
+ def configuration = configurations.getByName("androidTestBundleDex")
+ testSdkApkFolders.from(configuration.incoming.artifactView {}.files)
+}
+
+androidComponents {
+ onVariants(selector().withBuildType("debug")) {
+ androidTest.sources.assets.addGeneratedSourceDirectory(
+ bundleTestSdkDexTaskProvider,
+ BundleTestSdkDexTask::getOutputDir
+ )
+ }
+}
+
+configurations {
+ androidTestBundleDex {
+ canBeConsumed = false
+ canBeResolved = true
+ attributes {
+ attribute(
+ LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
+ objects.named(LibraryElements, "testSdkApk")
+ )
+ }
+ }
+}
+
dependencies {
api(libs.kotlinStdlib)
api(libs.kotlinCoroutinesCore)
@@ -48,6 +115,8 @@
androidTestImplementation(libs.mockitoCore, excludes.bytebuddy) // DexMaker has it"s own MockMaker
androidTestImplementation(libs.dexmakerMockitoInline, excludes.bytebuddy) // DexMaker has it"s own MockMaker
+
+ androidTestBundleDex(project(":privacysandbox:sdkruntime:test-sdks:current"))
}
android {
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
index 4149ac0..09f256a 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
+++ b/privacysandbox/sdkruntime/sdkruntime-client/src/androidTest/java/androidx/privacysandbox/sdkruntime/client/loader/LocalSdkProviderTest.kt
@@ -19,7 +19,6 @@
import android.os.Binder
import android.os.Bundle
import android.os.IBinder
-import android.view.View
import androidx.lifecycle.Lifecycle
import androidx.privacysandbox.sdkruntime.client.EmptyActivity
import androidx.privacysandbox.sdkruntime.client.TestActivityHolder
@@ -31,7 +30,6 @@
import androidx.privacysandbox.sdkruntime.core.LoadSdkCompatException
import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
import androidx.privacysandbox.sdkruntime.core.SandboxedSdkInfo
-import androidx.privacysandbox.sdkruntime.core.SandboxedSdkProviderCompat
import androidx.privacysandbox.sdkruntime.core.Versions
import androidx.privacysandbox.sdkruntime.core.activity.SdkSandboxActivityHandlerCompat
import androidx.privacysandbox.sdkruntime.core.controller.SdkSandboxControllerCompat
@@ -227,60 +225,6 @@
assertThat(controller.sdkActivityHandlers[token]).isNull()
}
- class CurrentVersionProviderLoadTest : SandboxedSdkProviderCompat() {
- @JvmField
- var onLoadSdkBinder: Binder? = null
-
- @JvmField
- var lastOnLoadSdkParams: Bundle? = null
-
- @JvmField
- var isBeforeUnloadSdkCalled = false
-
- @Throws(LoadSdkCompatException::class)
- override fun onLoadSdk(params: Bundle): SandboxedSdkCompat {
- val result = CurrentVersionSdkTest(context!!)
- >
-
- lastOnLoadSdkParams = params
- if (params.getBoolean("needFail", false)) {
- throw LoadSdkCompatException(RuntimeException(), params)
- }
- return SandboxedSdkCompat(result)
- }
-
- override fun beforeUnloadSdk() {
- isBeforeUnloadSdkCalled = true
- }
-
- override fun getView(
- windowContext: Context,
- params: Bundle,
- width: Int,
- height: Int
- ): View {
- return View(windowContext)
- }
- }
-
- @Suppress("unused") // Reflection calls
- internal class CurrentVersionSdkTest(
- private val context: Context
- ) : Binder() {
- fun getSandboxedSdks(): List<SandboxedSdkCompat> =
- SdkSandboxControllerCompat.from(context).getSandboxedSdks()
-
- fun getAppOwnedSdkSandboxInterfaces(): List<AppOwnedSdkSandboxInterfaceCompat> =
- SdkSandboxControllerCompat.from(context).getAppOwnedSdkSandboxInterfaces()
-
- fun registerSdkSandboxActivityHandler(handler: SdkSandboxActivityHandlerCompat): IBinder =
- SdkSandboxControllerCompat.from(context).registerSdkSandboxActivityHandler(handler)
-
- fun unregisterSdkSandboxActivityHandler(handler: SdkSandboxActivityHandlerCompat) {
- SdkSandboxControllerCompat.from(context).unregisterSdkSandboxActivityHandler(handler)
- }
- }
-
internal class TestClassLoaderFactory(
private val testStorage: TestLocalSdkStorage
) : SdkLoader.ClassLoaderFactory {
@@ -364,35 +308,23 @@
)
}
- // add SDK loaded from test sources
+ val currentVersionSdk = TestSdkInfo(
+ Versions.API_VERSION,
+ "test-sdks/current/classes.dex",
+ "androidx.privacysandbox.sdkruntime.testsdk.current.CompatProvider"
+ )
val controller = TestStubController()
+
+ val loadedSdk = loadTestSdkFromAssets(currentVersionSdk.localSdkConfig, controller)
+ assertThat(loadedSdk.extractApiVersion())
+ .isEqualTo(currentVersionSdk.apiVersion)
+
add(
arrayOf(
- "BuiltFromSource",
- Versions.API_VERSION,
+ currentVersionSdk.localSdkConfig.dexPaths[0],
+ currentVersionSdk.apiVersion,
controller,
- loadTestSdkFromSource(controller),
- )
- )
- }
-
- private fun loadTestSdkFromSource(controller: TestStubController): LocalSdkProvider {
- val sdkLoader = SdkLoader(
- object : SdkLoader.ClassLoaderFactory {
- override fun createClassLoaderFor(
- sdkConfig: LocalSdkConfig,
- parent: ClassLoader
- ): ClassLoader = javaClass.classLoader!!
- },
- ApplicationProvider.getApplicationContext(),
- controller
- )
-
- return sdkLoader.loadSdk(
- LocalSdkConfig(
- packageName = "test.CurrentVersionProviderLoadTest",
- dexPaths = emptyList(),
- entryPoint = CurrentVersionProviderLoadTest::class.java.name
+ loadedSdk
)
)
}
diff --git a/privacysandbox/sdkruntime/test-sdks/current/build.gradle b/privacysandbox/sdkruntime/test-sdks/current/build.gradle
new file mode 100644
index 0000000..c69ab15
--- /dev/null
+++ b/privacysandbox/sdkruntime/test-sdks/current/build.gradle
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+import com.android.build.api.artifact.SingleArtifact
+
+plugins {
+ id("AndroidXPlugin")
+ id("com.android.application")
+ id("org.jetbrains.kotlin.android")
+}
+
+android {
+ namespace "androidx.privacysandbox.sdkruntime.testsdk.current"
+}
+
+dependencies {
+ implementation(project(":privacysandbox:sdkruntime:sdkruntime-core"))
+}
+
+/*
+ * Allow integration tests to consume the APK produced by this project
+ */
+configurations {
+ testSdkApk {
+ canBeConsumed = true
+ canBeResolved = false
+ attributes {
+ attribute(
+ LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE,
+ objects.named(LibraryElements, "testSdkApk")
+ )
+ }
+ }
+}
+
+androidComponents {
+ beforeVariants(selector().all()) { enabled = buildType == 'release' }
+ onVariants(selector().all().withBuildType("release"), { variant ->
+ artifacts {
+ testSdkApk(variant.artifacts.get(SingleArtifact.APK.INSTANCE))
+ }
+ })
+}
\ No newline at end of file
diff --git a/privacysandbox/sdkruntime/test-sdks/current/src/main/AndroidManifest.xml b/privacysandbox/sdkruntime/test-sdks/current/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..8de5974
--- /dev/null
+++ b/privacysandbox/sdkruntime/test-sdks/current/src/main/AndroidManifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+</manifest>
\ No newline at end of file
diff --git a/privacysandbox/sdkruntime/test-sdks/current/src/main/java/androidx/privacysandbox/sdkruntime/testsdk/current/CompatProvider.kt b/privacysandbox/sdkruntime/test-sdks/current/src/main/java/androidx/privacysandbox/sdkruntime/testsdk/current/CompatProvider.kt
new file mode 100644
index 0000000..03f31ea
--- /dev/null
+++ b/privacysandbox/sdkruntime/test-sdks/current/src/main/java/androidx/privacysandbox/sdkruntime/testsdk/current/CompatProvider.kt
@@ -0,0 +1,83 @@
+/*
+ * 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.privacysandbox.sdkruntime.testsdk.current
+
+import android.content.Context
+import android.os.Binder
+import android.os.Bundle
+import android.os.IBinder
+import android.view.View
+import androidx.privacysandbox.sdkruntime.core.AppOwnedSdkSandboxInterfaceCompat
+import androidx.privacysandbox.sdkruntime.core.LoadSdkCompatException
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkCompat
+import androidx.privacysandbox.sdkruntime.core.SandboxedSdkProviderCompat
+import androidx.privacysandbox.sdkruntime.core.activity.SdkSandboxActivityHandlerCompat
+import androidx.privacysandbox.sdkruntime.core.controller.SdkSandboxControllerCompat
+
+@Suppress("unused") // Reflection usage from tests in privacysandbox:sdkruntime:sdkruntime-client
+class CompatProvider : SandboxedSdkProviderCompat() {
+ @JvmField
+ var onLoadSdkBinder: Binder? = null
+
+ @JvmField
+ var lastOnLoadSdkParams: Bundle? = null
+
+ @JvmField
+ var isBeforeUnloadSdkCalled = false
+
+ @Throws(LoadSdkCompatException::class)
+ override fun onLoadSdk(params: Bundle): SandboxedSdkCompat {
+ val result = CurrentVersionSdkTest(context!!)
+ >
+
+ lastOnLoadSdkParams = params
+ if (params.getBoolean("needFail", false)) {
+ throw LoadSdkCompatException(RuntimeException(), params)
+ }
+ return SandboxedSdkCompat(result)
+ }
+
+ override fun beforeUnloadSdk() {
+ isBeforeUnloadSdkCalled = true
+ }
+
+ override fun getView(
+ windowContext: Context,
+ params: Bundle,
+ width: Int,
+ height: Int
+ ): View {
+ return View(windowContext)
+ }
+
+ internal class CurrentVersionSdkTest(
+ private val context: Context
+ ) : Binder() {
+ fun getSandboxedSdks(): List<SandboxedSdkCompat> =
+ SdkSandboxControllerCompat.from(context).getSandboxedSdks()
+
+ fun getAppOwnedSdkSandboxInterfaces(): List<AppOwnedSdkSandboxInterfaceCompat> =
+ SdkSandboxControllerCompat.from(context).getAppOwnedSdkSandboxInterfaces()
+
+ fun registerSdkSandboxActivityHandler(handler: SdkSandboxActivityHandlerCompat): IBinder =
+ SdkSandboxControllerCompat.from(context).registerSdkSandboxActivityHandler(handler)
+
+ fun unregisterSdkSandboxActivityHandler(handler: SdkSandboxActivityHandlerCompat) {
+ SdkSandboxControllerCompat.from(context).unregisterSdkSandboxActivityHandler(handler)
+ }
+ }
+}
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
index bcae96fd..b3d581a 100644
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
+++ b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
@@ -133,6 +133,10 @@
/**
* Sets the Z-ordering of the [SandboxedSdkView]'s surface, relative to its window.
+ *
+ * When [setOnTop] is true, every [android.view.MotionEvent] on the [SandboxedSdkView] will be
+ * sent to the UI provider. When [setOnTop] is false, every [android.view.MotionEvent] will be
+ * sent to the client. By default, motion events are sent to the UI provider.
*/
fun setZOrderOnTopAndEnableUserInteraction(setOnTop: Boolean) {
if (setOnTop == isZOrderOnTop) return
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XAnnotation.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XAnnotation.kt
index a0e190e..3df0f9f 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XAnnotation.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XAnnotation.kt
@@ -74,6 +74,9 @@
/** All values declared in the annotation class. */
val annotationValues: List<XAnnotationValue>
+ /** All default values declared in the annotation class. */
+ val defaultValues: List<XAnnotationValue>
+
/** Returns the value of the given [methodName] as a type reference. */
fun getAsType(methodName: String): XType = getAnnotationValue(methodName).asType()
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt
index a1cd205..1582a0e 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotation.kt
@@ -21,7 +21,6 @@
import androidx.room.compiler.processing.XAnnotationValue
import androidx.room.compiler.processing.XNullability
import androidx.room.compiler.processing.XType
-import androidx.room.compiler.processing.compat.XConverters.toXProcessing
import com.google.auto.common.AnnotationMirrors
import com.google.auto.common.MoreTypes
import javax.lang.model.element.AnnotationMirror
@@ -49,10 +48,23 @@
annotationValues.filter { explicitValues.contains(it.name) }
}
+ override val defaultValues: List<XAnnotationValue> by lazy {
+ annotationValues.mapNotNull {
+ val method = (it as JavacAnnotationValue).method
+ method.element.getDefaultValue()?.let { value ->
+ JavacAnnotationValue(env, method, value)
+ }
+ }
+ }
+
override val annotationValues: List<XAnnotationValue> by lazy {
AnnotationMirrors.getAnnotationValuesWithDefaults(mirror)
.map { (executableElement, annotationValue) ->
- annotationValue.toXProcessing(executableElement, env)
+ JavacAnnotationValue(
+ env,
+ env.wrapExecutableElement(executableElement) as JavacMethodElement,
+ annotationValue
+ )
}
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotationValue.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotationValue.kt
index c4eb412..fb9cdaa 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotationValue.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacAnnotationValue.kt
@@ -31,7 +31,7 @@
internal class JavacAnnotationValue(
val env: JavacProcessingEnv,
- private val method: JavacMethodElement,
+ val method: JavacMethodElement,
val annotationValue: AnnotationValue,
override val valueType: XType = method.returnType,
private val valueProvider: () -> Any? = {
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacKmAnnotation.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacKmAnnotation.kt
index 00cafd2..023311f 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacKmAnnotation.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacKmAnnotation.kt
@@ -67,4 +67,8 @@
}
}
}
+
+ override val defaultValues: List<XAnnotationValue> by lazy {
+ typeElement.getDeclaredMethods().mapNotNull { it.defaultValue }
+ }
}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt
index 2012535..1e244b3 100644
--- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt
+++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspAnnotation.kt
@@ -23,6 +23,7 @@
import com.google.devtools.ksp.getConstructors
import com.google.devtools.ksp.symbol.KSAnnotation
import com.google.devtools.ksp.symbol.KSType
+import com.google.devtools.ksp.symbol.KSValueArgument
import com.google.devtools.ksp.symbol.Origin
internal class KspAnnotation(
@@ -50,32 +51,20 @@
}
}
+ override val defaultValues: List<XAnnotationValue> by lazy {
+ wrap(ksAnnotated.defaultArguments)
+ }
+
override val annotationValues: List<XAnnotationValue> by lazy {
- // Whether the annotation value is being treated as property or abstract method depends on
- // the actual usage of the annotation. If the annotation is being used on Java source, then
- // the annotation value will have a corresponding method element, otherwise, it will become
- // a kotlin property.
- val typesByName =
- buildMap {
- typeElement.getDeclaredMethods()
- .filter {
- if ((typeElement as KspTypeElement).declaration
- .getConstructors()
- .single().parameters
- .isNotEmpty()) {
- it.isKotlinPropertyMethod()
- } else {
- it.isAbstract()
- }
- }.forEach {
- put(it.name, it.returnType)
- put(it.jvmName, it.returnType)
- }
- }
- // KSAnnotated.arguments isn't guaranteed to have the same ordering as declared in the
- // annotation declaration, so we order it manually using a map from name to index.
+ wrap(ksAnnotated.arguments)
+ }
+
+ private fun wrap(source: List<KSValueArgument>): List<XAnnotationValue> {
+ // KSAnnotated.arguments / KSAnnotated.defaultArguments isn't guaranteed to have the same
+ // ordering as declared in the annotation declaration, so we order it manually using a map
+ // from name to index.
val indexByName = typesByName.keys.mapIndexed { index, name -> name to index }.toMap()
- ksAnnotated.arguments.map {
+ return source.map {
val valueName = it.name?.asString()
?: error("Value argument $it does not have a name.")
val valueType = typesByName[valueName]
@@ -84,6 +73,31 @@
}.sortedBy { indexByName[it.name] }
}
+ // A map of annotation value name to type.
+ private val typesByName: Map<String, XType> by lazy {
+ buildMap {
+ typeElement.getDeclaredMethods()
+ .filter {
+ // Whether the annotation value is being treated as property or
+ // abstract method depends on the actual usage of the annotation.
+ // If the annotation is being used on Java source, then the annotation
+ // value will have a corresponding method element, otherwise, it
+ // will become a kotlin property.
+ if ((typeElement as KspTypeElement).declaration
+ .getConstructors()
+ .single().parameters
+ .isNotEmpty()) {
+ it.isKotlinPropertyMethod()
+ } else {
+ it.isAbstract()
+ }
+ }.forEach {
+ put(it.name, it.returnType)
+ put(it.jvmName, it.returnType)
+ }
+ }
+ }
+
override fun <T : Annotation> asAnnotationBox(annotationClass: Class<T>): XAnnotationBox<T> {
return KspAnnotationBox(
env = env,
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt
index 2953253..71d5c12 100644
--- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt
+++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XAnnotationTest.kt
@@ -708,6 +708,20 @@
}.forEach { typeElement ->
val annotation = typeElement.requireAnnotation<JavaAnnotationWithDefaults>()
+ assertThat(annotation.defaultValues.map { it.name })
+ .containsExactly(
+ "stringVal",
+ "stringArrayVal",
+ "typeVal",
+ "typeArrayVal",
+ "intVal",
+ "intArrayVal",
+ "enumVal",
+ "enumArrayVal",
+ "otherAnnotationVal",
+ "otherAnnotationArrayVal"
+ ).inOrder()
+
assertThat(annotation.get<Int>("intVal"))
.isEqualTo(3)
assertThat(annotation.get<List<Int>>("intArrayVal"))
diff --git a/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/RoutesManager.java b/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/RoutesManager.java
index 1c4ecff..94676b4 100644
--- a/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/RoutesManager.java
+++ b/samples/MediaRoutingDemo/src/main/java/com/example/androidx/mediarouting/RoutesManager.java
@@ -317,7 +317,7 @@
.setItems(items)
.setLinkedItemComponentName(
new ComponentName(mContext, MainActivity.class))
- .setUseSystemOrdering(mRouteListingSystemOrderingPreferred)
+ .setSystemOrderingEnabled(mRouteListingSystemOrderingPreferred)
.build();
}
mMediaRouter.setRouteListingPreference(routeListingPreference);
diff --git a/settings.gradle b/settings.gradle
index 34dec2f..5e4699c 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -906,6 +906,7 @@
includeProject(":privacysandbox:plugins:plugins-privacysandbox-library", [BuildType.MAIN])
includeProject(":privacysandbox:sdkruntime:sdkruntime-client", [BuildType.MAIN])
includeProject(":privacysandbox:sdkruntime:sdkruntime-core", [BuildType.MAIN])
+includeProject(":privacysandbox:sdkruntime:test-sdks:current", [BuildType.MAIN])
includeProject(":privacysandbox:tools:tools", [BuildType.MAIN])
includeProject(":privacysandbox:tools:tools-apicompiler", [BuildType.MAIN])
includeProject(":privacysandbox:tools:tools-apigenerator", [BuildType.MAIN])
diff --git a/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
index a04f924..cf0399d 100644
--- a/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
+++ b/wear/compose/compose-foundation/src/androidTest/kotlin/androidx/wear/compose/foundation/lazy/ScalingLazyListLayoutInfoTest.kt
@@ -133,6 +133,7 @@
scope!!.launch {
state.animateScrollBy(scrollDistance.toFloat())
}
+
rule.runOnIdle {
assertThat(state.centerItemIndex).isEqualTo(1)
assertThat(state.centerItemScrollOffset).isEqualTo(scrollDistance)
@@ -419,6 +420,7 @@
}
}
}
+ rule.mainClock.autoAdvance = false
// TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
rule.waitUntil { state.initialized.value }
@@ -426,7 +428,8 @@
state.animateScrollBy(localItemSizePx.toFloat() * 10)
}
- rule.waitUntil { !state.isScrollInProgress }
+ rule.mainClock.advanceTimeBy(milliseconds = 1000)
+ assert(!state.isScrollInProgress)
assertThat(state.centerItemIndex).isEqualTo(4)
assertThat(state.centerItemScrollOffset).isEqualTo(0)
@@ -434,7 +437,8 @@
state.animateScrollBy(- localItemSizePx.toFloat() * 10)
}
- rule.waitUntil { !state.isScrollInProgress }
+ rule.mainClock.advanceTimeBy(milliseconds = 1000)
+ assert(!state.isScrollInProgress)
assertThat(state.centerItemIndex).isEqualTo(autoCenterItem)
assertThat(state.centerItemScrollOffset).isEqualTo(0)
}
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
index 7a6eba0..677dca7 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/lazy/ScalingLazyColumn.kt
@@ -34,11 +34,11 @@
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.Stable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -58,6 +58,7 @@
import androidx.compose.ui.unit.offset
import androidx.wear.compose.foundation.ExperimentalWearFoundationApi
import androidx.wear.compose.foundation.LocalReduceMotion
+import kotlinx.coroutines.launch
/**
* Receiver scope which is used by [ScalingLazyColumn].
@@ -395,6 +396,7 @@
state.reverseLayout.value = reverseLayout
state.localInspectionMode.value = LocalInspectionMode.current
+ val coroutineScope = rememberCoroutineScope()
LazyColumn(
modifier = Modifier
.clipToBounds()
@@ -406,6 +408,9 @@
layoutInfo.readyForInitialScroll
) {
initialized = true
+ coroutineScope.launch {
+ state.scrollToInitialItem()
+ }
}
},
horizontalAlignment = horizontalAlignment,
@@ -443,11 +448,6 @@
}
}
}
- if (initialized) {
- LaunchedEffect(state) {
- state.scrollToInitialItem()
- }
- }
}
}
}
diff --git a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
index 75181cf..e57f587 100644
--- a/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
+++ b/wear/compose/compose-material/src/androidTest/kotlin/androidx/wear/compose/material/ScalingLazyListLayoutInfoTest.kt
@@ -134,6 +134,7 @@
scope!!.launch {
state.animateScrollBy(scrollDistance.toFloat())
}
+
rule.runOnIdle {
assertThat(state.centerItemIndex).isEqualTo(1)
assertThat(state.centerItemScrollOffset).isEqualTo(scrollDistance)
@@ -419,6 +420,7 @@
}
}
}
+ rule.mainClock.autoAdvance = false
// TODO(b/210654937): Remove the waitUntil once we no longer need 2 stage initialization
rule.waitUntil { state.initialized.value }
@@ -426,7 +428,8 @@
state.animateScrollBy(localItemSizePx.toFloat() * 10)
}
- rule.waitUntil { !state.isScrollInProgress }
+ rule.mainClock.advanceTimeBy(milliseconds = 1000)
+ assert(!state.isScrollInProgress)
assertThat(state.centerItemIndex).isEqualTo(4)
assertThat(state.centerItemScrollOffset).isEqualTo(0)
@@ -434,7 +437,8 @@
state.animateScrollBy(- localItemSizePx.toFloat() * 10)
}
- rule.waitUntil { !state.isScrollInProgress }
+ rule.mainClock.advanceTimeBy(milliseconds = 1000)
+ assert(!state.isScrollInProgress)
assertThat(state.centerItemIndex).isEqualTo(autoCenterItem)
assertThat(state.centerItemScrollOffset).isEqualTo(0)
}
diff --git a/wear/compose/integration-tests/demos/build.gradle b/wear/compose/integration-tests/demos/build.gradle
index 36e7808d..892fc54 100644
--- a/wear/compose/integration-tests/demos/build.gradle
+++ b/wear/compose/integration-tests/demos/build.gradle
@@ -50,6 +50,8 @@
implementation("androidx.wear:wear:1.1.0")
+ implementation("androidx.tracing:tracing:1.1.0")
+
implementation(project(":compose:foundation:foundation"))
implementation(project(":compose:foundation:foundation-layout"))
implementation(project(":compose:integration-tests:demos:common"))
diff --git a/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt b/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt
index 646addf..0e3f0ea 100644
--- a/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt
+++ b/wear/compose/integration-tests/demos/src/androidTest/java/androidx/wear/compose/integration/demos/test/DemoTest.kt
@@ -16,6 +16,7 @@
package androidx.wear.compose.integration.demos.test
+import android.util.Log
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.SemanticsNodeInteractionCollection
import androidx.compose.ui.test.hasClickAction
@@ -33,15 +34,19 @@
import androidx.wear.compose.integration.demos.common.Demo
import androidx.wear.compose.integration.demos.common.DemoCategory
import com.google.common.truth.Truth.assertThat
-import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
private val ignoredDemos = listOf<String>(
- // Not ignoring any of them \o/
+ // TODO(b/294013164): Reinstate these tests
+ "Material > Curved Text > Basic Styling",
+ "Material > Curved Text > Provider Styling",
)
+// Run this test on a phone emulator.
+// There are issues running on Watch emulators that menu items off screen are not found,
+// given the use of ScalingLAZYColumn.
@LargeTest
@RunWith(AndroidJUnit4::class)
@OptIn(ExperimentalTestApi::class)
@@ -50,7 +55,6 @@
@get:Rule
val rule = createAndroidComposeRule<DemoActivity>()
- @Ignore("b/276935528")
@Test
fun navigateThroughAllDemos() {
// Compose integration-tests are split into batches due to size,
@@ -102,6 +106,7 @@
path: List<DemoCategory>,
fastForwardClock: Boolean
) {
+ Log.d("TEST", "Visit ${this.navigationTitle(path)}")
if (fastForwardClock) {
// Skip through the enter animation of the list screen
fastForwardClock()
diff --git a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt
index 8c7e17e..e76aa06 100644
--- a/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt
+++ b/wear/watchface/watchface/src/androidTest/java/androidx/wear/watchface/WatchFaceServiceAndroidTest.kt
@@ -43,9 +43,8 @@
val context: Context = ApplicationProvider.getApplicationContext()
val serviceSpy =
object : SimpleWatchFaceTestService() {
- override val resourcesContext: Context
- get() =
- this.createPackageContext(context.packageName, Context.CONTEXT_RESTRICTED)
+ override fun getResourcesContext(runtimePackage: String): Context =
+ this.createPackageContext(context.packageName, Context.CONTEXT_RESTRICTED)
}
val engine = serviceSpy.onCreateEngine() as WatchFaceService.EngineWrapper
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index c32fa26..476da70 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -437,9 +437,9 @@
}
}
- /** The context used to resolve resources. Unlocks future work. */
- protected open val resourcesContext: Context
- @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) get() = this
+ /** Returns the context used to resolve resources. */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ protected open fun getResourcesContext(runtimePackage: String): Context = this
/**
* Returns the id of the XmlSchemaAndComplicationSlotsDefinition XML resource or 0 if it can't
@@ -2644,7 +2644,7 @@
for (styleSetting in schema.userStyleSettings) {
estimatedBytes +=
styleSetting.estimateWireSizeInBytesAndValidateIconDimensions(
- resourcesContext,
+ getResourcesContext(getComponentName().packageName),
MAX_REASONABLE_SCHEMA_ICON_WIDTH,
MAX_REASONABLE_SCHEMA_ICON_HEIGHT,
)
diff --git a/window/window-core/api/1.2.0-beta02.txt b/window/window-core/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..624b2df
--- /dev/null
+++ b/window/window-core/api/1.2.0-beta02.txt
@@ -0,0 +1,38 @@
+// Signature format: 4.0
+package androidx.window.core.layout {
+
+ public final class WindowHeightSizeClass {
+ field public static final androidx.window.core.layout.WindowHeightSizeClass COMPACT;
+ field public static final androidx.window.core.layout.WindowHeightSizeClass.Companion Companion;
+ field public static final androidx.window.core.layout.WindowHeightSizeClass EXPANDED;
+ field public static final androidx.window.core.layout.WindowHeightSizeClass MEDIUM;
+ }
+
+ public static final class WindowHeightSizeClass.Companion {
+ }
+
+ public final class WindowSizeClass {
+ method public static androidx.window.core.layout.WindowSizeClass compute(float dpWidth, float dpHeight);
+ method public androidx.window.core.layout.WindowHeightSizeClass getWindowHeightSizeClass();
+ method public androidx.window.core.layout.WindowWidthSizeClass getWindowWidthSizeClass();
+ property public final androidx.window.core.layout.WindowHeightSizeClass windowHeightSizeClass;
+ property public final androidx.window.core.layout.WindowWidthSizeClass windowWidthSizeClass;
+ field public static final androidx.window.core.layout.WindowSizeClass.Companion Companion;
+ }
+
+ public static final class WindowSizeClass.Companion {
+ method public androidx.window.core.layout.WindowSizeClass compute(float dpWidth, float dpHeight);
+ }
+
+ public final class WindowWidthSizeClass {
+ field public static final androidx.window.core.layout.WindowWidthSizeClass COMPACT;
+ field public static final androidx.window.core.layout.WindowWidthSizeClass.Companion Companion;
+ field public static final androidx.window.core.layout.WindowWidthSizeClass EXPANDED;
+ field public static final androidx.window.core.layout.WindowWidthSizeClass MEDIUM;
+ }
+
+ public static final class WindowWidthSizeClass.Companion {
+ }
+
+}
+
diff --git a/window/window-core/api/res-1.2.0-beta02.txt b/window/window-core/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/window/window-core/api/res-1.2.0-beta02.txt
diff --git a/window/window-core/api/restricted_1.2.0-beta02.txt b/window/window-core/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..624b2df
--- /dev/null
+++ b/window/window-core/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1,38 @@
+// Signature format: 4.0
+package androidx.window.core.layout {
+
+ public final class WindowHeightSizeClass {
+ field public static final androidx.window.core.layout.WindowHeightSizeClass COMPACT;
+ field public static final androidx.window.core.layout.WindowHeightSizeClass.Companion Companion;
+ field public static final androidx.window.core.layout.WindowHeightSizeClass EXPANDED;
+ field public static final androidx.window.core.layout.WindowHeightSizeClass MEDIUM;
+ }
+
+ public static final class WindowHeightSizeClass.Companion {
+ }
+
+ public final class WindowSizeClass {
+ method public static androidx.window.core.layout.WindowSizeClass compute(float dpWidth, float dpHeight);
+ method public androidx.window.core.layout.WindowHeightSizeClass getWindowHeightSizeClass();
+ method public androidx.window.core.layout.WindowWidthSizeClass getWindowWidthSizeClass();
+ property public final androidx.window.core.layout.WindowHeightSizeClass windowHeightSizeClass;
+ property public final androidx.window.core.layout.WindowWidthSizeClass windowWidthSizeClass;
+ field public static final androidx.window.core.layout.WindowSizeClass.Companion Companion;
+ }
+
+ public static final class WindowSizeClass.Companion {
+ method public androidx.window.core.layout.WindowSizeClass compute(float dpWidth, float dpHeight);
+ }
+
+ public final class WindowWidthSizeClass {
+ field public static final androidx.window.core.layout.WindowWidthSizeClass COMPACT;
+ field public static final androidx.window.core.layout.WindowWidthSizeClass.Companion Companion;
+ field public static final androidx.window.core.layout.WindowWidthSizeClass EXPANDED;
+ field public static final androidx.window.core.layout.WindowWidthSizeClass MEDIUM;
+ }
+
+ public static final class WindowWidthSizeClass.Companion {
+ }
+
+}
+
diff --git a/window/window-java/api/1.2.0-beta02.txt b/window/window-java/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..2e19128
--- /dev/null
+++ b/window/window-java/api/1.2.0-beta02.txt
@@ -0,0 +1,32 @@
+// Signature format: 4.0
+package androidx.window.java.area {
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class WindowAreaControllerCallbackAdapter implements androidx.window.area.WindowAreaController {
+ ctor public WindowAreaControllerCallbackAdapter(androidx.window.area.WindowAreaController controller);
+ method public void addWindowAreaInfoListListener(java.util.concurrent.Executor executor, androidx.core.util.Consumer<java.util.List<androidx.window.area.WindowAreaInfo>> listener);
+ method public void removeWindowAreaInfoListListener(androidx.core.util.Consumer<java.util.List<androidx.window.area.WindowAreaInfo>> listener);
+ }
+
+}
+
+package androidx.window.java.embedding {
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class SplitControllerCallbackAdapter {
+ ctor public SplitControllerCallbackAdapter(androidx.window.embedding.SplitController controller);
+ method public void addSplitListener(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer);
+ method public void removeSplitListener(androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer);
+ }
+
+}
+
+package androidx.window.java.layout {
+
+ public final class WindowInfoTrackerCallbackAdapter implements androidx.window.layout.WindowInfoTracker {
+ ctor public WindowInfoTrackerCallbackAdapter(androidx.window.layout.WindowInfoTracker tracker);
+ method public void addWindowLayoutInfoListener(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.core.util.Consumer<androidx.window.layout.WindowLayoutInfo> consumer);
+ method public void addWindowLayoutInfoListener(@UiContext android.content.Context context, java.util.concurrent.Executor executor, androidx.core.util.Consumer<androidx.window.layout.WindowLayoutInfo> consumer);
+ method public void removeWindowLayoutInfoListener(androidx.core.util.Consumer<androidx.window.layout.WindowLayoutInfo> consumer);
+ }
+
+}
+
diff --git a/window/window-java/api/res-1.2.0-beta02.txt b/window/window-java/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/window/window-java/api/res-1.2.0-beta02.txt
diff --git a/window/window-java/api/restricted_1.2.0-beta02.txt b/window/window-java/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..2e19128
--- /dev/null
+++ b/window/window-java/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1,32 @@
+// Signature format: 4.0
+package androidx.window.java.area {
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class WindowAreaControllerCallbackAdapter implements androidx.window.area.WindowAreaController {
+ ctor public WindowAreaControllerCallbackAdapter(androidx.window.area.WindowAreaController controller);
+ method public void addWindowAreaInfoListListener(java.util.concurrent.Executor executor, androidx.core.util.Consumer<java.util.List<androidx.window.area.WindowAreaInfo>> listener);
+ method public void removeWindowAreaInfoListListener(androidx.core.util.Consumer<java.util.List<androidx.window.area.WindowAreaInfo>> listener);
+ }
+
+}
+
+package androidx.window.java.embedding {
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class SplitControllerCallbackAdapter {
+ ctor public SplitControllerCallbackAdapter(androidx.window.embedding.SplitController controller);
+ method public void addSplitListener(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer);
+ method public void removeSplitListener(androidx.core.util.Consumer<java.util.List<androidx.window.embedding.SplitInfo>> consumer);
+ }
+
+}
+
+package androidx.window.java.layout {
+
+ public final class WindowInfoTrackerCallbackAdapter implements androidx.window.layout.WindowInfoTracker {
+ ctor public WindowInfoTrackerCallbackAdapter(androidx.window.layout.WindowInfoTracker tracker);
+ method public void addWindowLayoutInfoListener(android.app.Activity activity, java.util.concurrent.Executor executor, androidx.core.util.Consumer<androidx.window.layout.WindowLayoutInfo> consumer);
+ method public void addWindowLayoutInfoListener(@UiContext android.content.Context context, java.util.concurrent.Executor executor, androidx.core.util.Consumer<androidx.window.layout.WindowLayoutInfo> consumer);
+ method public void removeWindowLayoutInfoListener(androidx.core.util.Consumer<androidx.window.layout.WindowLayoutInfo> consumer);
+ }
+
+}
+
diff --git a/window/window-rxjava2/api/1.2.0-beta02.txt b/window/window-rxjava2/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..5250696
--- /dev/null
+++ b/window/window-rxjava2/api/1.2.0-beta02.txt
@@ -0,0 +1,12 @@
+// Signature format: 4.0
+package androidx.window.rxjava2.layout {
+
+ public final class WindowInfoTrackerRx {
+ method public static io.reactivex.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ method public static io.reactivex.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ }
+
+}
+
diff --git a/window/window-rxjava2/api/res-1.2.0-beta02.txt b/window/window-rxjava2/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/window/window-rxjava2/api/res-1.2.0-beta02.txt
diff --git a/window/window-rxjava2/api/restricted_1.2.0-beta02.txt b/window/window-rxjava2/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..5250696
--- /dev/null
+++ b/window/window-rxjava2/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1,12 @@
+// Signature format: 4.0
+package androidx.window.rxjava2.layout {
+
+ public final class WindowInfoTrackerRx {
+ method public static io.reactivex.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ method public static io.reactivex.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ }
+
+}
+
diff --git a/window/window-rxjava3/api/1.2.0-beta02.txt b/window/window-rxjava3/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..23510cc
--- /dev/null
+++ b/window/window-rxjava3/api/1.2.0-beta02.txt
@@ -0,0 +1,12 @@
+// Signature format: 4.0
+package androidx.window.rxjava3.layout {
+
+ public final class WindowInfoTrackerRx {
+ method public static io.reactivex.rxjava3.core.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.rxjava3.core.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ method public static io.reactivex.rxjava3.core.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.rxjava3.core.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ }
+
+}
+
diff --git a/window/window-rxjava3/api/res-1.2.0-beta02.txt b/window/window-rxjava3/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/window/window-rxjava3/api/res-1.2.0-beta02.txt
diff --git a/window/window-rxjava3/api/restricted_1.2.0-beta02.txt b/window/window-rxjava3/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..23510cc
--- /dev/null
+++ b/window/window-rxjava3/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1,12 @@
+// Signature format: 4.0
+package androidx.window.rxjava3.layout {
+
+ public final class WindowInfoTrackerRx {
+ method public static io.reactivex.rxjava3.core.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.rxjava3.core.Flowable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ method public static io.reactivex.rxjava3.core.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity);
+ method public static io.reactivex.rxjava3.core.Observable<androidx.window.layout.WindowLayoutInfo> windowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context);
+ }
+
+}
+
diff --git a/window/window-testing/api/1.2.0-beta02.txt b/window/window-testing/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..847a9e8
--- /dev/null
+++ b/window/window-testing/api/1.2.0-beta02.txt
@@ -0,0 +1,73 @@
+// Signature format: 4.0
+package androidx.window.testing.embedding {
+
+ public final class ActivityEmbeddingRule implements org.junit.rules.TestRule {
+ ctor public ActivityEmbeddingRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public void overrideIsActivityEmbedded(android.app.Activity activity, boolean isActivityEmbedded);
+ method public void overrideSplitInfo(android.app.Activity activity, java.util.List<androidx.window.embedding.SplitInfo> splitInfoList);
+ method public void overrideSplitSupportStatus(androidx.window.embedding.SplitController.SplitSupportStatus status);
+ }
+
+ public final class TestActivityStack {
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
+ }
+
+ public final class TestSplitAttributesCalculatorParams {
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
+ }
+
+ public final class TestSplitInfo {
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
+ }
+
+}
+
+package androidx.window.testing.layout {
+
+ public final class DisplayFeatureTesting {
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
+ }
+
+ public final class FoldingFeatureTestingConstants {
+ field public static final int FOLDING_FEATURE_CENTER_DEFAULT = -1; // 0xffffffff
+ field public static final androidx.window.testing.layout.FoldingFeatureTestingConstants INSTANCE;
+ }
+
+ public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
+ ctor public WindowLayoutInfoPublisherRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public void overrideWindowLayoutInfo(androidx.window.layout.WindowLayoutInfo info);
+ }
+
+ public final class WindowLayoutInfoTesting {
+ method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
+ method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
+ }
+
+ public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
+ ctor public WindowMetricsCalculatorRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ }
+
+}
+
diff --git a/window/window-testing/api/res-1.2.0-beta02.txt b/window/window-testing/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/window/window-testing/api/res-1.2.0-beta02.txt
diff --git a/window/window-testing/api/restricted_1.2.0-beta02.txt b/window/window-testing/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..847a9e8
--- /dev/null
+++ b/window/window-testing/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1,73 @@
+// Signature format: 4.0
+package androidx.window.testing.embedding {
+
+ public final class ActivityEmbeddingRule implements org.junit.rules.TestRule {
+ ctor public ActivityEmbeddingRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public void overrideIsActivityEmbedded(android.app.Activity activity, boolean isActivityEmbedded);
+ method public void overrideSplitInfo(android.app.Activity activity, java.util.List<androidx.window.embedding.SplitInfo> splitInfoList);
+ method public void overrideSplitSupportStatus(androidx.window.embedding.SplitController.SplitSupportStatus status);
+ }
+
+ public final class TestActivityStack {
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack();
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess);
+ method public static androidx.window.embedding.ActivityStack createTestActivityStack(optional java.util.List<? extends android.app.Activity> activitiesInProcess, optional boolean isEmpty);
+ }
+
+ public final class TestSplitAttributesCalculatorParams {
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied);
+ method public static androidx.window.embedding.SplitAttributesCalculatorParams createTestSplitAttributesCalculatorParams(androidx.window.layout.WindowMetrics parentWindowMetrics, optional android.content.res.Configuration parentConfiguration, optional androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo, optional androidx.window.embedding.SplitAttributes defaultSplitAttributes, optional boolean areDefaultConstraintsSatisfied, optional String? splitRuleTag);
+ }
+
+ public final class TestSplitInfo {
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo();
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack);
+ method public static androidx.window.embedding.SplitInfo createTestSplitInfo(optional androidx.window.embedding.ActivityStack primaryActivityStack, optional androidx.window.embedding.ActivityStack secondActivityStack, optional androidx.window.embedding.SplitAttributes splitAttributes);
+ }
+
+}
+
+package androidx.window.testing.layout {
+
+ public final class DisplayFeatureTesting {
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.app.Activity activity, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state);
+ method public static androidx.window.layout.FoldingFeature createFoldingFeature(android.graphics.Rect windowBounds, optional @IntRange(from=-1L) int center, optional int size, optional androidx.window.layout.FoldingFeature.State state, optional androidx.window.layout.FoldingFeature.Orientation orientation);
+ }
+
+ public final class FoldingFeatureTestingConstants {
+ field public static final int FOLDING_FEATURE_CENTER_DEFAULT = -1; // 0xffffffff
+ field public static final androidx.window.testing.layout.FoldingFeatureTestingConstants INSTANCE;
+ }
+
+ public final class WindowLayoutInfoPublisherRule implements org.junit.rules.TestRule {
+ ctor public WindowLayoutInfoPublisherRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ method public void overrideWindowLayoutInfo(androidx.window.layout.WindowLayoutInfo info);
+ }
+
+ public final class WindowLayoutInfoTesting {
+ method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo();
+ method public static androidx.window.layout.WindowLayoutInfo createWindowLayoutInfo(optional java.util.List<? extends androidx.window.layout.DisplayFeature> displayFeatures);
+ }
+
+ public final class WindowMetricsCalculatorRule implements org.junit.rules.TestRule {
+ ctor public WindowMetricsCalculatorRule();
+ method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description);
+ }
+
+}
+
diff --git a/window/window/api/1.2.0-beta02.txt b/window/window/api/1.2.0-beta02.txt
new file mode 100644
index 0000000..7c79bde
--- /dev/null
+++ b/window/window/api/1.2.0-beta02.txt
@@ -0,0 +1,465 @@
+// Signature format: 4.0
+package androidx.window {
+
+ public final class WindowProperties {
+ field public static final androidx.window.WindowProperties INSTANCE;
+ field public static final String PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE = "android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE";
+ field public static final String PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED = "android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED";
+ field public static final String PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED = "android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED";
+ field public static final String PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE = "android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE";
+ field public static final String PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES = "android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES";
+ }
+
+}
+
+package androidx.window.area {
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class WindowAreaCapability {
+ method public androidx.window.area.WindowAreaCapability.Operation getOperation();
+ method public androidx.window.area.WindowAreaCapability.Status getStatus();
+ property public final androidx.window.area.WindowAreaCapability.Operation operation;
+ property public final androidx.window.area.WindowAreaCapability.Status status;
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static final class WindowAreaCapability.Operation {
+ field public static final androidx.window.area.WindowAreaCapability.Operation.Companion Companion;
+ field public static final androidx.window.area.WindowAreaCapability.Operation OPERATION_PRESENT_ON_AREA;
+ field public static final androidx.window.area.WindowAreaCapability.Operation OPERATION_TRANSFER_ACTIVITY_TO_AREA;
+ }
+
+ public static final class WindowAreaCapability.Operation.Companion {
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static final class WindowAreaCapability.Status {
+ field public static final androidx.window.area.WindowAreaCapability.Status.Companion Companion;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_ACTIVE;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_AVAILABLE;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_UNAVAILABLE;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_UNSUPPORTED;
+ }
+
+ public static final class WindowAreaCapability.Status.Companion {
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaController {
+ method public static androidx.window.area.WindowAreaController getOrCreate();
+ method public kotlinx.coroutines.flow.Flow<java.util.List<androidx.window.area.WindowAreaInfo>> getWindowAreaInfos();
+ method public void presentContentOnWindowArea(android.os.Binder token, android.app.Activity activity, java.util.concurrent.Executor executor, androidx.window.area.WindowAreaPresentationSessionCallback windowAreaPresentationSessionCallback);
+ method public void transferActivityToWindowArea(android.os.Binder token, android.app.Activity activity, java.util.concurrent.Executor executor, androidx.window.area.WindowAreaSessionCallback windowAreaSessionCallback);
+ property public abstract kotlinx.coroutines.flow.Flow<java.util.List<androidx.window.area.WindowAreaInfo>> windowAreaInfos;
+ field public static final androidx.window.area.WindowAreaController.Companion Companion;
+ }
+
+ public static final class WindowAreaController.Companion {
+ method public androidx.window.area.WindowAreaController getOrCreate();
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class WindowAreaInfo {
+ method public androidx.window.area.WindowAreaSession? getActiveSession(androidx.window.area.WindowAreaCapability.Operation operation);
+ method public androidx.window.area.WindowAreaCapability? getCapability(androidx.window.area.WindowAreaCapability.Operation operation);
+ method public androidx.window.layout.WindowMetrics getMetrics();
+ method public android.os.Binder getToken();
+ method public androidx.window.area.WindowAreaInfo.Type getType();
+ method public void setMetrics(androidx.window.layout.WindowMetrics);
+ property public final androidx.window.layout.WindowMetrics metrics;
+ property public final android.os.Binder token;
+ property public final androidx.window.area.WindowAreaInfo.Type type;
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static final class WindowAreaInfo.Type {
+ field public static final androidx.window.area.WindowAreaInfo.Type.Companion Companion;
+ field public static final androidx.window.area.WindowAreaInfo.Type TYPE_REAR_FACING;
+ }
+
+ public static final class WindowAreaInfo.Type.Companion {
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaPresentationSessionCallback {
+ method public void onContainerVisibilityChanged(boolean isVisible);
+ method public void onSessionEnded(Throwable? t);
+ method public void onSessionStarted(androidx.window.area.WindowAreaSessionPresenter session);
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSession {
+ method public void close();
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSessionCallback {
+ method public void onSessionEnded(Throwable? t);
+ method public void onSessionStarted(androidx.window.area.WindowAreaSession session);
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSessionPresenter extends androidx.window.area.WindowAreaSession {
+ method public android.content.Context getContext();
+ method public void setContentView(android.view.View view);
+ property public abstract android.content.Context context;
+ }
+
+}
+
+package androidx.window.core {
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalWindowApi {
+ }
+
+}
+
+package androidx.window.embedding {
+
+ public final class ActivityEmbeddingController {
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public void finishActivityStacks(java.util.Set<androidx.window.embedding.ActivityStack> activityStacks);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public androidx.window.embedding.ActivityStack? getActivityStack(android.app.Activity activity);
+ method public static androidx.window.embedding.ActivityEmbeddingController getInstance(android.content.Context context);
+ method public boolean isActivityEmbedded(android.app.Activity activity);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public boolean isFinishingActivityStacksSupported();
+ field public static final androidx.window.embedding.ActivityEmbeddingController.Companion Companion;
+ }
+
+ public static final class ActivityEmbeddingController.Companion {
+ method public androidx.window.embedding.ActivityEmbeddingController getInstance(android.content.Context context);
+ }
+
+ public final class ActivityEmbeddingOptions {
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static boolean isSetLaunchingActivityStackSupported(android.app.ActivityOptions);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static android.app.ActivityOptions setLaunchingActivityStack(android.app.ActivityOptions, android.app.Activity activity);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static android.app.ActivityOptions setLaunchingActivityStack(android.app.ActivityOptions, android.content.Context context, androidx.window.embedding.ActivityStack activityStack);
+ }
+
+ public final class ActivityFilter {
+ ctor public ActivityFilter(android.content.ComponentName componentName, String? intentAction);
+ method public android.content.ComponentName getComponentName();
+ method public String? getIntentAction();
+ method public boolean matchesActivity(android.app.Activity activity);
+ method public boolean matchesIntent(android.content.Intent intent);
+ property public final android.content.ComponentName componentName;
+ property public final String? intentAction;
+ }
+
+ public final class ActivityRule extends androidx.window.embedding.EmbeddingRule {
+ method public boolean getAlwaysExpand();
+ method public java.util.Set<androidx.window.embedding.ActivityFilter> getFilters();
+ property public final boolean alwaysExpand;
+ property public final java.util.Set<androidx.window.embedding.ActivityFilter> filters;
+ }
+
+ public static final class ActivityRule.Builder {
+ ctor public ActivityRule.Builder(java.util.Set<androidx.window.embedding.ActivityFilter> filters);
+ method public androidx.window.embedding.ActivityRule build();
+ method public androidx.window.embedding.ActivityRule.Builder setAlwaysExpand(boolean alwaysExpand);
+ method public androidx.window.embedding.ActivityRule.Builder setTag(String? tag);
+ }
+
+ public final class ActivityStack {
+ method public operator boolean contains(android.app.Activity activity);
+ method public boolean isEmpty();
+ property public final boolean isEmpty;
+ }
+
+ public final class EmbeddingAspectRatio {
+ method public static androidx.window.embedding.EmbeddingAspectRatio ratio(@FloatRange(from=1.0, fromInclusive=false) float ratio);
+ field public static final androidx.window.embedding.EmbeddingAspectRatio ALWAYS_ALLOW;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio ALWAYS_DISALLOW;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio.Companion Companion;
+ }
+
+ public static final class EmbeddingAspectRatio.Companion {
+ method public androidx.window.embedding.EmbeddingAspectRatio ratio(@FloatRange(from=1.0, fromInclusive=false) float ratio);
+ }
+
+ public abstract class EmbeddingRule {
+ method public final String? getTag();
+ property public final String? tag;
+ }
+
+ public final class RuleController {
+ method public void addRule(androidx.window.embedding.EmbeddingRule rule);
+ method public void clearRules();
+ method public static androidx.window.embedding.RuleController getInstance(android.content.Context context);
+ method public java.util.Set<androidx.window.embedding.EmbeddingRule> getRules();
+ method public static java.util.Set<androidx.window.embedding.EmbeddingRule> parseRules(android.content.Context context, @XmlRes int staticRuleResourceId);
+ method public void removeRule(androidx.window.embedding.EmbeddingRule rule);
+ method public void setRules(java.util.Set<? extends androidx.window.embedding.EmbeddingRule> rules);
+ field public static final androidx.window.embedding.RuleController.Companion Companion;
+ }
+
+ public static final class RuleController.Companion {
+ method public androidx.window.embedding.RuleController getInstance(android.content.Context context);
+ method public java.util.Set<androidx.window.embedding.EmbeddingRule> parseRules(android.content.Context context, @XmlRes int staticRuleResourceId);
+ }
+
+ public final class SplitAttributes {
+ method public androidx.window.embedding.SplitAttributes.LayoutDirection getLayoutDirection();
+ method public androidx.window.embedding.SplitAttributes.SplitType getSplitType();
+ property public final androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection;
+ property public final androidx.window.embedding.SplitAttributes.SplitType splitType;
+ field public static final androidx.window.embedding.SplitAttributes.Companion Companion;
+ }
+
+ public static final class SplitAttributes.Builder {
+ ctor public SplitAttributes.Builder();
+ method public androidx.window.embedding.SplitAttributes build();
+ method public androidx.window.embedding.SplitAttributes.Builder setLayoutDirection(androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection);
+ method public androidx.window.embedding.SplitAttributes.Builder setSplitType(androidx.window.embedding.SplitAttributes.SplitType type);
+ }
+
+ public static final class SplitAttributes.Companion {
+ }
+
+ public static final class SplitAttributes.LayoutDirection {
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection BOTTOM_TO_TOP;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection LEFT_TO_RIGHT;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection LOCALE;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection RIGHT_TO_LEFT;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection TOP_TO_BOTTOM;
+ }
+
+ public static final class SplitAttributes.LayoutDirection.Companion {
+ }
+
+ public static final class SplitAttributes.SplitType {
+ method public static androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
+ field public static final androidx.window.embedding.SplitAttributes.SplitType.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EQUAL;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EXPAND;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_HINGE;
+ }
+
+ public static final class SplitAttributes.SplitType.Companion {
+ method public androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
+ }
+
+ public final class SplitAttributesCalculatorParams {
+ method public boolean getAreDefaultConstraintsSatisfied();
+ method public androidx.window.embedding.SplitAttributes getDefaultSplitAttributes();
+ method public android.content.res.Configuration getParentConfiguration();
+ method public androidx.window.layout.WindowLayoutInfo getParentWindowLayoutInfo();
+ method public androidx.window.layout.WindowMetrics getParentWindowMetrics();
+ method public String? getSplitRuleTag();
+ property public final boolean areDefaultConstraintsSatisfied;
+ property public final androidx.window.embedding.SplitAttributes defaultSplitAttributes;
+ property public final android.content.res.Configuration parentConfiguration;
+ property public final androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo;
+ property public final androidx.window.layout.WindowMetrics parentWindowMetrics;
+ property public final String? splitRuleTag;
+ }
+
+ public final class SplitController {
+ method public void clearSplitAttributesCalculator();
+ method public static androidx.window.embedding.SplitController getInstance(android.content.Context context);
+ method public androidx.window.embedding.SplitController.SplitSupportStatus getSplitSupportStatus();
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public void invalidateTopVisibleSplitAttributes();
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public boolean isInvalidatingTopVisibleSplitAttributesSupported();
+ method public boolean isSplitAttributesCalculatorSupported();
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public boolean isUpdatingSplitAttributesSupported();
+ method public void setSplitAttributesCalculator(kotlin.jvm.functions.Function1<? super androidx.window.embedding.SplitAttributesCalculatorParams,androidx.window.embedding.SplitAttributes> calculator);
+ method public kotlinx.coroutines.flow.Flow<java.util.List<androidx.window.embedding.SplitInfo>> splitInfoList(android.app.Activity activity);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public void updateSplitAttributes(androidx.window.embedding.SplitInfo splitInfo, androidx.window.embedding.SplitAttributes splitAttributes);
+ property public final androidx.window.embedding.SplitController.SplitSupportStatus splitSupportStatus;
+ field public static final androidx.window.embedding.SplitController.Companion Companion;
+ }
+
+ public static final class SplitController.Companion {
+ method public androidx.window.embedding.SplitController getInstance(android.content.Context context);
+ }
+
+ public static final class SplitController.SplitSupportStatus {
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus.Companion Companion;
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus SPLIT_AVAILABLE;
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus SPLIT_ERROR_PROPERTY_NOT_DECLARED;
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus SPLIT_UNAVAILABLE;
+ }
+
+ public static final class SplitController.SplitSupportStatus.Companion {
+ }
+
+ public final class SplitInfo {
+ method public operator boolean contains(android.app.Activity activity);
+ method public androidx.window.embedding.ActivityStack getPrimaryActivityStack();
+ method public androidx.window.embedding.ActivityStack getSecondaryActivityStack();
+ method public androidx.window.embedding.SplitAttributes getSplitAttributes();
+ property public final androidx.window.embedding.ActivityStack primaryActivityStack;
+ property public final androidx.window.embedding.ActivityStack secondaryActivityStack;
+ property public final androidx.window.embedding.SplitAttributes splitAttributes;
+ }
+
+ public final class SplitPairFilter {
+ ctor public SplitPairFilter(android.content.ComponentName primaryActivityName, android.content.ComponentName secondaryActivityName, String? secondaryActivityIntentAction);
+ method public android.content.ComponentName getPrimaryActivityName();
+ method public String? getSecondaryActivityIntentAction();
+ method public android.content.ComponentName getSecondaryActivityName();
+ method public boolean matchesActivityIntentPair(android.app.Activity primaryActivity, android.content.Intent secondaryActivityIntent);
+ method public boolean matchesActivityPair(android.app.Activity primaryActivity, android.app.Activity secondaryActivity);
+ property public final android.content.ComponentName primaryActivityName;
+ property public final String? secondaryActivityIntentAction;
+ property public final android.content.ComponentName secondaryActivityName;
+ }
+
+ public final class SplitPairRule extends androidx.window.embedding.SplitRule {
+ method public boolean getClearTop();
+ method public java.util.Set<androidx.window.embedding.SplitPairFilter> getFilters();
+ method public androidx.window.embedding.SplitRule.FinishBehavior getFinishPrimaryWithSecondary();
+ method public androidx.window.embedding.SplitRule.FinishBehavior getFinishSecondaryWithPrimary();
+ property public final boolean clearTop;
+ property public final java.util.Set<androidx.window.embedding.SplitPairFilter> filters;
+ property public final androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithSecondary;
+ property public final androidx.window.embedding.SplitRule.FinishBehavior finishSecondaryWithPrimary;
+ }
+
+ public static final class SplitPairRule.Builder {
+ ctor public SplitPairRule.Builder(java.util.Set<androidx.window.embedding.SplitPairFilter> filters);
+ method public androidx.window.embedding.SplitPairRule build();
+ method public androidx.window.embedding.SplitPairRule.Builder setClearTop(boolean clearTop);
+ method public androidx.window.embedding.SplitPairRule.Builder setDefaultSplitAttributes(androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public androidx.window.embedding.SplitPairRule.Builder setFinishPrimaryWithSecondary(androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithSecondary);
+ method public androidx.window.embedding.SplitPairRule.Builder setFinishSecondaryWithPrimary(androidx.window.embedding.SplitRule.FinishBehavior finishSecondaryWithPrimary);
+ method public androidx.window.embedding.SplitPairRule.Builder setMaxAspectRatioInLandscape(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPairRule.Builder setMaxAspectRatioInPortrait(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPairRule.Builder setMinHeightDp(@IntRange(from=0L) int minHeightDp);
+ method public androidx.window.embedding.SplitPairRule.Builder setMinSmallestWidthDp(@IntRange(from=0L) int minSmallestWidthDp);
+ method public androidx.window.embedding.SplitPairRule.Builder setMinWidthDp(@IntRange(from=0L) int minWidthDp);
+ method public androidx.window.embedding.SplitPairRule.Builder setTag(String? tag);
+ }
+
+ public final class SplitPlaceholderRule extends androidx.window.embedding.SplitRule {
+ method public java.util.Set<androidx.window.embedding.ActivityFilter> getFilters();
+ method public androidx.window.embedding.SplitRule.FinishBehavior getFinishPrimaryWithPlaceholder();
+ method public android.content.Intent getPlaceholderIntent();
+ method public boolean isSticky();
+ property public final java.util.Set<androidx.window.embedding.ActivityFilter> filters;
+ property public final androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithPlaceholder;
+ property public final boolean isSticky;
+ property public final android.content.Intent placeholderIntent;
+ }
+
+ public static final class SplitPlaceholderRule.Builder {
+ ctor public SplitPlaceholderRule.Builder(java.util.Set<androidx.window.embedding.ActivityFilter> filters, android.content.Intent placeholderIntent);
+ method public androidx.window.embedding.SplitPlaceholderRule build();
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setDefaultSplitAttributes(androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setFinishPrimaryWithPlaceholder(androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithPlaceholder);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMaxAspectRatioInLandscape(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMaxAspectRatioInPortrait(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMinHeightDp(@IntRange(from=0L) int minHeightDp);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMinSmallestWidthDp(@IntRange(from=0L) int minSmallestWidthDp);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMinWidthDp(@IntRange(from=0L) int minWidthDp);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setSticky(boolean isSticky);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setTag(String? tag);
+ }
+
+ public class SplitRule extends androidx.window.embedding.EmbeddingRule {
+ method public final androidx.window.embedding.SplitAttributes getDefaultSplitAttributes();
+ method public final androidx.window.embedding.EmbeddingAspectRatio getMaxAspectRatioInLandscape();
+ method public final androidx.window.embedding.EmbeddingAspectRatio getMaxAspectRatioInPortrait();
+ method public final int getMinHeightDp();
+ method public final int getMinSmallestWidthDp();
+ method public final int getMinWidthDp();
+ property public final androidx.window.embedding.SplitAttributes defaultSplitAttributes;
+ property public final androidx.window.embedding.EmbeddingAspectRatio maxAspectRatioInLandscape;
+ property public final androidx.window.embedding.EmbeddingAspectRatio maxAspectRatioInPortrait;
+ property public final int minHeightDp;
+ property public final int minSmallestWidthDp;
+ property public final int minWidthDp;
+ field public static final androidx.window.embedding.SplitRule.Companion Companion;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio SPLIT_MAX_ASPECT_RATIO_LANDSCAPE_DEFAULT;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio SPLIT_MAX_ASPECT_RATIO_PORTRAIT_DEFAULT;
+ field public static final int SPLIT_MIN_DIMENSION_ALWAYS_ALLOW = 0; // 0x0
+ field public static final int SPLIT_MIN_DIMENSION_DP_DEFAULT = 600; // 0x258
+ }
+
+ public static final class SplitRule.Companion {
+ }
+
+ public static final class SplitRule.FinishBehavior {
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior ADJACENT;
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior ALWAYS;
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior.Companion Companion;
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior NEVER;
+ }
+
+ public static final class SplitRule.FinishBehavior.Companion {
+ }
+
+}
+
+package androidx.window.layout {
+
+ public interface DisplayFeature {
+ method public android.graphics.Rect getBounds();
+ property public abstract android.graphics.Rect bounds;
+ }
+
+ public interface FoldingFeature extends androidx.window.layout.DisplayFeature {
+ method public androidx.window.layout.FoldingFeature.OcclusionType getOcclusionType();
+ method public androidx.window.layout.FoldingFeature.Orientation getOrientation();
+ method public androidx.window.layout.FoldingFeature.State getState();
+ method public boolean isSeparating();
+ property public abstract boolean isSeparating;
+ property public abstract androidx.window.layout.FoldingFeature.OcclusionType occlusionType;
+ property public abstract androidx.window.layout.FoldingFeature.Orientation orientation;
+ property public abstract androidx.window.layout.FoldingFeature.State state;
+ }
+
+ public static final class FoldingFeature.OcclusionType {
+ field public static final androidx.window.layout.FoldingFeature.OcclusionType.Companion Companion;
+ field public static final androidx.window.layout.FoldingFeature.OcclusionType FULL;
+ field public static final androidx.window.layout.FoldingFeature.OcclusionType NONE;
+ }
+
+ public static final class FoldingFeature.OcclusionType.Companion {
+ }
+
+ public static final class FoldingFeature.Orientation {
+ field public static final androidx.window.layout.FoldingFeature.Orientation.Companion Companion;
+ field public static final androidx.window.layout.FoldingFeature.Orientation HORIZONTAL;
+ field public static final androidx.window.layout.FoldingFeature.Orientation VERTICAL;
+ }
+
+ public static final class FoldingFeature.Orientation.Companion {
+ }
+
+ public static final class FoldingFeature.State {
+ field public static final androidx.window.layout.FoldingFeature.State.Companion Companion;
+ field public static final androidx.window.layout.FoldingFeature.State FLAT;
+ field public static final androidx.window.layout.FoldingFeature.State HALF_OPENED;
+ }
+
+ public static final class FoldingFeature.State.Companion {
+ }
+
+ public interface WindowInfoTracker {
+ method public static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
+ method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
+ field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
+ }
+
+ public static final class WindowInfoTracker.Companion {
+ method public androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
+ }
+
+ public final class WindowLayoutInfo {
+ method public java.util.List<androidx.window.layout.DisplayFeature> getDisplayFeatures();
+ property public final java.util.List<androidx.window.layout.DisplayFeature> displayFeatures;
+ }
+
+ public final class WindowMetrics {
+ method public android.graphics.Rect getBounds();
+ method @SuppressCompatibility @RequiresApi(android.os.Build.VERSION_CODES.R) @androidx.window.core.ExperimentalWindowApi public androidx.core.view.WindowInsetsCompat getWindowInsets();
+ property public final android.graphics.Rect bounds;
+ }
+
+ public interface WindowMetricsCalculator {
+ method public androidx.window.layout.WindowMetrics computeCurrentWindowMetrics(android.app.Activity activity);
+ method public default androidx.window.layout.WindowMetrics computeCurrentWindowMetrics(@UiContext android.content.Context context);
+ method public androidx.window.layout.WindowMetrics computeMaximumWindowMetrics(android.app.Activity activity);
+ method public default androidx.window.layout.WindowMetrics computeMaximumWindowMetrics(@UiContext android.content.Context context);
+ method public static androidx.window.layout.WindowMetricsCalculator getOrCreate();
+ field public static final androidx.window.layout.WindowMetricsCalculator.Companion Companion;
+ }
+
+ public static final class WindowMetricsCalculator.Companion {
+ method public androidx.window.layout.WindowMetricsCalculator getOrCreate();
+ }
+
+}
+
diff --git a/window/window/api/res-1.2.0-beta02.txt b/window/window/api/res-1.2.0-beta02.txt
new file mode 100644
index 0000000..185352b
--- /dev/null
+++ b/window/window/api/res-1.2.0-beta02.txt
@@ -0,0 +1,21 @@
+attr activityAction
+attr activityName
+attr alwaysExpand
+attr animationBackgroundColor
+attr clearTop
+attr finishPrimaryWithPlaceholder
+attr finishPrimaryWithSecondary
+attr finishSecondaryWithPrimary
+attr placeholderActivityName
+attr primaryActivityName
+attr secondaryActivityAction
+attr secondaryActivityName
+attr splitLayoutDirection
+attr splitMaxAspectRatioInLandscape
+attr splitMaxAspectRatioInPortrait
+attr splitMinHeightDp
+attr splitMinSmallestWidthDp
+attr splitMinWidthDp
+attr splitRatio
+attr stickyPlaceholder
+attr tag
diff --git a/window/window/api/restricted_1.2.0-beta02.txt b/window/window/api/restricted_1.2.0-beta02.txt
new file mode 100644
index 0000000..7c79bde
--- /dev/null
+++ b/window/window/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1,465 @@
+// Signature format: 4.0
+package androidx.window {
+
+ public final class WindowProperties {
+ field public static final androidx.window.WindowProperties INSTANCE;
+ field public static final String PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE = "android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE";
+ field public static final String PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED = "android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED";
+ field public static final String PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED = "android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED";
+ field public static final String PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE = "android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE";
+ field public static final String PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES = "android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES";
+ }
+
+}
+
+package androidx.window.area {
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class WindowAreaCapability {
+ method public androidx.window.area.WindowAreaCapability.Operation getOperation();
+ method public androidx.window.area.WindowAreaCapability.Status getStatus();
+ property public final androidx.window.area.WindowAreaCapability.Operation operation;
+ property public final androidx.window.area.WindowAreaCapability.Status status;
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static final class WindowAreaCapability.Operation {
+ field public static final androidx.window.area.WindowAreaCapability.Operation.Companion Companion;
+ field public static final androidx.window.area.WindowAreaCapability.Operation OPERATION_PRESENT_ON_AREA;
+ field public static final androidx.window.area.WindowAreaCapability.Operation OPERATION_TRANSFER_ACTIVITY_TO_AREA;
+ }
+
+ public static final class WindowAreaCapability.Operation.Companion {
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static final class WindowAreaCapability.Status {
+ field public static final androidx.window.area.WindowAreaCapability.Status.Companion Companion;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_ACTIVE;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_AVAILABLE;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_UNAVAILABLE;
+ field public static final androidx.window.area.WindowAreaCapability.Status WINDOW_AREA_STATUS_UNSUPPORTED;
+ }
+
+ public static final class WindowAreaCapability.Status.Companion {
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaController {
+ method public static androidx.window.area.WindowAreaController getOrCreate();
+ method public kotlinx.coroutines.flow.Flow<java.util.List<androidx.window.area.WindowAreaInfo>> getWindowAreaInfos();
+ method public void presentContentOnWindowArea(android.os.Binder token, android.app.Activity activity, java.util.concurrent.Executor executor, androidx.window.area.WindowAreaPresentationSessionCallback windowAreaPresentationSessionCallback);
+ method public void transferActivityToWindowArea(android.os.Binder token, android.app.Activity activity, java.util.concurrent.Executor executor, androidx.window.area.WindowAreaSessionCallback windowAreaSessionCallback);
+ property public abstract kotlinx.coroutines.flow.Flow<java.util.List<androidx.window.area.WindowAreaInfo>> windowAreaInfos;
+ field public static final androidx.window.area.WindowAreaController.Companion Companion;
+ }
+
+ public static final class WindowAreaController.Companion {
+ method public androidx.window.area.WindowAreaController getOrCreate();
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public final class WindowAreaInfo {
+ method public androidx.window.area.WindowAreaSession? getActiveSession(androidx.window.area.WindowAreaCapability.Operation operation);
+ method public androidx.window.area.WindowAreaCapability? getCapability(androidx.window.area.WindowAreaCapability.Operation operation);
+ method public androidx.window.layout.WindowMetrics getMetrics();
+ method public android.os.Binder getToken();
+ method public androidx.window.area.WindowAreaInfo.Type getType();
+ method public void setMetrics(androidx.window.layout.WindowMetrics);
+ property public final androidx.window.layout.WindowMetrics metrics;
+ property public final android.os.Binder token;
+ property public final androidx.window.area.WindowAreaInfo.Type type;
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static final class WindowAreaInfo.Type {
+ field public static final androidx.window.area.WindowAreaInfo.Type.Companion Companion;
+ field public static final androidx.window.area.WindowAreaInfo.Type TYPE_REAR_FACING;
+ }
+
+ public static final class WindowAreaInfo.Type.Companion {
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaPresentationSessionCallback {
+ method public void onContainerVisibilityChanged(boolean isVisible);
+ method public void onSessionEnded(Throwable? t);
+ method public void onSessionStarted(androidx.window.area.WindowAreaSessionPresenter session);
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSession {
+ method public void close();
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSessionCallback {
+ method public void onSessionEnded(Throwable? t);
+ method public void onSessionStarted(androidx.window.area.WindowAreaSession session);
+ }
+
+ @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public interface WindowAreaSessionPresenter extends androidx.window.area.WindowAreaSession {
+ method public android.content.Context getContext();
+ method public void setContentView(android.view.View view);
+ property public abstract android.content.Context context;
+ }
+
+}
+
+package androidx.window.core {
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalWindowApi {
+ }
+
+}
+
+package androidx.window.embedding {
+
+ public final class ActivityEmbeddingController {
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public void finishActivityStacks(java.util.Set<androidx.window.embedding.ActivityStack> activityStacks);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public androidx.window.embedding.ActivityStack? getActivityStack(android.app.Activity activity);
+ method public static androidx.window.embedding.ActivityEmbeddingController getInstance(android.content.Context context);
+ method public boolean isActivityEmbedded(android.app.Activity activity);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public boolean isFinishingActivityStacksSupported();
+ field public static final androidx.window.embedding.ActivityEmbeddingController.Companion Companion;
+ }
+
+ public static final class ActivityEmbeddingController.Companion {
+ method public androidx.window.embedding.ActivityEmbeddingController getInstance(android.content.Context context);
+ }
+
+ public final class ActivityEmbeddingOptions {
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static boolean isSetLaunchingActivityStackSupported(android.app.ActivityOptions);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static android.app.ActivityOptions setLaunchingActivityStack(android.app.ActivityOptions, android.app.Activity activity);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public static android.app.ActivityOptions setLaunchingActivityStack(android.app.ActivityOptions, android.content.Context context, androidx.window.embedding.ActivityStack activityStack);
+ }
+
+ public final class ActivityFilter {
+ ctor public ActivityFilter(android.content.ComponentName componentName, String? intentAction);
+ method public android.content.ComponentName getComponentName();
+ method public String? getIntentAction();
+ method public boolean matchesActivity(android.app.Activity activity);
+ method public boolean matchesIntent(android.content.Intent intent);
+ property public final android.content.ComponentName componentName;
+ property public final String? intentAction;
+ }
+
+ public final class ActivityRule extends androidx.window.embedding.EmbeddingRule {
+ method public boolean getAlwaysExpand();
+ method public java.util.Set<androidx.window.embedding.ActivityFilter> getFilters();
+ property public final boolean alwaysExpand;
+ property public final java.util.Set<androidx.window.embedding.ActivityFilter> filters;
+ }
+
+ public static final class ActivityRule.Builder {
+ ctor public ActivityRule.Builder(java.util.Set<androidx.window.embedding.ActivityFilter> filters);
+ method public androidx.window.embedding.ActivityRule build();
+ method public androidx.window.embedding.ActivityRule.Builder setAlwaysExpand(boolean alwaysExpand);
+ method public androidx.window.embedding.ActivityRule.Builder setTag(String? tag);
+ }
+
+ public final class ActivityStack {
+ method public operator boolean contains(android.app.Activity activity);
+ method public boolean isEmpty();
+ property public final boolean isEmpty;
+ }
+
+ public final class EmbeddingAspectRatio {
+ method public static androidx.window.embedding.EmbeddingAspectRatio ratio(@FloatRange(from=1.0, fromInclusive=false) float ratio);
+ field public static final androidx.window.embedding.EmbeddingAspectRatio ALWAYS_ALLOW;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio ALWAYS_DISALLOW;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio.Companion Companion;
+ }
+
+ public static final class EmbeddingAspectRatio.Companion {
+ method public androidx.window.embedding.EmbeddingAspectRatio ratio(@FloatRange(from=1.0, fromInclusive=false) float ratio);
+ }
+
+ public abstract class EmbeddingRule {
+ method public final String? getTag();
+ property public final String? tag;
+ }
+
+ public final class RuleController {
+ method public void addRule(androidx.window.embedding.EmbeddingRule rule);
+ method public void clearRules();
+ method public static androidx.window.embedding.RuleController getInstance(android.content.Context context);
+ method public java.util.Set<androidx.window.embedding.EmbeddingRule> getRules();
+ method public static java.util.Set<androidx.window.embedding.EmbeddingRule> parseRules(android.content.Context context, @XmlRes int staticRuleResourceId);
+ method public void removeRule(androidx.window.embedding.EmbeddingRule rule);
+ method public void setRules(java.util.Set<? extends androidx.window.embedding.EmbeddingRule> rules);
+ field public static final androidx.window.embedding.RuleController.Companion Companion;
+ }
+
+ public static final class RuleController.Companion {
+ method public androidx.window.embedding.RuleController getInstance(android.content.Context context);
+ method public java.util.Set<androidx.window.embedding.EmbeddingRule> parseRules(android.content.Context context, @XmlRes int staticRuleResourceId);
+ }
+
+ public final class SplitAttributes {
+ method public androidx.window.embedding.SplitAttributes.LayoutDirection getLayoutDirection();
+ method public androidx.window.embedding.SplitAttributes.SplitType getSplitType();
+ property public final androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection;
+ property public final androidx.window.embedding.SplitAttributes.SplitType splitType;
+ field public static final androidx.window.embedding.SplitAttributes.Companion Companion;
+ }
+
+ public static final class SplitAttributes.Builder {
+ ctor public SplitAttributes.Builder();
+ method public androidx.window.embedding.SplitAttributes build();
+ method public androidx.window.embedding.SplitAttributes.Builder setLayoutDirection(androidx.window.embedding.SplitAttributes.LayoutDirection layoutDirection);
+ method public androidx.window.embedding.SplitAttributes.Builder setSplitType(androidx.window.embedding.SplitAttributes.SplitType type);
+ }
+
+ public static final class SplitAttributes.Companion {
+ }
+
+ public static final class SplitAttributes.LayoutDirection {
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection BOTTOM_TO_TOP;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection LEFT_TO_RIGHT;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection LOCALE;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection RIGHT_TO_LEFT;
+ field public static final androidx.window.embedding.SplitAttributes.LayoutDirection TOP_TO_BOTTOM;
+ }
+
+ public static final class SplitAttributes.LayoutDirection.Companion {
+ }
+
+ public static final class SplitAttributes.SplitType {
+ method public static androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
+ field public static final androidx.window.embedding.SplitAttributes.SplitType.Companion Companion;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EQUAL;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_EXPAND;
+ field public static final androidx.window.embedding.SplitAttributes.SplitType SPLIT_TYPE_HINGE;
+ }
+
+ public static final class SplitAttributes.SplitType.Companion {
+ method public androidx.window.embedding.SplitAttributes.SplitType ratio(@FloatRange(from=0.0, to=1.0, fromInclusive=false, toInclusive=false) float ratio);
+ }
+
+ public final class SplitAttributesCalculatorParams {
+ method public boolean getAreDefaultConstraintsSatisfied();
+ method public androidx.window.embedding.SplitAttributes getDefaultSplitAttributes();
+ method public android.content.res.Configuration getParentConfiguration();
+ method public androidx.window.layout.WindowLayoutInfo getParentWindowLayoutInfo();
+ method public androidx.window.layout.WindowMetrics getParentWindowMetrics();
+ method public String? getSplitRuleTag();
+ property public final boolean areDefaultConstraintsSatisfied;
+ property public final androidx.window.embedding.SplitAttributes defaultSplitAttributes;
+ property public final android.content.res.Configuration parentConfiguration;
+ property public final androidx.window.layout.WindowLayoutInfo parentWindowLayoutInfo;
+ property public final androidx.window.layout.WindowMetrics parentWindowMetrics;
+ property public final String? splitRuleTag;
+ }
+
+ public final class SplitController {
+ method public void clearSplitAttributesCalculator();
+ method public static androidx.window.embedding.SplitController getInstance(android.content.Context context);
+ method public androidx.window.embedding.SplitController.SplitSupportStatus getSplitSupportStatus();
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public void invalidateTopVisibleSplitAttributes();
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public boolean isInvalidatingTopVisibleSplitAttributesSupported();
+ method public boolean isSplitAttributesCalculatorSupported();
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public boolean isUpdatingSplitAttributesSupported();
+ method public void setSplitAttributesCalculator(kotlin.jvm.functions.Function1<? super androidx.window.embedding.SplitAttributesCalculatorParams,androidx.window.embedding.SplitAttributes> calculator);
+ method public kotlinx.coroutines.flow.Flow<java.util.List<androidx.window.embedding.SplitInfo>> splitInfoList(android.app.Activity activity);
+ method @SuppressCompatibility @androidx.window.core.ExperimentalWindowApi public void updateSplitAttributes(androidx.window.embedding.SplitInfo splitInfo, androidx.window.embedding.SplitAttributes splitAttributes);
+ property public final androidx.window.embedding.SplitController.SplitSupportStatus splitSupportStatus;
+ field public static final androidx.window.embedding.SplitController.Companion Companion;
+ }
+
+ public static final class SplitController.Companion {
+ method public androidx.window.embedding.SplitController getInstance(android.content.Context context);
+ }
+
+ public static final class SplitController.SplitSupportStatus {
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus.Companion Companion;
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus SPLIT_AVAILABLE;
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus SPLIT_ERROR_PROPERTY_NOT_DECLARED;
+ field public static final androidx.window.embedding.SplitController.SplitSupportStatus SPLIT_UNAVAILABLE;
+ }
+
+ public static final class SplitController.SplitSupportStatus.Companion {
+ }
+
+ public final class SplitInfo {
+ method public operator boolean contains(android.app.Activity activity);
+ method public androidx.window.embedding.ActivityStack getPrimaryActivityStack();
+ method public androidx.window.embedding.ActivityStack getSecondaryActivityStack();
+ method public androidx.window.embedding.SplitAttributes getSplitAttributes();
+ property public final androidx.window.embedding.ActivityStack primaryActivityStack;
+ property public final androidx.window.embedding.ActivityStack secondaryActivityStack;
+ property public final androidx.window.embedding.SplitAttributes splitAttributes;
+ }
+
+ public final class SplitPairFilter {
+ ctor public SplitPairFilter(android.content.ComponentName primaryActivityName, android.content.ComponentName secondaryActivityName, String? secondaryActivityIntentAction);
+ method public android.content.ComponentName getPrimaryActivityName();
+ method public String? getSecondaryActivityIntentAction();
+ method public android.content.ComponentName getSecondaryActivityName();
+ method public boolean matchesActivityIntentPair(android.app.Activity primaryActivity, android.content.Intent secondaryActivityIntent);
+ method public boolean matchesActivityPair(android.app.Activity primaryActivity, android.app.Activity secondaryActivity);
+ property public final android.content.ComponentName primaryActivityName;
+ property public final String? secondaryActivityIntentAction;
+ property public final android.content.ComponentName secondaryActivityName;
+ }
+
+ public final class SplitPairRule extends androidx.window.embedding.SplitRule {
+ method public boolean getClearTop();
+ method public java.util.Set<androidx.window.embedding.SplitPairFilter> getFilters();
+ method public androidx.window.embedding.SplitRule.FinishBehavior getFinishPrimaryWithSecondary();
+ method public androidx.window.embedding.SplitRule.FinishBehavior getFinishSecondaryWithPrimary();
+ property public final boolean clearTop;
+ property public final java.util.Set<androidx.window.embedding.SplitPairFilter> filters;
+ property public final androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithSecondary;
+ property public final androidx.window.embedding.SplitRule.FinishBehavior finishSecondaryWithPrimary;
+ }
+
+ public static final class SplitPairRule.Builder {
+ ctor public SplitPairRule.Builder(java.util.Set<androidx.window.embedding.SplitPairFilter> filters);
+ method public androidx.window.embedding.SplitPairRule build();
+ method public androidx.window.embedding.SplitPairRule.Builder setClearTop(boolean clearTop);
+ method public androidx.window.embedding.SplitPairRule.Builder setDefaultSplitAttributes(androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public androidx.window.embedding.SplitPairRule.Builder setFinishPrimaryWithSecondary(androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithSecondary);
+ method public androidx.window.embedding.SplitPairRule.Builder setFinishSecondaryWithPrimary(androidx.window.embedding.SplitRule.FinishBehavior finishSecondaryWithPrimary);
+ method public androidx.window.embedding.SplitPairRule.Builder setMaxAspectRatioInLandscape(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPairRule.Builder setMaxAspectRatioInPortrait(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPairRule.Builder setMinHeightDp(@IntRange(from=0L) int minHeightDp);
+ method public androidx.window.embedding.SplitPairRule.Builder setMinSmallestWidthDp(@IntRange(from=0L) int minSmallestWidthDp);
+ method public androidx.window.embedding.SplitPairRule.Builder setMinWidthDp(@IntRange(from=0L) int minWidthDp);
+ method public androidx.window.embedding.SplitPairRule.Builder setTag(String? tag);
+ }
+
+ public final class SplitPlaceholderRule extends androidx.window.embedding.SplitRule {
+ method public java.util.Set<androidx.window.embedding.ActivityFilter> getFilters();
+ method public androidx.window.embedding.SplitRule.FinishBehavior getFinishPrimaryWithPlaceholder();
+ method public android.content.Intent getPlaceholderIntent();
+ method public boolean isSticky();
+ property public final java.util.Set<androidx.window.embedding.ActivityFilter> filters;
+ property public final androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithPlaceholder;
+ property public final boolean isSticky;
+ property public final android.content.Intent placeholderIntent;
+ }
+
+ public static final class SplitPlaceholderRule.Builder {
+ ctor public SplitPlaceholderRule.Builder(java.util.Set<androidx.window.embedding.ActivityFilter> filters, android.content.Intent placeholderIntent);
+ method public androidx.window.embedding.SplitPlaceholderRule build();
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setDefaultSplitAttributes(androidx.window.embedding.SplitAttributes defaultSplitAttributes);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setFinishPrimaryWithPlaceholder(androidx.window.embedding.SplitRule.FinishBehavior finishPrimaryWithPlaceholder);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMaxAspectRatioInLandscape(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMaxAspectRatioInPortrait(androidx.window.embedding.EmbeddingAspectRatio aspectRatio);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMinHeightDp(@IntRange(from=0L) int minHeightDp);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMinSmallestWidthDp(@IntRange(from=0L) int minSmallestWidthDp);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setMinWidthDp(@IntRange(from=0L) int minWidthDp);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setSticky(boolean isSticky);
+ method public androidx.window.embedding.SplitPlaceholderRule.Builder setTag(String? tag);
+ }
+
+ public class SplitRule extends androidx.window.embedding.EmbeddingRule {
+ method public final androidx.window.embedding.SplitAttributes getDefaultSplitAttributes();
+ method public final androidx.window.embedding.EmbeddingAspectRatio getMaxAspectRatioInLandscape();
+ method public final androidx.window.embedding.EmbeddingAspectRatio getMaxAspectRatioInPortrait();
+ method public final int getMinHeightDp();
+ method public final int getMinSmallestWidthDp();
+ method public final int getMinWidthDp();
+ property public final androidx.window.embedding.SplitAttributes defaultSplitAttributes;
+ property public final androidx.window.embedding.EmbeddingAspectRatio maxAspectRatioInLandscape;
+ property public final androidx.window.embedding.EmbeddingAspectRatio maxAspectRatioInPortrait;
+ property public final int minHeightDp;
+ property public final int minSmallestWidthDp;
+ property public final int minWidthDp;
+ field public static final androidx.window.embedding.SplitRule.Companion Companion;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio SPLIT_MAX_ASPECT_RATIO_LANDSCAPE_DEFAULT;
+ field public static final androidx.window.embedding.EmbeddingAspectRatio SPLIT_MAX_ASPECT_RATIO_PORTRAIT_DEFAULT;
+ field public static final int SPLIT_MIN_DIMENSION_ALWAYS_ALLOW = 0; // 0x0
+ field public static final int SPLIT_MIN_DIMENSION_DP_DEFAULT = 600; // 0x258
+ }
+
+ public static final class SplitRule.Companion {
+ }
+
+ public static final class SplitRule.FinishBehavior {
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior ADJACENT;
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior ALWAYS;
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior.Companion Companion;
+ field public static final androidx.window.embedding.SplitRule.FinishBehavior NEVER;
+ }
+
+ public static final class SplitRule.FinishBehavior.Companion {
+ }
+
+}
+
+package androidx.window.layout {
+
+ public interface DisplayFeature {
+ method public android.graphics.Rect getBounds();
+ property public abstract android.graphics.Rect bounds;
+ }
+
+ public interface FoldingFeature extends androidx.window.layout.DisplayFeature {
+ method public androidx.window.layout.FoldingFeature.OcclusionType getOcclusionType();
+ method public androidx.window.layout.FoldingFeature.Orientation getOrientation();
+ method public androidx.window.layout.FoldingFeature.State getState();
+ method public boolean isSeparating();
+ property public abstract boolean isSeparating;
+ property public abstract androidx.window.layout.FoldingFeature.OcclusionType occlusionType;
+ property public abstract androidx.window.layout.FoldingFeature.Orientation orientation;
+ property public abstract androidx.window.layout.FoldingFeature.State state;
+ }
+
+ public static final class FoldingFeature.OcclusionType {
+ field public static final androidx.window.layout.FoldingFeature.OcclusionType.Companion Companion;
+ field public static final androidx.window.layout.FoldingFeature.OcclusionType FULL;
+ field public static final androidx.window.layout.FoldingFeature.OcclusionType NONE;
+ }
+
+ public static final class FoldingFeature.OcclusionType.Companion {
+ }
+
+ public static final class FoldingFeature.Orientation {
+ field public static final androidx.window.layout.FoldingFeature.Orientation.Companion Companion;
+ field public static final androidx.window.layout.FoldingFeature.Orientation HORIZONTAL;
+ field public static final androidx.window.layout.FoldingFeature.Orientation VERTICAL;
+ }
+
+ public static final class FoldingFeature.Orientation.Companion {
+ }
+
+ public static final class FoldingFeature.State {
+ field public static final androidx.window.layout.FoldingFeature.State.Companion Companion;
+ field public static final androidx.window.layout.FoldingFeature.State FLAT;
+ field public static final androidx.window.layout.FoldingFeature.State HALF_OPENED;
+ }
+
+ public static final class FoldingFeature.State.Companion {
+ }
+
+ public interface WindowInfoTracker {
+ method public static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
+ method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
+ method public default kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(@UiContext android.content.Context context);
+ field public static final androidx.window.layout.WindowInfoTracker.Companion Companion;
+ }
+
+ public static final class WindowInfoTracker.Companion {
+ method public androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
+ }
+
+ public final class WindowLayoutInfo {
+ method public java.util.List<androidx.window.layout.DisplayFeature> getDisplayFeatures();
+ property public final java.util.List<androidx.window.layout.DisplayFeature> displayFeatures;
+ }
+
+ public final class WindowMetrics {
+ method public android.graphics.Rect getBounds();
+ method @SuppressCompatibility @RequiresApi(android.os.Build.VERSION_CODES.R) @androidx.window.core.ExperimentalWindowApi public androidx.core.view.WindowInsetsCompat getWindowInsets();
+ property public final android.graphics.Rect bounds;
+ }
+
+ public interface WindowMetricsCalculator {
+ method public androidx.window.layout.WindowMetrics computeCurrentWindowMetrics(android.app.Activity activity);
+ method public default androidx.window.layout.WindowMetrics computeCurrentWindowMetrics(@UiContext android.content.Context context);
+ method public androidx.window.layout.WindowMetrics computeMaximumWindowMetrics(android.app.Activity activity);
+ method public default androidx.window.layout.WindowMetrics computeMaximumWindowMetrics(@UiContext android.content.Context context);
+ method public static androidx.window.layout.WindowMetricsCalculator getOrCreate();
+ field public static final androidx.window.layout.WindowMetricsCalculator.Companion Companion;
+ }
+
+ public static final class WindowMetricsCalculator.Companion {
+ method public androidx.window.layout.WindowMetricsCalculator getOrCreate();
+ }
+
+}
+