Merge "Changed compose dependency from beta02 to beta03" into androidx-main
diff --git a/annotation/annotation/api/api_lint.ignore b/annotation/annotation/api/api_lint.ignore
new file mode 100644
index 0000000..9f6c2ee
--- /dev/null
+++ b/annotation/annotation/api/api_lint.ignore
@@ -0,0 +1,17 @@
+// Baseline format: 1.0
+GetterSetterNames: field FloatRange.fromInclusive:
+ Invalid name for boolean property `fromInclusive`. Should start with one of `has`, `can`, `should`, `is`.
+GetterSetterNames: field FloatRange.toInclusive:
+ Invalid name for boolean property `toInclusive`. Should start with one of `has`, `can`, `should`, `is`.
+GetterSetterNames: field IntDef.flag:
+ Invalid name for boolean property `flag`. Should start with one of `has`, `can`, `should`, `is`.
+GetterSetterNames: field IntDef.open:
+ Invalid name for boolean property `open`. Should start with one of `has`, `can`, `should`, `is`.
+GetterSetterNames: field LongDef.flag:
+ Invalid name for boolean property `flag`. Should start with one of `has`, `can`, `should`, `is`.
+GetterSetterNames: field LongDef.open:
+ Invalid name for boolean property `open`. Should start with one of `has`, `can`, `should`, `is`.
+GetterSetterNames: field RequiresPermission.conditional:
+ Invalid name for boolean property `conditional`. Should start with one of `has`, `can`, `should`, `is`.
+GetterSetterNames: field StringDef.open:
+ Invalid name for boolean property `open`. Should start with one of `has`, `can`, `should`, `is`.
diff --git a/annotation/annotation/api/current.ignore b/annotation/annotation/api/current.ignore
index 7cc038b..8c6aaac 100644
--- a/annotation/annotation/api/current.ignore
+++ b/annotation/annotation/api/current.ignore
@@ -1,13 +1,5 @@
// Baseline format: 1.0
-ChangedValue: androidx.annotation.FloatRange#from():
- Method androidx.annotation.FloatRange.from has changed value from java.lang.Double.NEGATIVE_INFINITY to kotlin.jvm.internal.DoubleCompanionObject.NEGATIVE_INFINITY
-ChangedValue: androidx.annotation.FloatRange#to():
- Method androidx.annotation.FloatRange.to has changed value from java.lang.Double.POSITIVE_INFINITY to kotlin.jvm.internal.DoubleCompanionObject.POSITIVE_INFINITY
-ChangedValue: androidx.annotation.IntRange#from():
- Method androidx.annotation.IntRange.from has changed value from java.lang.Long.MIN_VALUE to kotlin.jvm.internal.LongCompanionObject.MIN_VALUE
-ChangedValue: androidx.annotation.IntRange#to():
- Method androidx.annotation.IntRange.to has changed value from java.lang.Long.MAX_VALUE to kotlin.jvm.internal.LongCompanionObject.MAX_VALUE
-ChangedValue: androidx.annotation.Size#max():
- Method androidx.annotation.Size.max has changed value from java.lang.Long.MAX_VALUE to kotlin.jvm.internal.LongCompanionObject.MAX_VALUE
-ChangedValue: androidx.annotation.Size#min():
- Method androidx.annotation.Size.min has changed value from java.lang.Long.MIN_VALUE to kotlin.jvm.internal.LongCompanionObject.MIN_VALUE
+ParameterNameChange: androidx.annotation.InspectableProperty.ValueType#valueOf(String) parameter #0:
+ Attempted to change parameter name from name to value in method androidx.annotation.InspectableProperty.ValueType.valueOf
+ParameterNameChange: androidx.annotation.RestrictTo.Scope#valueOf(String) parameter #0:
+ Attempted to change parameter name from name to value in method androidx.annotation.RestrictTo.Scope.valueOf
diff --git a/annotation/annotation/api/current.txt b/annotation/annotation/api/current.txt
index 660800c..71556c1 100644
--- a/annotation/annotation/api/current.txt
+++ b/annotation/annotation/api/current.txt
@@ -138,32 +138,32 @@
method @Deprecated public abstract boolean hasAttributeId() default true;
method @Deprecated public abstract String name() default "";
method @Deprecated public abstract androidx.annotation.InspectableProperty.ValueType valueType() default androidx.annotation.InspectableProperty.ValueType.INFERRED;
- property public abstract int attributeId;
- property public abstract androidx.annotation.InspectableProperty.EnumEntry[] enumMapping;
- property public abstract androidx.annotation.InspectableProperty.FlagEntry[] flagMapping;
- property public abstract boolean hasAttributeId;
- property public abstract String name;
- property public abstract androidx.annotation.InspectableProperty.ValueType valueType;
+ property @Deprecated public abstract int attributeId;
+ property @Deprecated public abstract androidx.annotation.InspectableProperty.EnumEntry[] enumMapping;
+ property @Deprecated public abstract androidx.annotation.InspectableProperty.FlagEntry[] flagMapping;
+ property @Deprecated public abstract boolean hasAttributeId;
+ property @Deprecated public abstract String name;
+ property @Deprecated public abstract androidx.annotation.InspectableProperty.ValueType valueType;
}
@Deprecated @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface InspectableProperty.EnumEntry {
method @Deprecated public abstract String name();
method @Deprecated public abstract int value();
- property public abstract String name;
- property public abstract int value;
+ property @Deprecated public abstract String name;
+ property @Deprecated public abstract int value;
}
@Deprecated @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface InspectableProperty.FlagEntry {
method @Deprecated public abstract int mask() default 0;
method @Deprecated public abstract String name();
method @Deprecated public abstract int target();
- property public abstract int mask;
- property public abstract String name;
- property public abstract int target;
+ property @Deprecated public abstract int mask;
+ property @Deprecated public abstract String name;
+ property @Deprecated public abstract int target;
}
@Deprecated public enum InspectableProperty.ValueType {
- method @Deprecated public static androidx.annotation.InspectableProperty.ValueType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method @Deprecated public static androidx.annotation.InspectableProperty.ValueType valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
method @Deprecated public static androidx.annotation.InspectableProperty.ValueType[] values();
enum_constant @Deprecated public static final androidx.annotation.InspectableProperty.ValueType COLOR;
enum_constant @Deprecated public static final androidx.annotation.InspectableProperty.ValueType GRAVITY;
@@ -293,7 +293,7 @@
}
public enum RestrictTo.Scope {
- method public static androidx.annotation.RestrictTo.Scope valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.annotation.RestrictTo.Scope valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
method public static androidx.annotation.RestrictTo.Scope[] values();
enum_constant @Deprecated public static final androidx.annotation.RestrictTo.Scope GROUP_ID;
enum_constant public static final androidx.annotation.RestrictTo.Scope LIBRARY;
@@ -342,7 +342,7 @@
@kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER, kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER}) public @interface UiThread {
}
- @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface VisibleForTesting {
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface VisibleForTesting {
method public abstract int otherwise() default androidx.annotation.VisibleForTesting.PRIVATE;
property public abstract int otherwise;
field public static final androidx.annotation.VisibleForTesting.Companion Companion;
diff --git a/annotation/annotation/api/restricted_current.ignore b/annotation/annotation/api/restricted_current.ignore
index 7cc038b..8c6aaac 100644
--- a/annotation/annotation/api/restricted_current.ignore
+++ b/annotation/annotation/api/restricted_current.ignore
@@ -1,13 +1,5 @@
// Baseline format: 1.0
-ChangedValue: androidx.annotation.FloatRange#from():
- Method androidx.annotation.FloatRange.from has changed value from java.lang.Double.NEGATIVE_INFINITY to kotlin.jvm.internal.DoubleCompanionObject.NEGATIVE_INFINITY
-ChangedValue: androidx.annotation.FloatRange#to():
- Method androidx.annotation.FloatRange.to has changed value from java.lang.Double.POSITIVE_INFINITY to kotlin.jvm.internal.DoubleCompanionObject.POSITIVE_INFINITY
-ChangedValue: androidx.annotation.IntRange#from():
- Method androidx.annotation.IntRange.from has changed value from java.lang.Long.MIN_VALUE to kotlin.jvm.internal.LongCompanionObject.MIN_VALUE
-ChangedValue: androidx.annotation.IntRange#to():
- Method androidx.annotation.IntRange.to has changed value from java.lang.Long.MAX_VALUE to kotlin.jvm.internal.LongCompanionObject.MAX_VALUE
-ChangedValue: androidx.annotation.Size#max():
- Method androidx.annotation.Size.max has changed value from java.lang.Long.MAX_VALUE to kotlin.jvm.internal.LongCompanionObject.MAX_VALUE
-ChangedValue: androidx.annotation.Size#min():
- Method androidx.annotation.Size.min has changed value from java.lang.Long.MIN_VALUE to kotlin.jvm.internal.LongCompanionObject.MIN_VALUE
+ParameterNameChange: androidx.annotation.InspectableProperty.ValueType#valueOf(String) parameter #0:
+ Attempted to change parameter name from name to value in method androidx.annotation.InspectableProperty.ValueType.valueOf
+ParameterNameChange: androidx.annotation.RestrictTo.Scope#valueOf(String) parameter #0:
+ Attempted to change parameter name from name to value in method androidx.annotation.RestrictTo.Scope.valueOf
diff --git a/annotation/annotation/api/restricted_current.txt b/annotation/annotation/api/restricted_current.txt
index 660800c..71556c1 100644
--- a/annotation/annotation/api/restricted_current.txt
+++ b/annotation/annotation/api/restricted_current.txt
@@ -138,32 +138,32 @@
method @Deprecated public abstract boolean hasAttributeId() default true;
method @Deprecated public abstract String name() default "";
method @Deprecated public abstract androidx.annotation.InspectableProperty.ValueType valueType() default androidx.annotation.InspectableProperty.ValueType.INFERRED;
- property public abstract int attributeId;
- property public abstract androidx.annotation.InspectableProperty.EnumEntry[] enumMapping;
- property public abstract androidx.annotation.InspectableProperty.FlagEntry[] flagMapping;
- property public abstract boolean hasAttributeId;
- property public abstract String name;
- property public abstract androidx.annotation.InspectableProperty.ValueType valueType;
+ property @Deprecated public abstract int attributeId;
+ property @Deprecated public abstract androidx.annotation.InspectableProperty.EnumEntry[] enumMapping;
+ property @Deprecated public abstract androidx.annotation.InspectableProperty.FlagEntry[] flagMapping;
+ property @Deprecated public abstract boolean hasAttributeId;
+ property @Deprecated public abstract String name;
+ property @Deprecated public abstract androidx.annotation.InspectableProperty.ValueType valueType;
}
@Deprecated @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface InspectableProperty.EnumEntry {
method @Deprecated public abstract String name();
method @Deprecated public abstract int value();
- property public abstract String name;
- property public abstract int value;
+ property @Deprecated public abstract String name;
+ property @Deprecated public abstract int value;
}
@Deprecated @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS}) public static @interface InspectableProperty.FlagEntry {
method @Deprecated public abstract int mask() default 0;
method @Deprecated public abstract String name();
method @Deprecated public abstract int target();
- property public abstract int mask;
- property public abstract String name;
- property public abstract int target;
+ property @Deprecated public abstract int mask;
+ property @Deprecated public abstract String name;
+ property @Deprecated public abstract int target;
}
@Deprecated public enum InspectableProperty.ValueType {
- method @Deprecated public static androidx.annotation.InspectableProperty.ValueType valueOf(String name) throws java.lang.IllegalArgumentException;
+ method @Deprecated public static androidx.annotation.InspectableProperty.ValueType valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
method @Deprecated public static androidx.annotation.InspectableProperty.ValueType[] values();
enum_constant @Deprecated public static final androidx.annotation.InspectableProperty.ValueType COLOR;
enum_constant @Deprecated public static final androidx.annotation.InspectableProperty.ValueType GRAVITY;
@@ -293,7 +293,7 @@
}
public enum RestrictTo.Scope {
- method public static androidx.annotation.RestrictTo.Scope valueOf(String name) throws java.lang.IllegalArgumentException;
+ method public static androidx.annotation.RestrictTo.Scope valueOf(String value) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;
method public static androidx.annotation.RestrictTo.Scope[] values();
enum_constant @Deprecated public static final androidx.annotation.RestrictTo.Scope GROUP_ID;
enum_constant public static final androidx.annotation.RestrictTo.Scope LIBRARY;
@@ -342,7 +342,7 @@
@kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER, kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.VALUE_PARAMETER}) public @interface UiThread {
}
- @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface VisibleForTesting {
+ @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface VisibleForTesting {
method public abstract int otherwise() default androidx.annotation.VisibleForTesting.PRIVATE;
property public abstract int otherwise;
field public static final androidx.annotation.VisibleForTesting.Companion Companion;
diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle
index bc6c8e3..e0cbd25 100644
--- a/benchmark/benchmark-macro/build.gradle
+++ b/benchmark/benchmark-macro/build.gradle
@@ -147,24 +147,6 @@
prune 'perfetto.protos.UnsymbolizedFrames'
}
-// https://github.com/square/wire/issues/1947
-// Remove when we upgrade to fixed wire library
-afterEvaluate {
- tasks.named("compileDebugKotlin").configure {
- it.dependsOn("generateDebugProtos")
- }
- tasks.named("compileReleaseKotlin").configure {
- it.dependsOn("generateReleaseProtos")
- }
-}
-
-androidx {
- deviceTests {
- targetAppProject = project(":benchmark:integration-tests:macrobenchmark-target")
- targetAppVariant = "release"
- }
-}
-
// Define a task dependency so the app is installed before we run macro benchmarks.
afterEvaluate {
// `:benchmark:integration-tests:macrobenchmark-target:installRelease` is not in the compose
@@ -176,3 +158,10 @@
.dependsOn(installTask)
}
}
+
+androidx {
+ deviceTests {
+ targetAppProject = project(":benchmark:integration-tests:macrobenchmark-target")
+ targetAppVariant = "release"
+ }
+}
\ No newline at end of file
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
index f51c211..488a5a6 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
@@ -146,6 +146,12 @@
return if (project.enableJvm()) {
kotlinExtension.jvm {
block?.execute(this)
+ // quick fix for b/286852059
+ // We need to have either Java plugin or Android plugin for the API
+ // files to be generated.
+ if (!project.plugins.hasPlugin("com.android.library")) {
+ withJava()
+ }
}
} else { null }
}
diff --git a/camera/camera-testing/src/main/AndroidManifest.xml b/camera/camera-testing/src/main/AndroidManifest.xml
index 6fc9159..d88d24c 100644
--- a/camera/camera-testing/src/main/AndroidManifest.xml
+++ b/camera/camera-testing/src/main/AndroidManifest.xml
@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
Copyright 2019 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,32 +22,21 @@
<application>
<activity
android:name="androidx.camera.testing.activity.ForegroundTestActivity"
- android:exported="true"
android:configChanges="orientation|screenSize"
- android:label="ForegroundTestActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
+ android:exported="true"
+ android:label="ForegroundTestActivity" />
<activity
android:name="androidx.camera.testing.activity.CameraXTestActivity"
android:exported="true"
- android:label="CameraX TestActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
+ android:label="CameraX TestActivity" />
<activity
android:name="androidx.camera.testing.activity.Camera2TestActivity"
android:exported="true"
- android:label="Camera2 TestActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
+ android:label="Camera2 TestActivity" />
+ <activity
+ android:name="androidx.camera.testing.activity.EmptyActivity"
+ android:exported="true"
+ android:label="EmptyActivity" />
</application>
</manifest>
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/WakelockEmptyActivityRule.kt b/camera/camera-testing/src/main/java/androidx/camera/testing/WakelockEmptyActivityRule.kt
new file mode 100644
index 0000000..036c35f
--- /dev/null
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/WakelockEmptyActivityRule.kt
@@ -0,0 +1,100 @@
+/*
+ * 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.camera.testing
+
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import android.view.WindowManager
+import androidx.annotation.DoNotInline
+import androidx.annotation.RequiresApi
+import androidx.camera.core.Logger
+import androidx.camera.testing.Api27Impl.setShowWhenLocked
+import androidx.camera.testing.Api27Impl.setTurnScreenOn
+import androidx.camera.testing.activity.EmptyActivity
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.rules.TestRule
+import org.junit.runner.Description
+import org.junit.runners.model.Statement
+
+/**
+ * A rule that opens an empty Activity and wakes the device to prevent test failures.
+ */
+@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
+class WakelockEmptyActivityRule : TestRule {
+ override fun apply(base: Statement, description: Description): Statement =
+ object : Statement() {
+ override fun evaluate() {
+ val instrumentation = InstrumentationRegistry.getInstrumentation()
+ var activityRef: EmptyActivity? = null
+ try {
+ activityRef = CoreAppTestUtil.launchActivity(
+ instrumentation,
+ EmptyActivity::class.java,
+ Intent(Intent.ACTION_MAIN).apply {
+ setClassName(
+ ApplicationProvider.getApplicationContext<Context>().packageName,
+ EmptyActivity::class.java.name
+ )
+ addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ )?.also { activity ->
+ instrumentation.runOnMainSync {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
+ activity.setShowWhenLocked()
+ activity.setTurnScreenOn()
+ activity.window.addFlags(
+ WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ )
+ } else {
+ @Suppress("DEPRECATION")
+ activity.window.addFlags(
+ WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
+ or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
+ )
+ }
+ }
+ }
+ } catch (exception: Exception) {
+ Logger.w("WakelockEmptyActivityRule", "Fail to open Activity + wakelock")
+ }
+
+ base.evaluate()
+
+ if (activityRef != null) {
+ instrumentation.runOnMainSync { activityRef.finish() }
+ instrumentation.waitForIdleSync()
+ }
+ }
+ }
+}
+
+@RequiresApi(Build.VERSION_CODES.O_MR1)
+object Api27Impl {
+ @DoNotInline
+ fun Activity.setShowWhenLocked() {
+ setShowWhenLocked(true)
+ }
+
+ @DoNotInline
+ fun Activity.setTurnScreenOn() {
+ setTurnScreenOn(true)
+ }
+}
\ No newline at end of file
diff --git a/collection/collection/src/jvmMain/kotlin/androidx/collection/internal/IntRangeKmp.jvm.kt b/camera/camera-testing/src/main/java/androidx/camera/testing/activity/EmptyActivity.kt
similarity index 63%
rename from collection/collection/src/jvmMain/kotlin/androidx/collection/internal/IntRangeKmp.jvm.kt
rename to camera/camera-testing/src/main/java/androidx/camera/testing/activity/EmptyActivity.kt
index 7894d67..01d6002 100644
--- a/collection/collection/src/jvmMain/kotlin/androidx/collection/internal/IntRangeKmp.jvm.kt
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/activity/EmptyActivity.kt
@@ -1,5 +1,5 @@
/*
- * Copyright 2022 The Android Open Source Project
+ * 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.
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-@file:RestrictTo(RestrictTo.Scope.LIBRARY)
+package androidx.camera.testing.activity
-package androidx.collection.internal
+import androidx.appcompat.app.AppCompatActivity
-import androidx.annotation.RestrictTo
-
-@Suppress("ACTUAL_WITHOUT_EXPECT") // https://youtrack.jetbrains.com/issue/KT-37316
-internal actual typealias IntRangeKmp = androidx.annotation.IntRange
+/**
+ * An empty Activity.
+ */
+class EmptyActivity : AppCompatActivity()
\ No newline at end of file
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BindUnbindUseCasesStressTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BindUnbindUseCasesStressTest.kt
index c84c865..3094788 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BindUnbindUseCasesStressTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/BindUnbindUseCasesStressTest.kt
@@ -46,6 +46,7 @@
import androidx.camera.testing.LabTestRule
import androidx.camera.testing.StressTestRule
import androidx.camera.testing.SurfaceTextureProvider
+import androidx.camera.testing.WakelockEmptyActivityRule
import androidx.camera.testing.fakes.FakeLifecycleOwner
import androidx.camera.video.FileOutputOptions
import androidx.camera.video.Recorder
@@ -104,6 +105,9 @@
@get:Rule
val repeatRule = RepeatRule()
+ @get:Rule
+ val wakelockEmptyActivityRule = WakelockEmptyActivityRule()
+
private val context = ApplicationProvider.getApplicationContext<Context>()
private lateinit var cameraProvider: ProcessCameraProvider
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
index 67a1fec..f93db30 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt
@@ -70,6 +70,7 @@
import androidx.camera.testing.CameraUtil
import androidx.camera.testing.CoreAppTestUtil
import androidx.camera.testing.SurfaceTextureProvider
+import androidx.camera.testing.WakelockEmptyActivityRule
import androidx.camera.testing.fakes.FakeLifecycleOwner
import androidx.camera.testing.fakes.FakeSessionProcessor
import androidx.camera.video.Recorder
@@ -134,6 +135,9 @@
val temporaryFolder =
TemporaryFolder(ApplicationProvider.getApplicationContext<Context>().cacheDir)
+ @get:Rule
+ val wakelockEmptyActivityRule = WakelockEmptyActivityRule()
+
companion object {
@JvmStatic
@Parameterized.Parameters(name = "{0}")
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
index 7ed59c5..26c6fd4 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/ZoomControlDeviceTest.kt
@@ -38,6 +38,7 @@
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.testing.CameraPipeConfigTestRule
import androidx.camera.testing.CameraUtil
+import androidx.camera.testing.WakelockEmptyActivityRule
import androidx.camera.testing.fakes.FakeLifecycleOwner
import androidx.concurrent.futures.await
import androidx.lifecycle.LiveData
@@ -89,6 +90,9 @@
CameraUtil.PreTestCameraIdList(cameraConfig)
)
+ @get:Rule
+ val wakelockEmptyActivityRule = WakelockEmptyActivityRule()
+
private val context = ApplicationProvider.getApplicationContext<Context>()
private lateinit var camera: Camera
private lateinit var cameraProvider: ProcessCameraProvider
diff --git a/collection/collection/build.gradle b/collection/collection/build.gradle
index 5c4efb8..b69575e 100644
--- a/collection/collection/build.gradle
+++ b/collection/collection/build.gradle
@@ -48,6 +48,7 @@
commonMain {
dependencies {
api(libs.kotlinStdlib)
+ api(project(":annotation:annotation"))
}
}
@@ -59,12 +60,6 @@
}
}
- jvmMain {
- dependencies {
- api("androidx.annotation:annotation:1.3.0")
- }
- }
-
jvmTest {
dependencies {
implementation(libs.kotlinTestJunit)
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/LruCache.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/LruCache.kt
index 9c4b106..689e5c3 100644
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/LruCache.kt
+++ b/collection/collection/src/commonMain/kotlin/androidx/collection/LruCache.kt
@@ -16,7 +16,7 @@
package androidx.collection
-import androidx.collection.internal.IntRangeKmp
+import androidx.annotation.IntRange
import androidx.collection.internal.Lock
import androidx.collection.internal.LruHashMap
import androidx.collection.internal.synchronized
@@ -34,7 +34,7 @@
* cache.
*/
public open class LruCache<K : Any, V : Any>
-public constructor(@IntRangeKmp(from = 1, to = MAX_VALUE) private var maxSize: Int) {
+public constructor(@IntRange(from = 1, to = MAX_VALUE) private var maxSize: Int) {
init {
require(maxSize > 0) { "maxSize <= 0" }
@@ -59,7 +59,7 @@
*
* @param maxSize The new maximum size.
*/
- public open fun resize(@IntRangeKmp(from = 1, to = MAX_VALUE) maxSize: Int) {
+ public open fun resize(@IntRange(from = 1, to = MAX_VALUE) maxSize: Int) {
require(maxSize > 0) { "maxSize <= 0" }
lock.synchronized {
diff --git a/collection/collection/src/commonMain/kotlin/androidx/collection/internal/IntRangeKmp.kt b/collection/collection/src/commonMain/kotlin/androidx/collection/internal/IntRangeKmp.kt
deleted file mode 100644
index 61e9a1d..0000000
--- a/collection/collection/src/commonMain/kotlin/androidx/collection/internal/IntRangeKmp.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.collection.internal
-
-/*
- * OptionalExpectation is experimental, should be compile-time safe.
- * Without OptionalExpectation we have to add actual annotation class to nativeMain,
- * which in turn leads to the annotation being removed from api files.
- */
-@OptIn(ExperimentalMultiplatform::class)
-@OptionalExpectation
-internal expect annotation class IntRangeKmp(
- val from: Long = Long.MIN_VALUE,
- val to: Long = Long.MAX_VALUE,
-)
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
index fca7293..4216a6f 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
@@ -3321,16 +3321,20 @@
} else if (key == referenceKey && objectKey == reference) {
// Group is a composition context reference. As this is being removed assume
// all movable groups in the composition that have this context will also be
- // released whe the compositions are disposed.
+ // released when the compositions are disposed.
val contextHolder = reader.groupGet(group, 0) as? CompositionContextHolder
if (contextHolder != null) {
- // The contextHolder can be EMPTY in cases wher the content has been
+ // The contextHolder can be EMPTY in cases where the content has been
// deactivated. Content is deactivated if the content is just being
// held onto for recycling and is not otherwise active. In this case
// the composers we are likely to find here have already been disposed.
val compositionContext = contextHolder.ref
compositionContext.composers.forEach { composer ->
composer.reportAllMovableContent()
+
+ // Mark the composition as being removed so it will not be recomposed
+ // this turn.
+ parentContext.reportRemovedComposition(composer.composition)
}
}
reader.nodeCount(group)
@@ -3551,6 +3555,10 @@
) {
parentContext.movableContentStateReleased(reference, data)
}
+
+ override fun reportRemovedComposition(composition: ControlledComposition) {
+ parentContext.reportRemovedComposition(composition)
+ }
}
private fun updateCompoundKeyWhenWeEnterGroup(groupKey: Int, dataKey: Any?, data: Any?) {
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionContext.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionContext.kt
index 596d03d..5295c43 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionContext.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionContext.kt
@@ -72,4 +72,6 @@
internal open fun movableContentStateResolve(
reference: MovableContentStateReference
): MovableContentState? = null
+
+ internal abstract fun reportRemovedComposition(composition: ControlledComposition)
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
index e60bf00..e16cdd8 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
@@ -215,6 +215,7 @@
private val compositionValueStatesAvailable =
mutableMapOf<MovableContentStateReference, MovableContentState>()
private var failedCompositions: MutableList<ControlledComposition>? = null
+ private var compositionsRemoved: MutableSet<ControlledComposition>? = null
private var workContinuation: CancellableContinuation<Unit>? = null
private var concurrentCompositionsOutstanding = 0
private var isClosed: Boolean = false
@@ -563,7 +564,9 @@
// composers to work on
recordComposerModifications()
synchronized(stateLock) {
- compositionInvalidations.fastForEach { toRecompose += it }
+ compositionInvalidations.fastForEach {
+ toRecompose += it
+ }
compositionInvalidations.clear()
}
@@ -682,6 +685,7 @@
Snapshot.notifyObjectsInitialized()
alreadyComposed.clear()
modifiedValues.clear()
+ compositionsRemoved = null
}
}
@@ -1105,7 +1109,10 @@
composition: ControlledComposition,
modifiedValues: IdentityArraySet<Any>?
): ControlledComposition? {
- if (composition.isComposing || composition.isDisposed) return null
+ if (composition.isComposing ||
+ composition.isDisposed ||
+ compositionsRemoved?.contains(composition) == true) return null
+
return if (
composing(composition, modifiedValues) {
if (modifiedValues?.isNotEmpty() == true) {
@@ -1333,6 +1340,16 @@
}
}
+ internal override fun reportRemovedComposition(composition: ControlledComposition) {
+ synchronized(stateLock) {
+ val compositionsRemoved = compositionsRemoved
+ ?: mutableSetOf<ControlledComposition>().also {
+ compositionsRemoved = it
+ }
+ compositionsRemoved.add(composition)
+ }
+ }
+
override fun movableContentStateResolve(
reference: MovableContentStateReference
): MovableContentState? =
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
index 56886e5..bc3a3d5 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
@@ -180,16 +180,19 @@
var someState by mutableStateOf(0)
var someOtherState by mutableStateOf(1)
- @Composable fun B(@Suppress("UNUSED_PARAMETER") value: Int) {
+ @Composable
+ fun B(@Suppress("UNUSED_PARAMETER") value: Int) {
// empty
}
- @Composable fun A() {
+ @Composable
+ fun A() {
B(someState)
someState++
}
- @Composable fun T() {
+ @Composable
+ fun T() {
TestSubcomposition {
// Take up some slot space
// This makes it more likely to reproduce bug 157111271.
@@ -263,6 +266,22 @@
advance()
}
+ @Test // b/254645321
+ fun testSubcompositionDisposedInParent() = compositionTest {
+ var state by mutableStateOf(true)
+
+ compose {
+ if (state) {
+ TestSubcomposition {
+ assert(state) { "Subcomposition should be disposed if state is false" }
+ }
+ }
+ }
+
+ state = false
+ advance()
+ }
+
@Test
@OptIn(ExperimentalComposeApi::class)
fun compositionRecomposeContextDelegation() {
diff --git a/core/core-location-altitude/build.gradle b/core/core-location-altitude/build.gradle
index 91a347e..3ee3eef 100644
--- a/core/core-location-altitude/build.gradle
+++ b/core/core-location-altitude/build.gradle
@@ -45,7 +45,7 @@
bundleInside(project(path: ":core:core-location-altitude-proto", configuration: "export"))
implementation(libs.autoValueAnnotations)
- implementation("androidx.core:core:1.10.0")
+ implementation(project(":core:core"))
implementation("androidx.room:room-runtime:2.4.3")
annotationProcessor(libs.autoValue)
diff --git a/core/core-testing/build.gradle b/core/core-testing/build.gradle
index 1708420..0b16fd2 100644
--- a/core/core-testing/build.gradle
+++ b/core/core-testing/build.gradle
@@ -28,7 +28,7 @@
implementation(project(":core:core"))
}
api(libs.kotlinStdlib)
- implementation("androidx.annotation:annotation-jvm:1.6.0")
+ implementation("androidx.annotation:annotation:1.6.0")
api(project(":core:core"))
testImplementation(libs.testCore)
diff --git a/datastore/datastore-core-okio/api/current.txt b/datastore/datastore-core-okio/api/current.txt
index 08053b5..696e22b 100644
--- a/datastore/datastore-core-okio/api/current.txt
+++ b/datastore/datastore-core-okio/api/current.txt
@@ -2,10 +2,10 @@
package androidx.datastore.core.okio {
public interface OkioSerializer<T> {
- method public T! getDefaultValue();
+ method public T getDefaultValue();
method public suspend Object? readFrom(okio.BufferedSource source, kotlin.coroutines.Continuation<? super T>);
- method public suspend Object? writeTo(T? t, okio.BufferedSink sink, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public abstract T! defaultValue;
+ method public suspend Object? writeTo(T t, okio.BufferedSink sink, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public abstract T defaultValue;
}
public final class OkioStorage<T> implements androidx.datastore.core.Storage<T> {
diff --git a/datastore/datastore-core-okio/api/restricted_current.txt b/datastore/datastore-core-okio/api/restricted_current.txt
index 08053b5..696e22b 100644
--- a/datastore/datastore-core-okio/api/restricted_current.txt
+++ b/datastore/datastore-core-okio/api/restricted_current.txt
@@ -2,10 +2,10 @@
package androidx.datastore.core.okio {
public interface OkioSerializer<T> {
- method public T! getDefaultValue();
+ method public T getDefaultValue();
method public suspend Object? readFrom(okio.BufferedSource source, kotlin.coroutines.Continuation<? super T>);
- method public suspend Object? writeTo(T? t, okio.BufferedSink sink, kotlin.coroutines.Continuation<? super kotlin.Unit>);
- property public abstract T! defaultValue;
+ method public suspend Object? writeTo(T t, okio.BufferedSink sink, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ property public abstract T defaultValue;
}
public final class OkioStorage<T> implements androidx.datastore.core.Storage<T> {
diff --git a/development/auto-version-updater/update_versions_for_release.py b/development/auto-version-updater/update_versions_for_release.py
index 008f4846b..1199ccb 100755
--- a/development/auto-version-updater/update_versions_for_release.py
+++ b/development/auto-version-updater/update_versions_for_release.py
@@ -408,17 +408,6 @@
version_checker_lines = f.readlines()
num_lines = len(version_checker_lines)
- for i in range(num_lines):
- cur_line = version_checker_lines[i]
- # Skip any line that doesn't declare the compiler/compose version
- if 'const val compilerVersion: String = ' not in cur_line: continue
- current_version = cur_line.split('const val compilerVersion: String = ')[1].strip('"\n')
- # Only update if we have a higher version.
- version_to_keep = get_higher_version(current_version, updated_compose_version)
- new_version_line = ' const val compilerVersion: String = "%s"\n' % version_to_keep
- version_checker_lines[i] = new_version_line
- break
-
old_runtime_version = compose_to_runtime_version_map[old_version]["runtime_version"]
if "alpha" in updated_compose_version or "beta" in updated_compose_version:
new_compose_runtime_version = old_runtime_version + 100
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 319b8c8..865ca20 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -57,7 +57,7 @@
spdxGradlePlugin = "0.1.0"
sqldelight = "1.3.0"
retrofit = "2.7.2"
-wire = "4.5.1"
+wire = "4.7.0"
[libraries]
agpTestingPlatformCoreProto = { module = "com.google.testing.platform:core-proto", version = "0.0.8-alpha08" }
diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys
index 7ddd517..bfa94d7 100644
--- a/gradle/verification-keyring.keys
+++ b/gradle/verification-keyring.keys
@@ -6375,6 +6375,42 @@
=2g4Z
-----END PGP PUBLIC KEY BLOCK-----
+pub DA70BCBA6D76AD03
+uid kaml GitHub Actions <[email protected]>
+
+sub 66A2CBDE49E8A25D
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: BCPG v1.68
+
+mQENBGAwdRsBCADCXfWdHhywp8Rcgt834W/Z3MFEAxYdxjAJOTQhc/In1SJfIqi/
+xD7OKHA2fbwzRnS/UmXkmElTK7JI3/1gWRm8kEaaHTnlI63Z9MZV0DHMpJMgvpFM
+JXKMw9GWbOZt211YMFTkY3oi+kCIibzs4S+2zAiKX0/B5xU1gE0hnPYbXQtZ2sUb
+8t4axAkPdlDVrnBbgPD/+31c8G2Nsd3w6Rughi3SXdqp/6lKZpJNZV7ZPllA8wa3
+6hdOqWkh2Xh7uyKCXPtPyw57vwK1CeTmrAvI7Xhfh1Cxj2bnS8POnF0YsthtbG0Z
+6TupcFBrscugbl4F0aWsxCT0WjKQ75J2zgMnABEBAAG0M2thbWwgR2l0SHViIEFj
+dGlvbnMgPGdpdGh1YmFjdGlvbnNAY2hhcmxlc2tvcm4uY29tPokBTgQTAQgAOBYh
+BOAe0pOYGuSEQDtl19pwvLptdq0DBQJgMHUbAhsDBQsJCAcCBhUKCQgLAgQWAgMB
+Ah4BAheAAAoJENpwvLptdq0Dv1YIAKtEikvgdsiHjOAl30uN71sjfa2IQpczLqnX
+I+UWyFLbjkvXoYyhOwkbK+J9NqOVEn3r6mG+lQemP7CIyFixRTLw7B9kl5RAGe2g
+tfqPOufiWTAwkvgCfnR8OxOcz2tjspZpw/9I9razrJbvCzHxCc4QbMtlGQwrrDm0
+EVCH2Ks7sbiWWujl6EIKsVobuZHaRsqrpxPtC1I7xm+ed8rEKkrBThLB9Tf2itun
++w1ct7y1rgOGKh5XH9IYuSwEbWZH0dhMIsdItYZW1Uk+t6DXXTRq5OXHmr2s6JWt
+9HECR8b+xUUZIue3d8PWewiCElgz6c+Jq6ywEwGiSyZXvFBpLaC5AQ0EYDB1GwEI
+AMQiv6gHlSd5U1Jzc8vFMS/Pt7RMg2OF8Wedibqc0/EvzIHSqAkZnVs8iVmf6VYp
+bx1ihFG4ySaCmVkovJ7Yv6yHNyyqp1SsRPJJ1zGUVx5USOO8sT6FsS1Wis2NmWXf
+wcJkhO6RfBUF21vPjXkGlbkhyQxqsnCWtCDhZT9/OGacOTd+xUf9Fq2u5KACdn7h
+qlVMhaRgrPEmdh+95RjSHu+lkzoThG4S0rRd7u6XrUs4w5rqwBqWQB8jzS5I8L6H
+MpLnmLQckxnICGwRUyKywd23/zF3HN63Dbj8MCohrYRn39cXutlRbLH4dG8hPpoI
+JeP7OYZIUJGJYdsi5q+EJAsAEQEAAYkBNgQYAQgAIBYhBOAe0pOYGuSEQDtl19pw
+vLptdq0DBQJgMHUbAhsMAAoJENpwvLptdq0DtRMIAJiWNubgOvXDav3l7Wff+qPN
+zMKFh+9lNMyLaI5O8eEGjXAt90esN1MeVbKwFiNO5NSM2qLf7QJ6aXF6SIUGsWut
+1BUOt21Q5unl3n4YZ+Ff6zA/VEgniGJBJBBnBq2dJO/lJKj9tLkcbvzV0Aa+MLQ+
+lEB3lufGDU4xsApp6w18YQK2Za64drxYL9yChofSH0x+Gvx7aYaXi+K1L/HUSh7k
+qBcwgxmqlnWArnQ8sYd4WF1LOplzm4yp0XocHtcZ0hQG0ZW3kAEITPYfmVk26kO0
+Rsia71ZAHmuEYsLHz6uOIqf6XHbFUITFtdjPOSiJmQhIgiFCzvFSgrx6jKZSR04=
+=Jrn2
+-----END PGP PUBLIC KEY BLOCK-----
+
pub 15C71C0A4E0B8EDD
sub 891E4C2D471515FE
-----BEGIN PGP PUBLIC KEY BLOCK-----
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 1778366..55aede8 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -411,6 +411,7 @@
<trusting group="com.beust"/>
<trusting group="org.testng"/>
</trusted-key>
+ <trusted-key id="e01ed293981ae484403b65d7da70bcba6d76ad03" group="com.charleskorn.kaml"/>
<trusted-key id="e0d98c5fd55a8af232290e58dee12b9896f97e34" group="org.pcollections"/>
<trusted-key id="e3a9f95079e84ce201f7cf60bede11eaf1164480" group="org.hamcrest"/>
<trusted-key id="e62231331bca7e1f292c9b88c1b12a5d99c0729d" group="org.jetbrains"/>
diff --git a/libraryversions.toml b/libraryversions.toml
index ba4014e..47aba96 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -57,7 +57,7 @@
EMOJI2 = "1.4.0-beta05"
ENTERPRISE = "1.1.0-rc01"
EXIFINTERFACE = "1.4.0-alpha01"
-FRAGMENT = "1.7.0-alpha01"
+FRAGMENT = "1.7.0-alpha02"
FUTURES = "1.2.0-alpha01"
GLANCE = "1.0.0-beta02"
GLANCE_PREVIEW = "1.0.0-alpha06"