commit | b8e6cea3f94cd4be0df5e6251988645da0ac8441 | [log] [tgz] |
---|---|---|
author | Treehugger Robot | Tue Aug 01 22:24:17 2023 +0000 |
committer | Gerrit Code Review | Tue Aug 01 22:24:17 2023 +0000 |
tree | b02e176b9aa95a5c29c2a697b2806e10bcc067b6 | |
parent | 2cb53ad5450491543d00120c632cb43af80edd5b [diff] | |
parent | cbff5b8b77118af002ec04adc1e997502fbd831a [diff] |
Merge "Move navigation to compose 1.5.0 stable prebuilts" into androidx-main
diff --git a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt index 3ff0f4b..fe8a394 100644 --- a/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt +++ b/benchmark/baseline-profile-gradle-plugin/src/main/kotlin/androidx/baselineprofile/gradle/consumer/task/MergeBaselineProfileTask.kt
@@ -192,7 +192,10 @@ // Read the profile rules from the file collection that contains the profile artifacts from // all the configurations for this variant and merge them in a single list. val profileRules = baselineProfileFileCollection.files - .readLines { FILENAME_MATCHER_BASELINE_PROFILE in it.name } + .readLines { + FILENAME_MATCHER_BASELINE_PROFILE in it.name || + FILENAME_MATCHER_STARTUP_PROFILE in it.name + } if (variantName.isPresent && profileRules.isEmpty()) { logger.warn(
diff --git a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt index 7f6b19aa..bd086a0 100644 --- a/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt +++ b/benchmark/baseline-profile-gradle-plugin/src/test/kotlin/androidx/baselineprofile/gradle/consumer/BaselineProfileConsumerPluginTest.kt
@@ -111,6 +111,10 @@ Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_2, Fixtures.CLASS_2_METHOD_1, + Fixtures.CLASS_3_METHOD_1, + Fixtures.CLASS_3, + Fixtures.CLASS_4_METHOD_1, + Fixtures.CLASS_4 ) assertThat(startupProfileFile("main").exists()).isFalse() @@ -152,6 +156,10 @@ Fixtures.CLASS_1_METHOD_1, Fixtures.CLASS_2, Fixtures.CLASS_2_METHOD_1, + Fixtures.CLASS_3, + Fixtures.CLASS_3_METHOD_1, + Fixtures.CLASS_4, + Fixtures.CLASS_4_METHOD_1, ) assertThat(readStartupProfileFileContent("release")) @@ -239,12 +247,16 @@ .containsExactly( Fixtures.CLASS_1, Fixtures.CLASS_1_METHOD_1, + Fixtures.CLASS_3, + Fixtures.CLASS_3_METHOD_1, ) assertThat(readBaselineProfileFileContent("paidRelease")) .containsExactly( Fixtures.CLASS_2, Fixtures.CLASS_2_METHOD_1, + Fixtures.CLASS_4, + Fixtures.CLASS_4_METHOD_1, ) }
diff --git a/benchmark/benchmark-common/api/1.2.0-beta03.txt b/benchmark/benchmark-common/api/1.2.0-beta03.txt new file mode 100644 index 0000000..eb18450 --- /dev/null +++ b/benchmark/benchmark-common/api/1.2.0-beta03.txt
@@ -0,0 +1,117 @@ +// Signature format: 4.0 +package androidx.benchmark { + + public final class BenchmarkState { + ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public BenchmarkState(optional Integer? warmupCount, optional Integer? repeatCount); + method @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkStateApi public java.util.ListgetMeasurementTimeNs(); + 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.ListdataNs, @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.ListdataNs, @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.Listnames); + 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.ListgetNames(); + property public final java.util.Listnames; + } + + @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.ListgetMetrics(); + method public androidx.benchmark.ProfilerConfig? getProfiler(); + method public boolean getShouldEnablePerfettoSdkTracing(); + method public boolean getShouldEnableTraceAppTag(); + property public final java.util.Listmetrics; + 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.Function0block); + 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.Function0block); + method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0block); + method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0block); + method public static void record(String fileLabel, optional java.util.ListappTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 + method public static void record(String fileLabel, optional java.util.Listblock); appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0 + method public static void record(String fileLabel, optional java.util.Listblock); appTagPackages, kotlin.jvm.functions.Function0 + method public static void record(String fileLabel, kotlin.jvm.functions.Function0block); 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.Function0block); + 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.Function0block); + method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0block); + method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0block); + method public void record(String fileLabel, optional java.util.ListappTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 + method public void record(String fileLabel, optional java.util.Listblock); appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0 + method public void record(String fileLabel, optional java.util.Listblock); appTagPackages, kotlin.jvm.functions.Function0 + method public void record(String fileLabel, kotlin.jvm.functions.Function0block); 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.ListgetMeasurementTimeNs(); + 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.ListdataNs, @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.ListdataNs, @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.Listnames); + 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.ListgetNames(); + property public final java.util.Listnames; + } + + @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.ListgetMetrics(); + method public androidx.benchmark.ProfilerConfig? getProfiler(); + method public boolean getShouldEnablePerfettoSdkTracing(); + method public boolean getShouldEnableTraceAppTag(); + property public final java.util.Listmetrics; + 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.Function0block); + 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.Function0block); + method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0block); + method public static void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0block); + method public static void record(String fileLabel, optional java.util.ListappTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 + method public static void record(String fileLabel, optional java.util.Listblock); appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0 + method public static void record(String fileLabel, optional java.util.Listblock); appTagPackages, kotlin.jvm.functions.Function0 + method public static void record(String fileLabel, kotlin.jvm.functions.Function0block); 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.Function0block); + 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.Function0block); + method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, optional String highlightPackage, kotlin.jvm.functions.Function0block); + method public void record(String fileLabel, androidx.benchmark.perfetto.PerfettoConfig config, kotlin.jvm.functions.Function0block); + method public void record(String fileLabel, optional java.util.ListappTagPackages, optional String? userspaceTracingPackage, kotlin.jvm.functions.Function0 + method public void record(String fileLabel, optional java.util.Listblock); appTagPackages, optional String? userspaceTracingPackage, optional kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTrace,kotlin.Unit>? traceCallback, kotlin.jvm.functions.Function0 + method public void record(String fileLabel, optional java.util.Listblock); appTagPackages, kotlin.jvm.functions.Function0 + method public void record(String fileLabel, kotlin.jvm.functions.Function0block); block); + } + +} +
diff --git a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt index f82a89b..0577141 100644 --- a/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt +++ b/benchmark/benchmark-common/src/main/java/androidx/benchmark/Arguments.kt
@@ -39,19 +39,18 @@ /** * Set to true to enable androidx.tracing.perfetto tracepoints (such as composition tracing) * - * Note this only affects Macrobenchmarks currently, and only when StartupMode.COLD is not used, - * since enabling the tracepoints wakes the target process - * - * Currently internal/experimental + * Note that when StartupMode.COLD is used, additional work must be performed during target app + * startup to initialize tracing. */ - private val _fullTracingEnable: Boolean - val fullTracingEnable: Boolean get() = fullTracingEnableOverride ?: _fullTracingEnable + private val _perfettoSdkTracingEnable: Boolean + val perfettoSdkTracingEnable: Boolean get() = + perfettoSdkTracingEnableOverride ?: _perfettoSdkTracingEnable /** * Allows tests to override whether full tracing is enabled */ @VisibleForTesting - var fullTracingEnableOverride: Boolean? = null + var perfettoSdkTracingEnableOverride: Boolean? = null val enabledRules: Set@@ -120,8 +119,11 @@ iterations = arguments.getBenchmarkArgument("iterations")?.toInt() - _fullTracingEnable = - (arguments.getBenchmarkArgument("fullTracing.enable")?.toBoolean() ?: false) + _perfettoSdkTracingEnable = + arguments.getBenchmarkArgument("perfettoSdkTracing.enable")?.toBoolean() + // fullTracing.enable is the legacy/compat name + ?: arguments.getBenchmarkArgument("fullTracing.enable")?.toBoolean() + ?: false // Transform comma-delimited list into set of suppressed errors // E.g. "DEBUGGABLE, UNLOCKED" -> setOf("DEBUGGABLE", "UNLOCKED")
diff --git a/benchmark/benchmark-junit4/api/1.2.0-beta03.txt b/benchmark/benchmark-junit4/api/1.2.0-beta03.txt new file mode 100644 index 0000000..aea3355 --- /dev/null +++ b/benchmark/benchmark-junit4/api/1.2.0-beta03.txt
@@ -0,0 +1,35 @@ +// Signature format: 4.0 +package androidx.benchmark.junit4 { + + public class AndroidBenchmarkRunner extends androidx.test.runner.AndroidJUnitRunner { + ctor public AndroidBenchmarkRunner(); + } + + public final class BenchmarkRule implements org.junit.rules.TestRule { + ctor public BenchmarkRule(); + ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public BenchmarkRule(androidx.benchmark.MicrobenchmarkConfig config); + method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description); + method public androidx.benchmark.BenchmarkState getState(); + } + + public final class BenchmarkRule.Scope { + method public inlineT 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? getTraceCallback(); + property public final boolean enableAppTagTracing; + property public final boolean enableUserspaceTracing; + property public final kotlin.jvm.functions.Function1? traceCallback; + } + +} +
diff --git a/benchmark/benchmark-junit4/api/res-1.2.0-beta03.txt b/benchmark/benchmark-junit4/api/res-1.2.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/benchmark/benchmark-junit4/api/res-1.2.0-beta03.txt
diff --git a/benchmark/benchmark-junit4/api/restricted_1.2.0-beta03.txt b/benchmark/benchmark-junit4/api/restricted_1.2.0-beta03.txt new file mode 100644 index 0000000..0dab2ea --- /dev/null +++ b/benchmark/benchmark-junit4/api/restricted_1.2.0-beta03.txt
@@ -0,0 +1,36 @@ +// Signature format: 4.0 +package androidx.benchmark.junit4 { + + public class AndroidBenchmarkRunner extends androidx.test.runner.AndroidJUnitRunner { + ctor public AndroidBenchmarkRunner(); + } + + public final class BenchmarkRule implements org.junit.rules.TestRule { + ctor public BenchmarkRule(); + ctor @SuppressCompatibility @androidx.benchmark.ExperimentalBenchmarkConfigApi public BenchmarkRule(androidx.benchmark.MicrobenchmarkConfig config); + method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description); + method public androidx.benchmark.BenchmarkState getState(); + } + + public final class BenchmarkRule.Scope { + method @kotlin.PublishedApi internal androidx.benchmark.BenchmarkState getOuterState(); + method public inlineT 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? getTraceCallback(); + property public final boolean enableAppTagTracing; + property public final boolean enableUserspaceTracing; + property public final kotlin.jvm.functions.Function1? traceCallback; + } + +} +
diff --git a/benchmark/benchmark-macro-junit4/api/1.2.0-beta03.txt b/benchmark/benchmark-macro-junit4/api/1.2.0-beta03.txt new file mode 100644 index 0000000..d4c3495 --- /dev/null +++ b/benchmark/benchmark-macro-junit4/api/1.2.0-beta03.txt
@@ -0,0 +1,26 @@ +// Signature format: 4.0 +package androidx.benchmark.macro.junit4 { + + @RequiresApi(28) public final class BaselineProfileRule implements org.junit.rules.TestRule { + ctor public BaselineProfileRule(); + method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description description); + method public void collect(String packageName, optional int maxIterations, optional int stableIterations, optional String? outputFilePrefix, optional boolean includeInStartupProfile, optional boolean strictStability, kotlin.jvm.functions.Function1 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.ListgetResult(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.ListgetResult(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.ListdataSamples); + method public String component1(); + method public java.util.Listcomponent2(); + method public boolean component3(); + method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.Listdata, boolean requireSingleValue); + method public java.util.ListgetData(); + method public String getName(); + method public boolean getRequireSingleValue(); + property public final java.util.Listdata; + 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.Listexpected, java.util.List + } + + @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.Mapobserved, double threshold); categories); + method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Mapcategories); + 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.Mapcategories); + method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Mapcategories); + } + + public abstract static sealed class PowerMetric.Type { + method public final java.util.MapgetCategories(); + method public final void setCategories(java.util.Map); + property public final java.util.Mapcategories; + } + + 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.MapenergyCategories); + } + + public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type { + ctor public PowerMetric.Type.Power(optional java.util.MappowerCategories); + } + + 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.ListgetResult(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 publicT loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block); + method public staticT 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 publicT runServer(kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block); + } + + public static final class PerfettoTraceProcessor.Session { + method public kotlin.sequences.Sequencequery(@org.intellij.lang.annotations.Language("sql") String query); + method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query); + } + + @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map{ + ctor public Row(java.util.Mapmap); + method public byte[] bytes(String columnName); + method public double double(String columnName); + method public long long(String columnName); + method public byte[]? nullableBytes(String columnName); + method public Double? nullableDouble(String columnName); + method public Long? nullableLong(String columnName); + method public String? nullableString(String columnName); + method public String string(String columnName); + } + + public final class RowKt { + method @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair... pairs); + } + +} +
diff --git a/benchmark/benchmark-macro/api/res-1.2.0-beta03.txt b/benchmark/benchmark-macro/api/res-1.2.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/benchmark/benchmark-macro/api/res-1.2.0-beta03.txt
diff --git a/benchmark/benchmark-macro/api/restricted_1.2.0-beta03.txt b/benchmark/benchmark-macro/api/restricted_1.2.0-beta03.txt new file mode 100644 index 0000000..9fb21fd --- /dev/null +++ b/benchmark/benchmark-macro/api/restricted_1.2.0-beta03.txt
@@ -0,0 +1,283 @@ +// Signature format: 4.0 +package androidx.benchmark.macro { + + @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMetricApi public final class AudioUnderrunMetric extends androidx.benchmark.macro.Metric { + ctor public AudioUnderrunMetric(); + } + + public enum BaselineProfileMode { + method public static androidx.benchmark.macro.BaselineProfileMode valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException; + method public static androidx.benchmark.macro.BaselineProfileMode[] values(); + enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Disable; + enum_constant public static final androidx.benchmark.macro.BaselineProfileMode Require; + enum_constant public static final androidx.benchmark.macro.BaselineProfileMode UseIfAvailable; + } + + @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class BatteryCharge { + method public boolean hasMinimumCharge(optional boolean throwOnMissingMetrics); + field public static final androidx.benchmark.macro.BatteryCharge INSTANCE; + } + + public abstract sealed class CompilationMode { + field public static final androidx.benchmark.macro.CompilationMode.Companion Companion; + field public static final androidx.benchmark.macro.CompilationMode DEFAULT; + } + + public static final class CompilationMode.Companion { + } + + public static final class CompilationMode.Full extends androidx.benchmark.macro.CompilationMode { + ctor public CompilationMode.Full(); + } + + @SuppressCompatibility @androidx.benchmark.macro.ExperimentalMacrobenchmarkApi public static final class CompilationMode.Ignore extends androidx.benchmark.macro.CompilationMode { + ctor public CompilationMode.Ignore(); + } + + @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class CompilationMode.Interpreted extends androidx.benchmark.macro.CompilationMode { + field public static final androidx.benchmark.macro.CompilationMode.Interpreted INSTANCE; + } + + @RequiresApi(24) public static final class CompilationMode.None extends androidx.benchmark.macro.CompilationMode { + ctor public CompilationMode.None(); + } + + @RequiresApi(24) public static final class CompilationMode.Partial extends androidx.benchmark.macro.CompilationMode { + ctor public CompilationMode.Partial(); + ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode); + ctor public CompilationMode.Partial(optional androidx.benchmark.macro.BaselineProfileMode baselineProfileMode, optional @IntRange(from=0L) int warmupIterations); + method public androidx.benchmark.macro.BaselineProfileMode getBaselineProfileMode(); + method public int getWarmupIterations(); + property public final androidx.benchmark.macro.BaselineProfileMode baselineProfileMode; + property public final int warmupIterations; + } + + public final class CompilationModeKt { + method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static boolean isSupportedWithVmSettings(androidx.benchmark.macro.CompilationMode); + } + + @SuppressCompatibility @kotlin.RequiresOptIn(message="This Macrobenchmark API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMacrobenchmarkApi { + } + + @SuppressCompatibility @kotlin.RequiresOptIn(message="This Metric API is experimental.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalMetricApi { + } + + public final class FrameTimingMetric extends androidx.benchmark.macro.Metric { + ctor public FrameTimingMetric(); + } + + public final class MacrobenchmarkScope { + ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask); + method public void dropKernelPageCache(); + method public void dropShaderCache(); + method public androidx.test.uiautomator.UiDevice getDevice(); + method public Integer? getIteration(); + method public String getPackageName(); + method public void killProcess(); + method public void killProcess(optional boolean useKillAll); + method public void pressHome(); + method public void pressHome(optional long delayDurationMs); + method public void startActivityAndWait(); + method public void startActivityAndWait(android.content.Intent intent); + method public void startActivityAndWait(optional kotlin.jvm.functions.Function1 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.ListgetResult(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.ListgetResult(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.ListdataSamples); + method public String component1(); + method public java.util.Listcomponent2(); + method public boolean component3(); + method public androidx.benchmark.macro.Metric.Measurement copy(String name, java.util.Listdata, boolean requireSingleValue); + method public java.util.ListgetData(); + method public String getName(); + method public boolean getRequireSingleValue(); + property public final java.util.Listdata; + 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.Listexpected, java.util.List + } + + @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.Mapobserved, double threshold); categories); + method public static androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Mapcategories); + 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.Mapcategories); + method public androidx.benchmark.macro.PowerMetric.Type.Power Power(optional java.util.Mapcategories); + } + + public abstract static sealed class PowerMetric.Type { + method public final java.util.MapgetCategories(); + method public final void setCategories(java.util.Map); + property public final java.util.Mapcategories; + } + + 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.MapenergyCategories); + } + + public static final class PowerMetric.Type.Power extends androidx.benchmark.macro.PowerMetric.Type { + ctor public PowerMetric.Type.Power(optional java.util.MappowerCategories); + } + + @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.ListgetResult(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 publicT loadTrace(androidx.benchmark.perfetto.PerfettoTrace trace, kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTraceProcessor.Session,? extends T> block); + method public staticT 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 publicT runServer(kotlin.jvm.functions.Function1 super androidx.benchmark.perfetto.PerfettoTraceProcessor,? extends T> block); + } + + public static final class PerfettoTraceProcessor.Session { + method public kotlin.sequences.Sequencequery(@org.intellij.lang.annotations.Language("sql") String query); + method public byte[] rawQuery(@org.intellij.lang.annotations.Language("sql") String query); + } + + @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public final class Row implements kotlin.jvm.internal.markers.KMappedMarker java.util.Map{ + ctor public Row(java.util.Mapmap); + method public byte[] bytes(String columnName); + method public double double(String columnName); + method public long long(String columnName); + method public byte[]? nullableBytes(String columnName); + method public Double? nullableDouble(String columnName); + method public Long? nullableLong(String columnName); + method public String? nullableString(String columnName); + method public String string(String columnName); + } + + public final class RowKt { + method @SuppressCompatibility @androidx.benchmark.perfetto.ExperimentalPerfettoTraceProcessorApi public static androidx.benchmark.perfetto.Row rowOf(kotlin.Pair... pairs); + } + +} +
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt index f8cbebb..0bcb3b4 100644 --- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt +++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoSdkHandshakeTest.kt
@@ -43,7 +43,6 @@ import org.junit.After import org.junit.Assume.assumeTrue import org.junit.Before -import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.Parameterized @@ -216,14 +215,10 @@ } } - // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing) - @Ignore @Test fun test_handshake_framework_cold_start_persistent() = test_handshake_framework_cold_start(persistent = true) - // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing) - @Ignore @Test fun test_handshake_framework_cold_start_non_persistent() = test_handshake_framework_cold_start(persistent = false) @@ -277,8 +272,6 @@ } } - // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing) - @Ignore /** * Tests [androidx.benchmark.perfetto.PerfettoCapture.enableAndroidxTracingPerfetto] as * opposed to [androidx.tracing.perfetto.handshake.PerfettoSdkHandshake.enableTracingColdStart] @@ -326,14 +319,10 @@ } } - // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing) - @Ignore @Test fun test_handshake_framework_cold_start_disable_persistent() = test_handshake_framework_cold_start_disable(persistent = true) - // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing) - @Ignore @Test fun test_handshake_framework_cold_start_disable_non_persistent() = test_handshake_framework_cold_start_disable(persistent = true)
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt index d1ad575..df00a1a 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
@@ -402,7 +402,7 @@ measureBlock: MacrobenchmarkScope.() -> Unit ) { val perfettoSdkConfig = - if (Arguments.fullTracingEnable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (Arguments.perfettoSdkTracingEnable && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { PerfettoSdkConfig( packageName, when (startupMode) {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt index 1d045d0..8cb0a3d 100644 --- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt +++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXComposeImplPlugin.kt
@@ -84,10 +84,6 @@ val isPublished = androidXExtension.shouldPublish() it.lint { - // Too many Kotlin features require synthetic accessors - we want to rely on R8 - // to - // remove these accessors - disable.add("SyntheticAccessor") // These lint checks are normally a warning (or lower), but we ignore (in // AndroidX) // warnings in Lint, so we make it an error here so it will fail the build.
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt index 7cc787b..21fb3f1 100644 --- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt +++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -61,6 +61,9 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.Task +import org.gradle.api.artifacts.CacheableRule +import org.gradle.api.artifacts.ComponentMetadataContext +import org.gradle.api.artifacts.ComponentMetadataRule import org.gradle.api.artifacts.Configuration import org.gradle.api.component.SoftwareComponentFactory import org.gradle.api.file.DuplicatesStrategy @@ -82,6 +85,7 @@ import org.gradle.kotlin.dsl.extra import org.gradle.kotlin.dsl.findByType import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.withModule import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension @@ -297,20 +301,16 @@ private fun Project.configureKotlinVersion() { val kotlinVersionStringProvider = androidXConfiguration.kotlinBomVersion - // Resolve Kotlin versions to the target version or higher. + // Resolve unspecified Kotlin versions to the target version. configurations.all { configuration -> configuration.resolutionStrategy { strategy -> strategy.eachDependency { details -> if (details.requested.group == "org.jetbrains.kotlin") { - val requestedVersion = - if (details.requested.version.isNullOrEmpty()) { - null - } else { - Version(details.requested.version!!) - } - val bomVersion = kotlinVersionStringProvider.get() - if (requestedVersion == null || requestedVersion < Version(bomVersion)) { - details.useVersion(bomVersion) + if ( + details.requested.group == "org.jetbrains.kotlin" && + details.requested.version == null + ) { + details.useVersion(kotlinVersionStringProvider.get()) } } } @@ -335,6 +335,35 @@ kotlinExtension.coreLibrariesVersion = kotlinVersionStringProvider.get() } } + + // Resolve classpath conflicts caused by kotlin-stdlib-jdk7 and -jdk8 artifacts by amending + // the kotlin-stdlib artifact metadata to add same-version constraints. + project.dependencies { + components { componentMetadata -> + componentMetadata.withModule( + "org.jetbrains.kotlin:kotlin-stdlib" + ) + } + } + } + + @CacheableRule + internal abstract class KotlinStdlibDependenciesRule : ComponentMetadataRule { + override fun execute(context: ComponentMetadataContext) { + val module = context.details.id + val version = module.version + context.details.allVariants { variantMetadata -> + variantMetadata.withDependencyConstraints { constraintsMetadata -> + val reason = "${module.name} is in atomic group ${module.group}" + constraintsMetadata.add("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$version") { + it.because(reason) + } + constraintsMetadata.add("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$version") { + it.because(reason) + } + } + } + } } private fun configureWithKotlinPlugin(
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt index 2552af0..28200ee 100644 --- a/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt +++ b/buildSrc/private/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -397,15 +397,9 @@ fatal.add("LambdaLast") fatal.add("UnknownNullness") - // Only override if not set explicitly. - // Some Kotlin projects may wish to disable this. - if ( - isLibrary && - !disable.contains("SyntheticAccessor") && - extension.type != LibraryType.SAMPLES - ) { - fatal.add("SyntheticAccessor") - } + // Too many Kotlin features require synthetic accessors - we want to rely on R8 to + // remove these accessors + disable.add("SyntheticAccessor") // Only check for missing translations in finalized (beta and later) modules. if (extension.mavenVersion?.isFinalApi() == true) {
diff --git a/camera/camera-camera2/api/1.3.0-beta03.txt b/camera/camera-camera2/api/1.3.0-beta03.txt new file mode 100644 index 0000000..87c79d0 --- /dev/null +++ b/camera/camera-camera2/api/1.3.0-beta03.txt
@@ -0,0 +1,54 @@ +// Signature format: 4.0 +package androidx.camera.camera2 { + + @RequiresApi(21) public final class Camera2Config { + method public static androidx.camera.core.CameraXConfig defaultConfig(); + } + +} + +package androidx.camera.camera2.interop { + + @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraControl { + method public com.google.common.util.concurrent.ListenableFutureaddCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions); + method public com.google.common.util.concurrent.ListenableFutureclearCaptureRequestOptions(); + 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.ListenableFuturesetCaptureRequestOptions(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 publicT? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key + method public String getCameraId(); + } + + @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop { + } + + @RequiresApi(21) public static final class Camera2Interop.Extender); { + ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder); + method publicandroidx.camera.camera2.interop.Camera2Interop.Extender + method public androidx.camera.camera2.interop.Camera2Interop.ExtendersetCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key , ValueT); setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback); + method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.ExtendersetPhysicalCameraId(String); + method public androidx.camera.camera2.interop.Camera2Interop.ExtendersetSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback); + method public androidx.camera.camera2.interop.Camera2Interop.ExtendersetSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback); + method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.ExtendersetStreamUseCase(long); + } + + @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions { + method publicValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key + } + + @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder); { + ctor public CaptureRequestOptions.Builder(); + method public androidx.camera.camera2.interop.CaptureRequestOptions build(); + method publicandroidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key + method public); androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key + } + + @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop { + } + +} +, ValueT);
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.ListenableFutureaddCaptureRequestOptions(androidx.camera.camera2.interop.CaptureRequestOptions); + method public com.google.common.util.concurrent.ListenableFutureclearCaptureRequestOptions(); + 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.ListenableFuturesetCaptureRequestOptions(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 publicT? getCameraCharacteristic(android.hardware.camera2.CameraCharacteristics.Key + method public String getCameraId(); + } + + @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop { + } + + @RequiresApi(21) public static final class Camera2Interop.Extender); { + ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder); + method publicandroidx.camera.camera2.interop.Camera2Interop.Extender + method public androidx.camera.camera2.interop.Camera2Interop.ExtendersetCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key , ValueT); setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback); + method @RequiresApi(28) public androidx.camera.camera2.interop.Camera2Interop.ExtendersetPhysicalCameraId(String); + method public androidx.camera.camera2.interop.Camera2Interop.ExtendersetSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback); + method public androidx.camera.camera2.interop.Camera2Interop.ExtendersetSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback); + method @RequiresApi(33) public androidx.camera.camera2.interop.Camera2Interop.ExtendersetStreamUseCase(long); + } + + @SuppressCompatibility @RequiresApi(21) @androidx.camera.camera2.interop.ExperimentalCamera2Interop public class CaptureRequestOptions { + method publicValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key + } + + @RequiresApi(21) public static final class CaptureRequestOptions.Builder implements androidx.camera.core.ExtendableBuilder); { + ctor public CaptureRequestOptions.Builder(); + method public androidx.camera.camera2.interop.CaptureRequestOptions build(); + method publicandroidx.camera.camera2.interop.CaptureRequestOptions.Builder clearCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key + method public); androidx.camera.camera2.interop.CaptureRequestOptions.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key + } + + @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop { + } + +} +, ValueT);
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.ListenableFuturecancelFocusAndMetering(); + method public com.google.common.util.concurrent.ListenableFutureenableTorch(boolean); + method public com.google.common.util.concurrent.ListenableFuturesetExposureCompensationIndex(int); + method public com.google.common.util.concurrent.ListenableFuturesetLinearZoom(@FloatRange(from=0.0f, to=1.0f) float); + method public com.google.common.util.concurrent.ListenableFuturesetZoomRatio(float); + method public com.google.common.util.concurrent.ListenableFuturestartFocusAndMetering(androidx.camera.core.FocusMeteringAction); + } + + public static final class CameraControl.OperationCanceledException extends java.lang.Exception { + } + + @RequiresApi(21) public abstract class CameraEffect { + ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.ImageProcessor, androidx.core.util.Consumer); + ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.SurfaceProcessor, androidx.core.util.Consumer); + method public androidx.core.util.ConsumergetErrorListener(); + 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.Listfilter(java.util.List + } + + @RequiresApi(21) public interface CameraInfo { + method public androidx.camera.core.CameraSelector getCameraSelector(); + method public androidx.lifecycle.LiveData); getCameraState(); + method public androidx.camera.core.ExposureState getExposureState(); + method @FloatRange(from=0, fromInclusive=false) public default float getIntrinsicZoomRatio(); + method public default int getLensFacing(); + method public int getSensorRotationDegrees(); + method public int getSensorRotationDegrees(int); + method public default java.util.Set!> getSupportedFrameRateRanges(); + method public androidx.lifecycle.LiveDatagetTorchState(); + method public androidx.lifecycle.LiveDatagetZoomState(); + 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.ListgetAvailableCameraInfos(); + method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException; + } + + @RequiresApi(21) public final class CameraSelector { + method public java.util.Listfilter(java.util.List + field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA; + field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA; + field public static final int LENS_FACING_BACK = 1; // 0x1 + field @SuppressCompatibility @androidx.camera.core.ExperimentalLensFacing public static final int LENS_FACING_EXTERNAL = 2; // 0x2 + field public static final int LENS_FACING_FRONT = 0; // 0x0 + field public static final int LENS_FACING_UNKNOWN = -1; // 0xffffffff + } + + public static final class CameraSelector.Builder { + ctor public CameraSelector.Builder(); + method public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter); + method public androidx.camera.core.CameraSelector build(); + method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int); + } + + @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class CameraState { + ctor public CameraState(); + method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type); + method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type, androidx.camera.core.CameraState.StateError?); + method public abstract androidx.camera.core.CameraState.StateError? getError(); + method public abstract androidx.camera.core.CameraState.Type getType(); + field public static final int ERROR_CAMERA_DISABLED = 5; // 0x5 + field public static final int ERROR_CAMERA_FATAL_ERROR = 6; // 0x6 + field public static final int ERROR_CAMERA_IN_USE = 2; // 0x2 + field public static final int ERROR_DO_NOT_DISTURB_MODE_ENABLED = 7; // 0x7 + field public static final int ERROR_MAX_CAMERAS_IN_USE = 1; // 0x1 + field public static final int ERROR_OTHER_RECOVERABLE_ERROR = 3; // 0x3 + field public static final int ERROR_STREAM_CONFIG = 4; // 0x4 + } + + public enum CameraState.ErrorType { + enum_constant public static final androidx.camera.core.CameraState.ErrorType CRITICAL; + enum_constant public static final androidx.camera.core.CameraState.ErrorType RECOVERABLE; + } + + @com.google.auto.value.AutoValue public abstract static class CameraState.StateError { + ctor public CameraState.StateError(); + method public static androidx.camera.core.CameraState.StateError create(int); + method public static androidx.camera.core.CameraState.StateError create(int, Throwable?); + method public abstract Throwable? getCause(); + method public abstract int getCode(); + method public androidx.camera.core.CameraState.ErrorType getType(); + } + + public enum CameraState.Type { + enum_constant public static final androidx.camera.core.CameraState.Type CLOSED; + enum_constant public static final androidx.camera.core.CameraState.Type CLOSING; + enum_constant public static final androidx.camera.core.CameraState.Type OPEN; + enum_constant public static final androidx.camera.core.CameraState.Type OPENING; + enum_constant public static final androidx.camera.core.CameraState.Type PENDING_OPEN; + } + + @RequiresApi(21) public class CameraUnavailableException extends java.lang.Exception { + ctor public CameraUnavailableException(int); + ctor public CameraUnavailableException(int, String?); + ctor public CameraUnavailableException(int, String?, Throwable?); + ctor public CameraUnavailableException(int, Throwable?); + method public int getReason(); + field public static final int CAMERA_DISABLED = 1; // 0x1 + field public static final int CAMERA_DISCONNECTED = 2; // 0x2 + field public static final int CAMERA_ERROR = 3; // 0x3 + field public static final int CAMERA_IN_USE = 4; // 0x4 + field public static final int CAMERA_MAX_IN_USE = 5; // 0x5 + field public static final int CAMERA_UNAVAILABLE_DO_NOT_DISTURB = 6; // 0x6 + field public static final int CAMERA_UNKNOWN_ERROR = 0; // 0x0 + } + + @RequiresApi(21) public final class CameraXConfig { + method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?); + method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?); + method public int getMinimumLoggingLevel(); + method public android.os.Handler? getSchedulerHandler(android.os.Handler?); + } + + public static final class CameraXConfig.Builder { + method public androidx.camera.core.CameraXConfig build(); + method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig); + method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector); + method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor); + method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int); + method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler); + } + + public static interface CameraXConfig.Provider { + method public androidx.camera.core.CameraXConfig getCameraXConfig(); + } + + @RequiresApi(21) public class ConcurrentCamera { + ctor public ConcurrentCamera(java.util.List); ); + method public java.util.ListgetCameras(); + } + + 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.RangegetExposureCompensationRange(); + method public android.util.Rational getExposureCompensationStep(); + method public boolean isExposureCompensationSupported(); + } + + @RequiresApi(21) public interface ExtendableBuilder{ + method public T build(); + } + + @RequiresApi(21) public final class FocusMeteringAction { + method public long getAutoCancelDurationInMillis(); + method public java.util.ListgetMeteringPointsAe(); + method public java.util.ListgetMeteringPointsAf(); + method public java.util.ListgetMeteringPointsAwb(); + method public boolean isAutoCancelEnabled(); + field public static final int FLAG_AE = 2; // 0x2 + field public static final int FLAG_AF = 1; // 0x1 + field public static final int FLAG_AWB = 4; // 0x4 + } + + public static class FocusMeteringAction.Builder { + ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint); + ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint, int); + method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint); + method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int); + method public androidx.camera.core.FocusMeteringAction build(); + method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel(); + method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit); + } + + @RequiresApi(21) public final class FocusMeteringResult { + method public boolean isFocusSuccessful(); + } + + @RequiresApi(21) public final class ImageAnalysis extends androidx.camera.core.UseCase { + method public void clearAnalyzer(); + method @SuppressCompatibility @androidx.camera.core.ExperimentalUseCaseApi public java.util.concurrent.Executor? getBackgroundExecutor(); + method public int getBackpressureStrategy(); + method public int getImageQueueDepth(); + method public int getOutputImageFormat(); + method public androidx.camera.core.ResolutionInfo? getResolutionInfo(); + method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector(); + method public int getTargetRotation(); + method public boolean isOutputImageRotationEnabled(); + method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer); + method public void setTargetRotation(int); + field public static final int COORDINATE_SYSTEM_ORIGINAL = 0; // 0x0 + field public static final int OUTPUT_IMAGE_FORMAT_RGBA_8888 = 2; // 0x2 + field public static final int OUTPUT_IMAGE_FORMAT_YUV_420_888 = 1; // 0x1 + field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1 + field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0 + } + + public static interface ImageAnalysis.Analyzer { + method public void analyze(androidx.camera.core.ImageProxy); + method public default android.util.Size? getDefaultTargetResolution(); + method public default int getTargetCoordinateSystem(); + method public default void updateTransform(android.graphics.Matrix?); + } + + public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder{ + ctor public ImageAnalysis.Builder(); + method public androidx.camera.core.ImageAnalysis build(); + method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor); + method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int); + method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int); + method public androidx.camera.core.ImageAnalysis.Builder setOutputImageFormat(int); + method @RequiresApi(23) public androidx.camera.core.ImageAnalysis.Builder setOutputImageRotationEnabled(boolean); + method public androidx.camera.core.ImageAnalysis.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector); + method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int); + method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String); + method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size); + method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int); + } + + @RequiresApi(21) public final class ImageCapture extends androidx.camera.core.UseCase { + method public int getCaptureMode(); + method public int getFlashMode(); + method @IntRange(from=1, to=100) public int getJpegQuality(); + method public androidx.camera.core.ResolutionInfo? getResolutionInfo(); + method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector(); + method public int getTargetRotation(); + method public void setCropAspectRatio(android.util.Rational); + method public void setFlashMode(int); + method public void setTargetRotation(int); + method public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback); + method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback); + field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0 + field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1 + field @SuppressCompatibility @androidx.camera.core.ExperimentalZeroShutterLag public static final int CAPTURE_MODE_ZERO_SHUTTER_LAG = 2; // 0x2 + field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3 + field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2 + field public static final int ERROR_FILE_IO = 1; // 0x1 + field public static final int ERROR_INVALID_CAMERA = 4; // 0x4 + field public static final int ERROR_UNKNOWN = 0; // 0x0 + field public static final int FLASH_MODE_AUTO = 0; // 0x0 + field public static final int FLASH_MODE_OFF = 2; // 0x2 + field public static final int FLASH_MODE_ON = 1; // 0x1 + } + + public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder{ + ctor public ImageCapture.Builder(); + method public androidx.camera.core.ImageCapture build(); + method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int); + method public androidx.camera.core.ImageCapture.Builder setFlashMode(int); + method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor); + method public androidx.camera.core.ImageCapture.Builder setJpegQuality(@IntRange(from=1, to=100) int); + method public androidx.camera.core.ImageCapture.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector); + method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int); + method public androidx.camera.core.ImageCapture.Builder setTargetName(String); + method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size); + method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int); + } + + public static final class ImageCapture.Metadata { + ctor public ImageCapture.Metadata(); + method public android.location.Location? getLocation(); + method public boolean isReversedHorizontal(); + method public boolean isReversedVertical(); + method public void setLocation(android.location.Location?); + method public void setReversedHorizontal(boolean); + method public void setReversedVertical(boolean); + } + + public abstract static class ImageCapture.OnImageCapturedCallback { + ctor public ImageCapture.OnImageCapturedCallback(); + method public void onCaptureSuccess(androidx.camera.core.ImageProxy); + method public void onError(androidx.camera.core.ImageCaptureException); + } + + public static interface ImageCapture.OnImageSavedCallback { + method public void onError(androidx.camera.core.ImageCaptureException); + method public void onImageSaved(androidx.camera.core.ImageCapture.OutputFileResults); + } + + public static final class ImageCapture.OutputFileOptions { + } + + public static final class ImageCapture.OutputFileOptions.Builder { + ctor public ImageCapture.OutputFileOptions.Builder(android.content.ContentResolver, android.net.Uri, android.content.ContentValues); + ctor public ImageCapture.OutputFileOptions.Builder(java.io.File); + ctor public ImageCapture.OutputFileOptions.Builder(java.io.OutputStream); + method public androidx.camera.core.ImageCapture.OutputFileOptions build(); + method public androidx.camera.core.ImageCapture.OutputFileOptions.Builder setMetadata(androidx.camera.core.ImageCapture.Metadata); + } + + public static class ImageCapture.OutputFileResults { + method public android.net.Uri? getSavedUri(); + } + + @RequiresApi(21) public class ImageCaptureException extends java.lang.Exception { + ctor public ImageCaptureException(int, String, Throwable?); + method public int getImageCaptureError(); + } + + @RequiresApi(21) public interface ImageInfo { + method public int getRotationDegrees(); + method public default android.graphics.Matrix getSensorToBufferTransformMatrix(); + method public long getTimestamp(); + } + + public interface ImageProcessor { + method public androidx.camera.core.ImageProcessor.Response process(androidx.camera.core.ImageProcessor.Request) throws androidx.camera.core.ProcessingException; + } + + public static interface ImageProcessor.Request { + method public androidx.camera.core.ImageProxy getInputImage(); + method public int getOutputFormat(); + } + + public static interface ImageProcessor.Response { + method public androidx.camera.core.ImageProxy getOutputImage(); + } + + @RequiresApi(21) public interface ImageProxy extends java.lang.AutoCloseable { + method public void close(); + method public android.graphics.Rect getCropRect(); + method public int getFormat(); + method public int getHeight(); + method @SuppressCompatibility @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage(); + method public androidx.camera.core.ImageInfo getImageInfo(); + method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes(); + method public int getWidth(); + method public void setCropRect(android.graphics.Rect?); + method public default android.graphics.Bitmap toBitmap(); + } + + public static interface ImageProxy.PlaneProxy { + method public java.nio.ByteBuffer getBuffer(); + method public int getPixelStride(); + method public int getRowStride(); + } + + @RequiresApi(21) public class InitializationException extends java.lang.Exception { + ctor public InitializationException(String?); + ctor public InitializationException(String?, Throwable?); + ctor public InitializationException(Throwable?); + } + + @RequiresApi(21) public class MeteringPoint { + method public float getSize(); + } + + @RequiresApi(21) public abstract class MeteringPointFactory { + method public final androidx.camera.core.MeteringPoint createPoint(float, float); + method public final androidx.camera.core.MeteringPoint createPoint(float, float, float); + method public static float getDefaultPointSize(); + } + + @RequiresApi(21) public class MirrorMode { + field public static final int MIRROR_MODE_OFF = 0; // 0x0 + field public static final int MIRROR_MODE_ON = 1; // 0x1 + field public static final int MIRROR_MODE_ON_FRONT_ONLY = 2; // 0x2 + } + + @RequiresApi(21) public final class Preview extends androidx.camera.core.UseCase { + method public androidx.camera.core.ResolutionInfo? getResolutionInfo(); + method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector(); + method public android.util.RangegetTargetFrameRate(); + method public int getTargetRotation(); + method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?); + method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?); + method public void setTargetRotation(int); + } + + public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder{ + ctor public Preview.Builder(); + method public androidx.camera.core.Preview build(); + method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector); + method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int); + method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range); + method public androidx.camera.core.Preview.Builder setTargetName(String); + method @Deprecated public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size); + method public androidx.camera.core.Preview.Builder setTargetRotation(int); + } + + public static interface Preview.SurfaceProvider { + method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest); + } + + public class ProcessingException extends java.lang.Exception { + ctor public ProcessingException(); + } + + @RequiresApi(21) public class ResolutionInfo { + ctor public ResolutionInfo(android.util.Size, android.graphics.Rect, int); + method public android.graphics.Rect getCropRect(); + method public android.util.Size getResolution(); + method public int getRotationDegrees(); + } + + @RequiresApi(21) public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory { + ctor public SurfaceOrientedMeteringPointFactory(float, float); + ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase); + } + + public interface SurfaceOutput extends java.io.Closeable { + method public void close(); + method public android.util.Size getSize(); + method public android.view.Surface getSurface(java.util.concurrent.Executor, androidx.core.util.Consumer); + method public int getTargets(); + method public void updateTransformMatrix(float[], float[]); + } + + @com.google.auto.value.AutoValue public abstract static class SurfaceOutput.Event { + method public abstract int getEventCode(); + method public abstract androidx.camera.core.SurfaceOutput getSurfaceOutput(); + field public static final int EVENT_REQUEST_CLOSE = 0; // 0x0 + } + + public interface SurfaceProcessor { + method public void onInputSurface(androidx.camera.core.SurfaceRequest) throws androidx.camera.core.ProcessingException; + method public void onOutputSurface(androidx.camera.core.SurfaceOutput) throws androidx.camera.core.ProcessingException; + } + + @RequiresApi(21) public final class SurfaceRequest { + method public void addRequestCancellationListener(java.util.concurrent.Executor, Runnable); + method public void clearTransformationInfoListener(); + method public androidx.camera.core.DynamicRange getDynamicRange(); + method public android.util.Size getResolution(); + method public boolean invalidate(); + method public void provideSurface(android.view.Surface, java.util.concurrent.Executor, androidx.core.util.Consumer); + method public void setTransformationInfoListener(java.util.concurrent.Executor, androidx.camera.core.SurfaceRequest.TransformationInfoListener); + method public boolean willNotProvideSurface(); + } + + @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.Result { + method public abstract int getResultCode(); + method public abstract android.view.Surface getSurface(); + field public static final int RESULT_INVALID_SURFACE = 2; // 0x2 + field public static final int RESULT_REQUEST_CANCELLED = 1; // 0x1 + field public static final int RESULT_SURFACE_ALREADY_PROVIDED = 3; // 0x3 + field public static final int RESULT_SURFACE_USED_SUCCESSFULLY = 0; // 0x0 + field public static final int RESULT_WILL_NOT_PROVIDE_SURFACE = 4; // 0x4 + } + + @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.TransformationInfo { + method public abstract android.graphics.Rect getCropRect(); + method public abstract int getRotationDegrees(); + } + + public static interface SurfaceRequest.TransformationInfoListener { + method public void onTransformationInfoUpdate(androidx.camera.core.SurfaceRequest.TransformationInfo); + } + + @RequiresApi(21) public class TorchState { + field public static final int OFF = 0; // 0x0 + field public static final int ON = 1; // 0x1 + } + + @RequiresApi(21) public abstract class UseCase { + method public static int snapToSurfaceRotation(@IntRange(from=0, to=359) int); + } + + @RequiresApi(21) public final class UseCaseGroup { + method public java.util.ListgetEffects(); + method public java.util.ListgetUseCases(); + 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.Listfilter(java.util.List + } + + @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; + } + +} +, int);
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.ListenableFuturecancelFocusAndMetering(); + method public com.google.common.util.concurrent.ListenableFutureenableTorch(boolean); + method public com.google.common.util.concurrent.ListenableFuturesetExposureCompensationIndex(int); + method public com.google.common.util.concurrent.ListenableFuturesetLinearZoom(@FloatRange(from=0.0f, to=1.0f) float); + method public com.google.common.util.concurrent.ListenableFuturesetZoomRatio(float); + method public com.google.common.util.concurrent.ListenableFuturestartFocusAndMetering(androidx.camera.core.FocusMeteringAction); + } + + public static final class CameraControl.OperationCanceledException extends java.lang.Exception { + } + + @RequiresApi(21) public abstract class CameraEffect { + ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.ImageProcessor, androidx.core.util.Consumer); + ctor protected CameraEffect(int, java.util.concurrent.Executor, androidx.camera.core.SurfaceProcessor, androidx.core.util.Consumer); + method public androidx.core.util.ConsumergetErrorListener(); + 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.Listfilter(java.util.List + } + + @RequiresApi(21) public interface CameraInfo { + method public androidx.camera.core.CameraSelector getCameraSelector(); + method public androidx.lifecycle.LiveData); getCameraState(); + method public androidx.camera.core.ExposureState getExposureState(); + method @FloatRange(from=0, fromInclusive=false) public default float getIntrinsicZoomRatio(); + method public default int getLensFacing(); + method public int getSensorRotationDegrees(); + method public int getSensorRotationDegrees(int); + method public default java.util.Set!> getSupportedFrameRateRanges(); + method public androidx.lifecycle.LiveDatagetTorchState(); + method public androidx.lifecycle.LiveDatagetZoomState(); + 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.ListgetAvailableCameraInfos(); + method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException; + } + + @RequiresApi(21) public final class CameraSelector { + method public java.util.Listfilter(java.util.List + field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA; + field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA; + field public static final int LENS_FACING_BACK = 1; // 0x1 + field @SuppressCompatibility @androidx.camera.core.ExperimentalLensFacing public static final int LENS_FACING_EXTERNAL = 2; // 0x2 + field public static final int LENS_FACING_FRONT = 0; // 0x0 + field public static final int LENS_FACING_UNKNOWN = -1; // 0xffffffff + } + + public static final class CameraSelector.Builder { + ctor public CameraSelector.Builder(); + method public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter); + method public androidx.camera.core.CameraSelector build(); + method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int); + } + + @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class CameraState { + ctor public CameraState(); + method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type); + method public static androidx.camera.core.CameraState create(androidx.camera.core.CameraState.Type, androidx.camera.core.CameraState.StateError?); + method public abstract androidx.camera.core.CameraState.StateError? getError(); + method public abstract androidx.camera.core.CameraState.Type getType(); + field public static final int ERROR_CAMERA_DISABLED = 5; // 0x5 + field public static final int ERROR_CAMERA_FATAL_ERROR = 6; // 0x6 + field public static final int ERROR_CAMERA_IN_USE = 2; // 0x2 + field public static final int ERROR_DO_NOT_DISTURB_MODE_ENABLED = 7; // 0x7 + field public static final int ERROR_MAX_CAMERAS_IN_USE = 1; // 0x1 + field public static final int ERROR_OTHER_RECOVERABLE_ERROR = 3; // 0x3 + field public static final int ERROR_STREAM_CONFIG = 4; // 0x4 + } + + public enum CameraState.ErrorType { + enum_constant public static final androidx.camera.core.CameraState.ErrorType CRITICAL; + enum_constant public static final androidx.camera.core.CameraState.ErrorType RECOVERABLE; + } + + @com.google.auto.value.AutoValue public abstract static class CameraState.StateError { + ctor public CameraState.StateError(); + method public static androidx.camera.core.CameraState.StateError create(int); + method public static androidx.camera.core.CameraState.StateError create(int, Throwable?); + method public abstract Throwable? getCause(); + method public abstract int getCode(); + method public androidx.camera.core.CameraState.ErrorType getType(); + } + + public enum CameraState.Type { + enum_constant public static final androidx.camera.core.CameraState.Type CLOSED; + enum_constant public static final androidx.camera.core.CameraState.Type CLOSING; + enum_constant public static final androidx.camera.core.CameraState.Type OPEN; + enum_constant public static final androidx.camera.core.CameraState.Type OPENING; + enum_constant public static final androidx.camera.core.CameraState.Type PENDING_OPEN; + } + + @RequiresApi(21) public class CameraUnavailableException extends java.lang.Exception { + ctor public CameraUnavailableException(int); + ctor public CameraUnavailableException(int, String?); + ctor public CameraUnavailableException(int, String?, Throwable?); + ctor public CameraUnavailableException(int, Throwable?); + method public int getReason(); + field public static final int CAMERA_DISABLED = 1; // 0x1 + field public static final int CAMERA_DISCONNECTED = 2; // 0x2 + field public static final int CAMERA_ERROR = 3; // 0x3 + field public static final int CAMERA_IN_USE = 4; // 0x4 + field public static final int CAMERA_MAX_IN_USE = 5; // 0x5 + field public static final int CAMERA_UNAVAILABLE_DO_NOT_DISTURB = 6; // 0x6 + field public static final int CAMERA_UNKNOWN_ERROR = 0; // 0x0 + } + + @RequiresApi(21) public final class CameraXConfig { + method public androidx.camera.core.CameraSelector? getAvailableCamerasLimiter(androidx.camera.core.CameraSelector?); + method public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?); + method public int getMinimumLoggingLevel(); + method public android.os.Handler? getSchedulerHandler(android.os.Handler?); + } + + public static final class CameraXConfig.Builder { + method public androidx.camera.core.CameraXConfig build(); + method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig); + method public androidx.camera.core.CameraXConfig.Builder setAvailableCamerasLimiter(androidx.camera.core.CameraSelector); + method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor); + method public androidx.camera.core.CameraXConfig.Builder setMinimumLoggingLevel(@IntRange(from=android.util.Log.DEBUG, to=android.util.Log.ERROR) int); + method public androidx.camera.core.CameraXConfig.Builder setSchedulerHandler(android.os.Handler); + } + + public static interface CameraXConfig.Provider { + method public androidx.camera.core.CameraXConfig getCameraXConfig(); + } + + @RequiresApi(21) public class ConcurrentCamera { + ctor public ConcurrentCamera(java.util.List); ); + method public java.util.ListgetCameras(); + } + + 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.RangegetExposureCompensationRange(); + method public android.util.Rational getExposureCompensationStep(); + method public boolean isExposureCompensationSupported(); + } + + @RequiresApi(21) public interface ExtendableBuilder{ + method public T build(); + } + + @RequiresApi(21) public final class FocusMeteringAction { + method public long getAutoCancelDurationInMillis(); + method public java.util.ListgetMeteringPointsAe(); + method public java.util.ListgetMeteringPointsAf(); + method public java.util.ListgetMeteringPointsAwb(); + method public boolean isAutoCancelEnabled(); + field public static final int FLAG_AE = 2; // 0x2 + field public static final int FLAG_AF = 1; // 0x1 + field public static final int FLAG_AWB = 4; // 0x4 + } + + public static class FocusMeteringAction.Builder { + ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint); + ctor public FocusMeteringAction.Builder(androidx.camera.core.MeteringPoint, int); + method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint); + method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int); + method public androidx.camera.core.FocusMeteringAction build(); + method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel(); + method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit); + } + + @RequiresApi(21) public final class FocusMeteringResult { + method public boolean isFocusSuccessful(); + } + + @RequiresApi(21) public final class ImageAnalysis extends androidx.camera.core.UseCase { + method public void clearAnalyzer(); + method @SuppressCompatibility @androidx.camera.core.ExperimentalUseCaseApi public java.util.concurrent.Executor? getBackgroundExecutor(); + method public int getBackpressureStrategy(); + method public int getImageQueueDepth(); + method public int getOutputImageFormat(); + method public androidx.camera.core.ResolutionInfo? getResolutionInfo(); + method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector(); + method public int getTargetRotation(); + method public boolean isOutputImageRotationEnabled(); + method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer); + method public void setTargetRotation(int); + field public static final int COORDINATE_SYSTEM_ORIGINAL = 0; // 0x0 + field public static final int OUTPUT_IMAGE_FORMAT_RGBA_8888 = 2; // 0x2 + field public static final int OUTPUT_IMAGE_FORMAT_YUV_420_888 = 1; // 0x1 + field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1 + field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0 + } + + public static interface ImageAnalysis.Analyzer { + method public void analyze(androidx.camera.core.ImageProxy); + method public default android.util.Size? getDefaultTargetResolution(); + method public default int getTargetCoordinateSystem(); + method public default void updateTransform(android.graphics.Matrix?); + } + + public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder{ + ctor public ImageAnalysis.Builder(); + method public androidx.camera.core.ImageAnalysis build(); + method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor); + method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int); + method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int); + method public androidx.camera.core.ImageAnalysis.Builder setOutputImageFormat(int); + method @RequiresApi(23) public androidx.camera.core.ImageAnalysis.Builder setOutputImageRotationEnabled(boolean); + method public androidx.camera.core.ImageAnalysis.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector); + method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int); + method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String); + method @Deprecated public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size); + method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int); + } + + @RequiresApi(21) public final class ImageCapture extends androidx.camera.core.UseCase { + method public int getCaptureMode(); + method public int getFlashMode(); + method @IntRange(from=1, to=100) public int getJpegQuality(); + method public androidx.camera.core.ResolutionInfo? getResolutionInfo(); + method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector(); + method public int getTargetRotation(); + method public void setCropAspectRatio(android.util.Rational); + method public void setFlashMode(int); + method public void setTargetRotation(int); + method public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback); + method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback); + field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0 + field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1 + field @SuppressCompatibility @androidx.camera.core.ExperimentalZeroShutterLag public static final int CAPTURE_MODE_ZERO_SHUTTER_LAG = 2; // 0x2 + field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3 + field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2 + field public static final int ERROR_FILE_IO = 1; // 0x1 + field public static final int ERROR_INVALID_CAMERA = 4; // 0x4 + field public static final int ERROR_UNKNOWN = 0; // 0x0 + field public static final int FLASH_MODE_AUTO = 0; // 0x0 + field public static final int FLASH_MODE_OFF = 2; // 0x2 + field public static final int FLASH_MODE_ON = 1; // 0x1 + } + + public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder{ + ctor public ImageCapture.Builder(); + method public androidx.camera.core.ImageCapture build(); + method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int); + method public androidx.camera.core.ImageCapture.Builder setFlashMode(int); + method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor); + method public androidx.camera.core.ImageCapture.Builder setJpegQuality(@IntRange(from=1, to=100) int); + method public androidx.camera.core.ImageCapture.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector); + method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int); + method public androidx.camera.core.ImageCapture.Builder setTargetName(String); + method @Deprecated public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size); + method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int); + } + + public static final class ImageCapture.Metadata { + ctor public ImageCapture.Metadata(); + method public android.location.Location? getLocation(); + method public boolean isReversedHorizontal(); + method public boolean isReversedVertical(); + method public void setLocation(android.location.Location?); + method public void setReversedHorizontal(boolean); + method public void setReversedVertical(boolean); + } + + public abstract static class ImageCapture.OnImageCapturedCallback { + ctor public ImageCapture.OnImageCapturedCallback(); + method public void onCaptureSuccess(androidx.camera.core.ImageProxy); + method public void onError(androidx.camera.core.ImageCaptureException); + } + + public static interface ImageCapture.OnImageSavedCallback { + method public void onError(androidx.camera.core.ImageCaptureException); + method public void onImageSaved(androidx.camera.core.ImageCapture.OutputFileResults); + } + + public static final class ImageCapture.OutputFileOptions { + } + + public static final class ImageCapture.OutputFileOptions.Builder { + ctor public ImageCapture.OutputFileOptions.Builder(android.content.ContentResolver, android.net.Uri, android.content.ContentValues); + ctor public ImageCapture.OutputFileOptions.Builder(java.io.File); + ctor public ImageCapture.OutputFileOptions.Builder(java.io.OutputStream); + method public androidx.camera.core.ImageCapture.OutputFileOptions build(); + method public androidx.camera.core.ImageCapture.OutputFileOptions.Builder setMetadata(androidx.camera.core.ImageCapture.Metadata); + } + + public static class ImageCapture.OutputFileResults { + method public android.net.Uri? getSavedUri(); + } + + @RequiresApi(21) public class ImageCaptureException extends java.lang.Exception { + ctor public ImageCaptureException(int, String, Throwable?); + method public int getImageCaptureError(); + } + + @RequiresApi(21) public interface ImageInfo { + method public int getRotationDegrees(); + method public default android.graphics.Matrix getSensorToBufferTransformMatrix(); + method public long getTimestamp(); + } + + public interface ImageProcessor { + method public androidx.camera.core.ImageProcessor.Response process(androidx.camera.core.ImageProcessor.Request) throws androidx.camera.core.ProcessingException; + } + + public static interface ImageProcessor.Request { + method public androidx.camera.core.ImageProxy getInputImage(); + method public int getOutputFormat(); + } + + public static interface ImageProcessor.Response { + method public androidx.camera.core.ImageProxy getOutputImage(); + } + + @RequiresApi(21) public interface ImageProxy extends java.lang.AutoCloseable { + method public void close(); + method public android.graphics.Rect getCropRect(); + method public int getFormat(); + method public int getHeight(); + method @SuppressCompatibility @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage(); + method public androidx.camera.core.ImageInfo getImageInfo(); + method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes(); + method public int getWidth(); + method public void setCropRect(android.graphics.Rect?); + method public default android.graphics.Bitmap toBitmap(); + } + + public static interface ImageProxy.PlaneProxy { + method public java.nio.ByteBuffer getBuffer(); + method public int getPixelStride(); + method public int getRowStride(); + } + + @RequiresApi(21) public class InitializationException extends java.lang.Exception { + ctor public InitializationException(String?); + ctor public InitializationException(String?, Throwable?); + ctor public InitializationException(Throwable?); + } + + @RequiresApi(21) public class MeteringPoint { + method public float getSize(); + } + + @RequiresApi(21) public abstract class MeteringPointFactory { + method public final androidx.camera.core.MeteringPoint createPoint(float, float); + method public final androidx.camera.core.MeteringPoint createPoint(float, float, float); + method public static float getDefaultPointSize(); + } + + @RequiresApi(21) public class MirrorMode { + field public static final int MIRROR_MODE_OFF = 0; // 0x0 + field public static final int MIRROR_MODE_ON = 1; // 0x1 + field public static final int MIRROR_MODE_ON_FRONT_ONLY = 2; // 0x2 + } + + @RequiresApi(21) public final class Preview extends androidx.camera.core.UseCase { + method public androidx.camera.core.ResolutionInfo? getResolutionInfo(); + method public androidx.camera.core.resolutionselector.ResolutionSelector? getResolutionSelector(); + method public android.util.RangegetTargetFrameRate(); + method public int getTargetRotation(); + method @UiThread public void setSurfaceProvider(androidx.camera.core.Preview.SurfaceProvider?); + method @UiThread public void setSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.SurfaceProvider?); + method public void setTargetRotation(int); + } + + public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder{ + ctor public Preview.Builder(); + method public androidx.camera.core.Preview build(); + method public androidx.camera.core.Preview.Builder setResolutionSelector(androidx.camera.core.resolutionselector.ResolutionSelector); + method @Deprecated public androidx.camera.core.Preview.Builder setTargetAspectRatio(int); + method public androidx.camera.core.Preview.Builder setTargetFrameRate(android.util.Range); + method public androidx.camera.core.Preview.Builder setTargetName(String); + method @Deprecated public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size); + method public androidx.camera.core.Preview.Builder setTargetRotation(int); + } + + public static interface Preview.SurfaceProvider { + method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest); + } + + public class ProcessingException extends java.lang.Exception { + ctor public ProcessingException(); + } + + @RequiresApi(21) public class ResolutionInfo { + ctor public ResolutionInfo(android.util.Size, android.graphics.Rect, int); + method public android.graphics.Rect getCropRect(); + method public android.util.Size getResolution(); + method public int getRotationDegrees(); + } + + @RequiresApi(21) public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory { + ctor public SurfaceOrientedMeteringPointFactory(float, float); + ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase); + } + + public interface SurfaceOutput extends java.io.Closeable { + method public void close(); + method public android.util.Size getSize(); + method public android.view.Surface getSurface(java.util.concurrent.Executor, androidx.core.util.Consumer); + method public int getTargets(); + method public void updateTransformMatrix(float[], float[]); + } + + @com.google.auto.value.AutoValue public abstract static class SurfaceOutput.Event { + method public abstract int getEventCode(); + method public abstract androidx.camera.core.SurfaceOutput getSurfaceOutput(); + field public static final int EVENT_REQUEST_CLOSE = 0; // 0x0 + } + + public interface SurfaceProcessor { + method public void onInputSurface(androidx.camera.core.SurfaceRequest) throws androidx.camera.core.ProcessingException; + method public void onOutputSurface(androidx.camera.core.SurfaceOutput) throws androidx.camera.core.ProcessingException; + } + + @RequiresApi(21) public final class SurfaceRequest { + method public void addRequestCancellationListener(java.util.concurrent.Executor, Runnable); + method public void clearTransformationInfoListener(); + method public androidx.camera.core.DynamicRange getDynamicRange(); + method public android.util.Size getResolution(); + method public boolean invalidate(); + method public void provideSurface(android.view.Surface, java.util.concurrent.Executor, androidx.core.util.Consumer); + method public void setTransformationInfoListener(java.util.concurrent.Executor, androidx.camera.core.SurfaceRequest.TransformationInfoListener); + method public boolean willNotProvideSurface(); + } + + @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.Result { + method public abstract int getResultCode(); + method public abstract android.view.Surface getSurface(); + field public static final int RESULT_INVALID_SURFACE = 2; // 0x2 + field public static final int RESULT_REQUEST_CANCELLED = 1; // 0x1 + field public static final int RESULT_SURFACE_ALREADY_PROVIDED = 3; // 0x3 + field public static final int RESULT_SURFACE_USED_SUCCESSFULLY = 0; // 0x0 + field public static final int RESULT_WILL_NOT_PROVIDE_SURFACE = 4; // 0x4 + } + + @com.google.auto.value.AutoValue public abstract static class SurfaceRequest.TransformationInfo { + method public abstract android.graphics.Rect getCropRect(); + method public abstract int getRotationDegrees(); + } + + public static interface SurfaceRequest.TransformationInfoListener { + method public void onTransformationInfoUpdate(androidx.camera.core.SurfaceRequest.TransformationInfo); + } + + @RequiresApi(21) public class TorchState { + field public static final int OFF = 0; // 0x0 + field public static final int ON = 1; // 0x1 + } + + @RequiresApi(21) public abstract class UseCase { + method public static int snapToSurfaceRotation(@IntRange(from=0, to=359) int); + } + + @RequiresApi(21) public final class UseCaseGroup { + method public java.util.ListgetEffects(); + method public java.util.ListgetUseCases(); + 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.Listfilter(java.util.List + } + + @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; + } + +} +, int);
diff --git a/camera/camera-effects-still-portrait/api/1.3.0-beta03.txt b/camera/camera-effects-still-portrait/api/1.3.0-beta03.txt new file mode 100644 index 0000000..e6f50d0 --- /dev/null +++ b/camera/camera-effects-still-portrait/api/1.3.0-beta03.txt
@@ -0,0 +1 @@ +// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/api/res-1.3.0-beta03.txt b/camera/camera-effects-still-portrait/api/res-1.3.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/camera/camera-effects-still-portrait/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-effects-still-portrait/api/restricted_1.3.0-beta03.txt b/camera/camera-effects-still-portrait/api/restricted_1.3.0-beta03.txt new file mode 100644 index 0000000..e6f50d0 --- /dev/null +++ b/camera/camera-effects-still-portrait/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1 @@ +// Signature format: 4.0
diff --git a/camera/camera-effects/api/1.3.0-beta03.txt b/camera/camera-effects/api/1.3.0-beta03.txt new file mode 100644 index 0000000..e6f50d0 --- /dev/null +++ b/camera/camera-effects/api/1.3.0-beta03.txt
@@ -0,0 +1 @@ +// Signature format: 4.0
diff --git a/camera/camera-effects/api/res-1.3.0-beta03.txt b/camera/camera-effects/api/res-1.3.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/camera/camera-effects/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-effects/api/restricted_1.3.0-beta03.txt b/camera/camera-effects/api/restricted_1.3.0-beta03.txt new file mode 100644 index 0000000..e6f50d0 --- /dev/null +++ b/camera/camera-effects/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1 @@ +// Signature format: 4.0
diff --git a/camera/camera-extensions/api/1.3.0-beta03.txt b/camera/camera-extensions/api/1.3.0-beta03.txt new file mode 100644 index 0000000..5c6e740 --- /dev/null +++ b/camera/camera-extensions/api/1.3.0-beta03.txt
@@ -0,0 +1,22 @@ +// Signature format: 4.0 +package androidx.camera.extensions { + + @RequiresApi(21) public final class ExtensionMode { + field public static final int AUTO = 5; // 0x5 + field public static final int BOKEH = 1; // 0x1 + field public static final int FACE_RETOUCH = 4; // 0x4 + field public static final int HDR = 2; // 0x2 + field public static final int NIGHT = 3; // 0x3 + field public static final int NONE = 0; // 0x0 + } + + @RequiresApi(21) public final class ExtensionsManager { + method public android.util.Range? getEstimatedCaptureLatencyRange(androidx.camera.core.CameraSelector, int); + method public androidx.camera.core.CameraSelector getExtensionEnabledCameraSelector(androidx.camera.core.CameraSelector, int); + method public static com.google.common.util.concurrent.ListenableFuturegetInstanceAsync(android.content.Context, androidx.camera.core.CameraProvider); + method public boolean isExtensionAvailable(androidx.camera.core.CameraSelector, int); + method public boolean isImageAnalysisSupported(androidx.camera.core.CameraSelector, int); + } + +} +
diff --git a/camera/camera-extensions/api/res-1.3.0-beta03.txt b/camera/camera-extensions/api/res-1.3.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/camera/camera-extensions/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-extensions/api/restricted_1.3.0-beta03.txt b/camera/camera-extensions/api/restricted_1.3.0-beta03.txt new file mode 100644 index 0000000..5c6e740 --- /dev/null +++ b/camera/camera-extensions/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,22 @@ +// Signature format: 4.0 +package androidx.camera.extensions { + + @RequiresApi(21) public final class ExtensionMode { + field public static final int AUTO = 5; // 0x5 + field public static final int BOKEH = 1; // 0x1 + field public static final int FACE_RETOUCH = 4; // 0x4 + field public static final int HDR = 2; // 0x2 + field public static final int NIGHT = 3; // 0x3 + field public static final int NONE = 0; // 0x0 + } + + @RequiresApi(21) public final class ExtensionsManager { + method public android.util.Range? getEstimatedCaptureLatencyRange(androidx.camera.core.CameraSelector, int); + method public androidx.camera.core.CameraSelector getExtensionEnabledCameraSelector(androidx.camera.core.CameraSelector, int); + method public static com.google.common.util.concurrent.ListenableFuturegetInstanceAsync(android.content.Context, androidx.camera.core.CameraProvider); + method public boolean isExtensionAvailable(androidx.camera.core.CameraSelector, int); + method public boolean isImageAnalysisSupported(androidx.camera.core.CameraSelector, int); + } + +} +
diff --git a/camera/camera-lifecycle/api/1.3.0-beta03.txt b/camera/camera-lifecycle/api/1.3.0-beta03.txt new file mode 100644 index 0000000..d0621cb --- /dev/null +++ b/camera/camera-lifecycle/api/1.3.0-beta03.txt
@@ -0,0 +1,23 @@ +// Signature format: 4.0 +package androidx.camera.lifecycle { + + @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraProviderConfiguration { + } + + @RequiresApi(21) public final class ProcessCameraProvider implements androidx.camera.core.CameraProvider { + method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...); + method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup); + method @MainThread public androidx.camera.core.ConcurrentCamera bindToLifecycle(java.util.List); + method @SuppressCompatibility @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig); + method public java.util.ListgetAvailableCameraInfos(); + method public java.util.List!> getAvailableConcurrentCameraInfos(); + method public static com.google.common.util.concurrent.ListenableFuturegetInstance(android.content.Context); + method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException; + method public boolean isBound(androidx.camera.core.UseCase); + method @MainThread public boolean isConcurrentCameraModeOn(); + method @MainThread public void unbind(androidx.camera.core.UseCase!...); + method @MainThread public void unbindAll(); + } + +} +
diff --git a/camera/camera-lifecycle/api/res-1.3.0-beta03.txt b/camera/camera-lifecycle/api/res-1.3.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/camera/camera-lifecycle/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-lifecycle/api/restricted_1.3.0-beta03.txt b/camera/camera-lifecycle/api/restricted_1.3.0-beta03.txt new file mode 100644 index 0000000..d0621cb --- /dev/null +++ b/camera/camera-lifecycle/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,23 @@ +// Signature format: 4.0 +package androidx.camera.lifecycle { + + @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraProviderConfiguration { + } + + @RequiresApi(21) public final class ProcessCameraProvider implements androidx.camera.core.CameraProvider { + method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...); + method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup); + method @MainThread public androidx.camera.core.ConcurrentCamera bindToLifecycle(java.util.List); + method @SuppressCompatibility @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig); + method public java.util.ListgetAvailableCameraInfos(); + method public java.util.List!> getAvailableConcurrentCameraInfos(); + method public static com.google.common.util.concurrent.ListenableFuturegetInstance(android.content.Context); + method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException; + method public boolean isBound(androidx.camera.core.UseCase); + method @MainThread public boolean isConcurrentCameraModeOn(); + method @MainThread public void unbind(androidx.camera.core.UseCase!...); + method @MainThread public void unbindAll(); + } + +} +
diff --git a/camera/camera-mlkit-vision/api/1.3.0-beta03.txt b/camera/camera-mlkit-vision/api/1.3.0-beta03.txt new file mode 100644 index 0000000..0599c25 --- /dev/null +++ b/camera/camera-mlkit-vision/api/1.3.0-beta03.txt
@@ -0,0 +1,20 @@ +// Signature format: 4.0 +package androidx.camera.mlkit.vision { + + @RequiresApi(21) public class MlKitAnalyzer implements androidx.camera.core.ImageAnalysis.Analyzer { + ctor public MlKitAnalyzer(java.util.List!>, int, java.util.concurrent.Executor, androidx.core.util.Consumer + method public final void analyze(androidx.camera.core.ImageProxy); + method public final android.util.Size getDefaultTargetResolution(); + method public final int getTargetCoordinateSystem(); + method public final void updateTransform(android.graphics.Matrix?); + } + + public static final class MlKitAnalyzer.Result { + ctor public MlKitAnalyzer.Result(java.util.Map); !,java.lang.Object!>, long, java.util.Map + method public Throwable? getThrowable(com.google.mlkit.vision.interfaces.Detector>); + method public long getTimestamp(); + method public!,java.lang.Throwable!>); T? getValue(com.google.mlkit.vision.interfaces.Detector + } + +} +);
diff --git a/camera/camera-mlkit-vision/api/res-1.3.0-beta03.txt b/camera/camera-mlkit-vision/api/res-1.3.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/camera/camera-mlkit-vision/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-mlkit-vision/api/restricted_1.3.0-beta03.txt b/camera/camera-mlkit-vision/api/restricted_1.3.0-beta03.txt new file mode 100644 index 0000000..0599c25 --- /dev/null +++ b/camera/camera-mlkit-vision/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,20 @@ +// Signature format: 4.0 +package androidx.camera.mlkit.vision { + + @RequiresApi(21) public class MlKitAnalyzer implements androidx.camera.core.ImageAnalysis.Analyzer { + ctor public MlKitAnalyzer(java.util.List!>, int, java.util.concurrent.Executor, androidx.core.util.Consumer + method public final void analyze(androidx.camera.core.ImageProxy); + method public final android.util.Size getDefaultTargetResolution(); + method public final int getTargetCoordinateSystem(); + method public final void updateTransform(android.graphics.Matrix?); + } + + public static final class MlKitAnalyzer.Result { + ctor public MlKitAnalyzer.Result(java.util.Map); !,java.lang.Object!>, long, java.util.Map + method public Throwable? getThrowable(com.google.mlkit.vision.interfaces.Detector>); + method public long getTimestamp(); + method public!,java.lang.Throwable!>); T? getValue(com.google.mlkit.vision.interfaces.Detector + } + +} +);
diff --git a/camera/camera-video/api/1.3.0-beta03.txt b/camera/camera-video/api/1.3.0-beta03.txt new file mode 100644 index 0000000..b9cc77a --- /dev/null +++ b/camera/camera-video/api/1.3.0-beta03.txt
@@ -0,0 +1,207 @@ +// Signature format: 4.0 +package androidx.camera.video { + + @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class AudioStats { + method public abstract int getAudioState(); + method public abstract Throwable? getErrorCause(); + method public boolean hasAudio(); + method public boolean hasError(); + field public static final int AUDIO_STATE_ACTIVE = 0; // 0x0 + field public static final int AUDIO_STATE_DISABLED = 1; // 0x1 + field public static final int AUDIO_STATE_ENCODER_ERROR = 3; // 0x3 + field public static final int AUDIO_STATE_MUTED = 5; // 0x5 + field public static final int AUDIO_STATE_SOURCE_ERROR = 4; // 0x4 + field public static final int AUDIO_STATE_SOURCE_SILENCED = 2; // 0x2 + } + + @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalPersistentRecording { + } + + @RequiresApi(21) public class FallbackStrategy { + method public static androidx.camera.video.FallbackStrategy higherQualityOrLowerThan(androidx.camera.video.Quality); + method public static androidx.camera.video.FallbackStrategy higherQualityThan(androidx.camera.video.Quality); + method public static androidx.camera.video.FallbackStrategy lowerQualityOrHigherThan(androidx.camera.video.Quality); + method public static androidx.camera.video.FallbackStrategy lowerQualityThan(androidx.camera.video.Quality); + } + + @RequiresApi(21) public final class FileDescriptorOutputOptions extends androidx.camera.video.OutputOptions { + method public android.os.ParcelFileDescriptor getParcelFileDescriptor(); + } + + @RequiresApi(21) public static final class FileDescriptorOutputOptions.Builder { + ctor public FileDescriptorOutputOptions.Builder(android.os.ParcelFileDescriptor); + method public androidx.camera.video.FileDescriptorOutputOptions build(); + method public androidx.camera.video.FileDescriptorOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long); + method public androidx.camera.video.FileDescriptorOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long); + method public androidx.camera.video.FileDescriptorOutputOptions.Builder setLocation(android.location.Location?); + } + + @RequiresApi(21) public final class FileOutputOptions extends androidx.camera.video.OutputOptions { + method public java.io.File getFile(); + } + + @RequiresApi(21) public static final class FileOutputOptions.Builder { + ctor public FileOutputOptions.Builder(java.io.File); + method public androidx.camera.video.FileOutputOptions build(); + method public androidx.camera.video.FileOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long); + method public androidx.camera.video.FileOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long); + method public androidx.camera.video.FileOutputOptions.Builder setLocation(android.location.Location?); + } + + @RequiresApi(21) public final class MediaStoreOutputOptions extends androidx.camera.video.OutputOptions { + method public android.net.Uri getCollectionUri(); + method public android.content.ContentResolver getContentResolver(); + method public android.content.ContentValues getContentValues(); + field public static final android.content.ContentValues EMPTY_CONTENT_VALUES; + } + + public static final class MediaStoreOutputOptions.Builder { + ctor public MediaStoreOutputOptions.Builder(android.content.ContentResolver, android.net.Uri); + method public androidx.camera.video.MediaStoreOutputOptions build(); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setContentValues(android.content.ContentValues); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setLocation(android.location.Location?); + } + + @RequiresApi(21) public abstract class OutputOptions { + method @IntRange(from=0) public long getDurationLimitMillis(); + method @IntRange(from=0) public long getFileSizeLimit(); + method public android.location.Location? getLocation(); + field public static final int DURATION_UNLIMITED = 0; // 0x0 + field public static final int FILE_SIZE_UNLIMITED = 0; // 0x0 + } + + @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class OutputResults { + ctor public OutputResults(); + method public abstract android.net.Uri getOutputUri(); + } + + @RequiresApi(21) public final class PendingRecording { + method @SuppressCompatibility @androidx.camera.video.ExperimentalPersistentRecording public androidx.camera.video.PendingRecording asPersistentRecording(); + method @CheckResult public androidx.camera.video.Recording start(java.util.concurrent.Executor, androidx.core.util.Consumer); + method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public androidx.camera.video.PendingRecording withAudioEnabled(); + } + + @RequiresApi(21) public class Quality { + field public static final androidx.camera.video.Quality FHD; + field public static final androidx.camera.video.Quality HD; + field public static final androidx.camera.video.Quality HIGHEST; + field public static final androidx.camera.video.Quality LOWEST; + field public static final androidx.camera.video.Quality SD; + field public static final androidx.camera.video.Quality UHD; + } + + @RequiresApi(21) public final class QualitySelector { + method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality); + method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality, androidx.camera.video.FallbackStrategy); + method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List); + method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List, androidx.camera.video.FallbackStrategy); + method public static android.util.Size? getResolution(androidx.camera.core.CameraInfo, androidx.camera.video.Quality); + method @Deprecated public static java.util.ListgetSupportedQualities(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.SetgetSupportedDynamicRanges(); + method public java.util.ListgetSupportedQualities(androidx.camera.core.DynamicRange); + method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange); + } + + @RequiresApi(21) public final class VideoCaptureextends androidx.camera.core.UseCase { + method public androidx.camera.core.DynamicRange getDynamicRange(); + method public int getMirrorMode(); + method public T getOutput(); + method public android.util.RangegetTargetFrameRate(); + method public int getTargetRotation(); + method public void setTargetRotation(int); + method public staticandroidx.camera.video.VideoCapture + } + + @RequiresApi(21) public static final class VideoCapture.BuilderwithOutput(T); implements androidx.camera.core.ExtendableBuilder + ctor public VideoCapture.Builder(T); + method public androidx.camera.video.VideoCapture{ build(); + method public androidx.camera.video.VideoCapture.BuildersetDynamicRange(androidx.camera.core.DynamicRange); + method public androidx.camera.video.VideoCapture.BuildersetMirrorMode(int); + method public androidx.camera.video.VideoCapture.BuildersetTargetFrameRate(android.util.Range + method public androidx.camera.video.VideoCapture.Builder); setTargetRotation(int); + } + + @RequiresApi(21) public interface VideoOutput { + method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest); + } + + @RequiresApi(21) public abstract class VideoRecordEvent { + method public androidx.camera.video.OutputOptions getOutputOptions(); + method public androidx.camera.video.RecordingStats getRecordingStats(); + } + + @RequiresApi(21) public static final class VideoRecordEvent.Finalize extends androidx.camera.video.VideoRecordEvent { + method public Throwable? getCause(); + method public int getError(); + method public androidx.camera.video.OutputResults getOutputResults(); + method public boolean hasError(); + field public static final int ERROR_DURATION_LIMIT_REACHED = 9; // 0x9 + field public static final int ERROR_ENCODING_FAILED = 6; // 0x6 + field public static final int ERROR_FILE_SIZE_LIMIT_REACHED = 2; // 0x2 + field public static final int ERROR_INSUFFICIENT_STORAGE = 3; // 0x3 + field public static final int ERROR_INVALID_OUTPUT_OPTIONS = 5; // 0x5 + field public static final int ERROR_NONE = 0; // 0x0 + field public static final int ERROR_NO_VALID_DATA = 8; // 0x8 + field public static final int ERROR_RECORDER_ERROR = 7; // 0x7 + field public static final int ERROR_RECORDING_GARBAGE_COLLECTED = 10; // 0xa + field public static final int ERROR_SOURCE_INACTIVE = 4; // 0x4 + field public static final int ERROR_UNKNOWN = 1; // 0x1 + } + + @RequiresApi(21) public static final class VideoRecordEvent.Pause extends androidx.camera.video.VideoRecordEvent { + } + + @RequiresApi(21) public static final class VideoRecordEvent.Resume extends androidx.camera.video.VideoRecordEvent { + } + + @RequiresApi(21) public static final class VideoRecordEvent.Start extends androidx.camera.video.VideoRecordEvent { + } + + @RequiresApi(21) public static final class VideoRecordEvent.Status extends androidx.camera.video.VideoRecordEvent { + } + +} +
diff --git a/camera/camera-video/api/res-1.3.0-beta03.txt b/camera/camera-video/api/res-1.3.0-beta03.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/camera/camera-video/api/res-1.3.0-beta03.txt
diff --git a/camera/camera-video/api/restricted_1.3.0-beta03.txt b/camera/camera-video/api/restricted_1.3.0-beta03.txt new file mode 100644 index 0000000..b9cc77a --- /dev/null +++ b/camera/camera-video/api/restricted_1.3.0-beta03.txt
@@ -0,0 +1,207 @@ +// Signature format: 4.0 +package androidx.camera.video { + + @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class AudioStats { + method public abstract int getAudioState(); + method public abstract Throwable? getErrorCause(); + method public boolean hasAudio(); + method public boolean hasError(); + field public static final int AUDIO_STATE_ACTIVE = 0; // 0x0 + field public static final int AUDIO_STATE_DISABLED = 1; // 0x1 + field public static final int AUDIO_STATE_ENCODER_ERROR = 3; // 0x3 + field public static final int AUDIO_STATE_MUTED = 5; // 0x5 + field public static final int AUDIO_STATE_SOURCE_ERROR = 4; // 0x4 + field public static final int AUDIO_STATE_SOURCE_SILENCED = 2; // 0x2 + } + + @SuppressCompatibility @RequiresOptIn @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalPersistentRecording { + } + + @RequiresApi(21) public class FallbackStrategy { + method public static androidx.camera.video.FallbackStrategy higherQualityOrLowerThan(androidx.camera.video.Quality); + method public static androidx.camera.video.FallbackStrategy higherQualityThan(androidx.camera.video.Quality); + method public static androidx.camera.video.FallbackStrategy lowerQualityOrHigherThan(androidx.camera.video.Quality); + method public static androidx.camera.video.FallbackStrategy lowerQualityThan(androidx.camera.video.Quality); + } + + @RequiresApi(21) public final class FileDescriptorOutputOptions extends androidx.camera.video.OutputOptions { + method public android.os.ParcelFileDescriptor getParcelFileDescriptor(); + } + + @RequiresApi(21) public static final class FileDescriptorOutputOptions.Builder { + ctor public FileDescriptorOutputOptions.Builder(android.os.ParcelFileDescriptor); + method public androidx.camera.video.FileDescriptorOutputOptions build(); + method public androidx.camera.video.FileDescriptorOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long); + method public androidx.camera.video.FileDescriptorOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long); + method public androidx.camera.video.FileDescriptorOutputOptions.Builder setLocation(android.location.Location?); + } + + @RequiresApi(21) public final class FileOutputOptions extends androidx.camera.video.OutputOptions { + method public java.io.File getFile(); + } + + @RequiresApi(21) public static final class FileOutputOptions.Builder { + ctor public FileOutputOptions.Builder(java.io.File); + method public androidx.camera.video.FileOutputOptions build(); + method public androidx.camera.video.FileOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long); + method public androidx.camera.video.FileOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long); + method public androidx.camera.video.FileOutputOptions.Builder setLocation(android.location.Location?); + } + + @RequiresApi(21) public final class MediaStoreOutputOptions extends androidx.camera.video.OutputOptions { + method public android.net.Uri getCollectionUri(); + method public android.content.ContentResolver getContentResolver(); + method public android.content.ContentValues getContentValues(); + field public static final android.content.ContentValues EMPTY_CONTENT_VALUES; + } + + public static final class MediaStoreOutputOptions.Builder { + ctor public MediaStoreOutputOptions.Builder(android.content.ContentResolver, android.net.Uri); + method public androidx.camera.video.MediaStoreOutputOptions build(); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setContentValues(android.content.ContentValues); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setDurationLimitMillis(@IntRange(from=0) long); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setFileSizeLimit(@IntRange(from=0) long); + method public androidx.camera.video.MediaStoreOutputOptions.Builder setLocation(android.location.Location?); + } + + @RequiresApi(21) public abstract class OutputOptions { + method @IntRange(from=0) public long getDurationLimitMillis(); + method @IntRange(from=0) public long getFileSizeLimit(); + method public android.location.Location? getLocation(); + field public static final int DURATION_UNLIMITED = 0; // 0x0 + field public static final int FILE_SIZE_UNLIMITED = 0; // 0x0 + } + + @RequiresApi(21) @com.google.auto.value.AutoValue public abstract class OutputResults { + ctor public OutputResults(); + method public abstract android.net.Uri getOutputUri(); + } + + @RequiresApi(21) public final class PendingRecording { + method @SuppressCompatibility @androidx.camera.video.ExperimentalPersistentRecording public androidx.camera.video.PendingRecording asPersistentRecording(); + method @CheckResult public androidx.camera.video.Recording start(java.util.concurrent.Executor, androidx.core.util.Consumer); + method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public androidx.camera.video.PendingRecording withAudioEnabled(); + } + + @RequiresApi(21) public class Quality { + field public static final androidx.camera.video.Quality FHD; + field public static final androidx.camera.video.Quality HD; + field public static final androidx.camera.video.Quality HIGHEST; + field public static final androidx.camera.video.Quality LOWEST; + field public static final androidx.camera.video.Quality SD; + field public static final androidx.camera.video.Quality UHD; + } + + @RequiresApi(21) public final class QualitySelector { + method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality); + method public static androidx.camera.video.QualitySelector from(androidx.camera.video.Quality, androidx.camera.video.FallbackStrategy); + method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List); + method public static androidx.camera.video.QualitySelector fromOrderedList(java.util.List, androidx.camera.video.FallbackStrategy); + method public static android.util.Size? getResolution(androidx.camera.core.CameraInfo, androidx.camera.video.Quality); + method @Deprecated public static java.util.ListgetSupportedQualities(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.SetgetSupportedDynamicRanges(); + method public java.util.ListgetSupportedQualities(androidx.camera.core.DynamicRange); + method public boolean isQualitySupported(androidx.camera.video.Quality, androidx.camera.core.DynamicRange); + } + + @RequiresApi(21) public final class VideoCaptureextends androidx.camera.core.UseCase { + method public androidx.camera.core.DynamicRange getDynamicRange(); + method public int getMirrorMode(); + method public T getOutput(); + method public android.util.RangegetTargetFrameRate(); + method public int getTargetRotation(); + method public void setTargetRotation(int); + method public staticandroidx.camera.video.VideoCapture + } + + @RequiresApi(21) public static final class VideoCapture.BuilderwithOutput(T); implements androidx.camera.core.ExtendableBuilder + ctor public VideoCapture.Builder(T); + method public androidx.camera.video.VideoCapture{ build(); + method public androidx.camera.video.VideoCapture.BuildersetDynamicRange(androidx.camera.core.DynamicRange); + method public androidx.camera.video.VideoCapture.BuildersetMirrorMode(int); + method public androidx.camera.video.VideoCapture.BuildersetTargetFrameRate(android.util.Range + method public androidx.camera.video.VideoCapture.Builder); setTargetRotation(int); + } + + @RequiresApi(21) public interface VideoOutput { + method public void onSurfaceRequested(androidx.camera.core.SurfaceRequest); + } + + @RequiresApi(21) public abstract class VideoRecordEvent { + method public androidx.camera.video.OutputOptions getOutputOptions(); + method public androidx.camera.video.RecordingStats getRecordingStats(); + } + + @RequiresApi(21) public static final class VideoRecordEvent.Finalize extends androidx.camera.video.VideoRecordEvent { + method public Throwable? getCause(); + method public int getError(); + method public androidx.camera.video.OutputResults getOutputResults(); + method public boolean hasError(); + field public static final int ERROR_DURATION_LIMIT_REACHED = 9; // 0x9 + field public static final int ERROR_ENCODING_FAILED = 6; // 0x6 + field public static final int ERROR_FILE_SIZE_LIMIT_REACHED = 2; // 0x2 + field public static final int ERROR_INSUFFICIENT_STORAGE = 3; // 0x3 + field public static final int ERROR_INVALID_OUTPUT_OPTIONS = 5; // 0x5 + field public static final int ERROR_NONE = 0; // 0x0 + field public static final int ERROR_NO_VALID_DATA = 8; // 0x8 + field public static final int ERROR_RECORDER_ERROR = 7; // 0x7 + field public static final int ERROR_RECORDING_GARBAGE_COLLECTED = 10; // 0xa + field public static final int ERROR_SOURCE_INACTIVE = 4; // 0x4 + field public static final int ERROR_UNKNOWN = 1; // 0x1 + } + + @RequiresApi(21) public static final class VideoRecordEvent.Pause extends androidx.camera.video.VideoRecordEvent { + } + + @RequiresApi(21) public static final class VideoRecordEvent.Resume extends androidx.camera.video.VideoRecordEvent { + } + + @RequiresApi(21) public static final class VideoRecordEvent.Start extends androidx.camera.video.VideoRecordEvent { + } + + @RequiresApi(21) public static final class VideoRecordEvent.Status extends androidx.camera.video.VideoRecordEvent { + } + +} +
diff --git a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java index 735a24e..5abd8cf 100644 --- a/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java +++ b/camera/camera-video/src/main/java/androidx/camera/video/internal/compat/quirk/MediaCodecInfoReportIncorrectInfoQuirk.java
@@ -42,6 +42,8 @@ * Bug Id: 192431846, 199582287, 218841498, 203481899, 216583006, 278843124, 278855948 * Description: Quirk which denotes {@link MediaCodecInfo} queried by {@link MediaCodecList} * returns incorrect info. + *+ * * On Nokia 1, {@link CamcorderProfile} indicates it can support resolutions * 1280x720 and 640x480 for video codec type * {@link android.media.MediaRecorder.VideoEncoder#MPEG_4_SP}, which maps to @@ -54,8 +56,14 @@ * "video/mp4v-es" with 1280x720 or 640x480 can be used to record video. So the * maximum supported resolution 174x174 is probably incorrect for * "video/mp4v-es" and doesn't make sense. See b/192431846#comment3. + * + * * Motc C, X650 and LG-X230 have the same problem as Nokia 1. See b/199582287 + * + * * Positivo Twist 2 Pro have the same problem as Nokia 1. See b/218841498 + * + * * On Huawei Mate9, {@link CamcorderProfile} indicates it can support * resolutions 3840x2160 for video codec type * {@link android.media.MediaRecorder.VideoEncoder#HEVC}, but the current video @@ -65,19 +73,30 @@ * unsupported resolution for 3840x2160, it only support 3840x2112. By * experimental result, H.264 + 3840x2160 can be used to record video on this * device. Hence use quirk to workaround this case. See b/203481899#comment2. - * @link MediaCodecInfo} searched by {@link MediaCodecList#getCodecInfos()} + * + * + * On Redmi Note 8 Pro, {@link CamcorderProfile} indicates it can support + * 3840x2160, but {@link MediaCodecInfo.VideoCapabilities#isSizeSupported} + * returns {@code false} for 3840x2160. By experimental result, 3840x2160 can be + * used to record video on this device. See b/293827733. + * + * + * {@link MediaCodecInfo} searched by {@link MediaCodecList#getCodecInfos()} * shows the maximum supported resolution of the AVC encoder is 1920x1072. * However, the 1920x1080 option can be successfully configured properly. - * See b/216583006, b/278843124, b/278855948. - * Device(s): Nokia 1, Motc C, X650, LG-X230, Positivo Twist 2 Pro, Huawei Mate9, Redmi note 4 - * , LG K10 LTE K430, Samsung Galaxy A03 Core, Vivo Y75, Realme C11 2021 + * See b/216583006, b/278843124, b/278855948, b/293827733. + * + * + * Device(s): Nokia 1, Motc C, X650, LG-X230, Positivo Twist 2 Pro, Huawei Mate9, + * Redmi Note 8 Pro, Redmi Note 4, Redmi Note 9, LG K10 LTE K430, + * Samsung Galaxy A03 Core, Vivo Y75, Realme C11 2021 */ @RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java public class MediaCodecInfoReportIncorrectInfoQuirk implements Quirk { static boolean load() { return isNokia1() || isMotoC() || isX650() || isX230() || isHuaweiMate9() - || isPositivoTwist2Pro() || isFHDProblematicDevice(); + || isRedmiNote8Pro() || isPositivoTwist2Pro() || isFHDProblematicDevice(); } private static boolean isNokia1() { @@ -101,6 +120,11 @@ return "Huawei".equalsIgnoreCase(Build.BRAND) && "mha-l29".equalsIgnoreCase(Build.MODEL); } + private static boolean isRedmiNote8Pro() { + return "Redmi".equalsIgnoreCase(Build.BRAND) && "Redmi Note 8 Pro".equalsIgnoreCase( + Build.MODEL); + } + private static boolean isPositivoTwist2Pro() { return "positivo".equalsIgnoreCase(Build.BRAND) && "twist 2 pro".equalsIgnoreCase( Build.MODEL); @@ -109,6 +133,7 @@ public static final List
INCORRECT_FHD_PROFILE_MODEL_LIST = Arrays.asList( "lg-k430", "redmi note 4", + "m2003j15sc", // Redmi Note 9 "rmx3231", "v2117", "sm-a032f", @@ -121,7 +146,7 @@ MediaFormatResolver formatResolver = new MediaFormatResolver(mediaFormat); if (isNokia1() || isMotoC() || isX650() || isX230() || isPositivoTwist2Pro()) { return formatResolver.isMpeg4(); - } else if (isHuaweiMate9()) { + } else if (isHuaweiMate9() || isRedmiNote8Pro()) { return formatResolver.isVideo() && formatResolver.isSize(3840, 2160); } else if (isFHDProblematicDevice()) { return formatResolver.isAvc() && formatResolver.isSize(1920, 1080);
diff --git a/camera/camera-view/api/1.3.0-beta03.txt b/camera/camera-view/api/1.3.0-beta03.txt new file mode 100644 index 0000000..6184aeb --- /dev/null +++ b/camera/camera-view/api/1.3.0-beta03.txt
@@ -0,0 +1,173 @@ +// Signature format: 4.0 +package androidx.camera.view { + + @RequiresApi(21) public abstract class CameraController { + method @MainThread public void clearEffects(); + method @MainThread public void clearImageAnalysisAnalyzer(); + method @MainThread public com.google.common.util.concurrent.ListenableFutureenableTorch(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.ListenableFuturegetInitializationFuture(); + method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize(); + method @MainThread public androidx.lifecycle.LiveDatagetTapToFocusState(); + method @MainThread public androidx.lifecycle.LiveDatagetTorchState(); + method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector(); + method @MainThread public androidx.lifecycle.LiveDatagetZoomState(); + method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector); + method @MainThread public boolean isImageAnalysisEnabled(); + method @MainThread public boolean isImageCaptureEnabled(); + method @MainThread public boolean isPinchToZoomEnabled(); + method @MainThread public boolean isRecording(); + method @MainThread public boolean isTapToFocusEnabled(); + method @MainThread public boolean isVideoCaptureEnabled(); + method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector); + method @MainThread public void setEffects(java.util.Set); + method @MainThread public void setEnabledUseCases(int); + method @MainThread public void setImageAnalysisAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer); + method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?); + method @MainThread public void setImageAnalysisBackpressureStrategy(int); + method @MainThread public void setImageAnalysisImageQueueDepth(int); + method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?); + method @MainThread public void setImageCaptureFlashMode(int); + method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?); + method @MainThread public void setImageCaptureMode(int); + method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?); + method @MainThread public com.google.common.util.concurrent.ListenableFuturesetLinearZoom(@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.ListenableFuturesetZoomRatio(float); + method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer); + method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer); + method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer); + method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback); + method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback); + field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1 + field public static final int IMAGE_ANALYSIS = 2; // 0x2 + field public static final int IMAGE_CAPTURE = 1; // 0x1 + field public static final int TAP_TO_FOCUS_FAILED = 4; // 0x4 + field public static final int TAP_TO_FOCUS_FOCUSED = 2; // 0x2 + field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3 + field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0 + field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1 + field public static final int VIDEO_CAPTURE = 4; // 0x4 + } + + @RequiresApi(21) public static final class CameraController.OutputSize { + ctor public CameraController.OutputSize(android.util.Size); + ctor public CameraController.OutputSize(int); + method public int getAspectRatio(); + method public android.util.Size? getResolution(); + field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff + } + + @RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController { + ctor public LifecycleCameraController(android.content.Context); + method @MainThread public void bindToLifecycle(androidx.lifecycle.LifecycleOwner); + method @MainThread public void unbind(); + } + + @RequiresApi(21) public final class PreviewView extends android.widget.FrameLayout { + ctor @UiThread public PreviewView(android.content.Context); + ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?); + ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int); + ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int, int); + method @UiThread public android.graphics.Bitmap? getBitmap(); + method @UiThread public androidx.camera.view.CameraController? getController(); + method @UiThread public androidx.camera.view.PreviewView.ImplementationMode getImplementationMode(); + method @UiThread public androidx.camera.core.MeteringPointFactory getMeteringPointFactory(); + method @SuppressCompatibility public androidx.camera.view.transform.OutputTransform? getOutputTransform(); + method public androidx.lifecycle.LiveDatagetPreviewStreamState(); + 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.ListenableFutureenableTorch(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.ListenableFuturegetInitializationFuture(); + method @MainThread public androidx.camera.view.CameraController.OutputSize? getPreviewTargetSize(); + method @MainThread public androidx.lifecycle.LiveDatagetTapToFocusState(); + method @MainThread public androidx.lifecycle.LiveDatagetTorchState(); + method @MainThread public androidx.camera.video.QualitySelector getVideoCaptureQualitySelector(); + method @MainThread public androidx.lifecycle.LiveDatagetZoomState(); + method @MainThread public boolean hasCamera(androidx.camera.core.CameraSelector); + method @MainThread public boolean isImageAnalysisEnabled(); + method @MainThread public boolean isImageCaptureEnabled(); + method @MainThread public boolean isPinchToZoomEnabled(); + method @MainThread public boolean isRecording(); + method @MainThread public boolean isTapToFocusEnabled(); + method @MainThread public boolean isVideoCaptureEnabled(); + method @MainThread public void setCameraSelector(androidx.camera.core.CameraSelector); + method @MainThread public void setEffects(java.util.Set); + method @MainThread public void setEnabledUseCases(int); + method @MainThread public void setImageAnalysisAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer); + method @MainThread public void setImageAnalysisBackgroundExecutor(java.util.concurrent.Executor?); + method @MainThread public void setImageAnalysisBackpressureStrategy(int); + method @MainThread public void setImageAnalysisImageQueueDepth(int); + method @MainThread public void setImageAnalysisTargetSize(androidx.camera.view.CameraController.OutputSize?); + method @MainThread public void setImageCaptureFlashMode(int); + method @MainThread public void setImageCaptureIoExecutor(java.util.concurrent.Executor?); + method @MainThread public void setImageCaptureMode(int); + method @MainThread public void setImageCaptureTargetSize(androidx.camera.view.CameraController.OutputSize?); + method @MainThread public com.google.common.util.concurrent.ListenableFuturesetLinearZoom(@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.ListenableFuturesetZoomRatio(float); + method @MainThread @RequiresApi(26) public androidx.camera.video.Recording startRecording(androidx.camera.video.FileDescriptorOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer); + method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.FileOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer); + method @MainThread public androidx.camera.video.Recording startRecording(androidx.camera.video.MediaStoreOutputOptions, androidx.camera.view.video.AudioConfig, java.util.concurrent.Executor, androidx.core.util.Consumer); + method @MainThread public void takePicture(androidx.camera.core.ImageCapture.OutputFileOptions, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback); + method @MainThread public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback); + field public static final int COORDINATE_SYSTEM_VIEW_REFERENCED = 1; // 0x1 + field public static final int IMAGE_ANALYSIS = 2; // 0x2 + field public static final int IMAGE_CAPTURE = 1; // 0x1 + field public static final int TAP_TO_FOCUS_FAILED = 4; // 0x4 + field public static final int TAP_TO_FOCUS_FOCUSED = 2; // 0x2 + field public static final int TAP_TO_FOCUS_NOT_FOCUSED = 3; // 0x3 + field public static final int TAP_TO_FOCUS_NOT_STARTED = 0; // 0x0 + field public static final int TAP_TO_FOCUS_STARTED = 1; // 0x1 + field public static final int VIDEO_CAPTURE = 4; // 0x4 + } + + @RequiresApi(21) public static final class CameraController.OutputSize { + ctor public CameraController.OutputSize(android.util.Size); + ctor public CameraController.OutputSize(int); + method public int getAspectRatio(); + method public android.util.Size? getResolution(); + field public static final int UNASSIGNED_ASPECT_RATIO = -1; // 0xffffffff + } + + @RequiresApi(21) public final class LifecycleCameraController extends androidx.camera.view.CameraController { + ctor public LifecycleCameraController(android.content.Context); + method @MainThread public void bindToLifecycle(androidx.lifecycle.LifecycleOwner); + method @MainThread public void unbind(); + } + + @RequiresApi(21) public final class PreviewView extends android.widget.FrameLayout { + ctor @UiThread public PreviewView(android.content.Context); + ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?); + ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int); + ctor @UiThread public PreviewView(android.content.Context, android.util.AttributeSet?, int, int); + method @UiThread public android.graphics.Bitmap? getBitmap(); + method @UiThread public androidx.camera.view.CameraController? getController(); + method @UiThread public androidx.camera.view.PreviewView.ImplementationMode getImplementationMode(); + method @UiThread public androidx.camera.core.MeteringPointFactory getMeteringPointFactory(); + method @SuppressCompatibility public androidx.camera.view.transform.OutputTransform? getOutputTransform(); + method public androidx.lifecycle.LiveDatagetPreviewStreamState(); + 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.ListenableFuturerequestSurfaceAsync(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.ListenableFuturerequestSurfaceAsync(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 ArrayMapextends androidx.collection.SimpleArrayMap + 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.Setimplements java.util.Map { !> entrySet(); + method public V! get(Object?); + method public java.util.SetkeySet(); + 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.Collectionvalues(); + } + + public final class ArrayMapKt { + method public static inlineandroidx.collection.ArrayMap + method public staticarrayMapOf(); androidx.collection.ArrayMap + } + + public final class ArraySetarrayMapOf(kotlin.Pair extends K,? extends V>... pairs); implements java.util.Collection + 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.Collectionkotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set { 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.Iteratoriterator(); + method public boolean remove(E element); + method public boolean removeAll(androidx.collection.ArraySet extends E> array); + method public boolean removeAll(java.util.Collectionelements); + method public E removeAt(int index); + method public boolean retainAll(java.util.Collectionelements); + method public Object![] toArray(); + method publicT![] toArray(T![] array); + method public E valueAt(int index); + property public int size; + } + + public final class ArraySetKt { + method public static inlineandroidx.collection.ArraySet + method public staticarraySetOf(); androidx.collection.ArraySet + } + + public final class CircularArrayarraySetOf(T?... values); { + 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 LongSparseArrayimplements 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.LongSparseArrayclone(); + 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 operatorboolean contains(androidx.collection.LongSparseArray + method public static inline, long key); void forEach(androidx.collection.LongSparseArray + method public static inline, kotlin.jvm.functions.Function2 super java.lang.Long,? super T,kotlin.Unit> action); T getOrDefault(androidx.collection.LongSparseArray + method public static inline, long key, T defaultValue); T getOrElse(androidx.collection.LongSparseArray + method public static inline, long key, kotlin.jvm.functions.Function0 extends T> defaultValue); int getSize(androidx.collection.LongSparseArray + method public static inline); boolean isNotEmpty(androidx.collection.LongSparseArray + method public static); kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray + method public static operator); androidx.collection.LongSparseArray + method @Deprecated public staticplus(androidx.collection.LongSparseArray , androidx.collection.LongSparseArray other); boolean remove(androidx.collection.LongSparseArray + method public static inline operator, long key, T value); void set(androidx.collection.LongSparseArray + method public static, long key, T value); java.util.Iterator + } + + public class LruCachevalueIterator(androidx.collection.LongSparseArray ); { + 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.Mapsnapshot(); + method public void trimToSize(int maxSize); + } + + public final class LruCacheKt { + method public static inlineandroidx.collection.LruCache + } + + public class SimpleArrayMaplruCache(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); { + 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 SparseArrayCompatimplements 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.SparseArrayCompatclone(); + 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 operatorboolean contains(androidx.collection.SparseArrayCompat + method public static inline, int key); void forEach(androidx.collection.SparseArrayCompat + method public static inline, kotlin.jvm.functions.Function2 super java.lang.Integer,? super T,kotlin.Unit> action); T getOrDefault(androidx.collection.SparseArrayCompat + method public static inline, int key, T defaultValue); T getOrElse(androidx.collection.SparseArrayCompat + method public static inline, int key, kotlin.jvm.functions.Function0 extends T> defaultValue); int getSize(androidx.collection.SparseArrayCompat + method public static inline); boolean isNotEmpty(androidx.collection.SparseArrayCompat + method public static); kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat + method public static operator); androidx.collection.SparseArrayCompat + method @Deprecated public staticplus(androidx.collection.SparseArrayCompat , androidx.collection.SparseArrayCompat other); boolean remove(androidx.collection.SparseArrayCompat + method public static inline operator, int key, T value); void set(androidx.collection.SparseArrayCompat + method public static, int key, T value); java.util.Iterator + } + +} +valueIterator(androidx.collection.SparseArrayCompat );
diff --git a/collection/collection/api/restricted_1.3.0-beta01.txt b/collection/collection/api/restricted_1.3.0-beta01.txt new file mode 100644 index 0000000..a2fdada --- /dev/null +++ b/collection/collection/api/restricted_1.3.0-beta01.txt
@@ -0,0 +1,236 @@ +// Signature format: 4.0 +package androidx.collection { + + public class ArrayMapextends androidx.collection.SimpleArrayMap + 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.Setimplements java.util.Map { !> entrySet(); + method public V! get(Object?); + method public java.util.SetkeySet(); + 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.Collectionvalues(); + } + + public final class ArrayMapKt { + method public static inlineandroidx.collection.ArrayMap + method public staticarrayMapOf(); androidx.collection.ArrayMap + } + + public final class ArraySetarrayMapOf(kotlin.Pair extends K,? extends V>... pairs); implements java.util.Collection + 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.Collectionkotlin.jvm.internal.markers.KMutableCollection kotlin.jvm.internal.markers.KMutableSet java.util.Set { 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.Iteratoriterator(); + method public boolean remove(E element); + method public boolean removeAll(androidx.collection.ArraySet extends E> array); + method public boolean removeAll(java.util.Collectionelements); + method public E removeAt(int index); + method public boolean retainAll(java.util.Collectionelements); + method public Object![] toArray(); + method publicT![] toArray(T![] array); + method public E valueAt(int index); + property public int size; + } + + public final class ArraySetKt { + method public static inlineandroidx.collection.ArraySet + method public staticarraySetOf(); androidx.collection.ArraySet + } + + public final class CircularArrayarraySetOf(T?... values); { + 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 LongSparseArrayimplements 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.LongSparseArrayclone(); + 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 operatorboolean contains(androidx.collection.LongSparseArray + method public static inline, long key); void forEach(androidx.collection.LongSparseArray + method public static inline, kotlin.jvm.functions.Function2 super java.lang.Long,? super T,kotlin.Unit> action); T getOrDefault(androidx.collection.LongSparseArray + method public static inline, long key, T defaultValue); T getOrElse(androidx.collection.LongSparseArray + method public static inline, long key, kotlin.jvm.functions.Function0 extends T> defaultValue); int getSize(androidx.collection.LongSparseArray + method public static inline); boolean isNotEmpty(androidx.collection.LongSparseArray + method public static); kotlin.collections.LongIterator keyIterator(androidx.collection.LongSparseArray + method public static operator); androidx.collection.LongSparseArray + method @Deprecated public staticplus(androidx.collection.LongSparseArray , androidx.collection.LongSparseArray other); boolean remove(androidx.collection.LongSparseArray + method public static inline operator, long key, T value); void set(androidx.collection.LongSparseArray + method public static, long key, T value); java.util.Iterator + } + + public class LruCachevalueIterator(androidx.collection.LongSparseArray ); { + 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.Mapsnapshot(); + method public void trimToSize(int maxSize); + } + + public final class LruCacheKt { + method public static inlineandroidx.collection.LruCache + } + + public class SimpleArrayMaplruCache(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); { + 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 SparseArrayCompatimplements 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.SparseArrayCompatclone(); + 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 operatorboolean contains(androidx.collection.SparseArrayCompat + method public static inline, int key); void forEach(androidx.collection.SparseArrayCompat + method public static inline, kotlin.jvm.functions.Function2 super java.lang.Integer,? super T,kotlin.Unit> action); T getOrDefault(androidx.collection.SparseArrayCompat + method public static inline, int key, T defaultValue); T getOrElse(androidx.collection.SparseArrayCompat + method public static inline, int key, kotlin.jvm.functions.Function0 extends T> defaultValue); int getSize(androidx.collection.SparseArrayCompat + method public static inline); boolean isNotEmpty(androidx.collection.SparseArrayCompat + method public static); kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat + method public static operator); androidx.collection.SparseArrayCompat + method @Deprecated public staticplus(androidx.collection.SparseArrayCompat , androidx.collection.SparseArrayCompat other); boolean remove(androidx.collection.SparseArrayCompat + method public static inline operator, int key, T value); void set(androidx.collection.SparseArrayCompat + method public static, int key, T value); java.util.Iterator + } + +} +valueIterator(androidx.collection.SparseArrayCompat );
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt index f100c5d..e1af9da 100644 --- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt +++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -4117,4 +4117,38 @@ } """ ) + + @Test + fun test_ComposableLambdaWithUnusedParameter() = verifyComposeIrTransform( + source = """ + import androidx.compose.runtime.* + + val layoutLambda = @Composable { _: Int -> + Layout() + } + """, + extra = """ + import androidx.compose.runtime.* + + @Composable inline fun Layout() {} + """, + expectedTransformed = """ + val layoutLambda: Function3= ComposableSingletons%TestKt.lambda-1 + internal object ComposableSingletons%TestKt { + val lambda-1: Function3= composableLambdaInstance(<>, false) { + if (%changed and 0b01010001 !== 0b00010000 || !%composer.skipping) { + if (isTraceInProgress()) { + traceEventStart(<>, %changed, -1, <>) + } + Layout(%composer, 0) + if (isTraceInProgress()) { + traceEventEnd() + } + } else { + %composer.skipToGroupEnd() + } + } + } + """ + ) }: Int, %composer: Composer?, %changed: Int ->
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt index 606cc70..98786eb 100644 --- a/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt +++ b/compose/compiler/compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionalInterfaceTransformTests.kt
@@ -387,4 +387,88 @@ } """ ) + + @Test + fun testComposableFunInterfaceWAnonymousParam() = verifyComposeIrTransform( + """ + import androidx.compose.runtime.* + + fun interface Consumer { + @Composable operator fun invoke(t: Int) + } + + @Composable fun Test(int: Int) { + Example { _ -> + } + } + + @Composable fun Example(consumer: Consumer) { + } + """, + """ + interface Consumer { + @Composable + abstract fun invoke(t: Int, %composer: Composer?, %changed: Int) + } + @Composable + fun Test(int: Int, %composer: Composer?, %changed: Int) { + %composer = %composer.startRestartGroup(<>) + sourceInformation(%composer, "C(Test):Test.kt") + if (%changed and 0b0001 !== 0 || !%composer.skipping) { + if (isTraceInProgress()) { + traceEventStart(<>, %changed, -1, <>) + } + Example(class: Consumer { + @Composable + override fun invoke(: Int, %composer: Composer?, %changed: Int) { + %composer = %composer.startRestartGroup(<>) + sourceInformation(%composer, "C(invoke):Test.kt") + if (%changed and 0b0001 !== 0 || !%composer.skipping) { + if (isTraceInProgress()) { + traceEventStart(<>, %changed, -1, <>) + } + Unit + if (isTraceInProgress()) { + traceEventEnd() + } + } else { + %composer.skipToGroupEnd() + } + val tmp0_rcvr =+ %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int -> + tmp0_rcvr.invoke( , %composer, updateChangedFlags(%changed or 0b0001)) + } + } + } +(), %composer, 0) + if (isTraceInProgress()) { + traceEventEnd() + } + } else { + %composer.skipToGroupEnd() + } + %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int -> + Test(int, %composer, updateChangedFlags(%changed or 0b0001)) + } + } + @Composable + fun Example(consumer: Consumer, %composer: Composer?, %changed: Int) { + %composer = %composer.startRestartGroup(<>) + sourceInformation(%composer, "C(Example):Test.kt") + if (%changed and 0b0001 !== 0 || !%composer.skipping) { + if (isTraceInProgress()) { + traceEventStart(<>, %changed, -1, <>) + } + if (isTraceInProgress()) { + traceEventEnd() + } + } else { + %composer.skipToGroupEnd() + } + %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int -> + Example(consumer, %composer, updateChangedFlags(%changed or 0b0001)) + } + } + """ + ) }
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt index e334859..07c13e3 100644 --- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt +++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -1689,12 +1689,20 @@ ) if (defaultParam == null) { - require(parameterCount == defaultIndex) // param count is 1-based, index is 0-based + // param count is 1-based, index is 0-based + require(parameterCount == defaultIndex) { + "Expected $defaultIndex params for ${function.fqNameWhenAvailable}, " + + "found $parameterCount" + } } else { + val expectedParamCount = defaultIndex + + defaultParamCount(contextParameterCount + numRealValueParameters) require( - parameterCount == defaultIndex + - defaultParamCount(contextParameterCount + numRealValueParameters) - ) + parameterCount == expectedParamCount + ) { + "Expected $expectedParamCount params for ${function.fqNameWhenAvailable}, " + + "found $parameterCount" + } } val lambda = irLambdaExpression( @@ -3875,7 +3883,6 @@ paramName.startsWith(KtxNameConventions.CHANGED_PARAMETER.identifier) -> changedParams += param paramName.startsWith("\$context_receiver_") || - paramName.startsWith("\$anonymous\$parameter") || paramName.startsWith("\$name\$for\$destructuring") || paramName.startsWith("\$noName_") || paramName == "\$this" -> Unit
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt index 04c7f2c..841ab83a 100644 --- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt +++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
@@ -1572,7 +1572,8 @@ get() = when { // FIR generates bothand tmp0_for_iterator... origin == IrDeclarationOrigin.FOR_LOOP_ITERATOR -> "" - !useFir && origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER -> "" + // $anonymous$parameter$x vs $unused$var$x + origin == IrDeclarationOrigin.UNDERSCORE_PARAMETER -> "" !useFir && name.asString().endsWith("_elvis_lhs") -> "" !useFir && name.asString() == "\$this\$null" -> "" else -> name.asString()
diff --git a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt index a3379dd..735e1e755 100644 --- a/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt +++ b/compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/text2/TextFieldKeyEventTest.kt
@@ -570,6 +570,7 @@ } } + @Ignore // b/293919923 @Test fun textField_withActiveSelection_shiftTabSingleLine() { keysSequenceTest("text", singleLine = true) {
diff --git a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialPerfettoSdkBenchmark.kt similarity index 97% rename from compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt rename to compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialPerfettoSdkBenchmark.kt index 3115e6b..002886f 100644 --- a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialTracingBenchmark.kt +++ b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialPerfettoSdkBenchmark.kt
@@ -41,7 +41,7 @@ */ @OptIn(ExperimentalMetricApi::class) @SdkSuppress(minSdkVersion = Build.VERSION_CODES.R) // TODO(234351579): Support API < 30 -class TrivialTracingBenchmark(private val composableName: String) { +class TrivialPerfettoSdkBenchmark(private val composableName: String) { @get:Rule val benchmarkRule = MacrobenchmarkRule()
diff --git a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupTracingBenchmark.kt b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt similarity index 73% rename from compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupTracingBenchmark.kt rename to compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt index 47cbb44..eb9ab43 100644 --- a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupTracingBenchmark.kt +++ b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkBenchmark.kt
@@ -26,7 +26,6 @@ import androidx.testutils.measureStartup import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat -import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -35,26 +34,23 @@ @OptIn(ExperimentalMetricApi::class) @LargeTest @RunWith(Parameterized::class) -class TrivialStartupTracingBenchmark( +class TrivialStartupPerfettoSdkBenchmark( private val startupMode: StartupMode, private val compilationMode: CompilationMode, - private val isFullTracingEnabled: Boolean + private val isPerfettoSdkEnabled: Boolean ) { @get:Rule val benchmarkRule = MacrobenchmarkRule() - // TODO(283953019): enable alongside StartupTracingInitializer (pending performance testing) - @Ignore @Test fun startup() = try { - Arguments.fullTracingEnableOverride = isFullTracingEnabled - assertThat(Arguments.fullTracingEnable, `is`(isFullTracingEnabled)) + Arguments.perfettoSdkTracingEnableOverride = isPerfettoSdkEnabled + assertThat(Arguments.perfettoSdkTracingEnable, `is`(isPerfettoSdkEnabled)) try { val perfettoSdkTraceSection = TraceSectionMetric( - "androidx.compose.integration.macrobenchmark.target." + - "TrivialStartupTracingActivity.onCreate." + - " (TrivialStartupTracingActivity.kt:33)" + "%TrivialStartupTracingActivity.onCreate%" + + " (TrivialStartupTracingActivity.kt:%)" ) benchmarkRule.measureStartup( compilationMode = compilationMode, @@ -67,25 +63,28 @@ "TRIVIAL_STARTUP_TRACING_ACTIVITY" } } catch (e: IllegalArgumentException) { - if (!isFullTracingEnabled && + if (!isPerfettoSdkEnabled && e.message?.contains("Unable to read any metrics during benchmark") == true ) { - // this is expected, we don't expect Perfetto SDK Tracing section present - // when full tracing is disabled + // We are relying on the fact that Macrobenchmark will throw an exception when it + // cannot find any metrics, and given we are looking for one specific metric + // (a Composable function emitted by Compose Tracing), we are able to tell if + // Compose Tracing is working (enabled) or not, both of which we want to verify in + // this test. } else throw e // this is a legitimate failure } } finally { - Arguments.fullTracingEnableOverride = null + Arguments.perfettoSdkTracingEnableOverride = null } companion object { - @Parameterized.Parameters(name = "startup={0},compilation={1},fullTracing={2}") + @Parameterized.Parameters(name = "startup={0},compilation={1},perfettoSdk={2}") @JvmStatic fun parameters() = listOf( - arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* fullTracing = */ true), - arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* fullTracing = */ false), - arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* fullTracing = */ true), - arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* fullTracing = */ false), + arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* perfettoSdk = */ true), + arrayOf(StartupMode.COLD, CompilationMode.DEFAULT, /* perfettoSdk = */ false), + arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* perfettoSdk = */ true), + arrayOf(StartupMode.WARM, CompilationMode.DEFAULT, /* perfettoSdk = */ false), ) } }
diff --git a/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkOverheadBenchmark.kt b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkOverheadBenchmark.kt new file mode 100644 index 0000000..28a6c97 --- /dev/null +++ b/compose/integration-tests/macrobenchmark/src/main/java/androidx/compose/integration/macrobenchmark/TrivialStartupPerfettoSdkOverheadBenchmark.kt
@@ -0,0 +1,82 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.compose.integration.macrobenchmark + +import androidx.benchmark.Arguments +import androidx.benchmark.macro.CompilationMode +import androidx.benchmark.macro.StartupMode +import androidx.benchmark.macro.junit4.MacrobenchmarkRule +import androidx.test.filters.LargeTest +import androidx.testutils.createStartupCompilationParams +import androidx.testutils.measureStartup +import org.hamcrest.CoreMatchers.`is` +import org.hamcrest.MatcherAssert.assertThat +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized + +@LargeTest +@RunWith(Parameterized::class) +class TrivialStartupPerfettoSdkOverheadBenchmark( + private val startupMode: StartupMode, + private val compilationMode: CompilationMode, + private val isPerfettoSdkEnabled: Boolean +) { + @get:Rule + val benchmarkRule = MacrobenchmarkRule() + + @Test + fun startup() = try { + Arguments.perfettoSdkTracingEnableOverride = isPerfettoSdkEnabled + assertThat(Arguments.perfettoSdkTracingEnable, `is`(isPerfettoSdkEnabled)) + + benchmarkRule.measureStartup( + compilationMode = compilationMode, + startupMode = startupMode, + packageName = "androidx.compose.integration.macrobenchmark.target" + ) { + action = "androidx.compose.integration.macrobenchmark.target." + + "TRIVIAL_STARTUP_TRACING_ACTIVITY" + } + } finally { + Arguments.perfettoSdkTracingEnableOverride = null + } + + companion object { + // intended for local testing of all possible configurations + private const val exhaustiveMode = false + + @Parameterized.Parameters(name = "startup={0},compilation={1},perfettoSdk={2}") + @JvmStatic + fun parameters() = + when { + exhaustiveMode -> + // complete set for testing locally + createStartupCompilationParams() + .flatMap { listOf(it + true, it + false) } /* perfetto sdk enabled */ + else -> + // subset for testing in CI: + // compilation isn't expected to affect this, so we just look at startup time + // for cold and not, since the behavior is very different in those scenarios + createStartupCompilationParams( + listOf(StartupMode.COLD, StartupMode.WARM), + listOf(CompilationMode.DEFAULT) + ).map { it + true } /* perfetto sdk enabled */ + } + } +}
diff --git a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt index 49bc878..d34d4bc 100644 --- a/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt +++ b/compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/TestOwner.kt
@@ -93,8 +93,10 @@ } } - return roots.flatMap { - it.semanticsOwner.getAllSemanticsNodes(mergingEnabled = !useUnmergedTree) + return testOwner.runOnUiThread { + roots.flatMap { + it.semanticsOwner.getAllSemanticsNodes(mergingEnabled = !useUnmergedTree) + } } } }
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt index 93604d6..e905ca7 100644 --- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt +++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
@@ -1953,11 +1953,12 @@ // This simulates a child that recomposes, for example due to a transition. content(offset.value) } - val assumeLayoutBeforeDraw = @Composable { _: Int -> + val assumeLayoutBeforeDraw = @Composable { value: Int -> // This assumes a layout was done before the draw pass. Layout( content = {}, modifier = Modifier.drawBehind { + assertEquals(offset.value, value) assertTrue(laidOut) latch.countDown() }
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt index f99c430..0bcfbd9c 100644 --- a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt +++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
@@ -34,6 +34,7 @@ import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.testutils.assertPixels @@ -164,6 +165,50 @@ } } + @Test + fun testVectorSkipsRecompositionOnNoChange() { + val state = mutableIntStateOf(0) + var composeCount = 0 + var vectorComposeCount = 0 + + val composeVector: @Composable @VectorComposable (Float, Float) -> Unit = { + viewportWidth, viewportHeight -> + + vectorComposeCount++ + Path( + fill = SolidColor(Color.Blue), + pathData = PathData { + lineTo(viewportWidth, 0f) + lineTo(viewportWidth, viewportHeight) + lineTo(0f, viewportHeight) + close() + } + ) + } + + rule.setContent { + composeCount++ + // Arbitrary read to force composition here and verify the subcomposition below skips + state.value + val vectorPainter = rememberVectorPainter( + defaultWidth = 10.dp, + defaultHeight = 10.dp, + autoMirror = false, + content = composeVector + ) + Image( + vectorPainter, + null, + modifier = Modifier.size(20.dp) + ) + } + + state.value = 1 + rule.waitForIdle() + assertEquals(2, composeCount) // Arbitrary state read should compose twice + assertEquals(1, vectorComposeCount) // Vector is identical so should compose once + } + @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O) @Test fun testVectorInvalidation() {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt index 2eed50f..4690c99 100644 --- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt +++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
@@ -19,6 +19,8 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size import androidx.compose.ui.geometry.Size.Companion.Unspecified import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Brush @@ -32,6 +34,7 @@ import androidx.compose.ui.graphics.StrokeJoin import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.graphics.drawscope.withTransform import androidx.compose.ui.unit.IntSize import androidx.compose.ui.util.fastForEach @@ -88,18 +91,12 @@ internal class VectorComponent : VNode() { val root = GroupComponent().apply { - pivotX = 0.0f - pivotY = 0.0f invalidateListener = { doInvalidate() } } - var name: String - get() = root.name - set(value) { - root.name = value - } + var name: String = DefaultGroupName private fun doInvalidate() { isDirty = true @@ -114,29 +111,22 @@ internal var intrinsicColorFilter: ColorFilter? by mutableStateOf(null) - var viewportWidth = 0f - set(value) { - if (field != value) { - field = value - doInvalidate() - } - } - - var viewportHeight = 0f - set(value) { - if (field != value) { - field = value - doInvalidate() - } - } + internal var viewportSize by mutableStateOf(Size.Zero) private var previousDrawSize = Unspecified + private var rootScaleX = 1f + private var rootScaleY = 1f + /** * Cached lambda used to avoid allocating the lambda on each draw invocation */ private val drawVectorBlock: DrawScope.() -> Unit = { - with(root) { draw() } + with(root) { + scale(rootScaleX, rootScaleY, pivot = Offset.Zero) { + draw() + } + } } fun DrawScope.draw(alpha: Float, colorFilter: ColorFilter?) { @@ -144,8 +134,8 @@ // If the content of the vector has changed, or we are drawing a different size // update the cached image to ensure we are scaling the vector appropriately if (isDirty || previousDrawSize != size) { - root.scaleX = size.width / viewportWidth - root.scaleY = size.height / viewportHeight + rootScaleX = size.width / viewportSize.width + rootScaleY = size.height / viewportSize.height cacheDrawScope.drawCachedImage( IntSize(ceil(size.width).toInt(), ceil(size.height).toInt()), this@draw, @@ -166,8 +156,8 @@ return buildString { append("Params: ") append("\tname: ").append(name).append("\n") - append("\tviewportWidth: ").append(viewportWidth).append("\n") - append("\tviewportHeight: ").append(viewportHeight).append("\n") + append("\tviewportWidth: ").append(viewportSize.width).append("\n") + append("\tviewportHeight: ").append(viewportSize.height).append("\n") } } } @@ -247,29 +237,23 @@ var trimPathStart = DefaultTrimPathStart set(value) { - if (field != value) { - field = value - isTrimPathDirty = true - invalidate() - } + field = value + isTrimPathDirty = true + invalidate() } var trimPathEnd = DefaultTrimPathEnd set(value) { - if (field != value) { - field = value - isTrimPathDirty = true - invalidate() - } + field = value + isTrimPathDirty = true + invalidate() } var trimPathOffset = DefaultTrimPathOffset set(value) { - if (field != value) { - field = value - isTrimPathDirty = true - invalidate() - } + field = value + isTrimPathDirty = true + invalidate() } private var isPathDirty = true
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt index 648babc7..aafdf94 100644 --- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt +++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
@@ -19,8 +19,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.ComposableOpenTarget import androidx.compose.runtime.Composition -import androidx.compose.runtime.CompositionContext -import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf @@ -145,7 +143,25 @@ size = Size(widthPx, heightPx) this.autoMirror = autoMirror this.intrinsicColorFilter = intrinsicColorFilter - RenderVector(name, vpWidth, vpHeight, content) + this.viewportSize = Size(vpWidth, vpHeight) + this.name = name + + val compositionContext = rememberCompositionContext() + this.composition = remember(viewportWidth, viewportHeight, content) { + val curComp = this.composition + val next = if (curComp == null || curComp.isDisposed) { + Composition( + VectorApplier(this.vector.root), + compositionContext + ) + } else { + curComp + } + next.setContent { + content(vpWidth, vpHeight) + } + next + } } } @@ -170,6 +186,15 @@ ) /** + * Functional interface to avoid "PrimitiveInLambda" lint errors + */ +internal fun interface ComposeVector { + + @Composable + fun Content(viewportWidth: Float, viewportHeight: Float) +} + +/** * [Painter] implementation that abstracts the drawing of a Vector graphic. * This can be represented by either a [ImageVector] or a programmatic * composition of a vector @@ -189,7 +214,19 @@ vector.intrinsicColorFilter = value } - private val vector = VectorComponent().apply { + internal var viewportSize: Size + get() = vector.viewportSize + set(value) { + vector.viewportSize = value + } + + internal var name: String + get() = vector.name + set(value) { + vector.name = value + } + + internal val vector = VectorComponent().apply { invalidateCallback = { if (drawCount == invalidateCount) { invalidateCount++ @@ -197,55 +234,11 @@ } } - private var composition: Composition? = null - - private fun composeVector( - parent: CompositionContext, - composable: @Composable (viewportWidth: Float, viewportHeight: Float) -> Unit - ): Composition { - val existing = composition - val next = if (existing == null || existing.isDisposed) { - Composition( - VectorApplier(vector.root), - parent - ) - } else { - existing - } - composition = next - next.setContent { - composable(vector.viewportWidth, vector.viewportHeight) - } - return next - } + internal var composition: Composition? = null // TODO replace with mutableStateOf(Unit, neverEqualPolicy()) after b/291647821 is addressed private var invalidateCount by mutableIntStateOf(0) - @Composable - internal fun RenderVector( - name: String, - viewportWidth: Float, - viewportHeight: Float, - content: @Composable (viewportWidth: Float, viewportHeight: Float) -> Unit - ) { - vector.apply { - this.name = name - this.viewportWidth = viewportWidth - this.viewportHeight = viewportHeight - } - val composition = composeVector( - rememberCompositionContext(), - content - ) - - DisposableEffect(composition) { - onDispose { - composition.dispose() - } - } - } - private var currentAlpha: Float = 1.0f private var currentColorFilter: ColorFilter? = null
diff --git a/constraintlayout/constraintlayout-core/lint-baseline.xml b/constraintlayout/constraintlayout-core/lint-baseline.xml index bff62dd..1c3b73f 100644 --- a/constraintlayout/constraintlayout-core/lint-baseline.xml +++ b/constraintlayout/constraintlayout-core/lint-baseline.xml
@@ -1,5 +1,5 @@ -+ id="PrivateConstructorForUtilityClass" @@ -74,645 +74,6 @@ - id="SyntheticAccessor" - message="Access to `private` field `mId` of class `Constraint` requires synthetic accessor" - errorLine1=" return mId;" - errorLine2=" ~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/dsl/Constraint.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor" - errorLine1=" return mWidth - mHorizontalGap;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor" - errorLine1=" return mHeight - mVerticalGap;" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor" - errorLine1=" int width = getWidgetWidth(widget, mMax);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor" - errorLine1=" int gap = mHorizontalGap;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor" - errorLine1=" int height = getWidgetHeight(widget, mMax);" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor" - errorLine1=" int width = getWidgetWidth(widget, mMax);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor" - errorLine1=" int height = getWidgetHeight(widget, mMax);" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor" - errorLine1=" int gap = mVerticalGap;" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor" - errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex + index >= mDisplayedWidgetsCount) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor" - errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" verticalWidget.setVerticalChainStyle(mVerticalStyle);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor" - errorLine1=" padding += mVerticalGap;" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor" - errorLine1=" if (mVerticalAlign == VERTICAL_ALIGN_BASELINE && !verticalWidget.hasBaseline()) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex + index >= mDisplayedWidgetsCount) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor" - errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex + index >= mDisplayedWidgetsCount) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor" - errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + index];" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" int style = mHorizontalStyle;" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalBias` of class `Flow` requires synthetic accessor" - errorLine1=" float bias = isInRtl ? (1 - mHorizontalBias) : mHorizontalBias;" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalBias` of class `Flow` requires synthetic accessor" - errorLine1=" float bias = isInRtl ? (1 - mHorizontalBias) : mHorizontalBias;" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFirstHorizontalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex == 0 && mFirstHorizontalStyle != UNKNOWN) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFirstHorizontalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" style = mFirstHorizontalStyle;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFirstHorizontalBias` of class `Flow` requires synthetic accessor" - errorLine1=" bias = isInRtl ? (1 - mFirstHorizontalBias) : mFirstHorizontalBias;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFirstHorizontalBias` of class `Flow` requires synthetic accessor" - errorLine1=" bias = isInRtl ? (1 - mFirstHorizontalBias) : mFirstHorizontalBias;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastHorizontalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" } else if (isLastChain && mLastHorizontalStyle != UNKNOWN) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastHorizontalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" style = mLastHorizontalStyle;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastHorizontalBias` of class `Flow` requires synthetic accessor" - errorLine1=" bias = isInRtl ? (1 - mLastHorizontalBias) : mLastHorizontalBias;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastHorizontalBias` of class `Flow` requires synthetic accessor" - errorLine1=" bias = isInRtl ? (1 - mLastHorizontalBias) : mLastHorizontalBias;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor" - errorLine1=" widget.mLeft.connect(previous.mRight, mHorizontalGap);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor" - errorLine1=" if (mVerticalAlign == VERTICAL_ALIGN_BASELINE" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalAlign` of class `Flow` requires synthetic accessor" - errorLine1=" switch (mVerticalAlign) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" horizontalWidget.setHorizontalChainStyle(mHorizontalStyle);" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor" - errorLine1=" padding += mHorizontalGap;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor" - errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" int style = mVerticalStyle;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalBias` of class `Flow` requires synthetic accessor" - errorLine1=" float bias = mVerticalBias;" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFirstVerticalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex == 0 && mFirstVerticalStyle != UNKNOWN) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFirstVerticalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" style = mFirstVerticalStyle;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFirstVerticalBias` of class `Flow` requires synthetic accessor" - errorLine1=" bias = mFirstVerticalBias;" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastVerticalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" } else if (isLastChain && mLastVerticalStyle != UNKNOWN) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastVerticalStyle` of class `Flow` requires synthetic accessor" - errorLine1=" style = mLastVerticalStyle;" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastVerticalBias` of class `Flow` requires synthetic accessor" - errorLine1=" bias = mLastVerticalBias;" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor" - errorLine1=" widget.mTop.connect(previous.mBottom, mVerticalGap);" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalAlign` of class `Flow` requires synthetic accessor" - errorLine1=" switch (mHorizontalAlign) {" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalAlign` of class `Flow` requires synthetic accessor" - errorLine1=" switch (mHorizontalAlign) {" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor" - errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgetsCount` of class `Flow` requires synthetic accessor" - errorLine1=" if (mStartIndex + i >= mDisplayedWidgetsCount) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisplayedWidgets` of class `Flow` requires synthetic accessor" - errorLine1=" ConstraintWidget widget = mDisplayedWidgets[mStartIndex + i];" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mHorizontalGap` of class `Flow` requires synthetic accessor" - errorLine1=" int gap = mHorizontalGap;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor" - errorLine1=" int height = getWidgetHeight(widget, mMax);" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getWidgetWidth` of class `Flow` requires synthetic accessor" - errorLine1=" int width = getWidgetWidth(widget, mMax);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getWidgetHeight` of class `Flow` requires synthetic accessor" - errorLine1=" int height = getWidgetHeight(widget, mMax);" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVerticalGap` of class `Flow` requires synthetic accessor" - errorLine1=" int gap = mVerticalGap;" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" && list.mBiggest != null;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" && list.mBiggest != null;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" bottom = next.mBiggest.mTop;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" ConstraintAnchor currentBottom = current.mBiggest.mBottom;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" right = next.mBiggest.mLeft;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" ConstraintAnchor currentRight = current.mBiggest.mRight;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" && list.mBiggest != null;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" && list.mBiggest != null;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" bottom = next.mBiggest.mTop;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" ConstraintAnchor currentBottom = current.mBiggest.mBottom;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" right = next.mBiggest.mLeft;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBiggest` of class `WidgetsList` requires synthetic accessor" - errorLine1=" ConstraintAnchor currentRight = current.mBiggest.mRight;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/widgets/Flow.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `removeGoal` of class `PriorityGoalRow` requires synthetic accessor" - errorLine1=" removeGoal(mVariable);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/core/PriorityGoalRow.java"/> - id="KotlinPropertyAccess" message="The getter return type (`CLElement`) and setter parameter type (`CLContainer`) getter and setter methods for property `container` should have exactly the same type to allow be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes" errorLine1=" public CLElement getContainer() {"
diff --git a/constraintlayout/constraintlayout/lint-baseline.xml b/constraintlayout/constraintlayout/lint-baseline.xml index a9b5204..03b1210 100644 --- a/constraintlayout/constraintlayout/lint-baseline.xml +++ b/constraintlayout/constraintlayout/lint-baseline.xml
@@ -1,5 +1,5 @@ -+ id="NewApi" @@ -1118,3138 +1118,6 @@ - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor" - errorLine1=" mMotionLayout.setProgress(0);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `updateItems` of class `Carousel` requires synthetic accessor" - errorLine1=" updateItems();" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor" - errorLine1=" mAdapter.onNewItem(mIndex);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" mAdapter.onNewItem(mIndex);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor" - errorLine1=" float velocity = mMotionLayout.getVelocity();" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchUpMode` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mTouchUpMode == TOUCH_UP_CARRY_ON && velocity > mVelocityThreshold" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mVelocityThreshold` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mTouchUpMode == TOUCH_UP_CARRY_ON && velocity > mVelocityThreshold" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor" - errorLine1=" && mIndex < mAdapter.count() - 1) {" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" && mIndex < mAdapter.count() - 1) {" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDampening` of class `Carousel` requires synthetic accessor" - errorLine1=" final float v = velocity * mDampening;" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mIndex == 0 && mPreviousIndex > mIndex) {" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mIndex == 0 && mPreviousIndex > mIndex) {" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPreviousIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mIndex == 0 && mPreviousIndex > mIndex) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAdapter` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPreviousIndex` of class `Carousel` requires synthetic accessor" - errorLine1=" if (mIndex == mAdapter.count() - 1 && mPreviousIndex < mIndex) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor" - errorLine1=" mMotionLayout.post(new Runnable() {" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `Carousel` requires synthetic accessor" - errorLine1=" mMotionLayout.touchAnimateTo(MotionLayout.TOUCH_UP_DECELERATE_AND_COMPLETE," - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/helper/widget/Carousel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" if (mMetrics != null) {" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" mMetrics.mNumberOfMeasures++;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOptimizationLevel` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" if (container != null && Optimizer.enabled(mOptimizationLevel," - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOptimizationLevel` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" boolean optimizeDirect = Optimizer.enabled(mOptimizationLevel," - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" if (mMetrics != null) {" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMetrics` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" mMetrics.measuresWidgetsDuration += (endMeasure - startMeasure);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintHelpers` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" final int helperCount = mLayout.mConstraintHelpers.size();" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintHelpers` of class `ConstraintLayout` requires synthetic accessor" - errorLine1=" ConstraintHelper helper = mLayout.mConstraintHelpers.get(i);" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `fillFrom` of class `Constraint` requires synthetic accessor" - errorLine1=" constraint.fillFrom(id, param);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" leftToLeft = lookupID(a, attr, leftToLeft);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" leftToRight = lookupID(a, attr, leftToRight);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" rightToLeft = lookupID(a, attr, rightToLeft);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" rightToRight = lookupID(a, attr, rightToRight);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" topToTop = lookupID(a, attr, topToTop);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" topToBottom = lookupID(a, attr, topToBottom);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" bottomToTop = lookupID(a, attr, bottomToTop);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" bottomToBottom = lookupID(a, attr, bottomToBottom);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" baselineToBaseline = lookupID(a, attr, baselineToBaseline);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" baselineToTop = lookupID(a, attr, baselineToTop);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" baselineToBottom = lookupID(a, attr, baselineToBottom);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" startToEnd = lookupID(a, attr, startToEnd);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" startToStart = lookupID(a, attr, startToStart);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" endToStart = lookupID(a, attr, endToStart);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" endToEnd = lookupID(a, attr, endToEnd);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" circleConstraint = lookupID(a, attr, circleConstraint);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" transformPivotTarget = lookupID(a, attr, transformPivotTarget);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `lookupID` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" mAnimateRelativeTo = lookupID(a, attr, mAnimateRelativeTo);" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" setDeltaValue(c, mTypeInt[i], mValueInt[i]);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" setDeltaValue(c, mTypeFloat[i], mValueFloat[i]);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" setDeltaValue(c, mTypeString[i], mValueString[i]);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setDeltaValue` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" setDeltaValue(c, mTypeBoolean[i], mValueBoolean[i]);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `fillFrom` of class `Constraint` requires synthetic accessor" - errorLine1=" constraint.fillFrom(id, param);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `fillFromConstraints` of class `Constraint` requires synthetic accessor" - errorLine1=" constraint.fillFromConstraints(helper, id, param);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `fillFromConstraints` of class `Constraint` requires synthetic accessor" - errorLine1=" constraint.fillFromConstraints(id, param);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setIntValue` of class `Constraint` requires synthetic accessor" - errorLine1=" get(viewId).setIntValue(attributeName, value);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setColorValue` of class `Constraint` requires synthetic accessor" - errorLine1=" get(viewId).setColorValue(attributeName, value);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor" - errorLine1=" get(viewId).setFloatValue(attributeName, value);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setStringValue` of class `Constraint` requires synthetic accessor" - errorLine1=" get(viewId).setStringValue(attributeName, value);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor" - errorLine1=" set.setFloatValue(attr[0], Integer.decode(attr[1]));" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setColorValue` of class `Constraint` requires synthetic accessor" - errorLine1=" set.setColorValue(attr[0], Color.parseColor(attr[1]));" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setFloatValue` of class `Constraint` requires synthetic accessor" - errorLine1=" set.setFloatValue(attr[0], Float.parseFloat(attr[1]));" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setStringValue` of class `Constraint` requires synthetic accessor" - errorLine1=" set.setStringValue(attr[0], attr[1]);" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" for (Integer id : mConstraints.keySet()) {" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" Constraint c = mConstraints.get(id);" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" for (Integer id : mConstraints.keySet()) {" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraints` of class `ConstraintSet` requires synthetic accessor" - errorLine1=" Constraint c = mConstraints.get(id);" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/widget/ConstraintSet.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRoundPercent` of class `ImageFilterButton` requires synthetic accessor" - errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterButton.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRound` of class `ImageFilterButton` requires synthetic accessor" - errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterButton.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRoundPercent` of class `ImageFilterView` requires synthetic accessor" - errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterView.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRound` of class `ImageFilterView` requires synthetic accessor" - errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/ImageFilterView.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAlpha` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAlpha` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mElevation` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mElevation` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotation` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotation` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCurveFit` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCurveFit` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPivotX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mPivotX = a.getDimension(attr, c.mPivotX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPivotX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mPivotX = a.getDimension(attr, c.mPivotX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPivotY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mPivotY = a.getDimension(attr, c.mPivotY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPivotY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mPivotY = a.getDimension(attr, c.mPivotY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionEasing` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTransitionEasing = a.getString(attr);" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionPathRotate` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionPathRotate` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationX` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationY` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationZ` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationZ` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mProgress` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mProgress` of class `KeyAttributes` requires synthetic accessor" - errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyAttributes.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `read` of class `Loader` requires synthetic accessor" - errorLine1=" Loader.read(this, a);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionEasing` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTransitionEasing = a.getString(attr);" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCurveFit` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCurveFit` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCustomWaveShape` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mCustomWaveShape = a.getString(attr);" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveShape = Oscillator.CUSTOM;" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveShape` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWavePeriod` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWavePeriod` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveVariesBy` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveVariesBy = a.getInt(attr, c.mWaveVariesBy);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveVariesBy` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWaveVariesBy = a.getInt(attr, c.mWaveVariesBy);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAlpha` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAlpha` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mElevation` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mElevation` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotation` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotation` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationX` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationX` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationY` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationY` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionPathRotate` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionPathRotate` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleX` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleX` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleY` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleY` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationX` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationX` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationY` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationY` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationZ` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationZ` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mProgress` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mProgress` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWavePhase` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWavePhase = a.getFloat(attr, c.mWavePhase) / 360;" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWavePhase` of class `KeyCycle` requires synthetic accessor" - errorLine1=" c.mWavePhase = a.getFloat(attr, c.mWavePhase) / 360;" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `read` of class `Loader` requires synthetic accessor" - errorLine1=" Loader.read(this, a);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyPosition.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAlpha` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAlpha` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mAlpha = a.getFloat(attr, c.mAlpha);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mElevation` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mElevation` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mElevation = a.getDimension(attr, c.mElevation);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotation` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotation` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mRotation = a.getFloat(attr, c.mRotation);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCurveFit` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCurveFit` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mCurveFit = a.getInteger(attr, c.mCurveFit);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCustomWaveShape` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mCustomWaveShape = a.getString(attr);" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWaveShape = Oscillator.CUSTOM;" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveShape` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWaveShape = a.getInt(attr, c.mWaveShape);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWavePeriod` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWavePeriod` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWavePeriod = a.getFloat(attr, c.mWavePeriod);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getDimension(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mWaveOffset` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mWaveOffset = a.getFloat(attr, c.mWaveOffset);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleX` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleX` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mScaleX = a.getFloat(attr, c.mScaleX);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationX` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationX` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mRotationX = a.getFloat(attr, c.mRotationX);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationY` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRotationY` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mRotationY = a.getFloat(attr, c.mRotationY);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionEasing` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTransitionEasing = a.getString(attr);" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleY` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mScaleY` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mScaleY = a.getFloat(attr, c.mScaleY);" - errorLine2=" ~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionPathRotate` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTransitionPathRotate` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTransitionPathRotate = a.getFloat(attr, c.mTransitionPathRotate);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationX` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationX` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTranslationX = a.getDimension(attr, c.mTranslationX);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationY` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationY` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTranslationY = a.getDimension(attr, c.mTranslationY);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationZ` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTranslationZ` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mTranslationZ = a.getDimension(attr, c.mTranslationZ);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mProgress` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mProgress` of class `KeyTimeCycle` requires synthetic accessor" - errorLine1=" c.mProgress = a.getFloat(attr, c.mProgress);" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTimeCycle.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mFireThreshold` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mFireThreshold = (c.mFramePosition + .5f) / 100f;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mNegativeCross` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mNegativeCross = a.getString(attr);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPositiveCross` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mPositiveCross = a.getString(attr);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mCross` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mCross = a.getString(attr);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTriggerID` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mTriggerID = a.getResourceId(attr, c.mTriggerID);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTriggerID` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mTriggerID = a.getResourceId(attr, c.mTriggerID);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTriggerCollisionId` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mTriggerCollisionId = a.getResourceId(attr, c.mTriggerCollisionId);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTriggerCollisionId` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mTriggerCollisionId = a.getResourceId(attr, c.mTriggerCollisionId);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPostLayout` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mPostLayout = a.getBoolean(attr, c.mPostLayout);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPostLayout` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mPostLayout = a.getBoolean(attr, c.mPostLayout);" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTriggerReceiver` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mTriggerReceiver = a.getResourceId(attr, c.mTriggerReceiver);" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTriggerReceiver` of class `KeyTrigger` requires synthetic accessor" - errorLine1=" c.mTriggerReceiver = a.getResourceId(attr, c.mTriggerReceiver);" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/KeyTrigger.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRoundPercent` of class `MotionButton` requires synthetic accessor" - errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/MotionButton.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRound` of class `MotionButton` requires synthetic accessor" - errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/MotionButton.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRoundPercent` of class `MotionLabel` requires synthetic accessor" - errorLine1=" float r = Math.min(w, h) * mRoundPercent / 2;" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/MotionLabel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mRound` of class `MotionLabel` requires synthetic accessor" - errorLine1=" outline.setRoundRect(0, 0, w, h, mRound);" - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/utils/widget/MotionLabel.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mStateCache` of class `MotionLayout` requires synthetic accessor" - errorLine1=" mStateCache.apply();" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mEndState` of class `MotionLayout` requires synthetic accessor" - errorLine1=" mEndState = MotionLayout.this.mEndState;" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mBeginState` of class `MotionLayout` requires synthetic accessor" - errorLine1=" mStartState = MotionLayout.this.mBeginState;" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mInRotation` of class `MotionLayout` requires synthetic accessor" - errorLine1=" mInRotation = false;" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastHeightMeasureSpec` of class `MotionLayout` requires synthetic accessor" - errorLine1=" measure(mLastWidthMeasureSpec, mLastHeightMeasureSpec);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLastWidthMeasureSpec` of class `MotionLayout` requires synthetic accessor" - errorLine1=" measure(mLastWidthMeasureSpec, mLastHeightMeasureSpec);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `setupMotionViews` of class `MotionLayout` requires synthetic accessor" - errorLine1=" setupMotionViews();" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `toRect` of class `MotionLayout` requires synthetic accessor" - errorLine1=" motionController.setStartState(toRect(startWidget), mStart," - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mInRotation` of class `MotionLayout` requires synthetic accessor" - errorLine1=" if (mInRotation) {" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPreRotateHeight` of class `MotionLayout` requires synthetic accessor" - errorLine1=" mPreRotateWidth, mPreRotateHeight);" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPreRotateWidth` of class `MotionLayout` requires synthetic accessor" - errorLine1=" mPreRotateWidth, mPreRotateHeight);" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `toRect` of class `MotionLayout` requires synthetic accessor" - errorLine1=" motionController.setEndState(toRect(endWidget), mEnd," - errorLine2=" ~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mEndState` of class `MotionLayout` requires synthetic accessor" - errorLine1=" String str = getContext().getResources().getResourceName(mEndState)" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mStateCache` of class `MotionLayout` requires synthetic accessor" - errorLine1=" mStateCache.apply();" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionLayout.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition.mConstraintSetEnd == endId" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" && mCurrentTransition.mConstraintSetStart == beginId) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" if ((transition.mConstraintSetEnd == end" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" && transition.mConstraintSetStart == start)" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" || (transition.mConstraintSetEnd == endId" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" && transition.mConstraintSetStart == beginId)) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mConstraintSetEnd == endId) {" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" t.mConstraintSetStart = start;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" t.mConstraintSetEnd = end;" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mId` of class `Transition` requires synthetic accessor" - errorLine1=" int id = transition.mId;" - errorLine2=" ~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mId` of class `Transition` requires synthetic accessor" - errorLine1=" if (mTransitionList.get(index).mId == id) {" - errorLine2=" ~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mConstraintSetStart == stateId" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" || transition.mConstraintSetEnd == stateId) {" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mOnClicks.size() > 0) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mOnClicks.size() > 0) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mOnClicks.size() > 0) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mOnClicks.size() > 0) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mOnClicks` of class `Transition` requires synthetic accessor" - errorLine1=" for (Transition.TransitionOnClick onClick : transition.mOnClicks) {" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDisable` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mDisable) {" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" transition.mTouchResponse.setRTL(mRtl);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" RectF region = transition.mTouchResponse.getTouchRegion(mMotionLayout, cache);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" region = transition.mTouchResponse.getLimitBoundsTo(mMotionLayout, cache);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" float val = transition.mTouchResponse.dot(dx, dy);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mTouchResponse.mIsRotateMode && lastTouchDown != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" - transition.mTouchResponse.mRotateCenterX;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" - transition.mTouchResponse.mRotateCenterY;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mConstraintSetEnd == currentState) { // flip because backwards" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mId` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mId == id) {" - errorLine2=" ~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mAutoTransition == Transition.AUTO_NONE) {" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" if (currentState == transition.mConstraintSetStart && (" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor" - errorLine1=" transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_END" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor" - errorLine1=" || transition.mAutoTransition == Transition.AUTO_JUMP_TO_END)) {" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_END) {" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" if (currentState == transition.mConstraintSetEnd && (" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor" - errorLine1=" transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_START" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor" - errorLine1=" || transition.mAutoTransition == Transition.AUTO_JUMP_TO_START)) {" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mAutoTransition` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mAutoTransition == Transition.AUTO_ANIMATE_TO_START) {" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `MotionScene` requires synthetic accessor" - errorLine1=" : new TouchResponse(mMotionScene.mMotionLayout, onSwipe);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" int start = transition.mConstraintSetStart;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" int end = transition.mConstraintSetEnd;" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" int dest = mTransition.mConstraintSetEnd;" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" int from = mTransition.mConstraintSetStart;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `MotionScene` requires synthetic accessor" - errorLine1=" MotionLayout tl = mTransition.mMotionScene.mMotionLayout;" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor" - errorLine1=" MotionLayout tl = mTransition.mMotionScene.mMotionLayout;" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" if (mTransition.mConstraintSetStart == UNSET) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" tl.transitionToState(mTransition.mConstraintSetEnd);" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor" - errorLine1=" Transition t = new Transition(mTransition.mMotionScene, mTransition);" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" t.mConstraintSetStart = currentState;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" t.mConstraintSetEnd = mTransition.mConstraintSetEnd;" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" t.mConstraintSetEnd = mTransition.mConstraintSetEnd;" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor" - errorLine1=" Transition current = mTransition.mMotionScene.mCurrentTransition;" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionScene` of class `Transition` requires synthetic accessor" - errorLine1=" if (mTransition.mMotionScene.mCurrentTransition != mTransition) {" - errorLine2=" ~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor" - errorLine1=" mDuration = motionScene.mDefaultDuration;" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor" - errorLine1=" mDuration = motionScene.mDefaultDuration;" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLayoutDuringTransition` of class `MotionScene` requires synthetic accessor" - errorLine1=" mLayoutDuringTransition = motionScene.mLayoutDuringTransition;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDefaultDuration` of class `MotionScene` requires synthetic accessor" - errorLine1=" mDuration = motionScene.mDefaultDuration;" - errorLine2=" ~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mLayoutDuringTransition` of class `MotionScene` requires synthetic accessor" - errorLine1=" mLayoutDuringTransition = motionScene.mLayoutDuringTransition;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetMap` of class `MotionScene` requires synthetic accessor" - errorLine1=" motionScene.mConstraintSetMap.append(mConstraintSetEnd, cSet);" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `parseInclude` of class `MotionScene` requires synthetic accessor" - errorLine1=" int id = motionScene.parseInclude(context, mConstraintSetEnd);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetMap` of class `MotionScene` requires synthetic accessor" - errorLine1=" motionScene.mConstraintSetMap.append(mConstraintSetStart, cSet);" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `parseInclude` of class `MotionScene` requires synthetic accessor" - errorLine1=" int id = motionScene.parseInclude(context, mConstraintSetStart);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIsAbstract` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition == null && !transition.mIsAbstract) {" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.setRTL(mRtl);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mIsAbstract` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mIsAbstract) { // global transition only one for now" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mConstraintSetEnd == UNSET) {" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" transition.mTouchResponse =" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor" - errorLine1=" transition.mKeyFramesList.add(keyFrames);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor" - errorLine1=" for (KeyFrames keyFrames : mDefaultTransition.mKeyFramesList) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor" - errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor" - errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mConstraintSetStart == stateId) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor" - errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mKeyFramesList` of class `Transition` requires synthetic accessor" - errorLine1=" for (KeyFrames keyFrames : mCurrentTransition.mKeyFramesList) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (transition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition != null && mCurrentTransition.mTouchResponse != null;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" region = mCurrentTransition.mTouchResponse" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" region = mCurrentTransition.mTouchResponse" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.setDown(mLastTouchX, mLastTouchY);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" .mTouchResponse.getTouchRegion(mMotionLayout, cache);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.setUpTouchEvent(mLastTouchX, mLastTouchY);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.processTouchEvent(event," - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.scrollMove(dx, dy);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.scrollUp(dx, dy);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getProgressDirection(dx, dy);" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetStart` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mConstraintSetStart;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConstraintSetEnd` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mConstraintSetEnd;" - errorLine2=" ~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDefaultInterpolator` of class `Transition` requires synthetic accessor" - errorLine1=" switch (mCurrentTransition.mDefaultInterpolator) {" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDefaultInterpolatorString` of class `Transition` requires synthetic accessor" - errorLine1=" .getInterpolator(mCurrentTransition.mDefaultInterpolatorString);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDefaultInterpolatorID` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mDefaultInterpolatorID);" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mDuration` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mDuration;" - errorLine2=" ~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mPathMotionArc` of class `Transition` requires synthetic accessor" - errorLine1=" return (mCurrentTransition != null) ? mCurrentTransition.mPathMotionArc : UNSET;" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mStagger` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mStagger;" - errorLine2=" ~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getMaxAcceleration();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getMaxVelocity();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getSpringStiffness();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getSpringMass();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getSpringDamping();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getSpringStopThreshold();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getSpringBoundary();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getAutoCompleteMode();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" mCurrentTransition.mTouchResponse.setupTouch();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" if (mCurrentTransition != null && mCurrentTransition.mTouchResponse != null) {" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mTouchResponse` of class `Transition` requires synthetic accessor" - errorLine1=" return mCurrentTransition.mTouchResponse.getMoveWhenScrollAtTop();" - errorLine2=" ~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/MotionScene.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" int count = mMotionLayout.getChildCount();" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" View view = mMotionLayout.getChildAt(i);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" int currentId = mMotionLayout.getCurrentState();" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" mMotionLayout.getConstraintSet(currentId);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" ViewTransitionController.this, mMotionLayout," - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" int count = mMotionLayout.getChildCount();" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" View view = mMotionLayout.getChildAt(i);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" int currentId = mMotionLayout.getCurrentState();" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" mMotionLayout.getConstraintSet(currentId);" - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mMotionLayout` of class `ViewTransitionController` requires synthetic accessor" - errorLine1=" ViewTransitionController.this, mMotionLayout," - errorLine2=" ~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/constraintlayout/motion/widget/ViewTransitionController.java"/> - id="KotlinPropertyAccess" message="The getter return type (`String[]`) and setter parameter type (`String`) getter and setter methods for property `stateLabels` should have exactly the same type to allow be accessed as a property from Kotlin; see https://android.github.io/kotlin-guides/interop.html#property-prefixes" errorLine1=" public String[] getStateLabels() {"
diff --git a/core/core-performance-play-services/api/current.txt b/core/core-performance-play-services/api/current.txt index dbd1b15..7e46ef7 100644 --- a/core/core-performance-play-services/api/current.txt +++ b/core/core-performance-play-services/api/current.txt
@@ -7,17 +7,5 @@ property public int mediaPerformanceClass; } - @Deprecated public final class PlayServicesDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier { - ctor @Deprecated public PlayServicesDevicePerformanceSupplier(); - method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context); - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - field @Deprecated public static final androidx.core.performance.play.services.PlayServicesDevicePerformanceSupplier.Companion Companion; - } - - @Deprecated public static final class PlayServicesDevicePerformanceSupplier.Companion { - method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context); - } - }
diff --git a/core/core-performance-play-services/api/restricted_current.txt b/core/core-performance-play-services/api/restricted_current.txt index dbd1b15..7e46ef7 100644 --- a/core/core-performance-play-services/api/restricted_current.txt +++ b/core/core-performance-play-services/api/restricted_current.txt
@@ -7,17 +7,5 @@ property public int mediaPerformanceClass; } - @Deprecated public final class PlayServicesDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier { - ctor @Deprecated public PlayServicesDevicePerformanceSupplier(); - method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context); - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - field @Deprecated public static final androidx.core.performance.play.services.PlayServicesDevicePerformanceSupplier.Companion Companion; - } - - @Deprecated public static final class PlayServicesDevicePerformanceSupplier.Companion { - method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance(android.content.Context context); - } - }
diff --git a/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplier.kt b/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplier.kt deleted file mode 100644 index e0da88c..0000000 --- a/core/core-performance-play-services/src/main/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplier.kt +++ /dev/null
@@ -1,52 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@file:Suppress("DEPRECATION") - -package androidx.core.performance.play.services - -import android.content.Context -import androidx.core.performance.DevicePerformance -import androidx.core.performance.DevicePerformanceSupplier -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow - -/** Uses Google Play Services to supply media performance class data. */ -@Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING -) -class PlayServicesDevicePerformanceSupplier : DevicePerformanceSupplier { - - companion object { - /** - * Create DevicePerformance from the context backed by StaticDevicePerformanceSupplier. - * - * This should be done in [android.app.Application.onCreate]. - */ - @JvmStatic - fun createDevicePerformance( - // Real implementations will require a context - @Suppress("UNUSED_PARAMETER") context: Context - ): DevicePerformance = - DevicePerformance.create(PlayServicesDevicePerformanceSupplier()) - } - - override val mediaPerformanceClassFlow: Flow= flow { - emit(0) - // TODO(281079628): implement - } -}
diff --git a/core/core-performance-play-services/src/test/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplierTest.kt b/core/core-performance-play-services/src/test/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplierTest.kt deleted file mode 100644 index 4646c9c..0000000 --- a/core/core-performance-play-services/src/test/java/androidx/core/performance/play/services/PlayServicesDevicePerformanceSupplierTest.kt +++ /dev/null
@@ -1,30 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package androidx.core.performance.play.services - -import com.google.common.truth.Truth.assertThat -import org.junit.Test - -/** Unit tests for [PlayServicesDevicePerformanceSupplier]. */ -class PlayServicesDevicePerformanceSupplierTest { - - @Test - fun mediaPerformanceClassFlow_30() { - // TODO: b/289279260 - Correctly handle threads in tests without leaking. - assertThat(true).isEqualTo(true) - } -}
diff --git a/core/core-performance-testing/api/current.txt b/core/core-performance-testing/api/current.txt index f6e4c8e..6e565c7c 100644 --- a/core/core-performance-testing/api/current.txt +++ b/core/core-performance-testing/api/current.txt
@@ -7,11 +7,5 @@ property public int mediaPerformanceClass; } - @Deprecated public final class FakeDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier { - ctor @Deprecated public FakeDevicePerformanceSupplier(int mediaPerformanceClass); - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - } - }
diff --git a/core/core-performance-testing/api/restricted_current.txt b/core/core-performance-testing/api/restricted_current.txt index f6e4c8e..6e565c7c 100644 --- a/core/core-performance-testing/api/restricted_current.txt +++ b/core/core-performance-testing/api/restricted_current.txt
@@ -7,11 +7,5 @@ property public int mediaPerformanceClass; } - @Deprecated public final class FakeDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier { - ctor @Deprecated public FakeDevicePerformanceSupplier(int mediaPerformanceClass); - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - } - }
diff --git a/core/core-performance-testing/src/main/java/androidx/core/performance/testing/FakeDevicePerformanceSupplier.kt b/core/core-performance-testing/src/main/java/androidx/core/performance/testing/FakeDevicePerformanceSupplier.kt deleted file mode 100644 index cb5baab..0000000 --- a/core/core-performance-testing/src/main/java/androidx/core/performance/testing/FakeDevicePerformanceSupplier.kt +++ /dev/null
@@ -1,40 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@file:Suppress("DEPRECATION") - -package androidx.core.performance.testing - -import androidx.core.performance.DevicePerformanceSupplier -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow - -/** - * A DevicePerformanceSupplier that immediately emits the `mediaPerformanceClass` provided and - * completes the flow. - * - * @param mediaPerformanceClass The media performance class value to emit. - */ -@Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING -) -class FakeDevicePerformanceSupplier(private val mediaPerformanceClass: Int) : - DevicePerformanceSupplier { - override val mediaPerformanceClassFlow: Flow= flow { - emit(mediaPerformanceClass) - } -}
diff --git a/core/core-performance-testing/src/test/java/androidx/core/performance/testing/FakeDevicePerformanceSupplierTest.kt b/core/core-performance-testing/src/test/java/androidx/core/performance/testing/FakeDevicePerformanceSupplierTest.kt deleted file mode 100644 index 76787d6..0000000 --- a/core/core-performance-testing/src/test/java/androidx/core/performance/testing/FakeDevicePerformanceSupplierTest.kt +++ /dev/null
@@ -1,30 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package androidx.core.performance.testing - -import com.google.common.truth.Truth.assertThat -import org.junit.Test - -/** Unit tests for [FakeDevicePerformanceSupplier]. */ -class FakeDevicePerformanceSupplierTest { - - @Test - fun mediaPerformanceClassFlow_30() { - // TODO: b/289279260 - Correctly handle threads in tests without leaking. - assertThat(true).isEqualTo(true) - } -}
diff --git a/core/core-performance/api/current.txt b/core/core-performance/api/current.txt index bb15bcb..05ff76d2 100644 --- a/core/core-performance/api/current.txt +++ b/core/core-performance/api/current.txt
@@ -7,50 +7,9 @@ property public int mediaPerformanceClass; } - public final class DefaultDevicePerformanceRetriever implements androidx.core.performance.DevicePerformanceRetriever { - ctor public DefaultDevicePerformanceRetriever(); - method public int getPerformanceClass(); - } - @kotlin.jvm.JvmDefaultWithCompatibility public interface DevicePerformance { - method @Deprecated public static androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier); method public int getMediaPerformanceClass(); property public abstract int mediaPerformanceClass; - field @Deprecated public static final androidx.core.performance.DevicePerformance.Companion Companion; - } - - @Deprecated public static final class DevicePerformance.Companion { - method @Deprecated public androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier); - } - - public interface DevicePerformanceRetriever { - method public int getPerformanceClass(); - } - - @Deprecated public interface DevicePerformanceSupplier { - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public abstract kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - } - - public interface MediaPerformance { - method public static int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever); - field public static final androidx.core.performance.MediaPerformance.Companion Companion; - } - - public static final class MediaPerformance.Companion { - method public int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever); - } - - @Deprecated public final class StaticDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier { - ctor @Deprecated public StaticDevicePerformanceSupplier(); - method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance(); - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - field @Deprecated public static final androidx.core.performance.StaticDevicePerformanceSupplier.Companion Companion; - } - - @Deprecated public static final class StaticDevicePerformanceSupplier.Companion { - method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance(); } }
diff --git a/core/core-performance/api/restricted_current.txt b/core/core-performance/api/restricted_current.txt index bb15bcb..05ff76d2 100644 --- a/core/core-performance/api/restricted_current.txt +++ b/core/core-performance/api/restricted_current.txt
@@ -7,50 +7,9 @@ property public int mediaPerformanceClass; } - public final class DefaultDevicePerformanceRetriever implements androidx.core.performance.DevicePerformanceRetriever { - ctor public DefaultDevicePerformanceRetriever(); - method public int getPerformanceClass(); - } - @kotlin.jvm.JvmDefaultWithCompatibility public interface DevicePerformance { - method @Deprecated public static androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier); method public int getMediaPerformanceClass(); property public abstract int mediaPerformanceClass; - field @Deprecated public static final androidx.core.performance.DevicePerformance.Companion Companion; - } - - @Deprecated public static final class DevicePerformance.Companion { - method @Deprecated public androidx.core.performance.DevicePerformance create(androidx.core.performance.DevicePerformanceSupplier devicePerformanceSupplier); - } - - public interface DevicePerformanceRetriever { - method public int getPerformanceClass(); - } - - @Deprecated public interface DevicePerformanceSupplier { - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public abstract kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - } - - public interface MediaPerformance { - method public static int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever); - field public static final androidx.core.performance.MediaPerformance.Companion Companion; - } - - public static final class MediaPerformance.Companion { - method public int getPerformanceClass(optional androidx.core.performance.DevicePerformanceRetriever retriever); - } - - @Deprecated public final class StaticDevicePerformanceSupplier implements androidx.core.performance.DevicePerformanceSupplier { - ctor @Deprecated public StaticDevicePerformanceSupplier(); - method @Deprecated public static androidx.core.performance.DevicePerformance createDevicePerformance(); - method @Deprecated public kotlinx.coroutines.flow.FlowgetMediaPerformanceClassFlow(); - property @Deprecated public kotlinx.coroutines.flow.FlowmediaPerformanceClassFlow; - field @Deprecated public static final androidx.core.performance.StaticDevicePerformanceSupplier.Companion Companion; - } - - @Deprecated public static final class StaticDevicePerformanceSupplier.Companion { - method @Deprecated public androidx.core.performance.DevicePerformance createDevicePerformance(); } }
diff --git a/core/core-performance/integration-tests/testapp/build.gradle b/core/core-performance/integration-tests/testapp/build.gradle new file mode 100644 index 0000000..2925db8 --- /dev/null +++ b/core/core-performance/integration-tests/testapp/build.gradle
@@ -0,0 +1,36 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + id("AndroidXPlugin") + id("com.android.application") + id("org.jetbrains.kotlin.android") +} + +dependencies { + api(libs.kotlinStdlib) + implementation(project(":core:core-performance")) + implementation libs.constraintLayout +} + +android { + defaultConfig { + applicationId "androidx.core.performance.testapp" + minSdkVersion 24 + } + + namespace "androidx.core.performance.testapp" +} \ No newline at end of file
diff --git a/core/core-performance/integration-tests/testapp/src/main/AndroidManifest.xml b/core/core-performance/integration-tests/testapp/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e4235b71e --- /dev/null +++ b/core/core-performance/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -0,0 +1,32 @@ + + ++ + + + android:name=".MpcActivity" + + android:exported="true"> + + + + \ No newline at end of file+ + + + +
diff --git a/core/core-performance/integration-tests/testapp/src/main/java/androidx/core/performance/testapp/MpcActivity.kt b/core/core-performance/integration-tests/testapp/src/main/java/androidx/core/performance/testapp/MpcActivity.kt new file mode 100644 index 0000000..b4c68ab --- /dev/null +++ b/core/core-performance/integration-tests/testapp/src/main/java/androidx/core/performance/testapp/MpcActivity.kt
@@ -0,0 +1,42 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.core.performance.testapp + +import android.app.Activity +import android.os.Bundle +import android.view.View +import android.widget.TextView + +/** Sample Media Performance Class activity. */ +class MpcActivity : Activity() { + + private lateinit var resultTextView: TextView + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_mpc) + resultTextView = findViewById(R.id.resultTextView) + } + + fun doSomething(view: View) { + resultTextView.text = view.context.getString(getExperienceStringId()) + } + + private fun getExperienceStringId(): Int { + return R.string.mpc_0_experience_string + } +}
diff --git a/core/core-performance/integration-tests/testapp/src/main/res/layout/activity_mpc.xml b/core/core-performance/integration-tests/testapp/src/main/res/layout/activity_mpc.xml new file mode 100644 index 0000000..7a2010c --- /dev/null +++ b/core/core-performance/integration-tests/testapp/src/main/res/layout/activity_mpc.xml
@@ -0,0 +1,47 @@ + + + ++ xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".MpcActivity"> + + \ No newline at end of file
diff --git a/core/core-performance/integration-tests/testapp/src/main/res/values/strings.xml b/core/core-performance/integration-tests/testapp/src/main/res/values/strings.xml new file mode 100644 index 0000000..4c2d1b7 --- /dev/null +++ b/core/core-performance/integration-tests/testapp/src/main/res/values/strings.xml
@@ -0,0 +1,23 @@ + + ++ Default and simple experience. +Media Performance Class 10 experience. +Media Performance Class 11 experience. +Media Performance Class 12 experience. +Media Performance Class 13 experience. + \ No newline at end of file
diff --git a/core/core-performance/samples/build.gradle b/core/core-performance/samples/build.gradle index 0087990..ef28e3c 100644 --- a/core/core-performance/samples/build.gradle +++ b/core/core-performance/samples/build.gradle
@@ -30,7 +30,7 @@ } androidx { - name = "cSamples" + name = "Core Performance Samples" type = LibraryType.SAMPLES mavenVersion = LibraryVersions.CORE_PERFORMANCE inceptionYear = "2021"
diff --git a/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt b/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt index ac4214b..5f5be1c 100644 --- a/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt +++ b/core/core-performance/samples/src/main/java/androidx/core/performance/samples/Usage.kt
@@ -14,11 +14,10 @@ * limitations under the License. */ -@file:Suppress("DEPRECATION") - package androidx.core.performance.samples import android.app.Application +import android.os.Build import androidx.annotation.Sampled import androidx.core.performance.DefaultDevicePerformance import androidx.core.performance.DevicePerformance @@ -36,6 +35,17 @@ } fun doSomeThing() { + when { + devicePerformance.mediaPerformanceClass >= Build.VERSION_CODES.TIRAMISU -> { + // Provide the most premium experience for highest performing devices + } + devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.R -> { + // Provide a high quality experience + } + else -> { + // Remove extras to keep experience functional + } + } } } }
diff --git a/core/core-performance/src/main/java/androidx/core/performance/DefaultDevicePerformance.kt b/core/core-performance/src/main/java/androidx/core/performance/DefaultDevicePerformance.kt new file mode 100644 index 0000000..3917fad --- /dev/null +++ b/core/core-performance/src/main/java/androidx/core/performance/DefaultDevicePerformance.kt
@@ -0,0 +1,97 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.core.performance + +import android.os.Build + +/** + * Reports the media performance class of the device. Contains statically specified values + * and can be used as a fallback alternative to suppliers with dynamic values. + */ +class DefaultDevicePerformance() : DevicePerformance { + private val PERFCLASS_11: Int = Build.VERSION_CODES.R + private val PERFCLASS_12: Int = Build.VERSION_CODES.S + private val PERFCLASS_13: Int = Build.VERSION_CODES.TIRAMISU + private val PERFCLASS_NONE: Int = 0 + + private val fingerprints: HashMap= hashMapOf( + // for unit testing, no actual products with these + "robolectric-BrandX/ProductX/Device30:11" to PERFCLASS_11, + "robolectric-BrandX/ProductX/Device31:12" to PERFCLASS_12, + + // actual devices in the field + "OPPO/CPH2025EEA/OP4BA2L1:12" to PERFCLASS_11, + "OPPO/CPH2207EEA/OP4F0BL1:12" to PERFCLASS_11, + "OPPO/PENM00/OP4EC1:11" to PERFCLASS_11, + "OnePlus/OnePlus7TTMO/OnePlus7TTMO:11" to PERFCLASS_11, + "OnePlus/OnePlus8_BETA/OnePlus8:11" to PERFCLASS_11, + "Xiaomi/umi_global/umi:11" to PERFCLASS_11, + "realme/RMX2085/RMX2085L1:11" to PERFCLASS_11, + "samsung/c1qsqw/c1q:12" to PERFCLASS_11, + "samsung/o1quew/o1q:12" to PERFCLASS_11, + "samsung/r0quew/r0q:12" to PERFCLASS_11, + "samsung/r0sxxx/r0s:12" to PERFCLASS_11, + ) + + override val mediaPerformanceClass = getCalculatedMediaPerformanceClass() + + private fun getMediaPerformanceClassFromFingerprint(): Int { + + val brand = Build.BRAND + val product = Build.PRODUCT + val device = Build.DEVICE + val release = Build.VERSION.RELEASE + + val synthesized = "$brand/$product/$device:$release" + var pc = fingerprints[synthesized] + + if (pc == null) { + pc = PERFCLASS_NONE + } + return pc + } + + private fun getMediaPerformanceClassFromProperty(): Int { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + return Build.VERSION.MEDIA_PERFORMANCE_CLASS + } + + return PERFCLASS_NONE + } + + private fun isPerformanceClassValid(pc: Int): Boolean = pc >= PERFCLASS_11 + + private fun getCalculatedMediaPerformanceClass(): Int { + + // device's declared property takes precedence over our in-library table. + val mpcViaProperty: Int = + getMediaPerformanceClassFromProperty() + + if (isPerformanceClassValid(mpcViaProperty)) { + return mpcViaProperty + } + + val mpcViaFingerprint: Int = + getMediaPerformanceClassFromFingerprint() + + if (isPerformanceClassValid(mpcViaFingerprint)) { + return mpcViaFingerprint + } + + return PERFCLASS_NONE + } +}
diff --git a/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt b/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt index 264ba89..8b187f1 100644 --- a/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt +++ b/core/core-performance/src/main/java/androidx/core/performance/DevicePerformance.kt
@@ -14,14 +14,8 @@ * limitations under the License. */ -@file:Suppress("DEPRECATION") - package androidx.core.performance -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.last -import kotlinx.coroutines.runBlocking - @JvmDefaultWithCompatibility /** * Reports the media performance class of the device. @@ -49,71 +43,4 @@ * */ val mediaPerformanceClass: Int - - @Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING - ) - companion object { - /** - * Create PerformanceClass from the context. - * - * This should be done in [android.app.Application.onCreate]. - * - * Developers should call the createDevicePerformance companion method of - * the desired DevicePerformanceSupplier implementation. - * - * @param devicePerformanceSupplier Supplies device performance. - */ - @JvmStatic - @Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING - ) - fun create( - devicePerformanceSupplier: DevicePerformanceSupplier - ): DevicePerformance = DefaultDevicePerformanceImpl(devicePerformanceSupplier) - } -} - -/** - * Default DevicePerformance implementation that always provides 0. - */ -class DefaultDevicePerformance() : DevicePerformance { - override val mediaPerformanceClass = 0 -} - -/** - * Supplies a flow of mediaPerformanceClass - */ -@Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING -) -interface DevicePerformanceSupplier { - - val mediaPerformanceClassFlow: Flow-} - -/** - * Lazy caches the mediaPerformanceClass - */ -@Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING -) -private class DefaultDevicePerformanceImpl( - val devicePerformanceSupplier: DevicePerformanceSupplier -) : DevicePerformance { - private val logTag = "DefaultDevicePerformanceImpl" - - @Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING - ) - override val mediaPerformanceClass by lazy(mode = LazyThreadSafetyMode.PUBLICATION) { - runBlocking { - devicePerformanceSupplier.mediaPerformanceClassFlow.last() - } - } }
diff --git a/core/core-performance/src/main/java/androidx/core/performance/MediaPerformance.kt b/core/core-performance/src/main/java/androidx/core/performance/MediaPerformance.kt deleted file mode 100644 index 35282c9..0000000 --- a/core/core-performance/src/main/java/androidx/core/performance/MediaPerformance.kt +++ /dev/null
@@ -1,44 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package androidx.core.performance - -/** - * Interface implemented by all device performance retrievers. - */ -interface DevicePerformanceRetriever { - fun getPerformanceClass(): Int -} - -/** - * Default implementation for a device performance retriever. - */ -class DefaultDevicePerformanceRetriever : DevicePerformanceRetriever { - override fun getPerformanceClass(): Int = 0 -} - -/** - * Main interface used to get the performance class using a specific retriever. - */ -interface MediaPerformance { - companion object { - @JvmStatic - fun getPerformanceClass( - retriever: DevicePerformanceRetriever = - DefaultDevicePerformanceRetriever() - ): Int = retriever.getPerformanceClass() - } -}
diff --git a/core/core-performance/src/main/java/androidx/core/performance/StaticDevicePerformanceSupplier.kt b/core/core-performance/src/main/java/androidx/core/performance/StaticDevicePerformanceSupplier.kt deleted file mode 100644 index 3a3579d..0000000 --- a/core/core-performance/src/main/java/androidx/core/performance/StaticDevicePerformanceSupplier.kt +++ /dev/null
@@ -1,125 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -@file:Suppress("DEPRECATION") - -package androidx.core.performance - -import android.os.Build -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow - -/** - * Reports the media performance class of the device. Contains statically specified values - * and can be used as a fallback alternative to suppliers with dynamic values. - */ -@Deprecated( - message = "Replaced by DevicePerformance related implementations.", - level = DeprecationLevel.WARNING -) -class StaticDevicePerformanceSupplier : DevicePerformanceSupplier { - - companion object { - /** - * Create DevicePerformance from the context backed by StaticDevicePerformanceSupplier. - * - * This should be done in [android.app.Application.onCreate]. - */ - @JvmStatic - fun createDevicePerformance(): DevicePerformance = - DevicePerformance.create(StaticDevicePerformanceSupplier()) - } - - override val mediaPerformanceClassFlow: Flow= flow { - emit(calculateMediaPerformanceClass()) - } - - // the next code isn't published/finalized until late - private val PERFCLASS_11: Int = Build.VERSION_CODES.R - private val PERFCLASS_12: Int = Build.VERSION_CODES.S - private val PERFCLASS_13: Int = 33 - - // we synthesize our own fingerprint: - // Brand/Product/Device:api - // this is currently the prefix in the actual build fingerprints, - // so it is easy to cut&paste info from there into this list. - // - private val fingerprints: HashMap= hashMapOf( - // for unit testing, no actual products with these - "robolectric-BrandX/ProductX/Device30:11" to PERFCLASS_11, - "robolectric-BrandX/ProductX/Device31:12" to PERFCLASS_12, - - // actual devices in the field - "OPPO/CPH2025EEA/OP4BA2L1:12" to PERFCLASS_11, - "OPPO/CPH2207EEA/OP4F0BL1:12" to PERFCLASS_11, - "OPPO/PENM00/OP4EC1:11" to PERFCLASS_11, - "OnePlus/OnePlus7TTMO/OnePlus7TTMO:11" to PERFCLASS_11, - "OnePlus/OnePlus8_BETA/OnePlus8:11" to PERFCLASS_11, - "Xiaomi/umi_global/umi:11" to PERFCLASS_11, - "realme/RMX2085/RMX2085L1:11" to PERFCLASS_11, - "samsung/c1qsqw/c1q:12" to PERFCLASS_11, - "samsung/o1quew/o1q:12" to PERFCLASS_11, - "samsung/r0quew/r0q:12" to PERFCLASS_11, - "samsung/r0sxxx/r0s:12" to PERFCLASS_11, - ) - - private fun calculateMediaPerformanceClassFromFingerprint(): Int { - - val brand = Build.BRAND - val product = Build.PRODUCT - val device = Build.DEVICE - val release = Build.VERSION.RELEASE - - val synthesized = "$brand/$product/$device:$release" - var pc = fingerprints[synthesized] - - if (pc == null) { - pc = 0 - } - return pc - } - - private fun calculateMediaPerformanceClassFromProperty(): Int { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - return Build.VERSION.MEDIA_PERFORMANCE_CLASS - } - return 0 - } - - // discard illegal performance class numbers - private fun boundPC(pc: Int): Int { - if (pc < PERFCLASS_11) { - // performance class 11 is the first legal value for performance class - return 0 - } - return pc - } - - private fun calculateMediaPerformanceClass(): Int { - - // device's declared property takes precedence over our in-library table. - // - // what this flow doesn't let us express is a device with property PC11 - // to actually upgraded to PC12 via the table. - // - val viaProperty: Int = boundPC(calculateMediaPerformanceClassFromProperty()) - if (viaProperty > 0) { - return viaProperty - } - val viaFingerprint: Int = calculateMediaPerformanceClassFromFingerprint() - return boundPC(viaFingerprint) - } -}
diff --git a/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt b/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt index 33eafcf..5a5b514 100644 --- a/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt +++ b/core/core-performance/src/test/java/androidx/core/performance/DefaultDevicePerformanceTest.kt
@@ -16,15 +16,61 @@ package androidx.core.performance +import android.os.Build.VERSION_CODES.R +import android.os.Build.VERSION_CODES.S import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.test.runTest import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.shadows.ShadowBuild +import org.robolectric.shadows.ShadowSystemProperties /** Unit tests for [DefaultDevicePerformance]. */ +@RunWith(RobolectricTestRunner::class) class DefaultDevicePerformanceTest { @Test - fun mediaPerformanceClass() { + @Config(maxSdk = R, minSdk = R) + fun mediaPerformanceClass_SdkR_DeclaredMpc() = runTest { + ShadowSystemProperties.override("ro.odm.build.media_performance_class", "30") + ShadowBuild.reset() val mpc = DefaultDevicePerformance().mediaPerformanceClass assertThat(mpc).isEqualTo(0) } + + @Test + @Config(minSdk = S) + fun mediaPerformanceClass_SdkS_DeclaredMpc() = runTest { + ShadowSystemProperties.override("ro.odm.build.media_performance_class", "30") + ShadowBuild.reset() + val mpc = DefaultDevicePerformance().mediaPerformanceClass + assertThat(mpc).isEqualTo(30) + } + + @Test + @Config(minSdk = S) + fun mediaPerformanceClass_SdkS_BuildFingerprintMatch() = runTest { + ShadowBuild.reset() + ShadowBuild.setBrand("robolectric-BrandX") + ShadowBuild.setProduct("ProductX") + ShadowBuild.setDevice("Device31") + ShadowBuild.setVersionRelease("12") + val mpc = DefaultDevicePerformance().mediaPerformanceClass + assertThat(mpc).isEqualTo(31) + } + + @Test + @Config(minSdk = S) + fun mediaPerformanceClass_SdkS_DeclaredMpc_BuildFingerprintMatch() = runTest { + ShadowSystemProperties.override("ro.odm.build.media_performance_class", "30") + ShadowBuild.reset() + ShadowBuild.setBrand("robolectric-BrandX") + ShadowBuild.setProduct("ProductX") + ShadowBuild.setDevice("Device31") + ShadowBuild.setVersionRelease("12") + val mpc = DefaultDevicePerformance().mediaPerformanceClass + assertThat(mpc).isEqualTo(30) + } }
diff --git a/core/core-performance/src/test/java/androidx/core/performance/DevicePerformanceTest.kt b/core/core-performance/src/test/java/androidx/core/performance/DevicePerformanceTest.kt deleted file mode 100644 index 9914490..0000000 --- a/core/core-performance/src/test/java/androidx/core/performance/DevicePerformanceTest.kt +++ /dev/null
@@ -1,30 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package androidx.core.performance - -import com.google.common.truth.Truth.assertThat -import org.junit.Test - -/** Unit tests for [DevicePerformance]. */ -class DevicePerformanceTest { - - @Test - fun mediaPerformanceClass() { - // TODO: b/289279260 - Correctly handle threads in tests without leaking. - assertThat(true).isEqualTo(true) - } -}
diff --git a/core/core-performance/src/test/java/androidx/core/performance/StaticDevicePerformanceTest.kt b/core/core-performance/src/test/java/androidx/core/performance/StaticDevicePerformanceTest.kt deleted file mode 100644 index e27e43d..0000000 --- a/core/core-performance/src/test/java/androidx/core/performance/StaticDevicePerformanceTest.kt +++ /dev/null
@@ -1,30 +0,0 @@ -/* - * Copyright 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package androidx.core.performance - -import com.google.common.truth.Truth.assertThat -import org.junit.Test - -/** Unit tests for [StaticDevicePerformanceSupplier]. */ -class StaticDevicePerformanceTest { - - @Test - fun getMediaPerformanceClass_sdk30() { - // TODO: b/289279260 - Correctly handle threads in tests without leaking. - assertThat(true).isEqualTo(true) - } -}
diff --git a/credentials/credentials-play-services-auth/api/1.2.0-beta02.txt b/credentials/credentials-play-services-auth/api/1.2.0-beta02.txt new file mode 100644 index 0000000..e6f50d0 --- /dev/null +++ b/credentials/credentials-play-services-auth/api/1.2.0-beta02.txt
@@ -0,0 +1 @@ +// Signature format: 4.0
diff --git a/credentials/credentials-play-services-auth/api/res-1.2.0-beta02.txt b/credentials/credentials-play-services-auth/api/res-1.2.0-beta02.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/credentials/credentials-play-services-auth/api/res-1.2.0-beta02.txt
diff --git a/credentials/credentials-play-services-auth/api/restricted_1.2.0-beta02.txt b/credentials/credentials-play-services-auth/api/restricted_1.2.0-beta02.txt new file mode 100644 index 0000000..e6f50d0 --- /dev/null +++ b/credentials/credentials-play-services-auth/api/restricted_1.2.0-beta02.txt
@@ -0,0 +1 @@ +// Signature format: 4.0
diff --git a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt index a18deea..4032e6e 100644 --- a/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt +++ b/credentials/credentials-play-services-auth/src/main/java/androidx/credentials/playservices/controllers/CreatePublicKeyCredential/PublicKeyCredentialControllerUtility.kt
@@ -74,7 +74,7 @@ private val JSON_KEY_CLIENT_DATA = "clientDataJSON" private val JSON_KEY_ATTESTATION_OBJ = "attestationObject" - private val JSON_KEY_AUTH_DATA = "authenticationData" + private val JSON_KEY_AUTH_DATA = "authenticatorData" private val JSON_KEY_SIGNATURE = "signature" private val JSON_KEY_USER_HANDLE = "userHandle" private val JSON_KEY_RESPONSE = "response"
diff --git a/credentials/credentials/api/1.2.0-beta02.txt b/credentials/credentials/api/1.2.0-beta02.txt new file mode 100644 index 0000000..8c9cf86 --- /dev/null +++ b/credentials/credentials/api/1.2.0-beta02.txt
@@ -0,0 +1,902 @@ +// Signature format: 4.0 +package androidx.credentials { + + public final class ClearCredentialStateRequest { + ctor public ClearCredentialStateRequest(); + } + + public abstract class CreateCredentialRequest { + method public final android.os.Bundle getCandidateQueryData(); + method public final android.os.Bundle getCredentialData(); + method public final androidx.credentials.CreateCredentialRequest.DisplayInfo getDisplayInfo(); + method public final String? getOrigin(); + method public final boolean getPreferImmediatelyAvailableCredentials(); + method public final String getType(); + method public final boolean isAutoSelectAllowed(); + method public final boolean isSystemProviderRequired(); + property public final android.os.Bundle candidateQueryData; + property public final android.os.Bundle credentialData; + property public final androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo; + property public final boolean isAutoSelectAllowed; + property public final boolean isSystemProviderRequired; + property public final String? origin; + property public final boolean preferImmediatelyAvailableCredentials; + property public final String type; + } + + public static final class CreateCredentialRequest.DisplayInfo { + ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId); + ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, optional CharSequence? userDisplayName); + ctor public CreateCredentialRequest.DisplayInfo(CharSequence userId, CharSequence? userDisplayName, String? preferDefaultProvider); + method public CharSequence? getUserDisplayName(); + method public CharSequence getUserId(); + property public final CharSequence? userDisplayName; + property public final CharSequence userId; + } + + public abstract class CreateCredentialResponse { + method public final android.os.Bundle getData(); + method public final String getType(); + property public final android.os.Bundle data; + property public final String type; + } + + public class CreateCustomCredentialRequest extends androidx.credentials.CreateCredentialRequest { + ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo); + ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed); + ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin); + ctor public CreateCustomCredentialRequest(String type, android.os.Bundle credentialData, android.os.Bundle candidateQueryData, boolean isSystemProviderRequired, androidx.credentials.CreateCredentialRequest.DisplayInfo displayInfo, optional boolean isAutoSelectAllowed, optional String? origin, optional boolean preferImmediatelyAvailableCredentials); + } + + public class CreateCustomCredentialResponse extends androidx.credentials.CreateCredentialResponse { + ctor public CreateCustomCredentialResponse(String type, android.os.Bundle data); + } + + public final class CreatePasswordRequest extends androidx.credentials.CreateCredentialRequest { + ctor public CreatePasswordRequest(String id, String password); + ctor public CreatePasswordRequest(String id, String password, optional String? origin); + ctor public CreatePasswordRequest(String id, String password, optional String? origin, optional boolean preferImmediatelyAvailableCredentials); + ctor public CreatePasswordRequest(String id, String password, optional String? origin, optional boolean preferImmediatelyAvailableCredentials, optional boolean isAutoSelectAllowed); + ctor public CreatePasswordRequest(String id, String password, String? origin, String? preferDefaultProvider, boolean preferImmediatelyAvailableCredentials, boolean isAutoSelectAllowed); + method public String getId(); + method public String getPassword(); + property public final String id; + property public final String password; + } + + public final class CreatePasswordResponse extends androidx.credentials.CreateCredentialResponse { + ctor public CreatePasswordResponse(); + } + + public final class CreatePublicKeyCredentialRequest extends androidx.credentials.CreateCredentialRequest { + ctor public CreatePublicKeyCredentialRequest(String requestJson); + ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash); + ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials); + ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin); + ctor public CreatePublicKeyCredentialRequest(String requestJson, optional byte[]? clientDataHash, optional boolean preferImmediatelyAvailableCredentials, optional String? origin, optional boolean isAutoSelectAllowed); + ctor public CreatePublicKeyCredentialRequest(String requestJson, byte[]? clientDataHash, boolean preferImmediatelyAvailableCredentials, String? origin, String? preferDefaultProvider, boolean isAutoSelectAllowed); + method public byte[]? getClientDataHash(); + method public String getRequestJson(); + property public final byte[]? clientDataHash; + property public final String requestJson; + } + + public final class CreatePublicKeyCredentialResponse extends androidx.credentials.CreateCredentialResponse { + ctor public CreatePublicKeyCredentialResponse(String registrationResponseJson); + method public String getRegistrationResponseJson(); + property public final String registrationResponseJson; + } + + public abstract class Credential { + method public final android.os.Bundle getData(); + method public final String getType(); + property public final android.os.Bundle data; + property public final String type; + } + + @RequiresApi(16) public interface CredentialManager { + method public default suspend Object? clearCredentialState(androidx.credentials.ClearCredentialStateRequest request, kotlin.coroutines.Continuation super kotlin.Unit>); + method public void clearCredentialStateAsync(androidx.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + field public static final androidx.credentials.CredentialManager.Companion Companion; + } + + public static final class CredentialManager.Companion { + method public androidx.credentials.CredentialManager create(android.content.Context context); + } + + public interface CredentialManagerCallback{ + method public void onError(E e); + method public void onResult(R result); + } + + public abstract class CredentialOption { + method public final java.util.SetgetAllowedProviders(); + 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.SetallowedProviders; + 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.CredentialManagerCallbackcallback); + method public void onCreateCredential(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallbackcallback); + method public void onGetCredential(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + method @RequiresApi(34) public default void onPrepareCredential(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallbackcallback); + } + + 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.ListgetCredentialOptions(); + method public String? getOrigin(); + method public boolean getPreferIdentityDocUi(); + method public boolean getPreferImmediatelyAvailableCredentials(); + method public android.content.ComponentName? getPreferUiBrandingComponentName(); + property public final java.util.ListcredentialOptions; + 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.SetallowedProviders); + } + + public final class GetPasswordOption extends androidx.credentials.CredentialOption { + ctor public GetPasswordOption(); + ctor public GetPasswordOption(optional java.util.SetallowedUserIds); + ctor public GetPasswordOption(optional java.util.SetallowedUserIds, optional boolean isAutoSelectAllowed); + ctor public GetPasswordOption(optional java.util.SetallowedUserIds, optional boolean isAutoSelectAllowed, optional java.util.Set + method public java.util.SetallowedProviders); getAllowedUserIds(); + property public final java.util.SetallowedUserIds; + } + + 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.SetallowedProviders); + method public byte[]? getClientDataHash(); + method public String getRequestJson(); + property public final byte[]? clientDataHash; + property public final String requestJson; + } + + public final class PasswordCredential extends androidx.credentials.Credential { + ctor public PasswordCredential(String id, String password); + method public String getId(); + method public String getPassword(); + property public final String id; + property public final String password; + field public static final androidx.credentials.PasswordCredential.Companion Companion; + field public static final String TYPE_PASSWORD_CREDENTIAL = "android.credentials.TYPE_PASSWORD_CREDENTIAL"; + } + + public static final class PasswordCredential.Companion { + } + + @RequiresApi(34) public final class PrepareGetCredentialResponse { + method public kotlin.jvm.functions.Function1? getCredentialTypeDelegate(); + method public kotlin.jvm.functions.Function0? getHasAuthResultsDelegate(); + method public kotlin.jvm.functions.Function0? getHasRemoteResultsDelegate(); + method public androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? getPendingGetCredentialHandle(); + method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasAuthenticationResults(); + method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasCredentialResults(String credentialType); + method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasRemoteResults(); + method public boolean isNullHandlesForTest(); + property public final kotlin.jvm.functions.Function1? credentialTypeDelegate; + property public final kotlin.jvm.functions.Function0? hasAuthResultsDelegate; + property public final kotlin.jvm.functions.Function0? hasRemoteResultsDelegate; + property public final boolean isNullHandlesForTest; + property public final androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? pendingGetCredentialHandle; + } + + @RequiresApi(34) public static final class PrepareGetCredentialResponse.PendingGetCredentialHandle { + ctor public PrepareGetCredentialResponse.PendingGetCredentialHandle(android.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? frameworkHandle); + } + + @VisibleForTesting public static final class PrepareGetCredentialResponse.TestBuilder { + ctor public PrepareGetCredentialResponse.TestBuilder(); + method public androidx.credentials.PrepareGetCredentialResponse build(); + method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setCredentialTypeDelegate(kotlin.jvm.functions.Function1 super java.lang.String,java.lang.Boolean> handler); + method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasAuthResultsDelegate(kotlin.jvm.functions.Function0handler); + method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasRemoteResultsDelegate(kotlin.jvm.functions.Function0handler); + } + + 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.ListcreateEntries, 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.ListgetCreateEntries(); + method public androidx.credentials.provider.RemoteEntry? getRemoteEntry(); + property public final java.util.ListcreateEntries; + 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.ListcreateEntries); + 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.ListgetBeginGetCredentialOptions(); + method public androidx.credentials.provider.CallingAppInfo? getCallingAppInfo(); + property public final java.util.ListbeginGetCredentialOptions; + 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.Listactions, optional java.util.List + 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.ListauthenticationActions, optional androidx.credentials.provider.RemoteEntry? remoteEntry); getActions(); + method public java.util.ListgetAuthenticationActions(); + method public java.util.ListgetCredentialEntries(); + method public androidx.credentials.provider.RemoteEntry? getRemoteEntry(); + property public final java.util.Listactions; + property public final java.util.ListauthenticationActions; + property public final java.util.ListcredentialEntries; + 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.Listactions); + method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setAuthenticationActions(java.util.ListauthenticationEntries); + 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.SetallowedUserIds, 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.SetgetAllowedUserIds(); + property public final java.util.SetallowedUserIds; + } + + 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.OutcomeReceivercallback); + method public abstract void onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public final void onBeginGetCredential(android.service.credentials.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public abstract void onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public final void onClearCredentialState(android.service.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public abstract void onClearCredentialStateRequest(androidx.credentials.provider.ProviderClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + } + + @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.ListgetCredentialOptions(); + property public final androidx.credentials.provider.CallingAppInfo callingAppInfo; + property public final java.util.ListcredentialOptions; + } + + @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.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + field public static final androidx.credentials.CredentialManager.Companion Companion; + } + + public static final class CredentialManager.Companion { + method public androidx.credentials.CredentialManager create(android.content.Context context); + } + + public interface CredentialManagerCallback{ + method public void onError(E e); + method public void onResult(R result); + } + + public abstract class CredentialOption { + method public final java.util.SetgetAllowedProviders(); + 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.SetallowedProviders; + 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.CredentialManagerCallbackcallback); + method public void onCreateCredential(android.content.Context context, androidx.credentials.CreateCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallbackcallback); + method public void onGetCredential(android.content.Context context, androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallbackcallback); + 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.CredentialManagerCallbackcallback); + method @RequiresApi(34) public default void onPrepareCredential(androidx.credentials.GetCredentialRequest request, android.os.CancellationSignal? cancellationSignal, java.util.concurrent.Executor executor, androidx.credentials.CredentialManagerCallbackcallback); + } + + 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.ListgetCredentialOptions(); + method public String? getOrigin(); + method public boolean getPreferIdentityDocUi(); + method public boolean getPreferImmediatelyAvailableCredentials(); + method public android.content.ComponentName? getPreferUiBrandingComponentName(); + property public final java.util.ListcredentialOptions; + 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.SetallowedProviders); + } + + public final class GetPasswordOption extends androidx.credentials.CredentialOption { + ctor public GetPasswordOption(); + ctor public GetPasswordOption(optional java.util.SetallowedUserIds); + ctor public GetPasswordOption(optional java.util.SetallowedUserIds, optional boolean isAutoSelectAllowed); + ctor public GetPasswordOption(optional java.util.SetallowedUserIds, optional boolean isAutoSelectAllowed, optional java.util.Set + method public java.util.SetallowedProviders); getAllowedUserIds(); + property public final java.util.SetallowedUserIds; + } + + 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.SetallowedProviders); + method public byte[]? getClientDataHash(); + method public String getRequestJson(); + property public final byte[]? clientDataHash; + property public final String requestJson; + } + + public final class PasswordCredential extends androidx.credentials.Credential { + ctor public PasswordCredential(String id, String password); + method public String getId(); + method public String getPassword(); + property public final String id; + property public final String password; + field public static final androidx.credentials.PasswordCredential.Companion Companion; + field public static final String TYPE_PASSWORD_CREDENTIAL = "android.credentials.TYPE_PASSWORD_CREDENTIAL"; + } + + public static final class PasswordCredential.Companion { + } + + @RequiresApi(34) public final class PrepareGetCredentialResponse { + method public kotlin.jvm.functions.Function1? getCredentialTypeDelegate(); + method public kotlin.jvm.functions.Function0? getHasAuthResultsDelegate(); + method public kotlin.jvm.functions.Function0? getHasRemoteResultsDelegate(); + method public androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? getPendingGetCredentialHandle(); + method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasAuthenticationResults(); + method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasCredentialResults(String credentialType); + method @RequiresPermission(android.Manifest.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS) public boolean hasRemoteResults(); + method public boolean isNullHandlesForTest(); + property public final kotlin.jvm.functions.Function1? credentialTypeDelegate; + property public final kotlin.jvm.functions.Function0? hasAuthResultsDelegate; + property public final kotlin.jvm.functions.Function0? hasRemoteResultsDelegate; + property public final boolean isNullHandlesForTest; + property public final androidx.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? pendingGetCredentialHandle; + } + + @RequiresApi(34) public static final class PrepareGetCredentialResponse.PendingGetCredentialHandle { + ctor public PrepareGetCredentialResponse.PendingGetCredentialHandle(android.credentials.PrepareGetCredentialResponse.PendingGetCredentialHandle? frameworkHandle); + } + + @VisibleForTesting public static final class PrepareGetCredentialResponse.TestBuilder { + ctor public PrepareGetCredentialResponse.TestBuilder(); + method public androidx.credentials.PrepareGetCredentialResponse build(); + method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setCredentialTypeDelegate(kotlin.jvm.functions.Function1 super java.lang.String,java.lang.Boolean> handler); + method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasAuthResultsDelegate(kotlin.jvm.functions.Function0handler); + method @VisibleForTesting public androidx.credentials.PrepareGetCredentialResponse.TestBuilder setHasRemoteResultsDelegate(kotlin.jvm.functions.Function0handler); + } + + 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.ListcreateEntries, 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.ListgetCreateEntries(); + method public androidx.credentials.provider.RemoteEntry? getRemoteEntry(); + property public final java.util.ListcreateEntries; + 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.ListcreateEntries); + 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.ListgetBeginGetCredentialOptions(); + method public androidx.credentials.provider.CallingAppInfo? getCallingAppInfo(); + property public final java.util.ListbeginGetCredentialOptions; + 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.Listactions, optional java.util.List + 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.ListauthenticationActions, optional androidx.credentials.provider.RemoteEntry? remoteEntry); getActions(); + method public java.util.ListgetAuthenticationActions(); + method public java.util.ListgetCredentialEntries(); + method public androidx.credentials.provider.RemoteEntry? getRemoteEntry(); + property public final java.util.Listactions; + property public final java.util.ListauthenticationActions; + property public final java.util.ListcredentialEntries; + 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.Listactions); + method public androidx.credentials.provider.BeginGetCredentialResponse.Builder setAuthenticationActions(java.util.ListauthenticationEntries); + 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.SetallowedUserIds, 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.SetgetAllowedUserIds(); + property public final java.util.SetallowedUserIds; + } + + 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.OutcomeReceivercallback); + method public abstract void onBeginCreateCredentialRequest(androidx.credentials.provider.BeginCreateCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public final void onBeginGetCredential(android.service.credentials.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public abstract void onBeginGetCredentialRequest(androidx.credentials.provider.BeginGetCredentialRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public final void onClearCredentialState(android.service.credentials.ClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + method public abstract void onClearCredentialStateRequest(androidx.credentials.provider.ProviderClearCredentialStateRequest request, android.os.CancellationSignal cancellationSignal, android.os.OutcomeReceivercallback); + } + + @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.ListgetCredentialOptions(); + property public final androidx.credentials.provider.CallingAppInfo callingAppInfo; + property public final java.util.ListcredentialOptions; + } + + @RequiresApi(26) public final class PublicKeyCredentialEntry extends androidx.credentials.provider.CredentialEntry { + ctor public PublicKeyCredentialEntry(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPublicKeyCredentialOption beginGetPublicKeyCredentialOption, optional CharSequence? displayName, optional java.time.Instant? lastUsedTime, optional android.graphics.drawable.Icon icon, optional boolean isAutoSelectAllowed); + method public CharSequence? getDisplayName(); + method public android.graphics.drawable.Icon getIcon(); + method public java.time.Instant? getLastUsedTime(); + method public android.app.PendingIntent getPendingIntent(); + method public CharSequence getTypeDisplayName(); + method public CharSequence getUsername(); + method public boolean isAutoSelectAllowed(); + property public final CharSequence? displayName; + property public final android.graphics.drawable.Icon icon; + property public final boolean isAutoSelectAllowed; + property public final java.time.Instant? lastUsedTime; + property public final android.app.PendingIntent pendingIntent; + property public final CharSequence typeDisplayName; + property public final CharSequence username; + } + + public static final class PublicKeyCredentialEntry.Builder { + ctor public PublicKeyCredentialEntry.Builder(android.content.Context context, CharSequence username, android.app.PendingIntent pendingIntent, androidx.credentials.provider.BeginGetPublicKeyCredentialOption beginGetPublicKeyCredentialOption); + method public androidx.credentials.provider.PublicKeyCredentialEntry build(); + method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setAutoSelectAllowed(boolean autoSelectAllowed); + method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setDisplayName(CharSequence? displayName); + method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setIcon(android.graphics.drawable.Icon icon); + method public androidx.credentials.provider.PublicKeyCredentialEntry.Builder setLastUsedTime(java.time.Instant? lastUsedTime); + } + + public final class RemoteEntry { + ctor public RemoteEntry(android.app.PendingIntent pendingIntent); + method public android.app.PendingIntent getPendingIntent(); + property public final android.app.PendingIntent pendingIntent; + } + + public static final class RemoteEntry.Builder { + ctor public RemoteEntry.Builder(android.app.PendingIntent pendingIntent); + method public androidx.credentials.provider.RemoteEntry build(); + } + +} +
diff --git a/datastore/datastore-core/lint-baseline.xml b/datastore/datastore-core/lint-baseline.xml deleted file mode 100644 index b8e7866..0000000 --- a/datastore/datastore-core/lint-baseline.xml +++ /dev/null
@@ -1,121 +0,0 @@ - -- - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" coordinator.lock {" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" version = coordinator.getVersion()" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" coordinator.updateNotifications.conflate().collect {" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `readDataAndUpdateCache` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" readDataAndUpdateCache(requireLock = true)" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" coordinator.lock { block() }" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" val data = readDataFromFileOrDefault()" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" Data(data, data.hashCode(), version = coordinator.getVersion())" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" val preLockVersion = coordinator.getVersion()" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" coordinator.tryLock { locked ->" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" val data = readDataFromFileOrDefault()" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" val version = if (locked) coordinator.getVersion() else preLockVersion" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `readDataFromFileOrDefault` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" newData = readDataFromFileOrDefault()" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> - - id="SyntheticAccessor" - message="Access to `private` method `getCoordinator` of class `DataStoreImpl` requires synthetic accessor" - errorLine1=" version = coordinator.getVersion()" - errorLine2=" ~~~~~~~~~~~"> - - -- file="src/commonMain/kotlin/androidx/datastore/core/DataStoreImpl.kt"/> -
diff --git a/development/plot-benchmarks/src/lib/Dataset.svelte b/development/plot-benchmarks/src/lib/Dataset.svelte index 6e81cc0..a435bae 100644 --- a/development/plot-benchmarks/src/lib/Dataset.svelte +++ b/development/plot-benchmarks/src/lib/Dataset.svelte
@@ -1,19 +1,23 @@ 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; // Dispatchers - let selectionDispatcher = createEventDispatcher(); + let datasetDispatcher = createEventDispatcher(); + let metricsDispatcher = createEventDispatcher(); let statDispatcher = createEventDispatcher(); // 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 @@
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 @@ 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; - let selectionDispatcher = createEventDispatcher(); + let datasetDispatcher = createEventDispatcher(); + let metricsDispatcher = createEventDispatcher(); let statDispatcher = createEventDispatcher(); let datasetNames: Set; // Forward events. - let selection = function (event: CustomEvent) { - selectionDispatcher("selections", event.detail); + let datasetSelection = function (event: CustomEvent) { + datasetDispatcher("datasetSelections", event.detail); }; + let stat = function (event: CustomEvent) { statDispatcher("info", event.detail); }; + let metricSelection = function (event: CustomEvent) { + metricsDispatcher("metricSelections", event.detail); + }; + $: { datasetNames = Session.datasetNames(datasetGroup); } @@ -33,7 +42,14 @@{className} {#each datasetNames as name (name)} -+ + {datasetGroup} + {suppressedMetrics} + {name} + on:datasetSelections={datasetSelection} + on:metricSelections={metricSelection} + on:info={stat} + /> {/each}
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= writable(false); let suppressed: Writable> = writable(new Set()); + let suppressedMetrics: Writable> = writable(new Set()); let activeStats: Writable= writable([]); let active: Readable> = derived(activeStats, ($activeStats) => { const datasets = []; @@ -51,8 +53,8 @@ }); // Events - let selectionHandler = function (event: CustomEvent) { - const selections: Selection[] = event.detail; + let datasetHandler = function (event: CustomEvent) { + 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) { + 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) { 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 @@{className} datasetGroup={wrappers} - on:selections={selectionHandler} + suppressedMetrics={$suppressedMetrics} + on:datasetSelections={datasetHandler} + on:metricSelections={metricsHandler} on:info={statHandler} /> {/each} @@ -173,7 +190,10 @@ {:then chartData} {#if chartData.length > 0} - + + 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): Metrics + static buildMetrics(session: Session, suppressed: Set{ , suppressedMetrics: Set const classGroups = Object.entries(session.classGroups); const standard: Metric): Metrics { [] = []; const sampled: Metric[] = []; @@ -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= { 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= { 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-public/build.gradle b/docs-public/build.gradle index efa0424..ad804b8 100644 --- a/docs-public/build.gradle +++ b/docs-public/build.gradle
@@ -129,9 +129,9 @@ docs("androidx.core:core-testing:1.12.0-beta01") docs("androidx.core.uwb:uwb:1.0.0-alpha06") docs("androidx.core.uwb:uwb-rxjava3:1.0.0-alpha06") - docs("androidx.credentials:credentials:1.2.0-beta01") - docs("androidx.credentials:credentials-play-services-auth:1.2.0-beta01") - samples("androidx.credentials:credentials-samples:1.2.0-beta01") + docs("androidx.credentials:credentials:1.2.0-beta02") + docs("androidx.credentials:credentials-play-services-auth:1.2.0-beta02") + samples("androidx.credentials:credentials-samples:1.2.0-beta02") docs("androidx.cursoradapter:cursoradapter:1.0.0") docs("androidx.customview:customview:1.2.0-alpha02") docs("androidx.customview:customview-poolingcontainer:1.0.0-rc01")
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 + +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 + `/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 -**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 -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 -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 + +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 + +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 + +**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/glance/glance-appwidget/src/main/AndroidManifest.xml b/glance/glance-appwidget/src/main/AndroidManifest.xml index ab5123f..3a5868d 100644 --- a/glance/glance-appwidget/src/main/AndroidManifest.xml +++ b/glance/glance-appwidget/src/main/AndroidManifest.xml
@@ -19,6 +19,7 @@android:name=".action.ActionTrampolineActivity" android:excludeFromRecents="true" + android:theme="@android:style/Theme.NoDisplay" android:exported="false" android:enabled="true" />
diff --git a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampolineActivity.kt b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampolineActivity.kt index eb0f558..2c32f61 100644 --- a/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampolineActivity.kt +++ b/glance/glance-appwidget/src/main/java/androidx/glance/appwidget/action/ActionTrampolineActivity.kt
@@ -29,5 +29,6 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) launchTrampolineAction(intent) + finish() } }
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 @@ -+ id="BanParcelableUsage" @@ -38,78 +38,6 @@ - id="SyntheticAccessor" - message="Access to `private` field `mCurrentVersion` of class `Client` requires synthetic accessor" - errorLine1=" mCurrentVersion =" - errorLine2=" ~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConnectionConfiguration` of class `Client` requires synthetic accessor" - errorLine1=" return mConnectionConfiguration;" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConnectionManager` of class `Client` requires synthetic accessor" - errorLine1=" mConnectionManager.scheduleForExecution(" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConnectionConfiguration` of class `Client` requires synthetic accessor" - errorLine1=" new BaseQueueOperation(mConnectionConfiguration));" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/> - - id="SyntheticAccessor" - message="Access to `private` field `mConnectionManager` of class `Client` requires synthetic accessor" - errorLine1=" mConnectionManager.scheduleForExecution(" - errorLine2=" ~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `createQueueOperation` of class `Client` requires synthetic accessor" - errorLine1=" createQueueOperation(operation, settableFuture));" - errorLine2=" ~~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/> - - id="SyntheticAccessor" - message="Access to `private` method `getService` of class `Client` requires synthetic accessor" - errorLine1=" operation.execute(getService(binder), settableFuture);" - errorLine2=" ~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/ipc/Client.java"/> - - id="SyntheticAccessor" - message="Access to `private` constructor of class `MeasureCallbackStub` requires synthetic accessor" - errorLine1=" measureCallbackStub = MeasureCallbackStub(callbackKey, measureCallback)" - errorLine2=" ~~~~~~~~~~~~~~~~~~~"> - - -- file="src/main/java/androidx/health/services/client/impl/MeasureCallbackStub.kt"/> - 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/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEventCapabilities.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEventCapabilities.kt index 87a525c..b71cd76 100644 --- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEventCapabilities.kt +++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseEventCapabilities.kt
@@ -31,11 +31,11 @@ public companion object { @JvmStatic - internal fun fromProto(proto: DataProto.ExerciseEventCapabilities): ExerciseEventCapabilities = + internal fun fromProto(proto: DataProto.ExerciseEventCapabilities): ExerciseEventCapabilities? = when (proto.exerciseEventCapabilitiesCase) { ExerciseEventCapabilitiesCase.GOLF_SHOT_CAPABILITIES -> GolfShotEventCapabilities(proto.golfShotCapabilities) - else -> throw IllegalStateException("Exercise event capabilities not set on $proto") + else -> null } } }
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt index 8f48a02..aa208f6 100644 --- a/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt +++ b/health/health-services-client/src/main/java/androidx/health/services/client/data/ExerciseTypeCapabilities.kt
@@ -71,14 +71,14 @@ supportsAutoPauseAndResume = proto.isAutoPauseAndResumeSupported, supportedExerciseEvents = proto.supportedExerciseEventsList + .filter { ExerciseEventCapabilities.fromProto(it) != null } .map { ExerciseEventType.fromProto(it.exerciseEventType) } .toSet(), - proto.supportedExerciseEventsList - .map { entry -> - ExerciseEventType.fromProto(entry.exerciseEventType) to - ExerciseEventCapabilities.fromProto(entry) - } - .toMap(), + exerciseEventCapabilities = proto.supportedExerciseEventsList + .filter { ExerciseEventCapabilities.fromProto(it) != null }.associate { entry -> + ExerciseEventType.fromProto(entry.exerciseEventType) to + ExerciseEventCapabilities.fromProto(entry)!! + }, ) internal val proto: DataProto.ExerciseTypeCapabilities =
diff --git a/health/health-services-client/src/test/java/androidx/health/services/client/data/ExerciseTypeCapabilitiesTest.kt b/health/health-services-client/src/test/java/androidx/health/services/client/data/ExerciseTypeCapabilitiesTest.kt new file mode 100644 index 0000000..80f12ef --- /dev/null +++ b/health/health-services-client/src/test/java/androidx/health/services/client/data/ExerciseTypeCapabilitiesTest.kt
@@ -0,0 +1,53 @@ +/* + * 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.health.services.client.data + +import androidx.health.services.client.proto.DataProto +import com.google.common.collect.ImmutableMap +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner + +@RunWith(RobolectricTestRunner::class) +class ExerciseTypeCapabilitiesTest { + @Test + fun unknownEventCapabilities_roundTrip_emptyEventCapabilities() { + class TestEventCapabilities(override val isSupported: Boolean) : + ExerciseEventCapabilities() { + override fun toProto(): DataProto.ExerciseEventCapabilities = + DataProto.ExerciseEventCapabilities.getDefaultInstance() + } + val testingCapabilities = ExerciseTypeCapabilities( + supportedDataTypes = emptySet(), + supportedGoals = emptyMap(), + supportedMilestones = emptyMap(), + supportsAutoPauseAndResume = true, + supportedExerciseEvents = setOf(ExerciseEventType.UNKNOWN), + exerciseEventCapabilities = + ImmutableMap.of(ExerciseEventType.UNKNOWN, + TestEventCapabilities(false) + ), + ) + + val proto = testingCapabilities.proto + val capabilitiesReturned = ExerciseTypeCapabilities(proto) + + assertThat(capabilitiesReturned.exerciseEventCapabilities).isEmpty() + assertThat(capabilitiesReturned.supportedExerciseEvents).isEmpty() + } +}
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 00e0b0ae6..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.ListgetItems(); 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); 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 00e0b0ae6..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.ListgetItems(); 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); 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 00e0b0ae6..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.ListgetItems(); 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); 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 00e0b0ae6..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.ListgetItems(); 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); 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 ListgetRoutes() { checkCallingThread(); - GlobalMediaRouter globalMediaRouter = getGlobalRouter(); - return globalMediaRouter == null ? Collections.emptyList() : - globalMediaRouter.getRoutes(); + return getGlobalRouter().getRoutes(); } /** @@ -362,9 +357,7 @@ @NonNull public ListgetProviders() { 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 ListmItems; - 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 @@ *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 */ ListmItems; - /* 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()} * *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.ListtrustedBiddingKeys); + ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.ListtrustedBiddingKeys); method public java.util.ListgetTrustedBiddingKeys(); method public android.net.Uri getTrustedBiddingUri(); property public final java.util.ListtrustedBiddingKeys; 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.ListtrustedBiddingKeys); - 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.ListtrustedBiddingKeys); + ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.ListtrustedBiddingKeys); method public java.util.ListgetTrustedBiddingKeys(); method public android.net.Uri getTrustedBiddingUri(); property public final java.util.ListtrustedBiddingKeys; 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.ListtrustedBiddingKeys); - 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= emptyList() + val trustedBiddingUri: Uri, + val trustedBiddingKeys: List) { /** * @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 = 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): 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!!) - onLoadSdkBinder = result - - 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= - SdkSandboxControllerCompat.from(context).getSandboxedSdks() - - fun getAppOwnedSdkSandboxInterfaces(): List= - 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 @@ + + ++ \ 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!!) + onLoadSdkBinder = result + + 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= + SdkSandboxControllerCompat.from(context).getSandboxedSdks() + + fun getAppOwnedSdkSandboxInterfaces(): List= + 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/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java index 1bdee58..6c56306 100644 --- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java +++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java
@@ -1144,8 +1144,8 @@ private void testScrollFrozen(boolean fling) throws Throwable { RecyclerView recyclerView = new RecyclerView(getActivity()); - final int horizontalScrollCount = 3; - final int verticalScrollCount = 3; + final int horizontalScrollCount = 2; + final int verticalScrollCount = 2; final int horizontalVelocity = 1000; final int verticalVelocity = 1000; final AtomicInteger horizontalCounter = new AtomicInteger(horizontalScrollCount); @@ -1203,9 +1203,9 @@ Gravity.LEFT | Gravity.TOP, mRecyclerView.getWidth() / 2, mRecyclerView.getHeight() / 2); } - assertEquals("rv's horizontal scroll cb must not run", horizontalScrollCount, + assertEquals("scrollHorizontallyBy must not run", horizontalScrollCount, horizontalCounter.get()); - assertEquals("rv's vertical scroll cb must not run", verticalScrollCount, + assertEquals("scrollVerticallyBy must not run", verticalScrollCount, verticalCounter.get()); suppressLayout(false); @@ -1217,8 +1217,14 @@ Gravity.LEFT | Gravity.TOP, mRecyclerView.getWidth() / 2, mRecyclerView.getHeight() / 2); } - assertEquals("rv's horizontal scroll cb must finishes", 0, horizontalCounter.get()); - assertEquals("rv's vertical scroll cb must finishes", 0, verticalCounter.get()); + + // Hopefully we can assume that even on a *really* laggy device, we get at least two + // scroll frames. If this test flakes, consider replacing this with a check that + // it's called at least once. + assertEquals("scrollHorizontallyBy should have been called at least twice", + 0, horizontalCounter.get()); + assertEquals("scrollVerticallyBy should have been called at least twice", + 0, verticalCounter.get()); } @Test
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/JavaPoetExt.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/JavaPoetExt.kt index 08e61c1..61bca7a 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/JavaPoetExt.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/JavaPoetExt.kt
@@ -22,6 +22,7 @@ import com.squareup.javapoet.TypeName import com.squareup.javapoet.TypeSpec import com.squareup.kotlinpoet.javapoet.JClassName +import com.squareup.kotlinpoet.javapoet.JTypeVariableName import java.lang.Character.isISOControl import javax.lang.model.SourceVersion import javax.lang.model.element.Modifier @@ -183,7 +184,7 @@ ): MethodSpec.Builder { return MethodSpec.methodBuilder(executableElement.jvmName).apply { addTypeVariables( - resolvedType.typeVariableNames + resolvedType.typeVariables.map { it.asTypeName().java as JTypeVariableName } ) resolvedType.parameterTypes.forEachIndexed { index, paramType -> addParameter(
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+ /** All default values declared in the annotation class. */ + val defaultValues: List + /** 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/XMethodType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMethodType.kt index 9fb09bc..6647d68 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMethodType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XMethodType.kt
@@ -30,9 +30,18 @@ */ val returnType: XType + val typeVariables: List+ /** * Returns the names of [TypeVariableName]s for this executable. */ + @Deprecated( + message = "Use typeVariables property and convert to JavaPoet names.", + replaceWith = ReplaceWith( + expression = "typeVariables.map { it.asTypeName().toJavaPoet() }", + imports = ["androidx.room.compiler.codegen.toJavaPoet"] + ) + ) val typeVariableNames: List }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XType.kt index 9ad98bf..5933211 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/XType.kt
@@ -49,7 +49,7 @@ fun asTypeName(): XTypeName /** - * Returns the rawType of this type. (e.g. `List` to `List`. + * Returns the rawType of this type. (e.g. `List` to `List`). */ val rawType: XRawType @@ -72,8 +72,8 @@ /** * The [XTypeElement] that represents this type. * - * Note that it might be null if the type is not backed by a type element (e.g. if it is a - * primitive, wildcard etc) + * Note that it will be null if the type is not backed by a type element (e.g. it is a + * primitive, type variable, wildcard, etc) * * @see isTypeElement */
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/DefaultJavacType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/DefaultJavacType.kt index f829a4b..d4074a9 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/DefaultJavacType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/DefaultJavacType.kt
@@ -19,7 +19,8 @@ import androidx.room.compiler.processing.XNullability import androidx.room.compiler.processing.XType import androidx.room.compiler.processing.javac.kotlin.KmTypeContainer -import androidx.room.compiler.processing.javac.kotlin.nullability +import com.google.auto.common.MoreTypes +import javax.lang.model.type.TypeKind import javax.lang.model.type.TypeMirror /** @@ -76,6 +77,30 @@ */ get() = emptyList() + override fun boxed(): JavacType { + return when { + typeMirror.kind.isPrimitive -> { + env.wrap( + typeMirror = + env.typeUtils.boxedClass(MoreTypes.asPrimitiveType(typeMirror)).asType(), + kotlinType = kotlinType, + elementNullability = XNullability.NULLABLE + ) + } + typeMirror.kind == TypeKind.VOID -> { + env.wrap( + typeMirror = + env.elementUtils.getTypeElement("java.lang.Void").asType(), + kotlinType = kotlinType, + elementNullability = XNullability.NULLABLE + ) + } + else -> { + this + } + } + } + override fun copyWithNullability(nullability: XNullability): JavacType { return DefaultJavacType( env = env,
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: Listby lazy { + annotationValues.mapNotNull { + val method = (it as JavacAnnotationValue).method + method.element.getDefaultValue()?.let { value -> + JavacAnnotationValue(env, method, value) + } + } + } + override val annotationValues: Listby 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/JavacArrayType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacArrayType.kt index e48dd79..fd384c2 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacArrayType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacArrayType.kt
@@ -22,7 +22,6 @@ import androidx.room.compiler.processing.XNullability import androidx.room.compiler.processing.XType import androidx.room.compiler.processing.javac.kotlin.KmTypeContainer -import androidx.room.compiler.processing.javac.kotlin.nullability import javax.lang.model.type.ArrayType internal class JavacArrayType private constructor(
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacDeclaredType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacDeclaredType.kt index a00819f..8a3f7b9 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacDeclaredType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacDeclaredType.kt
@@ -18,7 +18,6 @@ import androidx.room.compiler.processing.XNullability import androidx.room.compiler.processing.javac.kotlin.KmTypeContainer -import androidx.room.compiler.processing.javac.kotlin.nullability import javax.lang.model.type.DeclaredType /**
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: Listby lazy { + typeElement.getDeclaredMethods().mapNotNull { it.defaultValue } + } }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacMethodType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacMethodType.kt index 54287bb..9d4cee8 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacMethodType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacMethodType.kt
@@ -42,12 +42,23 @@ ) } - override val typeVariableNames by lazy { - executableType.typeVariables.map { - TypeVariableName.get(it) + override val typeVariables: Listby lazy { + executableType.typeVariables.mapIndexed { index, typeVariable -> + env.wrap(typeVariable, element.kotlinMetadata?.typeParameters?.get(index)) } } + @Deprecated( + "Use typeVariables property and convert to JavaPoet names.", + replaceWith = ReplaceWith( + "typeVariables.map { it.asTypeName().toJavaPoet() }", + "androidx.room.compiler.codegen.toJavaPoet" + ) + ) + override val typeVariableNames by lazy { + typeVariables.map { it.asTypeName().java as TypeVariableName } + } + private class NormalMethodType( env: JavacProcessingEnv, element: JavacMethodElement,
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt index cec6636..89bfdb6 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacProcessingEnv.kt
@@ -24,6 +24,7 @@ import androidx.room.compiler.processing.XType import androidx.room.compiler.processing.XTypeElement import androidx.room.compiler.processing.javac.kotlin.KmTypeContainer +import androidx.room.compiler.processing.javac.kotlin.KmTypeParameterContainer import com.google.auto.common.GeneratedAnnotations import com.google.auto.common.MoreTypes import java.util.Locale @@ -36,6 +37,7 @@ import javax.lang.model.element.VariableElement import javax.lang.model.type.TypeKind import javax.lang.model.type.TypeMirror +import javax.lang.model.type.TypeVariable import javax.lang.model.util.Elements import javax.lang.model.util.Types @@ -163,6 +165,27 @@ fun wrapTypeElement(element: TypeElement) = typeElementStore[element] + fun wrap( + typeMirror: TypeVariable, + kotlinType: KmTypeParameterContainer?, + ): JavacTypeVariableType { + return when { + kotlinType != null -> { + JavacTypeVariableType( + env = this, + typeMirror = MoreTypes.asTypeVariable(typeMirror), + kotlinType = kotlinType + ) + } + else -> { + JavacTypeVariableType( + env = this, + typeMirror = MoreTypes.asTypeVariable(typeMirror) + ) + } + } + } + /** * Wraps the given java processing type into an XType. *
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacType.kt index 89420be..2d66b79 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacType.kt
@@ -24,6 +24,7 @@ import androidx.room.compiler.processing.XNullability import androidx.room.compiler.processing.XRawType import androidx.room.compiler.processing.XType +import androidx.room.compiler.processing.javac.kotlin.KmBaseTypeContainer import androidx.room.compiler.processing.javac.kotlin.KmClassContainer import androidx.room.compiler.processing.javac.kotlin.KmTypeContainer import androidx.room.compiler.processing.ksp.ERROR_JTYPE_NAME @@ -42,7 +43,7 @@ ) : XType, XEquality, InternalXAnnotated { // Kotlin type information about the type if this type is driven from Kotlin code. - abstract val kotlinType: KmTypeContainer? + abstract val kotlinType: KmBaseTypeContainer? override val rawType: XRawType by lazy { JavacRawType(env, this) @@ -107,12 +108,12 @@ } override fun getAllAnnotations(): List{ - return kotlinType?.annotations?.map { + return (kotlinType as? KmTypeContainer)?.annotations?.map { JavacKmAnnotation(env, it) } ?: typeMirror.annotationMirrors.map { mirror -> JavacAnnotation(env, mirror) } - .flatMap { annotation -> - annotation.unwrapRepeatedAnnotationsFromContainer() ?: listOf(annotation) - } + .flatMap { annotation -> + annotation.unwrapRepeatedAnnotationsFromContainer() ?: listOf(annotation) + } } override fun hasAnnotationWithPackage(pkg: String): Boolean { @@ -142,26 +143,7 @@ } override fun boxed(): JavacType { - return when { - typeMirror.kind.isPrimitive -> { - env.wrap( - typeMirror = env.typeUtils.boxedClass(MoreTypes.asPrimitiveType(typeMirror)) - .asType(), - kotlinType = kotlinType, - elementNullability = XNullability.NULLABLE - ) - } - typeMirror.kind == TypeKind.VOID -> { - env.wrap( - typeMirror = env.elementUtils.getTypeElement("java.lang.Void").asType(), - kotlinType = kotlinType, - elementNullability = XNullability.NULLABLE - ) - } - else -> { - this - } - } + return this } override fun isNone() = typeMirror.kind == TypeKind.NONE @@ -174,7 +156,7 @@ return typeMirror.extendsBound()?.let { env.wrap( typeMirror = it, - kotlinType = kotlinType?.extendsBound, + kotlinType = (kotlinType as? KmTypeContainer)?.extendsBound, elementNullability = maybeNullability ) }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeVariableType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeVariableType.kt index 98a3703..a0dcb17 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeVariableType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/JavacTypeVariableType.kt
@@ -19,8 +19,7 @@ import androidx.room.compiler.processing.XNullability import androidx.room.compiler.processing.XType import androidx.room.compiler.processing.XTypeVariableType -import androidx.room.compiler.processing.javac.kotlin.KmTypeContainer -import androidx.room.compiler.processing.javac.kotlin.nullability +import androidx.room.compiler.processing.javac.kotlin.KmBaseTypeContainer import com.google.auto.common.MoreTypes.asIntersection import javax.lang.model.type.TypeKind import javax.lang.model.type.TypeVariable @@ -29,7 +28,7 @@ env: JavacProcessingEnv, override val typeMirror: TypeVariable, nullability: XNullability?, - override val kotlinType: KmTypeContainer? + override val kotlinType: KmBaseTypeContainer? ) : JavacType(env, typeMirror, nullability), XTypeVariableType { constructor( env: JavacProcessingEnv, @@ -44,7 +43,7 @@ constructor( env: JavacProcessingEnv, typeMirror: TypeVariable, - kotlinType: KmTypeContainer + kotlinType: KmBaseTypeContainer ) : this( env = env, typeMirror = typeMirror,
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/kotlin/KotlinClassMetadataUtils.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/kotlin/KotlinClassMetadataUtils.kt index 8c9d94b..518aac9 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/kotlin/KotlinClassMetadataUtils.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/javac/kotlin/KotlinClassMetadataUtils.kt
@@ -53,6 +53,12 @@ val flags: Flags } +internal interface KmBaseTypeContainer : KmFlags { + val upperBounds: List+ val nullability: XNullability + fun isNullable() = Flag.Type.IS_NULLABLE(flags) +} + internal class KmClassContainer( private val env: JavacProcessingEnv, private val kmClass: KmClass @@ -296,9 +302,9 @@ val typeArguments: List , /** The extends bounds are only non-null for wildcard (i.e. in/out variant) types. */ val extendsBound: KmTypeContainer? = null, - /** The upper bounds are only non-null for type variable types with upper bounds. */ - val upperBounds: List? = null -) : KmFlags { + /** The upper bounds are only non-empty for type variable types with upper bounds. */ + override val upperBounds: List= emptyList() +) : KmBaseTypeContainer { override val flags: Flags get() = kmType.flags @@ -313,15 +319,17 @@ fun isExtensionType() = kmType.annotations.any { it.className == "kotlin/ExtensionFunctionType" } - fun isNullable() = Flag.Type.IS_NULLABLE(flags) fun erasure(): KmTypeContainer = KmTypeContainer( kmType = kmType, typeArguments = emptyList(), extendsBound = extendsBound?.erasure(), // The erasure of a type variable is equal to the erasure of the first upper bound. - upperBounds = upperBounds?.firstOrNull()?.erasure()?.let { listOf(it) }, + upperBounds = upperBounds.firstOrNull()?.erasure()?.let { listOf(it) } ?: emptyList(), ) + + override val nullability: XNullability + get() = computeTypeNullability(this.isNullable(), this.upperBounds, this.extendsBound) } internal class KmAnnotationContainer(private val kmAnnotation: KmAnnotation) { @@ -367,26 +375,17 @@ } } -internal val KmTypeContainer.nullability: XNullability - get() = if (isNullable()) { - XNullability.NULLABLE - } else { - // if there is an upper bound information, use its nullability (e.g. it might be T : Foo?) - if (upperBounds?.all { it.nullability == XNullability.NULLABLE } == true) { - XNullability.NULLABLE - } else { - extendsBound?.nullability ?: XNullability.NONNULL - } - } - internal class KmTypeParameterContainer( private val kmTypeParameter: KmTypeParameter, - val upperBounds: List-) : KmFlags { + override val upperBounds: List +) : KmBaseTypeContainer { override val flags: Flags get() = kmTypeParameter.flags val name: String get() = kmTypeParameter.name + + override val nullability: XNullability + get() = computeTypeNullability(this.isNullable(), this.upperBounds, null) } internal class KmValueParameterContainer( @@ -402,6 +401,21 @@ fun hasDefault() = Flag.ValueParameter.DECLARES_DEFAULT_VALUE(flags) } +private fun computeTypeNullability( + isNullable: Boolean, + upperBounds: List , + extendsBound: KmTypeContainer? +): XNullability { + if (isNullable) { + return XNullability.NULLABLE + } + // if there is an upper bound information, use its nullability (e.g. it might be T : Foo?) + if (upperBounds.isNotEmpty() && upperBounds.all { it.nullability == XNullability.NULLABLE }) { + return XNullability.NULLABLE + } + return extendsBound?.nullability ?: XNullability.NONNULL +} + private fun KmFunction.asContainer(): KmFunctionContainer = KmFunctionContainerImpl( kmFunction = this,
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: Listby lazy { + wrap(ksAnnotated.defaultArguments) + } + override val annotationValues: Listby 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): List + // 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{ 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 funasAnnotationBox(annotationClass: Class return KspAnnotationBox( env = env,): XAnnotationBox {
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspMethodType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspMethodType.kt index 600bb01..04bd525 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspMethodType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspMethodType.kt
@@ -19,6 +19,7 @@ import androidx.room.compiler.processing.XMethodType import androidx.room.compiler.processing.XSuspendMethodType import androidx.room.compiler.processing.XType +import androidx.room.compiler.processing.XTypeVariableType import com.squareup.javapoet.TypeVariableName internal sealed class KspMethodType( @@ -26,18 +27,24 @@ override val origin: KspMethodElement, containing: KspType? ) : KspExecutableType(env, origin, containing), XMethodType { - override val typeVariableNames: Listby lazy { + + override val typeVariables: Listby lazy { origin.declaration.typeParameters.map { - val typeParameterBounds = it.bounds.map { - it.asJTypeName(env.resolver) - }.toList().toTypedArray() - TypeVariableName.get( - it.name.asString(), - *typeParameterBounds - ) + KspMethodTypeVariableType(env, it) } } + @Deprecated( + "Use typeVariables property and convert to JavaPoet names.", + replaceWith = ReplaceWith( + "typeVariables.map { it.asTypeName().toJavaPoet() }", + "androidx.room.compiler.codegen.toJavaPoet" + ) + ) + override val typeVariableNames: Listby lazy { + typeVariables.map { it.asTypeName().java as TypeVariableName } + } + private class KspNormalMethodType( env: KspProcessingEnv, origin: KspMethodElement,
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspMethodTypeVariableType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspMethodTypeVariableType.kt new file mode 100644 index 0000000..5a9d520 --- /dev/null +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspMethodTypeVariableType.kt
@@ -0,0 +1,159 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package androidx.room.compiler.processing.ksp + +import androidx.room.compiler.codegen.XTypeName +import androidx.room.compiler.processing.XEquality +import androidx.room.compiler.processing.XNullability +import androidx.room.compiler.processing.XRawType +import androidx.room.compiler.processing.XType +import androidx.room.compiler.processing.XTypeElement +import androidx.room.compiler.processing.XTypeVariableType +import com.google.devtools.ksp.symbol.KSAnnotation +import com.google.devtools.ksp.symbol.KSTypeParameter +import com.squareup.javapoet.TypeName +import kotlin.reflect.KClass + +/** + * A KSP [XType] representing the type var type declared in a function. + * + * This class is different than [KspTypeVariableType] due to KSP having no type var model and only + * type var declaration (i.e. [KSTypeParameter]). + */ +internal class KspMethodTypeVariableType( + env: KspProcessingEnv, + val ksTypeVariable: KSTypeParameter, +) : KspAnnotated(env), XTypeVariableType, XEquality { + + override val typeName: TypeName by lazy { + xTypeName.java + } + + override fun asTypeName() = xTypeName + + private val xTypeName: XTypeName by lazy { + XTypeName( + ksTypeVariable.asJTypeName(env.resolver), + ksTypeVariable.asKTypeName(env.resolver), + nullability + ) + } + + override val upperBounds: List= ksTypeVariable.bounds.map(env::wrap).toList() + + override fun annotations(): Sequence{ + return ksTypeVariable.annotations + } + + override val rawType: XRawType by lazy { + object : XRawType { + override val typeName: TypeName + get() = this@KspMethodTypeVariableType.typeName + + override fun asTypeName(): XTypeName = + this@KspMethodTypeVariableType.asTypeName() + + override fun isAssignableFrom(other: XRawType): Boolean { + return this.typeName == other.typeName + } + } + } + + override val nullability: XNullability + get() = XNullability.UNKNOWN + + override val superTypes: Listby lazy { + val anyType = env.requireType(XTypeName.ANY_OBJECT).makeNullable() + if (upperBounds.size == 1 && upperBounds.single() == anyType) { + upperBounds + } else { + listOf(anyType) + upperBounds + } + } + + override val typeElement: XTypeElement? + get() = null + + override val typeArguments: List+ get() = emptyList() + + override fun isAssignableFrom(other: XType): Boolean { + val typeVar = when (other) { + is KspTypeVariableType -> other.ksTypeVariable + is KspMethodTypeVariableType -> other.ksTypeVariable + else -> null + } + return ksTypeVariable == typeVar + } + + override fun isError(): Boolean { + return false + } + + override fun defaultValue(): String { + return "null" + } + + override fun boxed(): KspMethodTypeVariableType { + return this + } + + override fun isNone(): Boolean { + return false + } + + override fun isTypeOf(other: KClass<*>): Boolean { + return false + } + + override fun isSameType(other: XType): Boolean { + val typeVar = when (other) { + is KspTypeVariableType -> other.ksTypeVariable + is KspMethodTypeVariableType -> other.ksTypeVariable + else -> null + } + return ksTypeVariable == typeVar + } + + override fun extendsBound(): XType? { + return null + } + + override fun makeNullable(): XType { + return this + } + + override fun makeNonNullable(): XType { + return this + } + + override val equalityItems: Array by lazy { + arrayOf(ksTypeVariable) + } + + override fun equals(other: Any?): Boolean { + return XEquality.equals(this, other) + } + + override fun hashCode(): Int { + return XEquality.hashCode(equalityItems) + } + + override fun toString(): String { + return ksTypeVariable.toString() + } +}
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt index e17e57f3..0eff801 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspProcessingEnv.kt
@@ -269,7 +269,7 @@ } val qName = ksType.declaration.qualifiedName?.asString() if (declaration is KSTypeParameter) { - return KspTypeVariableType(this, ksType, originalAnnotations) + return KspTypeVariableType(this, declaration, ksType, originalAnnotations) } if (allowPrimitives && qName != null && ksType.nullability == Nullability.NOT_NULL) { // check for primitives
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt index 04ea9f7..33f7600 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/KspTypeVariableType.kt
@@ -24,30 +24,30 @@ import com.squareup.kotlinpoet.javapoet.JTypeName import com.squareup.kotlinpoet.javapoet.KTypeName +/** + * An [XType] representing the type var type in a function parameter, return type or class + * declaration. + * + * This is different than [KspMethodTypeVariableType] because the [KSType] has as reference the + * [KSTypeParameter] declaration. + */ internal class KspTypeVariableType( env: KspProcessingEnv, + val ksTypeVariable: KSTypeParameter, ksType: KSType, - originalKSAnnotations: Sequence= ksType.annotations, + originalKSAnnotations: Sequence= ksTypeVariable.annotations, scope: KSTypeVarianceResolverScope? = null, ) : KspType(env, ksType, originalKSAnnotations, scope, null), XTypeVariableType { - private val typeVariable: KSTypeParameter by lazy { - // Note: This is a workaround for a bug in KSP where we may get ERROR_TYPE in the bounds - // (https://github.com/google/ksp/issues/1250). To work around it we get the matching - // KSTypeParameter from the parent declaration instead. - ksType.declaration.parentDeclaration!!.typeParameters - .filter { it.name == (ksType.declaration as KSTypeParameter).name } - .single() - } override fun resolveJTypeName(): JTypeName { - return typeVariable.asJTypeName(env.resolver) + return ksTypeVariable.asJTypeName(env.resolver) } override fun resolveKTypeName(): KTypeName { - return typeVariable.asKTypeName(env.resolver) + return ksTypeVariable.asKTypeName(env.resolver) } - override val upperBounds: List= typeVariable.bounds.map(env::wrap).toList() + override val upperBounds: List= ksTypeVariable.bounds.map(env::wrap).toList() override fun boxed(): KspTypeVariableType { return this @@ -59,5 +59,15 @@ originalKSAnnotations: Sequence, scope: KSTypeVarianceResolverScope?, typeAlias: KSType? - ) = KspTypeVariableType(env, ksType, originalKSAnnotations, scope) + ) = KspTypeVariableType( + env, + ksType.declaration as KSTypeParameter, + ksType, + originalKSAnnotations, + scope + ) + + override val equalityItems: Arrayby lazy { + arrayOf(ksTypeVariable) + } }
diff --git a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt index 7341b8a..c14bec0 100644 --- a/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt +++ b/room/room-compiler-processing/src/main/java/androidx/room/compiler/processing/ksp/synthetic/KspSyntheticPropertyMethodType.kt
@@ -19,6 +19,7 @@ import androidx.room.compiler.processing.XExecutableType import androidx.room.compiler.processing.XMethodType import androidx.room.compiler.processing.XType +import androidx.room.compiler.processing.XTypeVariableType import androidx.room.compiler.processing.ksp.KSTypeVarianceResolverScope import androidx.room.compiler.processing.ksp.KspProcessingEnv import androidx.room.compiler.processing.ksp.KspType @@ -47,6 +48,16 @@ } } + override val typeVariables: List+ get() = emptyList() + + @Deprecated( + "Use typeVariables property and convert to JavaPoet names.", + replaceWith = ReplaceWith( + "typeVariables.map { it.asTypeName().toJavaPoet() }", + "androidx.room.compiler.codegen.toJavaPoet" + ) + ) override val typeVariableNames: List get() = emptyList()
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() + assertThat(annotation.defaultValues.map { it.name }) + .containsExactly( + "stringVal", + "stringArrayVal", + "typeVal", + "typeArrayVal", + "intVal", + "intArrayVal", + "enumVal", + "enumArrayVal", + "otherAnnotationVal", + "otherAnnotationArrayVal" + ).inOrder() + assertThat(annotation.get("intVal")) .isEqualTo(3) assertThat(annotation.get>("intArrayVal"))
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt index 95adf50..4d9dcea 100644 --- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt +++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/XExecutableTypeTest.kt
@@ -17,10 +17,13 @@ package androidx.room.compiler.processing import androidx.kruth.assertThat +import androidx.room.compiler.codegen.XTypeName +import androidx.room.compiler.codegen.asMutableClassName import androidx.room.compiler.processing.util.CONTINUATION_JCLASS_NAME import androidx.room.compiler.processing.util.Source import androidx.room.compiler.processing.util.UNIT_JCLASS_NAME import androidx.room.compiler.processing.util.getMethodByJvmName +import androidx.room.compiler.processing.util.runKspTest import androidx.room.compiler.processing.util.runProcessorTest import androidx.room.compiler.processing.util.typeName import com.google.common.truth.Truth @@ -458,7 +461,7 @@ } assertThat(method.parameterTypes).isEmpty() - assertThat(method.typeVariableNames).isEmpty() + assertThat(method.typeVariables).isEmpty() } checkMethods("getMutableT", subject) { method -> assertThat(method.returnType.typeName).isEqualTo(String::class.typeName()) @@ -468,7 +471,7 @@ assertThat(method.returnType.nullability).isEqualTo(XNullability.NULLABLE) } assertThat(method.parameterTypes).isEmpty() - assertThat(method.typeVariableNames).isEmpty() + assertThat(method.typeVariables).isEmpty() } checkMethods("setMutableT", subject) { method -> assertThat(method.returnType.typeName).isEqualTo(TypeName.VOID) @@ -476,7 +479,7 @@ .isEqualTo(XNullability.NULLABLE) assertThat(method.parameterTypes.first().typeName) .isEqualTo(String::class.typeName()) - assertThat(method.typeVariableNames).isEmpty() + assertThat(method.typeVariables).isEmpty() } checkMethods("getList", subject) { method -> assertThat(method.returnType.typeName).isEqualTo( @@ -509,7 +512,7 @@ assertThat(method.returnType.nullability).isEqualTo(XNullability.NULLABLE) } assertThat(method.parameterTypes).isEmpty() - assertThat(method.typeVariableNames).isEmpty() + assertThat(method.typeVariables).isEmpty() } checkMethods("getMutableT", nullableSubject) { method -> @@ -520,7 +523,7 @@ assertThat(method.returnType.nullability).isEqualTo(XNullability.NULLABLE) } assertThat(method.parameterTypes).isEmpty() - assertThat(method.typeVariableNames).isEmpty() + assertThat(method.typeVariables).isEmpty() } checkMethods("setMutableT", nullableSubject) { method -> @@ -529,7 +532,7 @@ .isEqualTo(XNullability.NULLABLE) assertThat(method.parameterTypes.first().typeName) .isEqualTo(String::class.typeName()) - assertThat(method.typeVariableNames).isEmpty() + assertThat(method.typeVariables).isEmpty() } checkMethods("getList", nullableSubject) { method -> @@ -570,4 +573,78 @@ } } } + + @Test + fun typeVariableTest() { + val kotlinSrc = Source.kotlin( + "KotlinSubject.kt", + """ + class KotlinSubject { + funoneTypeVar(): Unit = TODO() + fun> oneBoundedTypeVar(): Unit = TODO() + fun twoTypeVar(param: B): A = TODO() + } + """.trimIndent() + ) + val javaSrc = Source.java( + "JavaSubject", + """ + import java.util.List; + class JavaSubject { +void oneTypeVar() {} +> void oneBoundedTypeVar() { } + A twoTypeVar(B param) { return null; } + } + """.trimIndent() + ) + runKspTest(sources = listOf(kotlinSrc, javaSrc)) { invocation -> + listOf("KotlinSubject", "JavaSubject",).forEach { subjectFqn -> + val subject = invocation.processingEnv.requireTypeElement(subjectFqn) + subject.getMethodByJvmName("oneTypeVar").let { + val typeVar = it.executableType.typeVariables.single() + assertThat(typeVar.asTypeName()) + .isEqualTo(XTypeName.getTypeVariableName("T")) + assertThat(typeVar.superTypes.map { it.asTypeName() }) + .containsExactly(XTypeName.ANY_OBJECT.copy(nullable = true)) + assertThat(typeVar.typeArguments).isEmpty() + assertThat(typeVar.typeElement).isNull() + } + subject.getMethodByJvmName("oneBoundedTypeVar").let { + val typeVar = it.executableType.typeVariables.single() + assertThat(typeVar.asTypeName()) + .isEqualTo( + XTypeName.getTypeVariableName( + name = "T", + bounds = listOf( + List::class.asMutableClassName() + .parametrizedBy(XTypeName.ANY_WILDCARD) + ) + ) + ) + assertThat(typeVar.superTypes.map { it.asTypeName() }) + .containsExactly( + XTypeName.ANY_OBJECT.copy(nullable = true), + List::class.asMutableClassName() + .parametrizedBy(XTypeName.ANY_WILDCARD) + ) + assertThat(typeVar.typeArguments).isEmpty() + assertThat(typeVar.typeElement).isNull() + } + subject.getMethodByJvmName("twoTypeVar").let { + // TODO(b/294102849): Figure out origin JAVA bounds difference between type + // var declaration and usage. + if (invocation.isKsp && subjectFqn == "JavaSubject") { + return@let + } + val firstTypeVar = it.executableType.typeVariables[0] + assertThat(firstTypeVar.isSameType(it.returnType)).isTrue() + assertThat(firstTypeVar).isNotEqualTo(it.parameters.single().type) + + val secondTypeVar = it.executableType.typeVariables[1].asTypeName() + assertThat(secondTypeVar).isNotEqualTo(it.returnType.asTypeName()) + assertThat(secondTypeVar).isEqualTo(it.parameters.single().type.asTypeName()) + } + } + } + } }
diff --git a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/KotlinMetadataElementTest.kt b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/KotlinMetadataElementTest.kt index 26b9bab..0e97e4a 100644 --- a/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/KotlinMetadataElementTest.kt +++ b/room/room-compiler-processing/src/test/java/androidx/room/compiler/processing/javac/kotlin/KotlinMetadataElementTest.kt
@@ -696,10 +696,10 @@ val (_, withUpperBounds) = getMetadataElement(env, "WithUpperBounds") assertThat(withUpperBounds.type.typeArguments).hasSize(2) assertThat(withUpperBounds.type.typeArguments[0].upperBounds).hasSize(1) - assertThat(withUpperBounds.type.typeArguments[0].upperBounds!![0].isNullable()) + assertThat(withUpperBounds.type.typeArguments[0].upperBounds[0].isNullable()) .isFalse() assertThat(withUpperBounds.type.typeArguments[1].upperBounds).hasSize(1) - assertThat(withUpperBounds.type.typeArguments[1].upperBounds!![0].isNullable()) + assertThat(withUpperBounds.type.typeArguments[1].upperBounds[0].isNullable()) .isTrue() val (_, withSuperType) = getMetadataElement(env, "WithSuperType")
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..3e45fdd 100644 --- a/settings.gradle +++ b/settings.gradle
@@ -690,6 +690,7 @@ includeProject(":core:core-location-altitude", [BuildType.MAIN]) includeProject(":core:core-location-altitude-proto", [BuildType.MAIN]) includeProject(":core:core-performance", [BuildType.MAIN]) +includeProject(":core:core-performance:integration-tests:testapp", [BuildType.MAIN]) includeProject(":core:core-performance-testing", [BuildType.MAIN]) includeProject(":core:core-performance-play-services", [BuildType.MAIN]) includeProject(":core:core-performance:core-performance-samples", "core/core-performance/samples", [BuildType.MAIN]) @@ -906,6 +907,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/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt index 0bc25f4..01a897c 100644 --- a/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt +++ b/testutils/testutils-macrobenchmark/src/main/java/androidx/testutils/MacrobenchUtils.kt
@@ -25,6 +25,7 @@ import androidx.benchmark.macro.Metric import androidx.benchmark.macro.StartupMode import androidx.benchmark.macro.StartupTimingMetric +import androidx.benchmark.macro.TraceSectionMetric import androidx.benchmark.macro.isSupportedWithVmSettings import androidx.benchmark.macro.junit4.MacrobenchmarkRule @@ -67,7 +68,11 @@ */ @OptIn(ExperimentalMetricApi::class) fun getStartupMetrics() = - listOf(StartupTimingMetric(), MemoryUsageMetric(MemoryUsageMetric.Mode.Last)) + listOf( + StartupTimingMetric(), + TraceSectionMetric("StartupTracingInitializer"), + MemoryUsageMetric(MemoryUsageMetric.Mode.Last) + ) fun MacrobenchmarkRule.measureStartup( compilationMode: CompilationMode,
diff --git a/tracing/tracing-perfetto/src/main/AndroidManifest.xml b/tracing/tracing-perfetto/src/main/AndroidManifest.xml index 7402b3a..c955790 100644 --- a/tracing/tracing-perfetto/src/main/AndroidManifest.xml +++ b/tracing/tracing-perfetto/src/main/AndroidManifest.xml
@@ -32,8 +32,6 @@ - - ++ android:name="androidx.tracing.perfetto.StartupTracingConfigStoreIsEnabledGate" + android:enabled="false" + android:exported="false" + android:directBootAware="false" + tools:targetApi="n"> +
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingConfig.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingConfig.kt index e83611c..fd34d99 100644 --- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingConfig.kt +++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingConfig.kt
@@ -16,10 +16,13 @@ package androidx.tracing.perfetto -import androidx.annotation.RestrictTo -import androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.Context +import android.content.pm.PackageManager +import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED +import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED import java.io.File -import java.io.Writer import java.util.Properties /** @@ -28,10 +31,39 @@ * @param libFilePath Path to the optionally sideloaded `libtracing_perfetto.so` file * @param isPersistent Determines whether tracing should remain enabled (sticky) between app runs */ -@RestrictTo(LIBRARY_GROUP) internal data class StartupTracingConfig(val libFilePath: String?, val isPersistent: Boolean) -@RestrictTo(LIBRARY_GROUP) +/** + * Hack used by [StartupTracingConfigStore] to perform a fast check whether there is + * a [StartupTracingConfig] present. Relies on [PackageManager.getComponentEnabledSetting] and a + * dummy [BroadcastReceiver] component. + */ +private abstract class StartupTracingConfigStoreIsEnabledGate : BroadcastReceiver() { + companion object { + fun enable(context: Context) = setEnabledSetting(context, true) + + fun disable(context: Context) = setEnabledSetting(context, false) + + private fun setEnabledSetting(context: Context, enabled: Boolean) { + context.packageManager.setComponentEnabledSetting( + context.componentName, + if (enabled) COMPONENT_ENABLED_STATE_ENABLED else COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP + ) + } + + fun isEnabled(context: Context): Boolean = + context.packageManager.getComponentEnabledSetting(context.componentName) == + COMPONENT_ENABLED_STATE_ENABLED + + private val Context.componentName + get() = ComponentName( + this, + StartupTracingConfigStoreIsEnabledGate::class.java.name + ) + } +} + internal object StartupTracingConfigStore { private const val KEY_IS_PERSISTENT = "isPersistent" private const val KEY_LIB_FILE_PATH = "libtracingPerfettoFilePath" @@ -41,9 +73,12 @@ File("/sdcard/Android/media/$packageName/$STARTUP_CONFIG_FILE_NAME") /** Loads the config */ - fun load(packageName: String): StartupTracingConfig? { + fun load(context: Context): StartupTracingConfig? { + // use the fast-check-gate value + if (!StartupTracingConfigStoreIsEnabledGate.isEnabled(context)) return null + // read the config from file - val propertiesFile = startupConfigFileForPackageName(packageName) + val propertiesFile = startupConfigFileForPackageName(context.packageName) if (!propertiesFile.exists()) return null val properties = Properties() propertiesFile.reader().use { properties.load(it) } @@ -54,24 +89,21 @@ } /** Stores the config */ - fun StartupTracingConfig.store(packageName: String): Unit = - startupConfigFileForPackageName(packageName) + fun StartupTracingConfig.store(context: Context) { + startupConfigFileForPackageName(context.packageName) .bufferedWriter() - .use { store(it) } - - /** - * Stores the config as a [Properties] string - * - * The caller is responsible for closing the passed-in [Writer] - */ - private fun StartupTracingConfig.store(writer: Writer) = - Properties().also { - it.setProperty(KEY_LIB_FILE_PATH, libFilePath) - it.setProperty(KEY_IS_PERSISTENT, isPersistent.toString()) - }.store(writer, null) + .use { writer -> + Properties().also { + it.setProperty(KEY_LIB_FILE_PATH, libFilePath) + it.setProperty(KEY_IS_PERSISTENT, isPersistent.toString()) + }.store(writer, null) + } + StartupTracingConfigStoreIsEnabledGate.enable(context) // update the fast-check-gate value + } /** Deletes the config */ - fun clear(packageName: String) { - startupConfigFileForPackageName(packageName).delete() + fun clear(context: Context) { + StartupTracingConfigStoreIsEnabledGate.disable(context) // update the fast-check-gate value + startupConfigFileForPackageName(context.packageName).delete() } }
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingInitializer.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingInitializer.kt index ab2d6fd..ee2ea0d 100644 --- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingInitializer.kt +++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/StartupTracingInitializer.kt
@@ -18,6 +18,7 @@ import android.content.Context import android.os.Build +import android.os.StrictMode import android.util.Log import androidx.startup.Initializer import androidx.tracing.perfetto.internal.handshake.protocol.Response @@ -33,27 +34,38 @@ // TODO(234351579): Support API < 30 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) return - // read startup tracing config file if present - val packageName = context.applicationInfo.packageName - val config = StartupTracingConfigStore.load(packageName) - ?: return // early exit if no config is found + suppressStrictModeDiskWrites { + // read startup tracing config if present + val config = StartupTracingConfigStore.load(context) + ?: return // early exit if no config is found - // delete config file if not meant to be preserved between runs - if (!config.isPersistent) StartupTracingConfigStore.clear(packageName) + // delete config if not meant to be preserved between runs + if (!config.isPersistent) StartupTracingConfigStore.clear(context) - // enable tracing - val libFilePath = config.libFilePath - val enableTracingResponse = - if (libFilePath == null) PerfettoSdkTrace.enable() - else PerfettoSdkTrace.enable(File(libFilePath), context) + // enable tracing + val libFilePath = config.libFilePath + val enableTracingResponse = + if (libFilePath == null) PerfettoSdkTrace.enable() + else PerfettoSdkTrace.enable(File(libFilePath), context) - // log the result for debuggability - Log.d(TAG, "${Response::class.java.name}: { " + - "resultCode: ${enableTracingResponse.resultCode}, " + - "message: ${enableTracingResponse.message}, " + - "requiredVersion: ${enableTracingResponse.requiredVersion} " + - "}") + // log the result for debuggability + Log.d(TAG, "${Response::class.java.name}: { " + + "resultCode: ${enableTracingResponse.resultCode}, " + + "message: ${enableTracingResponse.message}, " + + "requiredVersion: ${enableTracingResponse.requiredVersion} " + + "}") + } } override fun dependencies(): List>> = emptyList() + + // TODO(245426369): test in TrivialStartupTracingBenchmark + private inline funsuppressStrictModeDiskWrites(block: () -> R): R { + val oldPolicy = StrictMode.allowThreadDiskWrites() + try { + return block() + } finally { + StrictMode.setThreadPolicy(oldPolicy) + } + } }
diff --git a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt index 2bfa12e..6f45b92 100644 --- a/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt +++ b/tracing/tracing-perfetto/src/main/java/androidx/tracing/perfetto/TracingReceiver.kt
@@ -134,13 +134,13 @@ RESULT_CODE_ERROR_OTHER, "Cannot set up cold start tracing without a Context instance." ) - config.store(context.applicationInfo.packageName) + config.store(context) } } private fun disableTracingColdStart(context: Context?): Response = when { context != null -> { - StartupTracingConfigStore.clear(context.applicationInfo.packageName) + StartupTracingConfigStore.clear(context) Response(RESULT_CODE_SUCCESS) } else ->
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( - // 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() - @Ignore("b/276935528") @Test fun navigateThroughAllDemos() { // Compose integration-tests are split into batches due to size, @@ -102,6 +106,7 @@ path: List, 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> listener); + method public void removeWindowAreaInfoListListener(androidx.core.util.Consumer> 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> consumer); + method public void removeSplitListener(androidx.core.util.Consumer> 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.Consumerconsumer); + method public void addWindowLayoutInfoListener(@UiContext android.content.Context context, java.util.concurrent.Executor executor, androidx.core.util.Consumerconsumer); + method public void removeWindowLayoutInfoListener(androidx.core.util.Consumerconsumer); + } + +} +
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> listener); + method public void removeWindowAreaInfoListListener(androidx.core.util.Consumer> 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> consumer); + method public void removeSplitListener(androidx.core.util.Consumer> 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.Consumerconsumer); + method public void addWindowLayoutInfoListener(@UiContext android.content.Context context, java.util.concurrent.Executor executor, androidx.core.util.Consumerconsumer); + method public void removeWindowLayoutInfoListener(androidx.core.util.Consumerconsumer); + } + +} +
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.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context); + method public static io.reactivex.ObservablewindowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.ObservablewindowLayoutInfoObservable(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.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context); + method public static io.reactivex.ObservablewindowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.ObservablewindowLayoutInfoObservable(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.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.rxjava3.core.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context); + method public static io.reactivex.rxjava3.core.ObservablewindowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.rxjava3.core.ObservablewindowLayoutInfoObservable(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.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.rxjava3.core.FlowablewindowLayoutInfoFlowable(androidx.window.layout.WindowInfoTracker, @UiContext android.content.Context context); + method public static io.reactivex.rxjava3.core.ObservablewindowLayoutInfoObservable(androidx.window.layout.WindowInfoTracker, android.app.Activity activity); + method public static io.reactivex.rxjava3.core.ObservablewindowLayoutInfoObservable(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.ListsplitInfoList); + 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.ListsplitInfoList); + 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> 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> 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.SetactivityStacks); + 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.SetgetFilters(); + property public final boolean alwaysExpand; + property public final java.util.Setfilters; + } + + public static final class ActivityRule.Builder { + ctor public ActivityRule.Builder(java.util.Setfilters); + 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.SetgetRules(); + method public static java.util.SetparseRules(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.SetparseRules(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> 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.SetgetFilters(); + 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.Setfilters; + 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.Setfilters); + 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.SetgetFilters(); + method public androidx.window.embedding.SplitRule.FinishBehavior getFinishPrimaryWithPlaceholder(); + method public android.content.Intent getPlaceholderIntent(); + method public boolean isSticky(); + property public final java.util.Setfilters; + 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.Setfilters, 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.FlowwindowLayoutInfo(android.app.Activity activity); + method public default kotlinx.coroutines.flow.FlowwindowLayoutInfo(@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.ListgetDisplayFeatures(); + property public final java.util.ListdisplayFeatures; + } + + 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> 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> 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.SetactivityStacks); + 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.SetgetFilters(); + property public final boolean alwaysExpand; + property public final java.util.Setfilters; + } + + public static final class ActivityRule.Builder { + ctor public ActivityRule.Builder(java.util.Setfilters); + 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.SetgetRules(); + method public static java.util.SetparseRules(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.SetparseRules(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> 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.SetgetFilters(); + 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.Setfilters; + 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.Setfilters); + 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.SetgetFilters(); + method public androidx.window.embedding.SplitRule.FinishBehavior getFinishPrimaryWithPlaceholder(); + method public android.content.Intent getPlaceholderIntent(); + method public boolean isSticky(); + property public final java.util.Setfilters; + 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.Setfilters, 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.FlowwindowLayoutInfo(android.app.Activity activity); + method public default kotlinx.coroutines.flow.FlowwindowLayoutInfo(@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.ListgetDisplayFeatures(); + property public final java.util.ListdisplayFeatures; + } + + 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(); + } + +} +