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"