Merge "Snap for 13219944 from 693124d7c11cb7b5e7e2aaaf409a8f6b0235c2b5 to androidx-appsearch-release" into androidx-appsearch-release
diff --git a/activity/activity-compose/build.gradle b/activity/activity-compose/build.gradle
index 14265b5..0594971 100644
--- a/activity/activity-compose/build.gradle
+++ b/activity/activity-compose/build.gradle
@@ -36,7 +36,7 @@
     implementation(libs.kotlinCoroutinesCore)
     api("androidx.compose.runtime:runtime:1.7.0")
     api("androidx.compose.runtime:runtime-saveable:1.7.0")
-    api(project(":activity:activity"))
+    api(project(":activity:activity-ktx"))
     api("androidx.compose.ui:ui:1.0.1")
     api("androidx.core:core-ktx:1.13.0")
     api("androidx.lifecycle:lifecycle-viewmodel:2.6.1")
@@ -79,6 +79,6 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.activity.compose"
 }
diff --git a/activity/activity-compose/samples/build.gradle b/activity/activity-compose/samples/build.gradle
index caa1365..d31203f 100644
--- a/activity/activity-compose/samples/build.gradle
+++ b/activity/activity-compose/samples/build.gradle
@@ -61,6 +61,6 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.activity.compose.samples"
 }
diff --git a/activity/activity-ktx/build.gradle b/activity/activity-ktx/build.gradle
index 76caa25..7cfaace 100644
--- a/activity/activity-ktx/build.gradle
+++ b/activity/activity-ktx/build.gradle
@@ -49,6 +49,6 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.activity.ktx"
 }
diff --git a/activity/activity/api/current.txt b/activity/activity/api/current.txt
index c0a3b5c..ff930ce 100644
--- a/activity/activity/api/current.txt
+++ b/activity/activity/api/current.txt
@@ -9,27 +9,22 @@
   public final class BackEventCompat {
     ctor @RequiresApi(34) public BackEventCompat(android.window.BackEvent backEvent);
     ctor @VisibleForTesting public BackEventCompat(float touchX, float touchY, @FloatRange(from=0.0, to=1.0) float progress, int swipeEdge);
-    ctor @VisibleForTesting public BackEventCompat(float touchX, float touchY, @FloatRange(from=0.0, to=1.0) float progress, int swipeEdge, optional long frameTimeMillis);
-    method public long getFrameTimeMillis();
     method public float getProgress();
     method public int getSwipeEdge();
     method public float getTouchX();
     method public float getTouchY();
     method @RequiresApi(34) public android.window.BackEvent toBackEvent();
-    property public long frameTimeMillis;
     property @FloatRange(from=0.0, to=1.0) public float progress;
     property public int swipeEdge;
     property public float touchX;
     property public float touchY;
     field public static final androidx.activity.BackEventCompat.Companion Companion;
     field public static final int EDGE_LEFT = 0; // 0x0
-    field public static final int EDGE_NONE = 2; // 0x2
     field public static final int EDGE_RIGHT = 1; // 0x1
   }
 
   public static final class BackEventCompat.Companion {
     property public static int EDGE_LEFT;
-    property public static int EDGE_NONE;
     property public static int EDGE_RIGHT;
   }
 
diff --git a/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index 4621b69..360ecd8 100644
--- a/activity/activity/api/restricted_current.txt
+++ b/activity/activity/api/restricted_current.txt
@@ -9,27 +9,22 @@
   public final class BackEventCompat {
     ctor @RequiresApi(34) public BackEventCompat(android.window.BackEvent backEvent);
     ctor @VisibleForTesting public BackEventCompat(float touchX, float touchY, @FloatRange(from=0.0, to=1.0) float progress, int swipeEdge);
-    ctor @VisibleForTesting public BackEventCompat(float touchX, float touchY, @FloatRange(from=0.0, to=1.0) float progress, int swipeEdge, optional long frameTimeMillis);
-    method public long getFrameTimeMillis();
     method public float getProgress();
     method public int getSwipeEdge();
     method public float getTouchX();
     method public float getTouchY();
     method @RequiresApi(34) public android.window.BackEvent toBackEvent();
-    property public long frameTimeMillis;
     property @FloatRange(from=0.0, to=1.0) public float progress;
     property public int swipeEdge;
     property public float touchX;
     property public float touchY;
     field public static final androidx.activity.BackEventCompat.Companion Companion;
     field public static final int EDGE_LEFT = 0; // 0x0
-    field public static final int EDGE_NONE = 2; // 0x2
     field public static final int EDGE_RIGHT = 1; // 0x1
   }
 
   public static final class BackEventCompat.Companion {
     property public static int EDGE_LEFT;
-    property public static int EDGE_NONE;
     property public static int EDGE_RIGHT;
   }
 
diff --git a/activity/activity/build.gradle b/activity/activity/build.gradle
index 768e7b6..305ff9d 100644
--- a/activity/activity/build.gradle
+++ b/activity/activity/build.gradle
@@ -15,7 +15,7 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.activity"
 }
 
diff --git a/activity/activity/src/androidTest/java/androidx/activity/BackEventCompatTest.kt b/activity/activity/src/androidTest/java/androidx/activity/BackEventCompatTest.kt
index 9fa87b4..21fe6c9 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/BackEventCompatTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/BackEventCompatTest.kt
@@ -32,12 +32,11 @@
 
     @Test
     fun testCreateBackEventCompat() {
-        val event = BackEventCompat(1f, 2f, 3f, BackEventCompat.EDGE_LEFT, 2)
+        val event = BackEventCompat(1f, 2f, 3f, BackEventCompat.EDGE_LEFT)
         assertThat(event.touchX).isEqualTo(1f)
         assertThat(event.touchY).isEqualTo(2f)
         assertThat(event.progress).isEqualTo(3f)
         assertThat(event.swipeEdge).isEqualTo(BackEventCompat.EDGE_LEFT)
-        assertThat(event.frameTimeMillis).isEqualTo(2)
     }
 
     @RequiresApi(34)
@@ -61,28 +60,4 @@
         assertThat(event.progress).isEqualTo(3f)
         assertThat(event.swipeEdge).isEqualTo(BackEventCompat.EDGE_LEFT)
     }
-
-    @RequiresApi(36)
-    @SdkSuppress(minSdkVersion = 36)
-    @Test
-    fun testCreateBackEventCompatFromBackEventWithFrameTimeMillis() {
-        val event = BackEventCompat(BackEvent(1f, 2f, 3f, EDGE_LEFT, 5))
-        assertThat(event.touchX).isEqualTo(1f)
-        assertThat(event.touchY).isEqualTo(2f)
-        assertThat(event.progress).isEqualTo(3f)
-        assertThat(event.swipeEdge).isEqualTo(BackEventCompat.EDGE_LEFT)
-        assertThat(event.frameTimeMillis).isEqualTo(5)
-    }
-
-    @RequiresApi(36)
-    @SdkSuppress(minSdkVersion = 36)
-    @Test
-    fun testToBackEventFromBackEventCompatWithFrameTimeMillis() {
-        val event = BackEventCompat(1f, 2f, 3f, BackEventCompat.EDGE_LEFT, 5).toBackEvent()
-        assertThat(event.touchX).isEqualTo(1f)
-        assertThat(event.touchY).isEqualTo(2f)
-        assertThat(event.progress).isEqualTo(3f)
-        assertThat(event.swipeEdge).isEqualTo(BackEventCompat.EDGE_LEFT)
-        assertThat(event.frameTimeMillis).isEqualTo(5)
-    }
 }
diff --git a/activity/activity/src/main/java/androidx/activity/BackEventCompat.kt b/activity/activity/src/main/java/androidx/activity/BackEventCompat.kt
index db1563a..5b73368 100644
--- a/activity/activity/src/main/java/androidx/activity/BackEventCompat.kt
+++ b/activity/activity/src/main/java/androidx/activity/BackEventCompat.kt
@@ -27,7 +27,6 @@
 /** Compat around the [BackEvent] class */
 class BackEventCompat
 @VisibleForTesting
-@JvmOverloads
 constructor(
     /**
      * Absolute X location of the touch point of this event in the coordinate space of the view that
@@ -42,9 +41,7 @@
     /** Value between 0 and 1 on how far along the back gesture is. */
     @FloatRange(from = 0.0, to = 1.0) val progress: Float,
     /** Indicates which edge the swipe starts from. */
-    val swipeEdge: @SwipeEdge Int,
-    /** Frame time of the back event. */
-    val frameTimeMillis: Long = 0
+    val swipeEdge: @SwipeEdge Int
 ) {
 
     @RequiresApi(34)
@@ -54,19 +51,14 @@
         Api34Impl.touchX(backEvent),
         Api34Impl.touchY(backEvent),
         Api34Impl.progress(backEvent),
-        Api34Impl.swipeEdge(backEvent),
-        if (Build.VERSION.SDK_INT >= 36) {
-            Api36Impl.frameTimeMillis(backEvent)
-        } else {
-            0
-        }
+        Api34Impl.swipeEdge(backEvent)
     )
 
     /**  */
     @Target(AnnotationTarget.TYPE)
     @RestrictTo(RestrictTo.Scope.LIBRARY)
     @Retention(AnnotationRetention.SOURCE)
-    @IntDef(EDGE_LEFT, EDGE_RIGHT, EDGE_NONE)
+    @IntDef(EDGE_LEFT, EDGE_RIGHT)
     annotation class SwipeEdge
 
     /**
@@ -77,16 +69,16 @@
      */
     @RequiresApi(34)
     fun toBackEvent(): BackEvent {
-        return if (Build.VERSION.SDK_INT >= 36) {
-            Api36Impl.createOnBackEvent(touchX, touchY, progress, swipeEdge, frameTimeMillis)
+        if (Build.VERSION.SDK_INT >= 34) {
+            return Api34Impl.createOnBackEvent(touchX, touchY, progress, swipeEdge)
         } else {
-            Api34Impl.createOnBackEvent(touchX, touchY, progress, swipeEdge)
+            throw UnsupportedOperationException("This method is only supported on API level 34+")
         }
     }
 
     override fun toString(): String {
         return "BackEventCompat{touchX=$touchX, touchY=$touchY, progress=$progress, " +
-            "swipeEdge=$swipeEdge, frameTimeMillis=$frameTimeMillis}"
+            "swipeEdge=$swipeEdge}"
     }
 
     companion object {
@@ -95,13 +87,6 @@
 
         /** Indicates that the edge swipe starts from the right edge of the screen */
         const val EDGE_RIGHT = 1
-
-        /**
-         * Indicates that the back event was not triggered by an edge swipe back gesture. This
-         * applies to cases like using the back button in 3-button navigation or pressing a hardware
-         * back button.
-         */
-        const val EDGE_NONE = 2
     }
 }
 
@@ -118,16 +103,3 @@
 
     fun swipeEdge(backEvent: BackEvent) = backEvent.swipeEdge
 }
-
-@RequiresApi(36)
-internal object Api36Impl {
-    fun createOnBackEvent(
-        touchX: Float,
-        touchY: Float,
-        progress: Float,
-        swipeEdge: Int,
-        frameTimeMillis: Long
-    ) = BackEvent(touchX, touchY, progress, swipeEdge, frameTimeMillis)
-
-    fun frameTimeMillis(backEvent: BackEvent) = backEvent.frameTimeMillis
-}
diff --git a/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
index 8fc8416..7b88312 100644
--- a/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
+++ b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
@@ -68,10 +68,7 @@
  * @param maxItems limit the number of selectable items when using [PickMultipleVisualMedia]
  * @param isOrderedSelection whether the user can control the order of selected media when using
  *   [PickMultipleVisualMedia] (defaults to false)
- * @param defaultTab the tab to initially open the picker in (defaults to [DefaultTab.PhotosTab]).
- *   Note that the support for this parameter was added in API level 35 / R ext 12 and applies the
- *   default behavior for older versions. Also see
- *   [android.provider.MediaStore.EXTRA_PICK_IMAGES_LAUNCH_TAB]
+ * @param defaultTab the tab to initially open in the picker (defaults to [DefaultTab.PhotosTab])
  * @return a PickVisualMediaRequest that contains the given input
  */
 @Suppress("MissingJvmstatic")
@@ -93,17 +90,12 @@
  * [androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia] or
  * [androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia] Activity Contract.
  *
- * @param accentColor color long to customize picker accent color. Note that the support for this
- *   parameter was added in API level 35 / R ext 12 and applies the default behavior for older
- *   versions. Also see [android.provider.MediaStore.EXTRA_PICK_IMAGES_ACCENT_COLOR]
+ * @param accentColor color long to customize picker accent color
  * @param mediaType type to go into the PickVisualMediaRequest
  * @param maxItems limit the number of selectable items when using [PickMultipleVisualMedia]
  * @param isOrderedSelection whether the user can control the order of selected media when using
  *   [PickMultipleVisualMedia] (defaults to false)
- * @param defaultTab the tab to initially open the picker in (defaults to [DefaultTab.PhotosTab]).
- *   Note that the support for this parameter was added in API level 35 / R ext 12 and applies the
- *   default behavior for older versions. Also see
- *   [android.provider.MediaStore.EXTRA_PICK_IMAGES_LAUNCH_TAB]
+ * @param defaultTab the tab to initially open in the picker (defaults to [DefaultTab.PhotosTab])
  * @return a PickVisualMediaRequest that contains the given input
  */
 @Suppress("MissingJvmstatic")
@@ -268,12 +260,11 @@
          * Set the default tab for the [PickVisualMediaRequest].
          *
          * The default tab is used to open the preferred view inside the photo picker at first such
-         * as, e.g. [DefaultTab.PhotosTab], [DefaultTab.AlbumsTab]. This feature was added in API
-         * level 35 / R ext 12 and applies the default behavior for older versions.
+         * as, e.g. [DefaultTab.PhotosTab], [DefaultTab.AlbumsTab]. This parameter might be not
+         * supported by the underlying photo picker implementation.
          *
-         * @param defaultTab the tab to launch the picker in (defaults to [DefaultTab.PhotosTab])
+         * @param defaultTab the tab to launch the picker in
          * @return This builder.
-         * @see android.provider.MediaStore.EXTRA_PICK_IMAGES_LAUNCH_TAB
          */
         fun setDefaultTab(defaultTab: DefaultTab): Builder {
             this.defaultTab = defaultTab
@@ -283,12 +274,11 @@
         /**
          * Set the accent color for the [PickVisualMediaRequest].
          *
-         * The accent color is used to change the main color in the photo picker. This feature was
-         * added in API level 35 / R ext 12 and applies the default behavior for older versions.
+         * The accent color is used to change the main color in the photo picker. This parameter
+         * might be not supported by the underlying photo picker implementation.
          *
          * @param accentColor color long to apply as accent to the main color in the picker
          * @return This builder.
-         * @see android.provider.MediaStore.EXTRA_PICK_IMAGES_ACCENT_COLOR
          */
         fun setAccentColor(accentColor: Long): Builder {
             this.accentColor = accentColor
diff --git a/activity/integration-tests/macrobenchmark-target/build.gradle b/activity/integration-tests/macrobenchmark-target/build.gradle
index 3c1ce7a..95bcb77 100644
--- a/activity/integration-tests/macrobenchmark-target/build.gradle
+++ b/activity/integration-tests/macrobenchmark-target/build.gradle
@@ -12,7 +12,7 @@
 }
 
 android {
-   compileSdk = 36
+   compileSdk = 35
    namespace = "androidx.activity.integration.macrobenchmark.target"
 }
 
diff --git a/activity/integration-tests/testapp/build.gradle b/activity/integration-tests/testapp/build.gradle
index 8eaa40a..2b4075c 100644
--- a/activity/integration-tests/testapp/build.gradle
+++ b/activity/integration-tests/testapp/build.gradle
@@ -22,7 +22,7 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     defaultConfig {
         applicationId = "androidx.activity.integration.testapp"
     }
diff --git a/appfunctions/appfunctions-common/src/main/java/androidx/appfunctions/AppFunctionSerializableInterface.kt b/appfunctions/appfunctions-common/src/main/java/androidx/appfunctions/AppFunctionSerializableInterface.kt
deleted file mode 100644
index 2e19d2f..0000000
--- a/appfunctions/appfunctions-common/src/main/java/androidx/appfunctions/AppFunctionSerializableInterface.kt
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2025 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.appfunctions
-
-import androidx.annotation.RestrictTo
-
-// TODO(b/403525399): Defines all compatible overrides
-/**
- * Annotates an interface class to be used as a base for [AppFunctionSerializable] implementations.
- *
- * The AppFunction compiler plugin enforces property compatibility between this interface/class and
- * any [AppFunctionSerializable] class that implements or extends it.
- *
- * Take a base interface like Note as example:
- * ```
- * @AppFunctionSerializableInterface
- * public interface Note {
- *   public val title: String
- *   public val content: String
- *
- *   public val attachments: List<Attachment>
- *       get() = emptyList()
- * }
- * ```
- *
- * If an app attempts to implement this base interface, it must respect the original property status
- *
- * ```
- * @AppFunctionSerializable
- * public class MyNote(
- *   override val title: String,
- *   override val content: String,
- *   // attachments is optional in base schema, therefore, must stay as optional
- *   override val attachments: List<Attachment> = emptyList()
- * ): Note
- * ```
- *
- * Attempting to have an incompatible override would result in a compiler error:
- * ```
- * @AppFunctionSerializable
- * public class MyNote(
- *   override val title: String,
- *   override val content: String,
- *   // This would cause a compiler error because it is not required instead of optional
- *   override val attachments: List<Attachment>
- * ): Note
- * ```
- *
- * @see [AppFunctionSerializable]
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-@Retention(AnnotationRetention.BINARY)
-@Target(AnnotationTarget.CLASS)
-public annotation class AppFunctionSerializableInterface
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctionSerializable.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctionSerializable.kt
index e5b1340..086e194 100644
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctionSerializable.kt
+++ b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctionSerializable.kt
@@ -18,13 +18,20 @@
 
 import androidx.appfunctions.compiler.core.AppFunctionTypeReference.AppFunctionSupportedTypeCategory.SERIALIZABLE_LIST
 import androidx.appfunctions.compiler.core.AppFunctionTypeReference.AppFunctionSupportedTypeCategory.SERIALIZABLE_SINGULAR
+import androidx.appfunctions.compiler.core.AppFunctionTypeReference.Companion.SUPPORTED_TYPES_STRING
+import androidx.appfunctions.compiler.core.AppFunctionTypeReference.Companion.isSupportedType
+import com.google.devtools.ksp.getDeclaredProperties
+import com.google.devtools.ksp.getVisibility
 import com.google.devtools.ksp.symbol.KSClassDeclaration
 import com.google.devtools.ksp.symbol.KSFile
+import com.google.devtools.ksp.symbol.KSFunctionDeclaration
 import com.google.devtools.ksp.symbol.KSTypeReference
+import com.google.devtools.ksp.symbol.KSValueParameter
+import com.google.devtools.ksp.symbol.Visibility
 import com.squareup.kotlinpoet.ClassName
 
 /** Represents a class annotated with [androidx.appfunctions.AppFunctionSerializable]. */
-open class AnnotatedAppFunctionSerializable(
+data class AnnotatedAppFunctionSerializable(
     private val appFunctionSerializableClass: KSClassDeclaration
 ) {
     /** The qualified name of the class being annotated with AppFunctionSerializable. */
@@ -33,44 +40,229 @@
     /** The super type of the class being annotated with AppFunctionSerializable */
     val superTypes: Sequence<KSTypeReference> by lazy { appFunctionSerializableClass.superTypes }
 
-    /**
-     * The validator that can be used to validate the class annotated with AppFunctionSerializable.
-     */
-    private val validator: SerializableValidator by lazy {
-        SerializableValidator(classToValidate = appFunctionSerializableClass)
-    }
-
     // TODO(b/392587953): throw an error if a property has the same name as one of the factory
     //  method parameters
     /**
      * Validates that the class annotated with AppFunctionSerializable follows app function's spec.
      *
+     * The annotated class must adhere to the following requirements:
+     * 1. **Primary Constructor:** The class must have a public primary constructor.
+     * 2. **Property Parameters:** Only properties (declared with `val`) can be passed as parameters
+     *    to the primary constructor.
+     * 3. **Supported Types:** All properties must be of one of the supported types.
+     * 4. **Super Type Parameters:** All parameters in the primary constructor of a super type must
+     *    be present in the primary constructor of the subtype.
+     *
      * @throws ProcessingException if the class does not adhere to the requirements
      */
-    open fun validate(): AnnotatedAppFunctionSerializable {
-        validator.validate()
+    fun validate(): AnnotatedAppFunctionSerializable {
+        val validatedPrimaryConstructor =
+            appFunctionSerializableClass.validateSerializablePrimaryConstructor()
+        val superTypesWithSerializableAnnotation =
+            appFunctionSerializableClass.superTypes
+                .map { it.resolve().declaration as KSClassDeclaration }
+                .filter {
+                    it.annotations.findAnnotation(
+                        IntrospectionHelper.AppFunctionSerializableAnnotation.CLASS_NAME
+                    ) != null
+                }
+                .toSet()
+        val superTypesWithCapabilityAnnotation = findSuperTypesWithCapabilityAnnotation()
+        val parametersToValidate =
+            validatedPrimaryConstructor.parameters
+                .associateBy { checkNotNull(it.name).toString() }
+                .toMutableMap()
+
+        validateParameters(
+            parametersToValidate,
+            superTypesWithSerializableAnnotation,
+            superTypesWithCapabilityAnnotation
+        )
+
         return this
     }
 
     /**
-     * Returns the set of super types of [appFunctionSerializableClass] that are annotated with
-     * [androidx.appfunctions.AppFunctionSchemaCapability].
+     * Finds all super types of an [appFunctionSerializableClass] that are annotated with the
+     * [androidx.appfunctions.AppFunctionSchemaCapability] annotation.
+     *
+     * For example, consider the following classes:
+     * ```
+     * @AppFunctionSchemaCapability
+     * public interface AppFunctionOpenable {
+     *     public val intentToOpen: PendingIntent
+     * }
+     *
+     * public interface OpenableResponse : AppFunctionOpenable {
+     *     override val intentToOpen: PendingIntent
+     * }
+     *
+     * @AppFunctionSerializable
+     * class MySerializableClass(
+     *   override val intentToOpen: PendingIntent
+     * ) : OpenableResponse
+     * ```
+     *
+     * This method will return the [KSClassDeclaration] of `AppFunctionOpenable` since it is a super
+     * type of `MySerializableClass` and is annotated with the
+     * [androidx.appfunctions.AppFunctionSchemaCapability] annotation.
+     *
+     * @param appFunctionSerializableClass the [KSClassDeclaration] of the
+     *   [appFunctionSerializableClass] being processed.
+     * @return a set of [KSClassDeclaration] for all super types of the
+     *   [appFunctionSerializableClass] that are annotated with
+     *   [androidx.appfunctions.AppFunctionSchemaCapability].
      */
     fun findSuperTypesWithCapabilityAnnotation(): Set<KSClassDeclaration> {
-        return validator.findSuperTypesWithCapabilityAnnotation()
+        return buildSet {
+            val unvisitedSuperTypes: MutableList<KSTypeReference> =
+                appFunctionSerializableClass.superTypes.toMutableList()
+
+            while (!unvisitedSuperTypes.isEmpty()) {
+                val superTypeClassDeclaration =
+                    unvisitedSuperTypes.removeLast().resolve().declaration as KSClassDeclaration
+                if (
+                    superTypeClassDeclaration.annotations.findAnnotation(
+                        IntrospectionHelper.AppFunctionSchemaCapability.CLASS_NAME
+                    ) != null
+                ) {
+                    add(superTypeClassDeclaration)
+                }
+                if (
+                    superTypeClassDeclaration.annotations.findAnnotation(
+                        IntrospectionHelper.AppFunctionSerializableAnnotation.CLASS_NAME
+                    ) == null
+                ) {
+                    // Only consider non serializable super types since serializable super types
+                    // are already handled separately
+                    unvisitedSuperTypes.addAll(superTypeClassDeclaration.superTypes)
+                }
+            }
+        }
+    }
+
+    private fun validateParameters(
+        parametersToValidate: MutableMap<String, KSValueParameter>,
+        superTypesWithSerializableAnnotation: Set<KSClassDeclaration>,
+        superTypesWithCapabilityAnnotation: Set<KSClassDeclaration>,
+    ) {
+        for (superType in superTypesWithSerializableAnnotation) {
+            if (
+                superType.annotations.findAnnotation(
+                    IntrospectionHelper.AppFunctionSerializableAnnotation.CLASS_NAME
+                ) == null
+            ) {
+                throw ProcessingException(
+                    "Expected supertype with @AppFunctionSerializable annotation.",
+                    superType
+                )
+            }
+            val superTypePrimaryConstructor = superType.validateSerializablePrimaryConstructor()
+
+            for (superTypeParameter in superTypePrimaryConstructor.parameters) {
+                // Parameter has now been visited
+                val parameterInSuperType =
+                    parametersToValidate.remove(superTypeParameter.name.toString())
+                if (parameterInSuperType == null) {
+                    throw ProcessingException(
+                        "All parameters in @AppFunctionSerializable " +
+                            "supertypes must be present in subtype",
+                        superTypeParameter
+                    )
+                }
+                validateSerializableParameter(parameterInSuperType)
+            }
+        }
+
+        for (superType in superTypesWithCapabilityAnnotation) {
+            if (
+                superType.annotations.findAnnotation(
+                    IntrospectionHelper.AppFunctionSchemaCapability.CLASS_NAME
+                ) == null
+            ) {
+                throw ProcessingException(
+                    "Expected supertype with @AppFunctionSchemaCapability annotation.",
+                    superType
+                )
+            }
+            val capabilityProperties = superType.getDeclaredProperties()
+
+            for (superTypeProperty in capabilityProperties) {
+                // Parameter has now been visited
+                val parameterInSuperType =
+                    parametersToValidate.remove(superTypeProperty.simpleName.toString())
+                if (parameterInSuperType == null) {
+                    throw ProcessingException(
+                        "All Properties in @AppFunctionSchemaCapability " +
+                            "supertypes must be present in subtype",
+                        superTypeProperty
+                    )
+                }
+                validateSerializableParameter(parameterInSuperType)
+            }
+        }
+
+        // Validate the remaining parameters
+        if (parametersToValidate.isNotEmpty()) {
+            for ((_, parameterToValidate) in parametersToValidate) {
+                validateSerializableParameter(parameterToValidate)
+            }
+        }
+    }
+
+    private fun KSClassDeclaration.validateSerializablePrimaryConstructor(): KSFunctionDeclaration {
+        if (primaryConstructor == null) {
+            throw ProcessingException(
+                "Classes annotated with AppFunctionSerializable must have a primary constructor.",
+                this
+            )
+        }
+        val primaryConstructorDeclaration = checkNotNull(primaryConstructor)
+        if (primaryConstructorDeclaration.parameters.isEmpty()) {
+            throw ProcessingException(
+                "Classes annotated with AppFunctionSerializable must not have an empty " +
+                    "primary constructor.",
+                this
+            )
+        }
+
+        if (primaryConstructorDeclaration.getVisibility() != Visibility.PUBLIC) {
+            throw ProcessingException(
+                "The primary constructor of @AppFunctionSerializable must be public.",
+                appFunctionSerializableClass
+            )
+        }
+        return primaryConstructorDeclaration
+    }
+
+    private fun validateSerializableParameter(ksValueParameter: KSValueParameter) {
+        if (!ksValueParameter.isVal) {
+            throw ProcessingException(
+                "All parameters in @AppFunctionSerializable primary constructor must have getters",
+                ksValueParameter
+            )
+        }
+
+        if (!isSupportedType(ksValueParameter.type)) {
+            throw ProcessingException(
+                "AppFunctionSerializable properties must be one of the following types:\n" +
+                    SUPPORTED_TYPES_STRING +
+                    ", an @AppFunctionSerializable or a list of @AppFunctionSerializable\nbut found " +
+                    ksValueParameter.type.toTypeName(),
+                ksValueParameter
+            )
+        }
     }
 
     /** Returns the annotated class's properties as defined in its primary constructor. */
-    fun getProperties(): List<AppFunctionPropertyDeclaration> {
-        return checkNotNull(appFunctionSerializableClass.primaryConstructor).parameters.map {
-            AppFunctionPropertyDeclaration(it)
-        }
+    fun getProperties(): List<KSValueParameter> {
+        return checkNotNull(appFunctionSerializableClass.primaryConstructor).parameters
     }
 
     /** Returns the properties that have @AppFunctionSerializable class types. */
     fun getSerializablePropertyTypeReferences(): Set<AppFunctionTypeReference> {
         return getProperties()
-            .map { property -> AppFunctionTypeReference(property.type) }
+            .map { param -> AppFunctionTypeReference(param.type) }
             .filter { afType ->
                 afType.isOfTypeCategory(SERIALIZABLE_SINGULAR) ||
                     afType.isOfTypeCategory(SERIALIZABLE_LIST)
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctionSerializableProxy.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctionSerializableProxy.kt
deleted file mode 100644
index 4e9f9b5..0000000
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctionSerializableProxy.kt
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright 2025 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.appfunctions.compiler.core
-
-import com.google.devtools.ksp.symbol.KSClassDeclaration
-import com.google.devtools.ksp.symbol.KSFunctionDeclaration
-import com.google.devtools.ksp.symbol.KSType
-
-/**
- * A class that represents a class annotated with @AppFunctionSerializableProxy.
- *
- * @param appFunctionSerializableProxyClass The class annotated with @AppFunctionSerializableProxy.
- */
-data class AnnotatedAppFunctionSerializableProxy(
-    private val appFunctionSerializableProxyClass: KSClassDeclaration
-) : AnnotatedAppFunctionSerializable(appFunctionSerializableProxyClass) {
-
-    /** The type of the class that the proxy class is proxying. */
-    val targetClassDeclaration: KSClassDeclaration by lazy {
-        (appFunctionSerializableProxyClass.annotations.findAnnotation(
-                IntrospectionHelper.AppFunctionSerializableProxyAnnotation.CLASS_NAME
-            )
-                ?: throw ProcessingException(
-                    "Class Must have @AppFunctionSerializableProxy annotation",
-                    appFunctionSerializableProxyClass
-                ))
-            .requirePropertyValueOfType(
-                IntrospectionHelper.AppFunctionSerializableProxyAnnotation.PROPERTY_TARGET_CLASS,
-                KSType::class
-            )
-            .declaration as KSClassDeclaration
-    }
-
-    /** The name of the method that returns an instance of the target class. */
-    val toTargetClassMethodName: String by lazy {
-        "to${targetClassDeclaration.simpleName.asString()}"
-    }
-
-    /** The name of the companion method that returns an instance of the proxy class. */
-    val fromTargetClassMethodName: String by lazy {
-        "from${targetClassDeclaration.simpleName.asString()}"
-    }
-
-    /**
-     * Validates the class annotated with @AppFunctionSerializableProxy.
-     *
-     * @return The validated class.
-     */
-    override fun validate(): AnnotatedAppFunctionSerializableProxy {
-        super.validate()
-        validateProxyHasToTargetClassMethod()
-        validateProxyHasFromTargetClassMethod()
-        return this
-    }
-
-    /** Validates that the proxy class has a method that returns an instance of the target class. */
-    private fun validateProxyHasToTargetClassMethod() {
-        val toTargetClassNameFunctionList: List<KSFunctionDeclaration> =
-            appFunctionSerializableProxyClass
-                .getAllFunctions()
-                .filter { it.simpleName.asString() == toTargetClassMethodName }
-                .toList()
-        if (toTargetClassNameFunctionList.size != 1) {
-            throw ProcessingException(
-                "Class must have exactly one member function: $toTargetClassMethodName",
-                appFunctionSerializableProxyClass
-            )
-        }
-        val toTargetClassNameFunction = toTargetClassNameFunctionList.first()
-        if (
-            checkNotNull(
-                    checkNotNull(toTargetClassNameFunction.returnType)
-                        .resolve()
-                        .declaration
-                        .qualifiedName
-                )
-                .asString() != checkNotNull(targetClassDeclaration.qualifiedName).asString()
-        ) {
-            throw ProcessingException(
-                "Function $toTargetClassMethodName should return an instance of target class",
-                appFunctionSerializableProxyClass
-            )
-        }
-    }
-
-    /** Validates that the proxy class has a method that returns an instance of the target class. */
-    private fun validateProxyHasFromTargetClassMethod() {
-        val targetClassName = checkNotNull(targetClassDeclaration.simpleName).asString()
-        val targetCompanionClass =
-            appFunctionSerializableProxyClass.declarations
-                .filterIsInstance<KSClassDeclaration>()
-                .filter { it.isCompanionObject }
-                .single()
-
-        val fromTargetClassNameFunctionList =
-            targetCompanionClass
-                .getAllFunctions()
-                .filter { it.simpleName.asString() == fromTargetClassMethodName }
-                .toList()
-        if (fromTargetClassNameFunctionList.size != 1) {
-            throw ProcessingException(
-                "Companion Class must have exactly one member function: " +
-                    fromTargetClassMethodName,
-                appFunctionSerializableProxyClass
-            )
-        }
-        val fromTargetClassNameFunction = fromTargetClassNameFunctionList.first()
-        if (
-            fromTargetClassNameFunction.parameters.size != 1 ||
-                fromTargetClassNameFunction.parameters.first().type.toTypeName().toString() !=
-                    checkNotNull(targetClassDeclaration.qualifiedName).asString()
-        ) {
-            throw ProcessingException(
-                "Function $fromTargetClassMethodName should have one parameter of type " +
-                    targetClassName,
-                appFunctionSerializableProxyClass
-            )
-        }
-        if (
-            checkNotNull(fromTargetClassNameFunction.returnType).toTypeName().toString() !=
-                checkNotNull(appFunctionSerializableProxyClass.qualifiedName).asString()
-        ) {
-            throw ProcessingException(
-                "Function $fromTargetClassMethodName should return an instance of " +
-                    "this serializable class",
-                appFunctionSerializableProxyClass
-            )
-        }
-    }
-}
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctions.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctions.kt
index 3ee7bc9..4c9500e 100644
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctions.kt
+++ b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AnnotatedAppFunctions.kt
@@ -43,7 +43,9 @@
 import com.google.devtools.ksp.symbol.KSClassDeclaration
 import com.google.devtools.ksp.symbol.KSFile
 import com.google.devtools.ksp.symbol.KSFunctionDeclaration
+import com.google.devtools.ksp.symbol.KSPropertyDeclaration
 import com.google.devtools.ksp.symbol.KSTypeReference
+import com.google.devtools.ksp.symbol.KSValueParameter
 import com.google.devtools.ksp.validate
 import com.squareup.kotlinpoet.ClassName
 
@@ -364,7 +366,7 @@
     // TODO: Document traversal rules.
     private fun addSerializableTypeMetadataToSharedDataTypeMap(
         appFunctionSerializableType: AnnotatedAppFunctionSerializable,
-        unvisitedSerializableProperties: MutableMap<String, AppFunctionPropertyDeclaration>,
+        unvisitedSerializableProperties: MutableMap<String, KSValueParameter>,
         sharedDataTypeMap: MutableMap<String, AppFunctionDataTypeMetadata>,
         seenDataTypeQualifiers: MutableSet<String>,
     ) {
@@ -393,7 +395,7 @@
             // If there is no super type, then this is a base serializable object.
             sharedDataTypeMap.put(
                 serializableTypeQualifiedName,
-                buildObjectTypeMetadataForObjectParameters(
+                buildObjectTypeMetadataForSerializableParameters(
                     serializableTypeQualifiedName,
                     appFunctionSerializableType.getProperties(),
                     unvisitedSerializableProperties,
@@ -426,12 +428,9 @@
 
                 for (capabilitySuperType in superTypesWithCapabilityAnnotation) {
                     add(
-                        buildObjectTypeMetadataForObjectParameters(
+                        buildObjectTypeMetadataForCapabilityProperties(
                             checkNotNull(capabilitySuperType.toClassName().canonicalName),
-                            capabilitySuperType
-                                .getDeclaredProperties()
-                                .map { AppFunctionPropertyDeclaration(it) }
-                                .toList(),
+                            capabilitySuperType.getDeclaredProperties().toList(),
                             unvisitedSerializableProperties,
                             sharedDataTypeMap,
                             seenDataTypeQualifiers
@@ -443,7 +442,7 @@
                     // Since all superTypes have been visited, then the remaining parameters in the
                     // unvisitedSerializableParameters map belong to the subclass directly.
                     add(
-                        buildObjectTypeMetadataForObjectParameters(
+                        buildObjectTypeMetadataForSerializableParameters(
                             serializableTypeQualifiedName,
                             unvisitedSerializableProperties.values.toList(),
                             unvisitedSerializableProperties,
@@ -471,19 +470,18 @@
     }
 
     /**
-     * Builds an [AppFunctionObjectTypeMetadata] for a serializable/capability type.
+     * Builds an [AppFunctionObjectTypeMetadata] for a serializable type.
      *
-     * @param typeQualifiedName the qualified name of the serializable/capability type being
+     * @param serializableTypeQualifiedName the qualified name of the serializable type being
      *   processed. This is the qualified name of the class that is annotated with
-     *   [androidx.appfunctions.AppFunctionSerializable] or
-     *   [androidx.appfunctions.AppFunctionSchemaCapability].
-     * @param currentPropertiesList the list of properties from the serializable/capability class
+     *   [androidx.appfunctions.AppFunctionSerializable].
+     * @param currentSerializableParametersList the list of properties from the serializable class
      *   that is being processed.
      * @param unvisitedSerializableProperties a map of unvisited serializable properties. This map
      *   is used to track the properties that have not yet been visited. The map is updated as the
-     *   properties are visited. The map should be a superset of the [currentPropertiesList] as it
-     *   can contain other properties belonging to a subclass of the current [typeQualifiedName]
-     *   class being processed.
+     *   properties are visited. The map should be a superset of the
+     *   [currentSerializableParametersList] as it can contain other properties belonging to a
+     *   subclass of the current [serializableTypeQualifiedName] class being processed.
      * @param sharedDataTypeMap a map of shared data types. This map is used to store the
      *   [AppFunctionDataTypeMetadata] for all serializable types that are used in an app function.
      *   This map is used to avoid duplicating the metadata for the same serializable type.
@@ -491,50 +489,111 @@
      *   processing the same serializable type multiple times.
      * @return an [AppFunctionObjectTypeMetadata] for the serializable type.
      */
-    private fun buildObjectTypeMetadataForObjectParameters(
-        typeQualifiedName: String,
-        currentPropertiesList: List<AppFunctionPropertyDeclaration>,
-        unvisitedSerializableProperties: MutableMap<String, AppFunctionPropertyDeclaration>,
+    private fun buildObjectTypeMetadataForSerializableParameters(
+        serializableTypeQualifiedName: String,
+        currentSerializableParametersList: List<KSValueParameter>,
+        unvisitedSerializableProperties: MutableMap<String, KSValueParameter>,
         sharedDataTypeMap: MutableMap<String, AppFunctionDataTypeMetadata>,
         seenDataTypeQualifiers: MutableSet<String>,
     ): AppFunctionObjectTypeMetadata {
-        val currentSerializableProperties: List<AppFunctionPropertyDeclaration> = buildList {
-            for (property in currentPropertiesList) {
+        val currentSerializableProperties: List<KSValueParameter> = buildList {
+            for (parameter in currentSerializableParametersList) {
                 // This property has now been visited. Remove it from the
                 // unvisitedSerializableProperties map so that we don't visit it again when
                 // processing the rest of a sub-class that implements this superclass.
                 // This is because before processing a subclass we process its superclass first
                 // so the unvisitedSerializableProperties could still contain properties not
                 // directly included in the current class being processed.
-                add(checkNotNull(unvisitedSerializableProperties.remove(property.name)))
+                add(
+                    checkNotNull(
+                        unvisitedSerializableProperties.remove(
+                            checkNotNull(parameter.name.toString())
+                        )
+                    )
+                )
             }
         }
-        return buildObjectTypeMetadataForObjectProperty(
-            typeQualifiedName,
+        return buildObjectTypeMetadataForCapabilityProperty(
+            serializableTypeQualifiedName,
             currentSerializableProperties,
             sharedDataTypeMap,
             seenDataTypeQualifiers
         )
     }
 
-    private fun buildObjectTypeMetadataForObjectProperty(
+    /**
+     * Builds an [AppFunctionObjectTypeMetadata] for a capability type.
+     *
+     * @param capabilityTypeQualifiedName the qualified name of the capability type being processed.
+     *   This is the qualified name of the class that is annotated with
+     *   [androidx.appfunctions.AppFunctionSchemaCapability].
+     * @param currentCapabilityPropertiesList the list of properties from the capability class that
+     *   is being processed.
+     * @param unvisitedSerializableProperties a map of unvisited serializable properties. This map
+     *   is used to track the properties that have not yet been visited. The map is updated as the
+     *   properties are visited. The map should be a superset of the
+     *   [currentCapabilityPropertiesList] as it can contain other properties belonging to a
+     *   subclass of the current [capabilityTypeQualifiedName] class being processed.
+     * @param sharedDataTypeMap a map of shared data types. This map is used to store the
+     *   [AppFunctionDataTypeMetadata] for all serializable types that are used in an app function.
+     *   This map is used to avoid duplicating the metadata for the same serializable type.
+     * @param seenDataTypeQualifiers a set of seen data type qualifiers. This set is used to avoid
+     *   processing the same serializable type multiple times.
+     * @return an [AppFunctionObjectTypeMetadata] for the serializable type.
+     */
+    private fun buildObjectTypeMetadataForCapabilityProperties(
+        capabilityTypeQualifiedName: String,
+        currentCapabilityPropertiesList: List<KSPropertyDeclaration>,
+        unvisitedSerializableProperties: MutableMap<String, KSValueParameter>,
+        sharedDataTypeMap: MutableMap<String, AppFunctionDataTypeMetadata>,
+        seenDataTypeQualifiers: MutableSet<String>,
+    ): AppFunctionObjectTypeMetadata {
+        val currentSerializableProperties: List<KSValueParameter> = buildList {
+            for (property in currentCapabilityPropertiesList) {
+                // This property has now been visited. Remove it from the
+                // unvisitedSerializableProperties map so that we don't visit it again when
+                // processing the rest of a sub-class that implements this superclass.
+                // This is because before processing a subclass we process its superclass first
+                // so the unvisitedSerializableProperties could still contain properties not
+                // directly included in the current class being processed.
+                add(
+                    checkNotNull(
+                        unvisitedSerializableProperties.remove(
+                            checkNotNull(property.simpleName.toString())
+                        )
+                    )
+                )
+            }
+        }
+        return buildObjectTypeMetadataForCapabilityProperty(
+            capabilityTypeQualifiedName,
+            currentSerializableProperties,
+            sharedDataTypeMap,
+            seenDataTypeQualifiers
+        )
+    }
+
+    private fun buildObjectTypeMetadataForCapabilityProperty(
         serializableTypeQualifiedName: String,
-        currentSerializableProperties: List<AppFunctionPropertyDeclaration>,
+        currentSerializableProperties: List<KSValueParameter>,
         sharedDataTypeMap: MutableMap<String, AppFunctionDataTypeMetadata>,
         seenDataTypeQualifiers: MutableSet<String>,
     ): AppFunctionObjectTypeMetadata {
         val requiredPropertiesList: MutableList<String> = mutableListOf()
         val appFunctionSerializablePropertiesMap: Map<String, AppFunctionDataTypeMetadata> =
             buildMap {
-                for (property in currentSerializableProperties) {
+                for (parameterInSuperType in currentSerializableProperties) {
                     val innerAppFunctionDataTypeMetadata =
-                        property.type.toAppFunctionDataTypeMetadata(
+                        parameterInSuperType.type.toAppFunctionDataTypeMetadata(
                             sharedDataTypeMap,
                             seenDataTypeQualifiers,
                         )
-                    put(property.name, innerAppFunctionDataTypeMetadata)
+                    put(
+                        checkNotNull(parameterInSuperType.name).asString(),
+                        innerAppFunctionDataTypeMetadata
+                    )
                     // TODO(b/394553462): Parse required state from annotation.
-                    requiredPropertiesList.add(property.name)
+                    requiredPropertiesList.add(checkNotNull(parameterInSuperType.name).asString())
                 }
             }
         return AppFunctionObjectTypeMetadata(
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AppFunctionPropertyDeclaration.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AppFunctionPropertyDeclaration.kt
deleted file mode 100644
index a1d9e89..0000000
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AppFunctionPropertyDeclaration.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2025 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.appfunctions.compiler.core
-
-import com.google.devtools.ksp.symbol.KSPropertyDeclaration
-import com.google.devtools.ksp.symbol.KSTypeReference
-import com.google.devtools.ksp.symbol.KSValueParameter
-
-// TODO(b/403525399): Add support for checking optional property.
-/** A wrapper class to store the property declaration in a class. */
-data class AppFunctionPropertyDeclaration(val name: String, val type: KSTypeReference) {
-    /** Creates an [AppFunctionPropertyDeclaration] from [KSPropertyDeclaration]. */
-    constructor(
-        property: KSPropertyDeclaration
-    ) : this(checkNotNull(property.simpleName).asString(), property.type)
-
-    /** Creates an [AppFunctionPropertyDeclaration] from [KSValueParameter]. */
-    constructor(
-        valueParameter: KSValueParameter
-    ) : this(checkNotNull(valueParameter.name).asString(), valueParameter.type)
-}
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AppFunctionSymbolResolver.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AppFunctionSymbolResolver.kt
index 48524c4..f20afe4 100644
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AppFunctionSymbolResolver.kt
+++ b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/AppFunctionSymbolResolver.kt
@@ -19,12 +19,13 @@
 import androidx.appfunctions.compiler.core.IntrospectionHelper.APP_FUNCTIONS_AGGREGATED_DEPS_PACKAGE_NAME
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionAnnotation
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionComponentRegistryAnnotation
-import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableAnnotation
-import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableProxyAnnotation
 import com.google.devtools.ksp.KspExperimental
 import com.google.devtools.ksp.processing.Resolver
 import com.google.devtools.ksp.symbol.KSClassDeclaration
 import com.google.devtools.ksp.symbol.KSFunctionDeclaration
+import kotlin.collections.component1
+import kotlin.collections.component2
+import kotlin.collections.map
 
 /** The helper class to resolve AppFunction related symbols. */
 class AppFunctionSymbolResolver(private val resolver: Resolver) {
@@ -55,49 +56,6 @@
     }
 
     /**
-     * Resolves all classes annotated with @AppFunctionSerializable
-     *
-     * @return a list of AnnotatedAppFunctionSerializable
-     */
-    fun resolveAnnotatedAppFunctionSerializables(): List<AnnotatedAppFunctionSerializable> {
-        return resolver
-            .getSymbolsWithAnnotation(AppFunctionSerializableAnnotation.CLASS_NAME.canonicalName)
-            .map { declaration ->
-                if (declaration !is KSClassDeclaration) {
-                    throw ProcessingException(
-                        "Only classes can be annotated with @AppFunctionSerializable",
-                        declaration
-                    )
-                }
-                AnnotatedAppFunctionSerializable(declaration).validate()
-            }
-            .toList()
-    }
-
-    /**
-     * Resolves all classes annotated with @AppFunctionSerializableProxy
-     *
-     * @return a list of AnnotatedAppFunctionSerializableProxy
-     */
-    fun resolveAnnotatedAppFunctionSerializableProxies():
-        List<AnnotatedAppFunctionSerializableProxy> {
-        return resolver
-            .getSymbolsWithAnnotation(
-                AppFunctionSerializableProxyAnnotation.CLASS_NAME.canonicalName
-            )
-            .map { declaration ->
-                if (declaration !is KSClassDeclaration) {
-                    throw ProcessingException(
-                        "Only classes can be annotated with @AppFunctionSerializableProxy",
-                        declaration
-                    )
-                }
-                AnnotatedAppFunctionSerializableProxy(declaration).validate()
-            }
-            .toList()
-    }
-
-    /**
      * Gets all [AnnotatedAppFunctions] from all processed modules.
      *
      * Unlike [resolveAnnotatedAppFunctions] that resolves symbols from annotation within the same
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/IntrospectionHelper.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/IntrospectionHelper.kt
index efe5721..4656c687 100644
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/IntrospectionHelper.kt
+++ b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/IntrospectionHelper.kt
@@ -43,11 +43,6 @@
         val CLASS_NAME = ClassName(APP_FUNCTIONS_PACKAGE_NAME, "AppFunctionSerializable")
     }
 
-    object AppFunctionSerializableProxyAnnotation {
-        val CLASS_NAME = ClassName(APP_FUNCTIONS_PACKAGE_NAME, "AppFunctionSerializableProxy")
-        const val PROPERTY_TARGET_CLASS = "targetClass"
-    }
-
     object AppFunctionSchemaCapability {
         val CLASS_NAME = ClassName(APP_FUNCTIONS_PACKAGE_NAME, "AppFunctionSchemaCapability")
     }
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/SerializableValidator.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/SerializableValidator.kt
deleted file mode 100644
index 8dd4062..0000000
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/core/SerializableValidator.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright 2025 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.appfunctions.compiler.core
-
-import androidx.appfunctions.compiler.core.AppFunctionTypeReference.Companion.SUPPORTED_TYPES_STRING
-import androidx.appfunctions.compiler.core.AppFunctionTypeReference.Companion.isSupportedType
-import com.google.devtools.ksp.getDeclaredProperties
-import com.google.devtools.ksp.getVisibility
-import com.google.devtools.ksp.symbol.KSClassDeclaration
-import com.google.devtools.ksp.symbol.KSFunctionDeclaration
-import com.google.devtools.ksp.symbol.KSTypeReference
-import com.google.devtools.ksp.symbol.KSValueParameter
-import com.google.devtools.ksp.symbol.Visibility
-
-/**
- * Validates if the provided [classToValidate] conforms to the AppFunctions SDK's serializable
- * specification.
- */
-class SerializableValidator(private val classToValidate: KSClassDeclaration) {
-
-    /**
-     * Validates if the provided [classToValidate] conforms to the AppFunctions SDK's serializable
-     * specification.
-     *
-     * A valid serializable class must:
-     * 1. Have a public primary constructor with at least one parameter.
-     * 2. All primary constructor parameters must be `val` properties.
-     * 3. Parameters must be one of the following types:
-     * - Primitive singles: `String`, `Int`, `Long`, `Float`, `Double`, `Boolean`, `PendingIntent`
-     * - Primitive arrays: `IntArray`, `LongArray`, `ShortArray`, `FloatArray`, `DoubleArray`,
-     *   `BooleanArray`
-     * - `List<String>`
-     * - `List<@AppFunctionSerializable>` (other serializable classes)
-     * 4. If the class implements `@AppFunctionSerializable` or `AppFunctionSchemaCapability`, all
-     *    properties defined in those interfaces/classes must be present as constructor parameters.
-     */
-    fun validate() {
-        val validatedPrimaryConstructor = classToValidate.validateSerializablePrimaryConstructor()
-        validateParameters(
-            validatedPrimaryConstructor.parameters
-                .associateBy { checkNotNull(it.name).toString() }
-                .toMutableMap()
-        )
-    }
-
-    /**
-     * Finds all super types of the serializable [classToValidate] that are annotated with the
-     * [androidx.appfunctions.AppFunctionSchemaCapability] annotation.
-     *
-     * For example, consider the following classes:
-     * ```
-     * @AppFunctionSchemaCapability
-     * public interface AppFunctionOpenable {
-     *     public val intentToOpen: PendingIntent
-     * }
-     *
-     * public interface OpenableResponse : AppFunctionOpenable {
-     *     override val intentToOpen: PendingIntent
-     * }
-     *
-     * @AppFunctionSerializable
-     * class MySerializableClass(
-     *   override val intentToOpen: PendingIntent
-     * ) : OpenableResponse
-     * ```
-     *
-     * This method will return the [KSClassDeclaration] of `AppFunctionOpenable` since it is a super
-     * type of `MySerializableClass` and is annotated with the
-     * [androidx.appfunctions.AppFunctionSchemaCapability] annotation.
-     *
-     * @return a set of [KSClassDeclaration] for all super types of the [classToValidate] that are
-     *   annotated with [androidx.appfunctions.AppFunctionSchemaCapability].
-     */
-    fun findSuperTypesWithCapabilityAnnotation(): Set<KSClassDeclaration> {
-        return buildSet {
-            val unvisitedSuperTypes: MutableList<KSTypeReference> =
-                classToValidate.superTypes.toMutableList()
-
-            while (!unvisitedSuperTypes.isEmpty()) {
-                val superTypeClassDeclaration =
-                    unvisitedSuperTypes.removeLast().resolve().declaration as KSClassDeclaration
-                if (
-                    superTypeClassDeclaration.annotations.findAnnotation(
-                        IntrospectionHelper.AppFunctionSchemaCapability.CLASS_NAME
-                    ) != null
-                ) {
-                    add(superTypeClassDeclaration)
-                }
-                if (
-                    superTypeClassDeclaration.annotations.findAnnotation(
-                        IntrospectionHelper.AppFunctionSerializableAnnotation.CLASS_NAME
-                    ) == null
-                ) {
-                    // Only consider non serializable super types since serializable super types
-                    // are already handled separately
-                    unvisitedSuperTypes.addAll(superTypeClassDeclaration.superTypes)
-                }
-            }
-        }
-    }
-
-    /**
-     * Finds all super types of the serializable [classToValidate] that are annotated with the
-     * [androidx.appfunctions.AppFunctionSerializable] annotation.
-     *
-     * For example, consider the following classes:
-     * ```
-     * @AppFunctionSerializable
-     * open class Address (
-     *     open val street: String,
-     *     open val city: String,
-     *     open val state: String,
-     *     open val zipCode: String,
-     * )
-     *
-     * @AppFunctionSerializable
-     * class MySerializableClass(
-     *     override val street: String,
-     *     override val city: String,
-     *     override val state: String,
-     *     override val zipCode: String,
-     * ) : Address
-     * ```
-     *
-     * This method will return the [KSClassDeclaration] of `Address` since it is a super type of
-     * `MySerializableClass` and is annotated with the
-     * [androidx.appfunctions.AppFunctionSerializable] annotation.
-     *
-     * @return a set of [KSClassDeclaration] for all super types of the [classToValidate] that are
-     *   annotated with [androidx.appfunctions.AppFunctionSerializable].
-     */
-    fun findSuperTypesWithSerializableAnnotation(): Set<KSClassDeclaration> {
-        return classToValidate.superTypes
-            .map { it.resolve().declaration as KSClassDeclaration }
-            .filter {
-                it.annotations.findAnnotation(
-                    IntrospectionHelper.AppFunctionSerializableAnnotation.CLASS_NAME
-                ) != null
-            }
-            .toSet()
-    }
-
-    /**
-     * Validates that the super types of the serializable [classToValidate] are valid.
-     *
-     * A super type of a serializable class must be annotated with either
-     * [androidx.appfunctions.AppFunctionSchemaCapability] or
-     * [androidx.appfunctions.AppFunctionSerializable]. A class cannot be annotated with both
-     * annotations.
-     *
-     * @param superTypesWithSerializableAnnotation a set of [KSClassDeclaration] for all super types
-     *   of the [classToValidate] that are annotated with
-     *   [androidx.appfunctions.AppFunctionSerializable].
-     * @param superTypesWithCapabilityAnnotation a set of [KSClassDeclaration] for all super types
-     *   of the [classToValidate] that are annotated with
-     *   [androidx.appfunctions.AppFunctionSchemaCapability].
-     */
-    private fun validateSuperTypes(
-        superTypesWithSerializableAnnotation: Set<KSClassDeclaration>,
-        superTypesWithCapabilityAnnotation: Set<KSClassDeclaration>
-    ) {
-        if (
-            superTypesWithSerializableAnnotation
-                .intersect(superTypesWithCapabilityAnnotation)
-                .isNotEmpty()
-        ) {
-            throw ProcessingException(
-                "A class cannot be annotated with both @AppFunctionSerializable and " +
-                    "@AppFunctionSchemaCapability.",
-                classToValidate
-            )
-        }
-    }
-
-    private fun validateParameters(
-        parametersToValidate: MutableMap<String, KSValueParameter>,
-    ) {
-        val superTypesWithSerializableAnnotation = findSuperTypesWithSerializableAnnotation()
-        val superTypesWithCapabilityAnnotation = findSuperTypesWithCapabilityAnnotation()
-        validateSuperTypes(superTypesWithSerializableAnnotation, superTypesWithCapabilityAnnotation)
-        for (superType in superTypesWithSerializableAnnotation) {
-            if (
-                superType.annotations.findAnnotation(
-                    IntrospectionHelper.AppFunctionSerializableAnnotation.CLASS_NAME
-                ) == null
-            ) {
-                throw ProcessingException(
-                    "Expected supertype with @AppFunctionSerializable annotation.",
-                    superType
-                )
-            }
-            val superTypePrimaryConstructor = superType.validateSerializablePrimaryConstructor()
-
-            for (superTypeParameter in superTypePrimaryConstructor.parameters) {
-                // Parameter has now been visited
-                val parameterInSuperType =
-                    parametersToValidate.remove(superTypeParameter.name.toString())
-                if (parameterInSuperType == null) {
-                    throw ProcessingException(
-                        "All parameters in @AppFunctionSerializable " +
-                            "supertypes must be present in subtype",
-                        superTypeParameter
-                    )
-                }
-                validateSerializableParameter(parameterInSuperType)
-            }
-        }
-
-        for (superType in superTypesWithCapabilityAnnotation) {
-            if (
-                superType.annotations.findAnnotation(
-                    IntrospectionHelper.AppFunctionSchemaCapability.CLASS_NAME
-                ) == null
-            ) {
-                throw ProcessingException(
-                    "Expected supertype with @AppFunctionSchemaCapability annotation.",
-                    superType
-                )
-            }
-            val capabilityProperties = superType.getDeclaredProperties()
-
-            for (superTypeProperty in capabilityProperties) {
-                // Parameter has now been visited
-                val parameterInSuperType =
-                    parametersToValidate.remove(superTypeProperty.simpleName.toString())
-                if (parameterInSuperType == null) {
-                    throw ProcessingException(
-                        "All Properties in @AppFunctionSchemaCapability " +
-                            "supertypes must be present in subtype",
-                        superTypeProperty
-                    )
-                }
-                validateSerializableParameter(parameterInSuperType)
-            }
-        }
-
-        // Validate the remaining parameters
-        if (parametersToValidate.isNotEmpty()) {
-            for ((_, parameterToValidate) in parametersToValidate) {
-                validateSerializableParameter(parameterToValidate)
-            }
-        }
-    }
-
-    private fun KSClassDeclaration.validateSerializablePrimaryConstructor(): KSFunctionDeclaration {
-        if (primaryConstructor == null) {
-            throw ProcessingException(
-                "A valid AppFunctionSerializable must have a primary constructor.",
-                this
-            )
-        }
-        val primaryConstructorDeclaration = checkNotNull(primaryConstructor)
-        if (primaryConstructorDeclaration.parameters.isEmpty()) {
-            throw ProcessingException(
-                "A valid AppFunctionSerializable must have a non-empty primary constructor.",
-                this
-            )
-        }
-
-        if (primaryConstructorDeclaration.getVisibility() != Visibility.PUBLIC) {
-            throw ProcessingException(
-                "A valid AppFunctionSerializable must have  a public primary constructor.",
-                this
-            )
-        }
-        return primaryConstructorDeclaration
-    }
-
-    private fun validateSerializableParameter(ksValueParameter: KSValueParameter) {
-        if (!ksValueParameter.isVal) {
-            throw ProcessingException(
-                "All parameters in @AppFunctionSerializable primary constructor must have getters",
-                ksValueParameter
-            )
-        }
-
-        if (!isSupportedType(ksValueParameter.type)) {
-            throw ProcessingException(
-                "AppFunctionSerializable properties must be one of the following types:\n" +
-                    SUPPORTED_TYPES_STRING +
-                    ", an @AppFunctionSerializable or a list of @AppFunctionSerializable\nbut found " +
-                    ksValueParameter.type.toTypeName(),
-                ksValueParameter
-            )
-        }
-    }
-}
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableFactoryCodeBuilder.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableFactoryCodeBuilder.kt
index 13a6266..90226af 100644
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableFactoryCodeBuilder.kt
+++ b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableFactoryCodeBuilder.kt
@@ -18,8 +18,6 @@
 
 import androidx.appfunctions.AppFunctionData
 import androidx.appfunctions.compiler.core.AnnotatedAppFunctionSerializable
-import androidx.appfunctions.compiler.core.AnnotatedAppFunctionSerializableProxy
-import androidx.appfunctions.compiler.core.AppFunctionPropertyDeclaration
 import androidx.appfunctions.compiler.core.AppFunctionTypeReference
 import androidx.appfunctions.compiler.core.AppFunctionTypeReference.AppFunctionSupportedTypeCategory.PRIMITIVE_ARRAY
 import androidx.appfunctions.compiler.core.AppFunctionTypeReference.AppFunctionSupportedTypeCategory.PRIMITIVE_LIST
@@ -29,11 +27,11 @@
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableFactoryClass.FromAppFunctionDataMethod
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableFactoryClass.FromAppFunctionDataMethod.APP_FUNCTION_DATA_PARAM_NAME
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableFactoryClass.ToAppFunctionDataMethod.APP_FUNCTION_SERIALIZABLE_PARAM_NAME
-import androidx.appfunctions.compiler.core.ProcessingException
 import androidx.appfunctions.compiler.core.ensureQualifiedTypeName
 import androidx.appfunctions.compiler.core.isOfType
 import androidx.appfunctions.compiler.core.toTypeName
 import com.google.devtools.ksp.symbol.KSTypeReference
+import com.google.devtools.ksp.symbol.KSValueParameter
 import com.squareup.kotlinpoet.ClassName
 import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.STRING
@@ -50,52 +48,14 @@
     /** Builds and appends the method body of fromAppFunctionData to the given code block. */
     fun appendFromAppFunctionDataMethodBody(): CodeBlock {
         return buildCodeBlock {
-            val getterResultName = "result${annotatedClass.originalClassName.simpleName}"
-            add(appendCommonFromAppFunctionDataMethodBody(getterResultName))
-            addStatement(
-                """
-                return %L
-                """
-                    .trimIndent(),
-                getterResultName
-            )
-        }
-    }
-
-    fun appendFromAppFunctionDataMethodBodyForProxy(): CodeBlock {
-        if (annotatedClass !is AnnotatedAppFunctionSerializableProxy) {
-            throw ProcessingException(
-                "Attempting to generate proxy getter for non proxy serializable.",
-                // TODO(b/403199251): provide KSNode to improve error message
-                null
-            )
-        }
-        return buildCodeBlock {
-            val getterResultName = "result${annotatedClass.originalClassName.simpleName}"
-            add(appendCommonFromAppFunctionDataMethodBody(getterResultName))
-            addStatement(
-                """
-                return %L.%L()
-                """
-                    .trimIndent(),
-                getterResultName,
-                annotatedClass.toTargetClassMethodName
-            )
-        }
-    }
-
-    private fun appendCommonFromAppFunctionDataMethodBody(getterResultName: String): CodeBlock {
-        return buildCodeBlock {
             add(factoryInitStatements)
-            for ((paramName, paramType) in annotatedClass.getProperties()) {
-                appendGetterStatement(paramName, paramType)
+            for (property in annotatedClass.getProperties()) {
+                appendGetterStatement(property)
             }
-            appendGetterResultConstructorCallStatement(
+            appendGetterReturnStatement(
                 annotatedClass.originalClassName,
-                annotatedClass.getProperties(),
-                getterResultName
+                annotatedClass.getProperties()
             )
-            add("\n")
         }
     }
 
@@ -109,7 +69,7 @@
                 val afType = AppFunctionTypeReference(property.type)
                 val formatStringMap =
                     mapOf<String, Any>(
-                        "param_name" to property.name,
+                        "param_name" to checkNotNull(property.name).asString(),
                         "annotated_class_instance" to APP_FUNCTION_SERIALIZABLE_PARAM_NAME
                     )
                 addNamed(
@@ -117,9 +77,9 @@
                     formatStringMap
                 )
                 if (afType.isNullable) {
-                    appendNullableSetterStatement(property.name, afType)
+                    appendNullableSetterStatement(property, afType)
                 } else {
-                    appendSetterStatement(property.name, afType)
+                    appendSetterStatement(property, afType)
                 }
             }
             add("\nreturn builder.build()")
@@ -127,26 +87,25 @@
     }
 
     private fun CodeBlock.Builder.appendGetterStatement(
-        paramName: String,
-        paramType: KSTypeReference
+        param: KSValueParameter
     ): CodeBlock.Builder {
-        val afType = AppFunctionTypeReference(paramType)
+        val afType = AppFunctionTypeReference(param.type)
         return when (afType.typeCategory) {
             PRIMITIVE_SINGULAR,
             PRIMITIVE_ARRAY,
-            PRIMITIVE_LIST -> appendPrimitiveGetterStatement(paramName, afType)
-            SERIALIZABLE_SINGULAR -> appendSerializableGetterStatement(paramName, afType)
-            SERIALIZABLE_LIST -> appendSerializableListGetterStatement(paramName, afType)
+            PRIMITIVE_LIST -> appendPrimitiveGetterStatement(param, afType)
+            SERIALIZABLE_SINGULAR -> appendSerializableGetterStatement(param, afType)
+            SERIALIZABLE_LIST -> appendSerializableListGetterStatement(param, afType)
         }
     }
 
     private fun CodeBlock.Builder.appendPrimitiveGetterStatement(
-        paramName: String,
+        param: KSValueParameter,
         afType: AppFunctionTypeReference
     ): CodeBlock.Builder {
         val formatStringMap =
             mapOf<String, Any>(
-                "param_name" to paramName,
+                "param_name" to checkNotNull(param.name).asString(),
                 "app_function_data_param_name" to APP_FUNCTION_DATA_PARAM_NAME,
                 "getter_name" to getAppFunctionDataGetterName(afType),
                 "default_value_postfix" to getGetterDefaultValuePostfix(afType)
@@ -166,14 +125,15 @@
     }
 
     private fun CodeBlock.Builder.appendSerializableGetterStatement(
-        paramName: String,
+        param: KSValueParameter,
         afType: AppFunctionTypeReference
     ): CodeBlock.Builder {
+        val paramName = checkNotNull(param.name).asString()
         val typeName = afType.selfTypeReference.getTypeShortName()
         val formatStringMap =
             mapOf<String, Any>(
                 "param_name" to paramName,
-                "param_type" to afType.selfTypeReference.toTypeName(),
+                "param_type" to param.type.toTypeName(),
                 "factory_name" to "${typeName}Factory".lowerFirstChar(),
                 "app_function_data_param_name" to APP_FUNCTION_DATA_PARAM_NAME,
                 "getter_name" to getAppFunctionDataGetterName(afType),
@@ -209,7 +169,7 @@
     }
 
     private fun CodeBlock.Builder.appendSerializableListGetterStatement(
-        paramName: String,
+        param: KSValueParameter,
         afType: AppFunctionTypeReference
     ): CodeBlock.Builder {
         val parametrizedTypeName = afType.itemTypeReference.getTypeShortName()
@@ -217,8 +177,8 @@
         val factoryInstanceName = factoryName.lowerFirstChar()
         val formatStringMap =
             mapOf<String, Any>(
-                "param_name" to paramName,
-                "temp_list_name" to "${paramName}Data",
+                "param_name" to checkNotNull(param.name).asString(),
+                "temp_list_name" to checkNotNull(param.name).asString() + "Data",
                 "app_function_data_param_name" to APP_FUNCTION_DATA_PARAM_NAME,
                 "factory_instance_name" to factoryInstanceName,
                 "getter_name" to getAppFunctionDataGetterName(afType),
@@ -241,61 +201,57 @@
         return this
     }
 
-    private fun CodeBlock.Builder.appendGetterResultConstructorCallStatement(
+    private fun CodeBlock.Builder.appendGetterReturnStatement(
         originalClassName: ClassName,
-        properties: List<AppFunctionPropertyDeclaration>,
-        getterResultName: String
+        params: List<KSValueParameter>
     ): CodeBlock.Builder {
         val formatStringMap =
             mapOf<String, Any>(
                 "original_class_name" to originalClassName,
-                "params_list" to properties.joinToString(", ") { it.name },
-                "getter_result_name" to getterResultName
+                "params_list" to
+                    params.joinToString(", ") { param -> checkNotNull(param.name).asString() }
             )
 
-        addNamed(
-            "\nval %getter_result_name:L = %original_class_name:T(%params_list:L)",
-            formatStringMap
-        )
+        addNamed("\nreturn %original_class_name:T(%params_list:L)", formatStringMap)
         return this
     }
 
     private fun CodeBlock.Builder.appendNullableSetterStatement(
-        paramName: String,
-        afType: AppFunctionTypeReference
+        param: KSValueParameter,
+        type: AppFunctionTypeReference
     ): CodeBlock.Builder {
         val formatStringMap =
             mapOf<String, Any>(
-                "param_name" to paramName,
+                "param_name" to checkNotNull(param.name).asString(),
             )
 
         return addNamed("if (%param_name:L != null) {\n", formatStringMap)
             .indent()
-            .appendSetterStatement(paramName, afType)
+            .appendSetterStatement(param, type)
             .unindent()
             .addStatement("}")
     }
 
     private fun CodeBlock.Builder.appendSetterStatement(
-        paramName: String,
+        param: KSValueParameter,
         afType: AppFunctionTypeReference
     ): CodeBlock.Builder {
         return when (afType.typeCategory) {
             PRIMITIVE_SINGULAR,
             PRIMITIVE_ARRAY,
-            PRIMITIVE_LIST -> appendPrimitiveSetterStatement(paramName, afType)
-            SERIALIZABLE_SINGULAR -> appendSerializableSetterStatement(paramName, afType)
-            SERIALIZABLE_LIST -> appendSerializableListSetterStatement(paramName, afType)
+            PRIMITIVE_LIST -> appendPrimitiveSetterStatement(param, afType)
+            SERIALIZABLE_SINGULAR -> appendSerializableSetterStatement(param, afType)
+            SERIALIZABLE_LIST -> appendSerializableListSetterStatement(param, afType)
         }
     }
 
     private fun CodeBlock.Builder.appendPrimitiveSetterStatement(
-        paramName: String,
+        param: KSValueParameter,
         afType: AppFunctionTypeReference
     ): CodeBlock.Builder {
         val formatStringMap =
             mapOf<String, Any>(
-                "param_name" to paramName,
+                "param_name" to checkNotNull(param.name).asString(),
                 "setter_name" to getAppFunctionDataSetterName(afType),
             )
         addNamed("builder.%setter_name:L(\"%param_name:L\", %param_name:L)\n", formatStringMap)
@@ -303,13 +259,13 @@
     }
 
     private fun CodeBlock.Builder.appendSerializableSetterStatement(
-        paramName: String,
+        param: KSValueParameter,
         afType: AppFunctionTypeReference
     ): CodeBlock.Builder {
         val typeName = afType.selfTypeReference.getTypeShortName()
         val formatStringMap =
             mapOf<String, Any>(
-                "param_name" to paramName,
+                "param_name" to checkNotNull(param.name).asString(),
                 "factory_name" to "${typeName}Factory".lowerFirstChar(),
                 "setter_name" to getAppFunctionDataSetterName(afType),
             )
@@ -322,14 +278,14 @@
     }
 
     private fun CodeBlock.Builder.appendSerializableListSetterStatement(
-        paramName: String,
+        param: KSValueParameter,
         afType: AppFunctionTypeReference
     ): CodeBlock.Builder {
         val parametrizedTypeName = afType.selfOrItemTypeReference.getTypeShortName()
 
         val formatStringMap =
             mapOf<String, Any>(
-                "param_name" to paramName,
+                "param_name" to checkNotNull(param.name).asString(),
                 "factory_name" to "${parametrizedTypeName}Factory".lowerFirstChar(),
                 "setter_name" to getAppFunctionDataSetterName(afType),
                 "lambda_param_name" to parametrizedTypeName.lowerFirstChar()
diff --git a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessor.kt b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessor.kt
index 75f0653..1e8b294 100644
--- a/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessor.kt
+++ b/appfunctions/appfunctions-compiler/src/main/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessor.kt
@@ -20,14 +20,12 @@
 import androidx.appfunctions.AppFunctionData
 import androidx.appfunctions.compiler.AppFunctionCompiler
 import androidx.appfunctions.compiler.core.AnnotatedAppFunctionSerializable
-import androidx.appfunctions.compiler.core.AnnotatedAppFunctionSerializableProxy
-import androidx.appfunctions.compiler.core.AppFunctionSymbolResolver
+import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableAnnotation
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableFactoryClass
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableFactoryClass.FromAppFunctionDataMethod.APP_FUNCTION_DATA_PARAM_NAME
 import androidx.appfunctions.compiler.core.IntrospectionHelper.AppFunctionSerializableFactoryClass.ToAppFunctionDataMethod.APP_FUNCTION_SERIALIZABLE_PARAM_NAME
 import androidx.appfunctions.compiler.core.ProcessingException
 import androidx.appfunctions.compiler.core.logException
-import androidx.appfunctions.compiler.core.toClassName
 import com.google.devtools.ksp.processing.CodeGenerator
 import com.google.devtools.ksp.processing.Dependencies
 import com.google.devtools.ksp.processing.KSPLogger
@@ -36,6 +34,7 @@
 import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
 import com.google.devtools.ksp.processing.SymbolProcessorProvider
 import com.google.devtools.ksp.symbol.KSAnnotated
+import com.google.devtools.ksp.symbol.KSClassDeclaration
 import com.squareup.kotlinpoet.FileSpec
 import com.squareup.kotlinpoet.FunSpec
 import com.squareup.kotlinpoet.KModifier
@@ -43,13 +42,11 @@
 import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
 import com.squareup.kotlinpoet.TypeSpec
 import com.squareup.kotlinpoet.asTypeName
-import com.squareup.kotlinpoet.buildCodeBlock
 
 /**
  * Generates a factory class with methods to convert classes annotated with
- * [androidx.appfunctions.AppFunctionSerializable] or
- * [androidx.appfunctions.AppFunctionSerializableProxy] to [androidx.appfunctions.AppFunctionData],
- * and vice-versa.
+ * [androidx.appfunctions.AppFunctionSerializable] to [androidx.appfunctions.AppFunctionData], and
+ * vice-versa.
  *
  * **Example:**
  *
@@ -84,29 +81,38 @@
     private val codeGenerator: CodeGenerator,
     private val logger: KSPLogger,
 ) : SymbolProcessor {
-    private var hasProcessed = false
-
     override fun process(resolver: Resolver): List<KSAnnotated> {
-        if (hasProcessed) return emptyList()
-        hasProcessed = true
-
         try {
-            val entitySymbolResolver = AppFunctionSymbolResolver(resolver)
-            val entityClasses = entitySymbolResolver.resolveAnnotatedAppFunctionSerializables()
-            val entityProxyClasses =
-                entitySymbolResolver.resolveAnnotatedAppFunctionSerializableProxies()
+            val entityClasses = resolveAppFunctionSerializables(resolver)
             for (entity in entityClasses) {
                 buildAppFunctionSerializableFactoryClass(entity)
             }
-            for (entityProxy in entityProxyClasses) {
-                buildAppFunctionSerializableProxyFactoryClass(entityProxy)
-            }
         } catch (e: ProcessingException) {
             logger.logException(e)
         }
         return emptyList()
     }
 
+    fun resolveAppFunctionSerializables(
+        resolver: Resolver
+    ): List<AnnotatedAppFunctionSerializable> {
+        val annotatedAppFunctionSerializables =
+            resolver.getSymbolsWithAnnotation(
+                AppFunctionSerializableAnnotation.CLASS_NAME.canonicalName
+            )
+        return annotatedAppFunctionSerializables
+            .map {
+                if (it !is KSClassDeclaration) {
+                    throw ProcessingException(
+                        "Only classes can be annotated with @AppFunctionSerializable",
+                        it
+                    )
+                }
+                AnnotatedAppFunctionSerializable(it).validate()
+            }
+            .toList()
+    }
+
     private fun buildAppFunctionSerializableFactoryClass(
         annotatedClass: AnnotatedAppFunctionSerializable
     ) {
@@ -148,47 +154,6 @@
             .use { fileSpec.writeTo(it) }
     }
 
-    private fun buildAppFunctionSerializableProxyFactoryClass(
-        annotatedProxyClass: AnnotatedAppFunctionSerializableProxy
-    ) {
-        val proxySuperInterfaceClass =
-            AppFunctionSerializableFactoryClass.CLASS_NAME.parameterizedBy(
-                annotatedProxyClass.targetClassDeclaration.toClassName()
-            )
-        val generatedSerializableProxyFactoryClassName =
-            "\$${checkNotNull(
-                annotatedProxyClass.targetClassDeclaration.simpleName).asString()}Factory"
-        val serializableProxyClassBuilder =
-            TypeSpec.classBuilder(generatedSerializableProxyFactoryClassName)
-        val factoryCodeBuilder = AppFunctionSerializableFactoryCodeBuilder(annotatedProxyClass)
-        serializableProxyClassBuilder.addAnnotation(AppFunctionCompiler.GENERATED_ANNOTATION)
-        serializableProxyClassBuilder.addSuperinterface(proxySuperInterfaceClass)
-        serializableProxyClassBuilder.addFunction(
-            buildProxyFromAppFunctionDataFunction(annotatedProxyClass, factoryCodeBuilder)
-        )
-        serializableProxyClassBuilder.addFunction(
-            buildProxyToAppFunctionDataFunction(annotatedProxyClass)
-        )
-        val fileSpec =
-            FileSpec.builder(
-                    annotatedProxyClass.originalClassName.packageName,
-                    generatedSerializableProxyFactoryClassName
-                )
-                .addType(serializableProxyClassBuilder.build())
-                .build()
-        codeGenerator
-            .createNewFile(
-                Dependencies(
-                    aggregating = true,
-                    *annotatedProxyClass.getSerializableSourceFiles().toTypedArray()
-                ),
-                annotatedProxyClass.originalClassName.packageName,
-                generatedSerializableProxyFactoryClassName
-            )
-            .bufferedWriter()
-            .use { fileSpec.writeTo(it) }
-    }
-
     private fun buildFromAppFunctionDataFunction(
         annotatedClass: AnnotatedAppFunctionSerializable,
         factoryCodeBuilder: AppFunctionSerializableFactoryCodeBuilder,
@@ -205,23 +170,6 @@
             .build()
     }
 
-    // Todo(b/403199251): Remove temp method
-    private fun buildProxyFromAppFunctionDataFunction(
-        annotatedProxyClass: AnnotatedAppFunctionSerializableProxy,
-        factoryCodeBuilder: AppFunctionSerializableFactoryCodeBuilder,
-    ): FunSpec {
-        return FunSpec.builder(
-                AppFunctionSerializableFactoryClass.FromAppFunctionDataMethod.METHOD_NAME
-            )
-            .addModifiers(KModifier.OVERRIDE)
-            .addParameter(
-                ParameterSpec.builder(APP_FUNCTION_DATA_PARAM_NAME, AppFunctionData::class).build()
-            )
-            .addCode(factoryCodeBuilder.appendFromAppFunctionDataMethodBodyForProxy())
-            .returns(annotatedProxyClass.targetClassDeclaration.toClassName())
-            .build()
-    }
-
     private fun buildToAppFunctionDataFunction(
         annotatedClass: AnnotatedAppFunctionSerializable,
         factoryCodeBuilder: AppFunctionSerializableFactoryCodeBuilder
@@ -242,36 +190,6 @@
             .build()
     }
 
-    // Todo(b/403199251): Remove temp method
-    private fun buildProxyToAppFunctionDataFunction(
-        annotatedProxyClass: AnnotatedAppFunctionSerializableProxy,
-    ): FunSpec {
-        return FunSpec.builder(
-                AppFunctionSerializableFactoryClass.ToAppFunctionDataMethod.METHOD_NAME
-            )
-            .addModifiers(KModifier.OVERRIDE)
-            .addParameter(
-                ParameterSpec.builder(
-                        APP_FUNCTION_SERIALIZABLE_PARAM_NAME,
-                        annotatedProxyClass.targetClassDeclaration.toClassName()
-                    )
-                    .build()
-            )
-            .addCode(
-                buildCodeBlock {
-                    addStatement(
-                        """
-                        return %T.Builder("").build()
-                        """
-                            .trimIndent(),
-                        AppFunctionData::class.asTypeName()
-                    )
-                }
-            )
-            .returns(AppFunctionData::class.asTypeName())
-            .build()
-    }
-
     @VisibleForTesting
     class Provider : SymbolProcessorProvider {
         override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
diff --git a/appfunctions/appfunctions-compiler/src/test/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessorTest.kt b/appfunctions/appfunctions-compiler/src/test/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessorTest.kt
index 3bfc423..d0424d3 100644
--- a/appfunctions/appfunctions-compiler/src/test/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessorTest.kt
+++ b/appfunctions/appfunctions-compiler/src/test/java/androidx/appfunctions/compiler/processors/AppFunctionSerializableProcessorTest.kt
@@ -203,41 +203,4 @@
             "AppFunctionSerializable properties must be one of the following types:\n"
         )
     }
-
-    @Test
-    fun testProcessor_validAppFunctionSerializableFactory_succeeds() {
-        val report =
-            compilationTestHelper.compileAll(
-                sourceFileNames = listOf("AppFunctionLocalDateTime.KT")
-            )
-        compilationTestHelper.assertSuccessWithSourceContent(
-            report = report,
-            expectGeneratedSourceFileName = "\$LocalDateTimeFactory.kt",
-            goldenFileName = "\$LocalDateTimeFactory.KT"
-        )
-    }
-
-    @Test
-    fun testProcessor_serializableProxyMissingToMethod_fails() {
-        val report =
-            compilationTestHelper.compileAll(
-                sourceFileNames = listOf("SerializableProxyMissingToMethod.KT")
-            )
-        compilationTestHelper.assertErrorWithMessage(
-            report,
-            "Class must have exactly one member function: toLocalDateTime"
-        )
-    }
-
-    @Test
-    fun testProcessor_serializableProxyMissingFromMethod_fails() {
-        val report =
-            compilationTestHelper.compileAll(
-                sourceFileNames = listOf("SerializableProxyMissingFromMethod.KT")
-            )
-        compilationTestHelper.assertErrorWithMessage(
-            report,
-            "Companion Class must have exactly one member function: fromLocalDateTime"
-        )
-    }
 }
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/input/AppFunctionLocalDateTime.KT b/appfunctions/appfunctions-compiler/src/test/test-data/input/AppFunctionLocalDateTime.KT
deleted file mode 100644
index 2f6e6289..0000000
--- a/appfunctions/appfunctions-compiler/src/test/test-data/input/AppFunctionLocalDateTime.KT
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.testdata
-
-import android.os.Build
-import androidx.annotation.RequiresApi
-import androidx.annotation.RestrictTo
-import androidx.annotation.RestrictTo.Scope
-import androidx.appfunctions.AppFunctionSerializableProxy
-import java.time.LocalDateTime
-
-/**
- * A proxy class for [LocalDateTime] that can be used to serialize and deserialize [LocalDateTime]
- * objects across the App Functions boundary.
- */
-@RestrictTo(Scope.LIBRARY_GROUP)
-@AppFunctionSerializableProxy(
-    targetClass = LocalDateTime::class)
-public data class AppFunctionLocalDateTime(
-    val year: Int,
-    val month: Int,
-    val dayOfMonth: Int,
-    val hour: Int,
-    val minute: Int,
-    val second: Int,
-    val nanoOfSecond: Int
-) {
-    @RequiresApi(Build.VERSION_CODES.O)
-    public fun toLocalDateTime(): LocalDateTime {
-        return LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond)
-    }
-
-    public companion object {
-        @RequiresApi(Build.VERSION_CODES.O)
-        public fun fromLocalDateTime(localDateTime: LocalDateTime): AppFunctionLocalDateTime {
-            return AppFunctionLocalDateTime(
-                localDateTime.year,
-                localDateTime.monthValue,
-                localDateTime.dayOfMonth,
-                localDateTime.hour,
-                localDateTime.minute,
-                localDateTime.second,
-                localDateTime.nano
-            )
-        }
-    }
-}
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/input/SerializableProxyMissingFromMethod.KT b/appfunctions/appfunctions-compiler/src/test/test-data/input/SerializableProxyMissingFromMethod.KT
deleted file mode 100644
index 690d8bf..0000000
--- a/appfunctions/appfunctions-compiler/src/test/test-data/input/SerializableProxyMissingFromMethod.KT
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.testdata
-
-import android.os.Build
-import androidx.annotation.RequiresApi
-import androidx.annotation.RestrictTo
-import androidx.annotation.RestrictTo.Scope
-import androidx.appfunctions.AppFunctionSerializableProxy
-import java.time.LocalDateTime
-
-/**
- * A proxy class for [LocalDateTime] that can be used to serialize and deserialize [LocalDateTime]
- * objects across the App Functions boundary.
- */
-@RestrictTo(Scope.LIBRARY_GROUP)
-@AppFunctionSerializableProxy(targetClass = LocalDateTime::class)
-public data class AppFunctionLocalDateTime(
-    val year: Int,
-    val month: Int,
-    val dayOfMonth: Int,
-    val hour: Int,
-    val minute: Int,
-    val second: Int,
-    val nanoOfSecond: Int
-) {
-    @RequiresApi(Build.VERSION_CODES.O)
-    public fun toLocalDateTime(): LocalDateTime {
-        return LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond)
-    }
-
-    public companion object {}
-}
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/input/SerializableProxyMissingToMethod.KT b/appfunctions/appfunctions-compiler/src/test/test-data/input/SerializableProxyMissingToMethod.KT
deleted file mode 100644
index 60c1800..0000000
--- a/appfunctions/appfunctions-compiler/src/test/test-data/input/SerializableProxyMissingToMethod.KT
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.testdata
-
-import android.os.Build
-import androidx.annotation.RequiresApi
-import androidx.annotation.RestrictTo
-import androidx.annotation.RestrictTo.Scope
-import androidx.appfunctions.AppFunctionSerializableProxy
-import java.time.LocalDateTime
-
-/**
- * A proxy class for [LocalDateTime] that can be used to serialize and deserialize [LocalDateTime]
- * objects across the App Functions boundary.
- */
-@RestrictTo(Scope.LIBRARY_GROUP)
-@AppFunctionSerializableProxy(targetClass = LocalDateTime::class)
-public data class AppFunctionLocalDateTime(
-    val year: Int,
-    val month: Int,
-    val dayOfMonth: Int,
-    val hour: Int,
-    val minute: Int,
-    val second: Int,
-    val nanoOfSecond: Int
-) {
-
-    public companion object {
-        @RequiresApi(Build.VERSION_CODES.O)
-        public fun fromLocalDateTime(localDateTime: LocalDateTime): AppFunctionLocalDateTime {
-            return AppFunctionLocalDateTime(
-                localDateTime.year,
-                localDateTime.monthValue,
-                localDateTime.dayOfMonth,
-                localDateTime.hour,
-                localDateTime.minute,
-                localDateTime.second,
-                localDateTime.nano
-            )
-        }
-    }
-}
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$DerivedSerializableFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$DerivedSerializableFactory.KT
index 798ccb2..2adee34 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$DerivedSerializableFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$DerivedSerializableFactory.KT
@@ -11,8 +11,7 @@
     val stringToOpen = checkNotNull(appFunctionData.getString("stringToOpen"))
     val age = checkNotNull(appFunctionData.getLongOrNull("age"))
 
-    val resultDerivedSerializable = DerivedSerializable(stringToOpen, age)
-    return resultDerivedSerializable
+    return DerivedSerializable(stringToOpen, age)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: DerivedSerializable): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithDiffPackageSerializablePropertyFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithDiffPackageSerializablePropertyFactory.KT
index 620ed9d..0283ed2 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithDiffPackageSerializablePropertyFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithDiffPackageSerializablePropertyFactory.KT
@@ -17,8 +17,7 @@
       diffPackageSerializableFactory.fromAppFunctionData(data)
     }
 
-    val resultEntityWithDiffPackageSerializableProperty = EntityWithDiffPackageSerializableProperty(inputSerializable, serializableList)
-    return resultEntityWithDiffPackageSerializableProperty
+    return EntityWithDiffPackageSerializableProperty(inputSerializable, serializableList)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: EntityWithDiffPackageSerializableProperty): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidNullablePropertiesFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidNullablePropertiesFactory.KT
index f1b2316..1697592 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidNullablePropertiesFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidNullablePropertiesFactory.KT
@@ -27,8 +27,7 @@
       inputSerializableFactory.fromAppFunctionData(data)
     }
 
-    val resultEntityWithValidNullableProperties = EntityWithValidNullableProperties(longParam, doubleParam, boolParam, stringParam, longArray, doubleArray, boolArray, stringList, inputSerializable, serializableList)
-    return resultEntityWithValidNullableProperties
+    return EntityWithValidNullableProperties(longParam, doubleParam, boolParam, stringParam, longArray, doubleArray, boolArray, stringList, inputSerializable, serializableList)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: EntityWithValidNullableProperties): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidPropertiesFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidPropertiesFactory.KT
index c8a18ad..2037aa5 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidPropertiesFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$EntityWithValidPropertiesFactory.KT
@@ -24,8 +24,7 @@
       inputSerializableFactory.fromAppFunctionData(data)
     }
 
-    val resultEntityWithValidProperties = EntityWithValidProperties(longParam, doubleParam, boolParam, stringParam, longArray, doubleArray, boolArray, stringList, inputSerializable, serializableList)
-    return resultEntityWithValidProperties
+    return EntityWithValidProperties(longParam, doubleParam, boolParam, stringParam, longArray, doubleArray, boolArray, stringList, inputSerializable, serializableList)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: EntityWithValidProperties): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$LocalDateTimeFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$LocalDateTimeFactory.KT
deleted file mode 100644
index d12ad80..0000000
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$LocalDateTimeFactory.KT
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.testdata
-
-import androidx.appfunctions.AppFunctionData
-import androidx.appfunctions.`internal`.AppFunctionSerializableFactory
-import java.time.LocalDateTime
-import javax.`annotation`.processing.Generated
-
-@Generated("androidx.appfunctions.compiler.AppFunctionCompiler")
-public class `$LocalDateTimeFactory` : AppFunctionSerializableFactory<LocalDateTime> {
-  override fun fromAppFunctionData(appFunctionData: AppFunctionData): LocalDateTime {
-
-    val year = checkNotNull(appFunctionData.getIntOrNull("year"))
-    val month = checkNotNull(appFunctionData.getIntOrNull("month"))
-    val dayOfMonth = checkNotNull(appFunctionData.getIntOrNull("dayOfMonth"))
-    val hour = checkNotNull(appFunctionData.getIntOrNull("hour"))
-    val minute = checkNotNull(appFunctionData.getIntOrNull("minute"))
-    val second = checkNotNull(appFunctionData.getIntOrNull("second"))
-    val nanoOfSecond = checkNotNull(appFunctionData.getIntOrNull("nanoOfSecond"))
-
-    val resultAppFunctionLocalDateTime = AppFunctionLocalDateTime(year, month, dayOfMonth, hour, minute, second, nanoOfSecond)
-    return resultAppFunctionLocalDateTime.toLocalDateTime()
-  }
-
-  override fun toAppFunctionData(appFunctionSerializable: LocalDateTime): AppFunctionData = AppFunctionData.Builder("").build()
-}
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$LongBaseSerializableFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$LongBaseSerializableFactory.KT
index b627453..892e503 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$LongBaseSerializableFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$LongBaseSerializableFactory.KT
@@ -11,8 +11,7 @@
     val age = checkNotNull(appFunctionData.getLongOrNull("age"))
     val stringToOpen = checkNotNull(appFunctionData.getString("stringToOpen"))
 
-    val resultLongBaseSerializable = LongBaseSerializable(age, stringToOpen)
-    return resultLongBaseSerializable
+    return LongBaseSerializable(age, stringToOpen)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: LongBaseSerializable): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedBaseSerializableFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedBaseSerializableFactory.KT
index 0026f83..452458a 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedBaseSerializableFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedBaseSerializableFactory.KT
@@ -16,8 +16,7 @@
       nestedBase = nestedBaseSerializableFactory.fromAppFunctionData(nestedBaseData)
     }
 
-    val resultNestedBaseSerializable = NestedBaseSerializable(stringBaseName, nestedBase)
-    return resultNestedBaseSerializable
+    return NestedBaseSerializable(stringBaseName, nestedBase)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: NestedBaseSerializable): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedDerivedSerializableFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedDerivedSerializableFactory.KT
index 006536a..73862c9 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedDerivedSerializableFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$NestedDerivedSerializableFactory.KT
@@ -23,8 +23,7 @@
       nestedDerived = nestedDerivedSerializableFactory.fromAppFunctionData(nestedDerivedData)
     }
 
-    val resultNestedDerivedSerializable = NestedDerivedSerializable(stringBaseName, nestedBase, longBaseValue, nestedDerived)
-    return resultNestedDerivedSerializable
+    return NestedDerivedSerializable(stringBaseName, nestedBase, longBaseValue, nestedDerived)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: NestedDerivedSerializable): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$NonNestedChildSerializableFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$NonNestedChildSerializableFactory.KT
index 572d6d1..25003f6 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$NonNestedChildSerializableFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$NonNestedChildSerializableFactory.KT
@@ -17,8 +17,7 @@
     }
     val longBaseValue = checkNotNull(appFunctionData.getLongOrNull("longBaseValue"))
 
-    val resultNonNestedChildSerializable = NonNestedChildSerializable(stringBaseName, nestedBase, longBaseValue)
-    return resultNonNestedChildSerializable
+    return NonNestedChildSerializable(stringBaseName, nestedBase, longBaseValue)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: NonNestedChildSerializable): AppFunctionData {
diff --git a/appfunctions/appfunctions-compiler/src/test/test-data/output/$RecursiveSerializableFactory.KT b/appfunctions/appfunctions-compiler/src/test/test-data/output/$RecursiveSerializableFactory.KT
index 45de37d..5568833 100644
--- a/appfunctions/appfunctions-compiler/src/test/test-data/output/$RecursiveSerializableFactory.KT
+++ b/appfunctions/appfunctions-compiler/src/test/test-data/output/$RecursiveSerializableFactory.KT
@@ -15,8 +15,7 @@
       nested = recursiveSerializableFactory.fromAppFunctionData(nestedData)
     }
 
-    val resultRecursiveSerializable = RecursiveSerializable(nested)
-    return resultRecursiveSerializable
+    return RecursiveSerializable(nested)
   }
 
   override fun toAppFunctionData(appFunctionSerializable: RecursiveSerializable): AppFunctionData {
diff --git a/appfunctions/appfunctions-runtime/api/current.txt b/appfunctions/appfunctions-runtime/api/current.txt
index 5a9bd68..de190e7 100644
--- a/appfunctions/appfunctions-runtime/api/current.txt
+++ b/appfunctions/appfunctions-runtime/api/current.txt
@@ -28,7 +28,6 @@
     method @RequiresPermission(value="android.permission.EXECUTE_APP_FUNCTIONS", conditional=true) public suspend Object? isAppFunctionEnabled(String packageName, String functionId, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
     method public suspend Object? isAppFunctionEnabled(String functionId, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
     method public boolean isSupported();
-    method @RequiresPermission(value="android.permission.EXECUTE_APP_FUNCTIONS", conditional=true) public kotlinx.coroutines.flow.Flow<java.util.List<androidx.appfunctions.metadata.AppFunctionMetadata>> observeAppFunctions(androidx.appfunctions.AppFunctionSearchSpec searchSpec);
     method @RequiresPermission(value="android.permission.EXECUTE_APP_FUNCTIONS", conditional=true) public suspend Object? setAppFunctionEnabled(String functionId, int newEnabledState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     field public static final int APP_FUNCTION_STATE_DEFAULT = 0; // 0x0
     field public static final int APP_FUNCTION_STATE_DISABLED = 2; // 0x2
diff --git a/appfunctions/appfunctions-runtime/api/restricted_current.txt b/appfunctions/appfunctions-runtime/api/restricted_current.txt
index 5a9bd68..de190e7 100644
--- a/appfunctions/appfunctions-runtime/api/restricted_current.txt
+++ b/appfunctions/appfunctions-runtime/api/restricted_current.txt
@@ -28,7 +28,6 @@
     method @RequiresPermission(value="android.permission.EXECUTE_APP_FUNCTIONS", conditional=true) public suspend Object? isAppFunctionEnabled(String packageName, String functionId, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
     method public suspend Object? isAppFunctionEnabled(String functionId, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
     method public boolean isSupported();
-    method @RequiresPermission(value="android.permission.EXECUTE_APP_FUNCTIONS", conditional=true) public kotlinx.coroutines.flow.Flow<java.util.List<androidx.appfunctions.metadata.AppFunctionMetadata>> observeAppFunctions(androidx.appfunctions.AppFunctionSearchSpec searchSpec);
     method @RequiresPermission(value="android.permission.EXECUTE_APP_FUNCTIONS", conditional=true) public suspend Object? setAppFunctionEnabled(String functionId, int newEnabledState, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     field public static final int APP_FUNCTION_STATE_DEFAULT = 0; // 0x0
     field public static final int APP_FUNCTION_STATE_DISABLED = 2; // 0x2
diff --git a/appfunctions/appfunctions-runtime/dependencyAnalysis-baseline.json b/appfunctions/appfunctions-runtime/dependencyAnalysis-baseline.json
index 525c7b2..90741ef 100644
--- a/appfunctions/appfunctions-runtime/dependencyAnalysis-baseline.json
+++ b/appfunctions/appfunctions-runtime/dependencyAnalysis-baseline.json
@@ -70,6 +70,15 @@
     {
       "coordinates": {
         "type": "module",
+        "identifier": "org.jetbrains.kotlinx:kotlinx-coroutines-android",
+        "resolvedVersion": "1.7.3"
+      },
+      "fromConfiguration": "implementation",
+      "toConfiguration": "runtimeOnly"
+    },
+    {
+      "coordinates": {
+        "type": "module",
         "identifier": "org.jetbrains.kotlinx:kotlinx-coroutines-core",
         "resolvedVersion": "1.7.3"
       },
diff --git a/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/AppFunctionManagerCompatTest.kt b/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/AppFunctionManagerCompatTest.kt
index 2efd636..58ec448 100644
--- a/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/AppFunctionManagerCompatTest.kt
+++ b/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/AppFunctionManagerCompatTest.kt
@@ -23,12 +23,6 @@
 import androidx.test.filters.SdkSuppress
 import androidx.test.platform.app.InstrumentationRegistry
 import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.first
-import kotlinx.coroutines.flow.shareIn
-import kotlinx.coroutines.flow.take
 import kotlinx.coroutines.runBlocking
 import org.junit.Assume.assumeTrue
 import org.junit.Before
@@ -242,306 +236,4 @@
         assertThat((response as ExecuteAppFunctionResponse.Error).error)
             .isInstanceOf(AppFunctionInvalidArgumentException::class.java)
     }
-
-    @Test
-    fun observeAppFunctions_emptyPackagesListInSearchSpec_noResults() =
-        runBlocking<Unit> {
-            val searchFunctionSpec = AppFunctionSearchSpec(packageNames = emptySet())
-
-            assertThat(appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first())
-                .isEmpty()
-        }
-
-    @Test
-    fun observeAppFunctions_emptySchemaNameInSearchSpec_noResults() =
-        runBlocking<Unit> {
-            val searchFunctionSpec = AppFunctionSearchSpec(schemaName = "")
-
-            assertThat(appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first())
-                .isEmpty()
-        }
-
-    @Test
-    fun observeAppFunctions_emptySchemaCategoryInSearchSpec_noResults() =
-        runBlocking<Unit> {
-            val searchFunctionSpec = AppFunctionSearchSpec(schemaCategory = "")
-
-            assertThat(appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first())
-                .isEmpty()
-        }
-
-    @Test
-    fun observeAppFunctions_packageListNotSetInSpec_returnsAllAppFunctions() =
-        runBlocking<Unit> {
-            val searchFunctionSpec = AppFunctionSearchSpec()
-
-            val appFunctions =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first()
-
-            // TODO: Populate other fields for legacy indexer.
-            assertThat(appFunctions.map { it.id })
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA2_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.NOTES_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_EXECUTION_FAIL,
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_EXECUTION_SUCCEED,
-                )
-            // Only check for all fields when dynamic indexer is enabled.
-            assumeTrue(metadataTestHelper.isDynamicIndexerAvailable())
-            assertThat(appFunctions)
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_ENABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_DISABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NOTES_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_EXECUTION_FAIL,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_EXECUTION_SUCCEED,
-                )
-        }
-
-    // TODO(b/397396289) - Test package filter with multiple app installs.
-    @Test
-    fun observeAppFunctions_packageListSetInSpec_returnsAppFunctionsInPackage() =
-        runBlocking<Unit> {
-            val searchFunctionSpec =
-                AppFunctionSearchSpec(packageNames = setOf(context.packageName))
-
-            val appFunctions =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first()
-
-            // TODO: Populate other fields for legacy indexer.
-            assertThat(appFunctions.map { it.id })
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA2_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.NOTES_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_EXECUTION_FAIL,
-                    AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_EXECUTION_SUCCEED,
-                )
-            // Only check for all fields when dynamic indexer is enabled.
-            assumeTrue(metadataTestHelper.isDynamicIndexerAvailable())
-            assertThat(appFunctions)
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_ENABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_DISABLED_BY_DEFAULT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NOTES_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_EXECUTION_FAIL,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_EXECUTION_SUCCEED,
-                )
-        }
-
-    @Test
-    fun observeAppFunctions_schemaNameInSpec_returnsMatchingAppFunctions() =
-        runBlocking<Unit> {
-            val searchFunctionSpec = AppFunctionSearchSpec(schemaName = "print")
-
-            val appFunctions =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first()
-
-            // TODO: Populate other fields for legacy indexer.
-            assertThat(appFunctions.map { it.id })
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.NOTES_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA2_PRINT
-                )
-            assertThat(appFunctions.map { it.schema })
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA_PRINT.schema,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NOTES_SCHEMA_PRINT.schema,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT.schema,
-                )
-            // Only check for all fields when dynamic indexer is enabled.
-            assumeTrue(metadataTestHelper.isDynamicIndexerAvailable())
-            assertThat(appFunctions)
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NOTES_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT,
-                )
-        }
-
-    @Test
-    fun observeAppFunctions_schemaCategoryInSpec_returnsMatchingAppFunctions() =
-        runBlocking<Unit> {
-            val searchFunctionSpec = AppFunctionSearchSpec(schemaCategory = "media")
-
-            val appFunctions =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first()
-
-            // TODO: Populate other fields for legacy indexer.
-            assertThat(appFunctions.map { it.id })
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA2_PRINT
-                )
-            assertThat(appFunctions.map { it.schema })
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA_PRINT.schema,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT.schema,
-                )
-            // Only check for all fields when dynamic indexer is enabled.
-            assumeTrue(metadataTestHelper.isDynamicIndexerAvailable())
-            assertThat(appFunctions)
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA_PRINT,
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT
-                )
-        }
-
-    @Test
-    fun observeAppFunctions_minSchemaVersionInSpec_returnsAppFunctionsWithSchemaVersionGreaterThanMin() =
-        runBlocking<Unit> {
-            val searchFunctionSpec = AppFunctionSearchSpec(minSchemaVersion = 2)
-
-            val appFunctions =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first()
-
-            // TODO: Populate other fields for legacy indexer.
-            assertThat(appFunctions.map { it.id })
-                .containsExactly(AppFunctionMetadataTestHelper.FunctionIds.MEDIA_SCHEMA2_PRINT)
-            assertThat(appFunctions.map { it.schema })
-                .containsExactly(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT.schema
-                )
-            // Only check for all fields when dynamic indexer is enabled.
-            assumeTrue(metadataTestHelper.isDynamicIndexerAvailable())
-            assertThat(appFunctions)
-                .containsExactly(AppFunctionMetadataTestHelper.FunctionMetadata.MEDIA_SCHEMA2_PRINT)
-        }
-
-    @Test
-    fun observeAppFunctions_isDisabledInRuntime_returnsIsEnabledFalse() =
-        runBlocking<Unit> {
-            val functionIdToTest =
-                AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT
-            val searchFunctionSpec = AppFunctionSearchSpec()
-            appFunctionManagerCompat.setAppFunctionEnabled(
-                functionIdToTest,
-                AppFunctionManagerCompat.APP_FUNCTION_STATE_DISABLED
-            )
-
-            val appFunctionMetadata =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first().single {
-                    it.id == functionIdToTest
-                }
-
-            assertThat(appFunctionMetadata.isEnabled).isFalse()
-        }
-
-    @Test
-    fun observeAppFunctions_isEnabledInRuntime_returnsIsEnabledTrue() =
-        runBlocking<Unit> {
-            val functionIdToTest =
-                AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT
-            val searchFunctionSpec = AppFunctionSearchSpec()
-            appFunctionManagerCompat.setAppFunctionEnabled(
-                functionIdToTest,
-                AppFunctionManagerCompat.APP_FUNCTION_STATE_ENABLED
-            )
-
-            val appFunctionMetadata =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec).first().single {
-                    it.id == functionIdToTest
-                }
-
-            assertThat(appFunctionMetadata.isEnabled).isTrue()
-        }
-
-    // TODO(b/397396289): Add test to check we don't trigger updates for unrelated changes.
-    @Test
-    fun observeAppFunctions_observeDocumentChanges_returnsListWithUpdatedValue() =
-        runBlocking<Unit> {
-            val functionIdToTest =
-                AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT
-            val searchFunctionSpec =
-                AppFunctionSearchSpec(packageNames = setOf(context.packageName))
-            val appFunctionSearchFlow =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec)
-            val emittedValues =
-                appFunctionSearchFlow.shareIn(
-                    scope = CoroutineScope(Dispatchers.Default),
-                    started = SharingStarted.Eagerly,
-                    replay = 10,
-                )
-            emittedValues.first() // Allow emitting initial value and registering callback.
-
-            // Modify the runtime document.
-            appFunctionManagerCompat.setAppFunctionEnabled(
-                functionIdToTest,
-                AppFunctionManagerCompat.APP_FUNCTION_STATE_DISABLED
-            )
-
-            // Collect in a separate scope to avoid deadlock within the testcase.
-            runBlocking(Dispatchers.Default) { emittedValues.take(2).collect {} }
-            assertThat(emittedValues.replayCache).hasSize(2)
-            // Assert first result to be default value.
-            assertThat(
-                    emittedValues.replayCache[0]
-                        .single {
-                            it.id ==
-                                AppFunctionMetadataTestHelper.FunctionIds
-                                    .NO_SCHEMA_ENABLED_BY_DEFAULT
-                        }
-                        .isEnabled
-                )
-                .isEqualTo(
-                    AppFunctionMetadataTestHelper.FunctionMetadata.NO_SCHEMA_ENABLED_BY_DEFAULT
-                        .isEnabled
-                )
-            // Assert next update has updated value.
-            assertThat(
-                    emittedValues.replayCache[1]
-                        .single {
-                            it.id ==
-                                AppFunctionMetadataTestHelper.FunctionIds
-                                    .NO_SCHEMA_ENABLED_BY_DEFAULT
-                        }
-                        .isEnabled
-                )
-                .isFalse()
-        }
-
-    @Test
-    fun observeAppFunctions_multipleUpdates_returnsUpdatesAfterDebouncing() =
-        runBlocking<Unit> {
-            val functionIdToTest =
-                AppFunctionMetadataTestHelper.FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT
-            val searchFunctionSpec =
-                AppFunctionSearchSpec(packageNames = setOf(context.packageName))
-            val appFunctionSearchFlow =
-                appFunctionManagerCompat.observeAppFunctions(searchFunctionSpec)
-            val emittedValues =
-                appFunctionSearchFlow.shareIn(
-                    scope = CoroutineScope(Dispatchers.Default),
-                    started = SharingStarted.Eagerly,
-                    replay = 10,
-                )
-            emittedValues.first() // Allow emitting initial value and registering callback.
-
-            // Modify the runtime document twice.
-            appFunctionManagerCompat.setAppFunctionEnabled(
-                functionIdToTest,
-                AppFunctionManagerCompat.APP_FUNCTION_STATE_DISABLED
-            )
-            appFunctionManagerCompat.setAppFunctionEnabled(
-                functionIdToTest,
-                AppFunctionManagerCompat.APP_FUNCTION_STATE_ENABLED
-            )
-
-            // Collect in a separate scope to avoid deadlock within the testcase.
-            runBlocking(Dispatchers.Default) { emittedValues.take(2).collect {} }
-            // Only 2 updates are emitted.
-            assertThat(emittedValues.replayCache).hasSize(2)
-            assertThat(emittedValues.replayCache[1].single { it.id == functionIdToTest }.isEnabled)
-                .isTrue()
-        }
 }
diff --git a/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/core/AppFunctionMetadataTestHelper.kt b/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/core/AppFunctionMetadataTestHelper.kt
index bd1caac..041f246 100644
--- a/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/core/AppFunctionMetadataTestHelper.kt
+++ b/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/core/AppFunctionMetadataTestHelper.kt
@@ -19,14 +19,8 @@
 import android.content.Context
 import android.os.Build
 import androidx.`annotation`.RequiresApi
-import androidx.appfunctions.core.AppFunctionMetadataTestHelper.FunctionIds.NOTES_SCHEMA_PRINT
 import androidx.appfunctions.`internal`.readAll
-import androidx.appfunctions.metadata.AppFunctionComponentsMetadata
-import androidx.appfunctions.metadata.AppFunctionMetadata
 import androidx.appfunctions.metadata.AppFunctionMetadataDocument
-import androidx.appfunctions.metadata.AppFunctionPrimitiveTypeMetadata
-import androidx.appfunctions.metadata.AppFunctionResponseMetadata
-import androidx.appfunctions.metadata.AppFunctionSchemaMetadata
 import androidx.appsearch.app.Features
 import androidx.appsearch.app.GlobalSearchSession
 import androidx.appsearch.app.SearchSpec
@@ -134,134 +128,6 @@
         const val MEDIA_SCHEMA2_PRINT = "androidx.appfunctions.test#mediaSchema2_print"
     }
 
-    object FunctionMetadata {
-        val NO_SCHEMA_EXECUTION_SUCCEED =
-            AppFunctionMetadata(
-                id = FunctionIds.NO_SCHEMA_EXECUTION_SUCCEED,
-                packageName = "androidx.appfunctions.runtime.test",
-                isEnabled = true,
-                schema = null,
-                parameters = emptyList(),
-                response =
-                    AppFunctionResponseMetadata(
-                        valueType =
-                            AppFunctionPrimitiveTypeMetadata(
-                                type = AppFunctionPrimitiveTypeMetadata.TYPE_STRING,
-                                isNullable = false
-                            )
-                    ),
-                components = AppFunctionComponentsMetadata()
-            )
-
-        val NO_SCHEMA_ENABLED_BY_DEFAULT =
-            AppFunctionMetadata(
-                id = FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT,
-                packageName = "androidx.appfunctions.runtime.test",
-                isEnabled = true,
-                schema = null,
-                parameters = emptyList(),
-                response =
-                    AppFunctionResponseMetadata(
-                        valueType =
-                            AppFunctionPrimitiveTypeMetadata(
-                                type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
-                                isNullable = false
-                            )
-                    ),
-                components = AppFunctionComponentsMetadata()
-            )
-
-        val NO_SCHEMA_DISABLED_BY_DEFAULT =
-            AppFunctionMetadata(
-                id = FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT,
-                packageName = "androidx.appfunctions.runtime.test",
-                isEnabled = false,
-                schema = null,
-                parameters = emptyList(),
-                response =
-                    AppFunctionResponseMetadata(
-                        valueType =
-                            AppFunctionPrimitiveTypeMetadata(
-                                type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
-                                isNullable = false
-                            )
-                    ),
-                components = AppFunctionComponentsMetadata()
-            )
-
-        val MEDIA_SCHEMA2_PRINT =
-            AppFunctionMetadata(
-                id = FunctionIds.MEDIA_SCHEMA2_PRINT,
-                packageName = "androidx.appfunctions.runtime.test",
-                isEnabled = true,
-                schema = AppFunctionSchemaMetadata(category = "media", name = "print", version = 2),
-                parameters = emptyList(),
-                response =
-                    AppFunctionResponseMetadata(
-                        valueType =
-                            AppFunctionPrimitiveTypeMetadata(
-                                type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
-                                isNullable = false
-                            )
-                    ),
-                components = AppFunctionComponentsMetadata()
-            )
-
-        val MEDIA_SCHEMA_PRINT =
-            AppFunctionMetadata(
-                id = FunctionIds.MEDIA_SCHEMA_PRINT,
-                packageName = "androidx.appfunctions.runtime.test",
-                isEnabled = true,
-                schema = AppFunctionSchemaMetadata(category = "media", name = "print", version = 1),
-                parameters = emptyList(),
-                response =
-                    AppFunctionResponseMetadata(
-                        valueType =
-                            AppFunctionPrimitiveTypeMetadata(
-                                type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
-                                isNullable = false
-                            )
-                    ),
-                components = AppFunctionComponentsMetadata()
-            )
-
-        val NOTES_SCHEMA_PRINT =
-            AppFunctionMetadata(
-                id = FunctionIds.NOTES_SCHEMA_PRINT,
-                packageName = "androidx.appfunctions.runtime.test",
-                isEnabled = true,
-                schema = AppFunctionSchemaMetadata(category = "notes", name = "print", version = 1),
-                parameters = emptyList(),
-                response =
-                    AppFunctionResponseMetadata(
-                        valueType =
-                            AppFunctionPrimitiveTypeMetadata(
-                                type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
-                                isNullable = false
-                            )
-                    ),
-                components = AppFunctionComponentsMetadata()
-            )
-
-        val NO_SCHEMA_EXECUTION_FAIL =
-            AppFunctionMetadata(
-                id = FunctionIds.NO_SCHEMA_EXECUTION_FAIL,
-                packageName = "androidx.appfunctions.runtime.test",
-                isEnabled = true,
-                schema = null,
-                parameters = emptyList(),
-                response =
-                    AppFunctionResponseMetadata(
-                        valueType =
-                            AppFunctionPrimitiveTypeMetadata(
-                                type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
-                                isNullable = false
-                            )
-                    ),
-                components = AppFunctionComponentsMetadata()
-            )
-    }
-
     companion object {
         private const val RETRY_LIMIT = 5
         private const val RETRY_DELAY_MS = 500L
diff --git a/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/internal/AppSearchAppFunctionReaderTest.kt b/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/internal/AppSearchAppFunctionReaderTest.kt
new file mode 100644
index 0000000..d9a6297
--- /dev/null
+++ b/appfunctions/appfunctions-runtime/src/androidTest/java/androidx/appfunctions/internal/AppSearchAppFunctionReaderTest.kt
@@ -0,0 +1,490 @@
+/*
+ * Copyright 2025 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.appfunctions.internal
+
+import android.os.Build
+import androidx.appfunctions.AppFunctionFunctionNotFoundException
+import androidx.appfunctions.AppFunctionManagerCompat
+import androidx.appfunctions.AppFunctionSearchSpec
+import androidx.appfunctions.core.AppFunctionMetadataTestHelper
+import androidx.appfunctions.core.AppFunctionMetadataTestHelper.FunctionIds
+import androidx.appfunctions.metadata.AppFunctionComponentsMetadata
+import androidx.appfunctions.metadata.AppFunctionMetadata
+import androidx.appfunctions.metadata.AppFunctionPrimitiveTypeMetadata
+import androidx.appfunctions.metadata.AppFunctionResponseMetadata
+import androidx.appfunctions.metadata.AppFunctionSchemaMetadata
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import com.google.common.truth.Truth.assertThat
+import com.google.testing.junit.testparameterinjector.TestParameter
+import com.google.testing.junit.testparameterinjector.TestParameterInjector
+import kotlin.test.assertFailsWith
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.single
+import kotlinx.coroutines.flow.take
+import kotlinx.coroutines.flow.toList
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
+import org.junit.Assume.assumeTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
+@RunWith(TestParameterInjector::class)
+class AppSearchAppFunctionReaderTest {
+    private val context = InstrumentationRegistry.getInstrumentation().targetContext
+    private val appFunctionReader = AppSearchAppFunctionReader(context)
+    private val appFunctionMetadataTestHelper = AppFunctionMetadataTestHelper(context)
+    private val appFunctionManagerCompat = AppFunctionManagerCompat(context)
+
+    @Before
+    fun setup() =
+        runBlocking<Unit> {
+            assumeTrue(appFunctionMetadataTestHelper.isLegacyAppFunctionIndexerAvailable())
+            appFunctionMetadataTestHelper.awaitAppFunctionIndexed(
+                setOf(FunctionIds.NO_SCHEMA_EXECUTION_SUCCEED)
+            )
+
+            // Reset enabled state for all test ids
+            for (functionIds in getTestFunctionIdToMetadataMap(context.packageName).keys) {
+                appFunctionManagerCompat.setAppFunctionEnabled(
+                    functionIds,
+                    AppFunctionManagerCompat.APP_FUNCTION_STATE_DEFAULT
+                )
+            }
+        }
+
+    @Test
+    fun searchAppFunctions_emptyPackagesListInSearchSpec_noResults() =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec(packageNames = emptySet())
+
+            assertThat(appFunctionReader.searchAppFunctions(searchFunctionSpec).first()).isEmpty()
+        }
+
+    @Test
+    fun searchAppFunctions_emptySchemaNameInSearchSpec_noResults() =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec(schemaName = "")
+
+            assertThat(appFunctionReader.searchAppFunctions(searchFunctionSpec).first()).isEmpty()
+        }
+
+    @Test
+    fun searchAppFunctions_emptySchemaCategoryInSearchSpec_noResults() =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec(schemaCategory = "")
+
+            assertThat(appFunctionReader.searchAppFunctions(searchFunctionSpec).first()).isEmpty()
+        }
+
+    @Test
+    fun searchAppFunctions_packageListNotSetInSpec_returnsAllAppFunctions() =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec()
+
+            val appFunctions = appFunctionReader.searchAppFunctions(searchFunctionSpec).first()
+
+            // TODO: Populate other fields for legacy indexer.
+            val expectedMetadata = getTestFunctionIdToMetadataMap(context.packageName)
+            assertThat(appFunctions.map { it.id }).containsExactlyElementsIn(expectedMetadata.keys)
+            // Only check for all fields when dynamic indexer is enabled.
+            assumeTrue(appFunctionMetadataTestHelper.isDynamicIndexerAvailable())
+            assertThat(appFunctions)
+                .containsExactlyElementsIn(
+                    getTestFunctionIdToMetadataMap(context.packageName).values
+                )
+        }
+
+    @Test
+    fun searchAppFunctions_packageListSetInSpec_returnsAppFunctionsInPackage() =
+        runBlocking<Unit> {
+            val searchFunctionSpec =
+                AppFunctionSearchSpec(packageNames = setOf(context.packageName))
+
+            val appFunctions = appFunctionReader.searchAppFunctions(searchFunctionSpec).first()
+
+            // TODO: Populate other fields for legacy indexer.
+            val expectedMetadata = getTestFunctionIdToMetadataMap(context.packageName)
+            assertThat(appFunctions.map { it.id }).containsExactlyElementsIn(expectedMetadata.keys)
+            // Only check for all fields when dynamic indexer is enabled.
+            assumeTrue(appFunctionMetadataTestHelper.isDynamicIndexerAvailable())
+            assertThat(appFunctions)
+                .containsExactlyElementsIn(
+                    getTestFunctionIdToMetadataMap(context.packageName).values
+                )
+        }
+
+    @Test
+    fun searchAppFunctions_schemaNameInSpec_returnsMatchingAppFunctions() =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec(schemaName = "print")
+
+            val appFunctions = appFunctionReader.searchAppFunctions(searchFunctionSpec).first()
+
+            val expectedFunctionIds =
+                setOf(
+                    FunctionIds.MEDIA_SCHEMA_PRINT,
+                    FunctionIds.NOTES_SCHEMA_PRINT,
+                    FunctionIds.MEDIA_SCHEMA2_PRINT
+                )
+            val expectedMetadata =
+                getTestFunctionIdToMetadataMap(context.packageName)
+                    .filterKeys { it in expectedFunctionIds }
+                    .values
+            // TODO: Populate other fields for legacy indexer.
+            assertThat(appFunctions.map { it.id }).containsExactlyElementsIn(expectedFunctionIds)
+            assertThat(appFunctions.map { it.schema })
+                .containsExactlyElementsIn(expectedMetadata.map { it.schema })
+            // Only check for all fields when dynamic indexer is enabled.
+            assumeTrue(appFunctionMetadataTestHelper.isDynamicIndexerAvailable())
+            assertThat(appFunctions).containsExactlyElementsIn(expectedMetadata)
+        }
+
+    @Test
+    fun searchAppFunctions_schemaCategoryInSpec_returnsMatchingAppFunctions() =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec(schemaCategory = "media")
+
+            val appFunctions = appFunctionReader.searchAppFunctions(searchFunctionSpec).first()
+
+            val expectedFunctionIds =
+                setOf(FunctionIds.MEDIA_SCHEMA_PRINT, FunctionIds.MEDIA_SCHEMA2_PRINT)
+            val expectedMetadata =
+                getTestFunctionIdToMetadataMap(context.packageName)
+                    .filterKeys { it in expectedFunctionIds }
+                    .values
+            // TODO: Populate other fields for legacy indexer.
+            assertThat(appFunctions.map { it.id }).containsExactlyElementsIn(expectedFunctionIds)
+            assertThat(appFunctions.map { it.schema })
+                .containsExactlyElementsIn(expectedMetadata.map { it.schema })
+            // Only check for all fields when dynamic indexer is enabled.
+            assumeTrue(appFunctionMetadataTestHelper.isDynamicIndexerAvailable())
+            assertThat(appFunctions).containsExactlyElementsIn(expectedMetadata)
+        }
+
+    @Test
+    fun searchAppFunctions_minSchemaVersionInSpec_returnsAppFunctionsWithSchemaVersionGreaterThanMin() =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec(minSchemaVersion = 2)
+
+            val appFunctions = appFunctionReader.searchAppFunctions(searchFunctionSpec).first()
+
+            val expectedFunctionIds = setOf(FunctionIds.MEDIA_SCHEMA2_PRINT)
+            val expectedMetadata =
+                getTestFunctionIdToMetadataMap(context.packageName)
+                    .filterKeys { it in expectedFunctionIds }
+                    .values
+            // TODO: Populate other fields for legacy indexer.
+            assertThat(appFunctions.map { it.id }).containsExactlyElementsIn(expectedFunctionIds)
+            assertThat(appFunctions.map { it.schema })
+                .containsExactlyElementsIn(expectedMetadata.map { it.schema })
+            // Only check for all fields when dynamic indexer is enabled.
+            assumeTrue(appFunctionMetadataTestHelper.isDynamicIndexerAvailable())
+            assertThat(appFunctions).containsExactlyElementsIn(expectedMetadata)
+        }
+
+    @Test
+    fun searchAppFunctions_isDisabledInRuntime_returnsIsEnabledFalse() =
+        runBlocking<Unit> {
+            val functionIdToTest = FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT
+            val searchFunctionSpec = AppFunctionSearchSpec()
+            appFunctionManagerCompat.setAppFunctionEnabled(
+                functionIdToTest,
+                AppFunctionManagerCompat.APP_FUNCTION_STATE_DISABLED
+            )
+
+            val appFunctionMetadata =
+                appFunctionReader.searchAppFunctions(searchFunctionSpec).first().single {
+                    it.id == functionIdToTest
+                }
+
+            assertThat(appFunctionMetadata.isEnabled).isFalse()
+        }
+
+    @Test
+    fun searchAppFunctions_isEnabledInRuntime_returnsIsEnabledTrue() =
+        runBlocking<Unit> {
+            val functionIdToTest = FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT
+            val searchFunctionSpec = AppFunctionSearchSpec()
+            appFunctionManagerCompat.setAppFunctionEnabled(
+                functionIdToTest,
+                AppFunctionManagerCompat.APP_FUNCTION_STATE_ENABLED
+            )
+
+            val appFunctionMetadata =
+                appFunctionReader.searchAppFunctions(searchFunctionSpec).first().single {
+                    it.id == functionIdToTest
+                }
+
+            assertThat(appFunctionMetadata.isEnabled).isTrue()
+        }
+
+    @Test
+    fun searchAppFunctions_isEnabledSetByDefault_returnsIsEnabledDefaultValue(
+        @TestParameter(
+            FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT,
+            FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT
+        )
+        functionIdToTest: String
+    ) =
+        runBlocking<Unit> {
+            val searchFunctionSpec = AppFunctionSearchSpec()
+
+            val appFunctionMetadata =
+                appFunctionReader.searchAppFunctions(searchFunctionSpec).first().single {
+                    it.id == functionIdToTest
+                }
+
+            val expectedMetadataWithIsEnabledDefault =
+                getTestFunctionIdToMetadataMap(context.packageName).getValue(functionIdToTest)
+            assertThat(appFunctionMetadata.isEnabled)
+                .isEqualTo(expectedMetadataWithIsEnabledDefault.isEnabled)
+        }
+
+    @Test
+    fun getAppFunctionSchemaMetadata_found() = runBlocking {
+        val appFunctionSchemaMetadata =
+            appFunctionReader.getAppFunctionSchemaMetadata(
+                FunctionIds.MEDIA_SCHEMA_PRINT,
+                context.packageName
+            )
+
+        val expected = AppFunctionSchemaMetadata("media", "print", 1)
+        assertThat(appFunctionSchemaMetadata).isEqualTo(expected)
+    }
+
+    @Test
+    fun getAppFunctionSchemaMetadata_freeform() = runBlocking {
+        val appFunctionSchemaMetadata =
+            appFunctionReader.getAppFunctionSchemaMetadata(
+                FunctionIds.NO_SCHEMA_EXECUTION_SUCCEED,
+                context.packageName
+            )
+
+        assertThat(appFunctionSchemaMetadata).isNull()
+    }
+
+    @Test
+    fun getAppFunctionSchemaMetadata_notFound() =
+        runBlocking<Unit> {
+            assertFailsWith<AppFunctionFunctionNotFoundException> {
+                appFunctionReader.getAppFunctionSchemaMetadata("notExist", context.packageName)
+            }
+        }
+
+    // TODO: Add test to check we don't trigger updates for unrelated changes.
+    @Test
+    fun searchAppFunctions_observeDocumentChanges_returnsListWithUpdatedValue() =
+        runBlocking<Unit> {
+            val functionIdToTest = FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT
+            val searchFunctionSpec =
+                AppFunctionSearchSpec(packageNames = setOf(context.packageName))
+            val appFunctionSearchFlow = appFunctionReader.searchAppFunctions(searchFunctionSpec)
+            val emittedValues = mutableListOf<List<AppFunctionMetadata>>()
+            val job = launch { appFunctionSearchFlow.take(2).toList(emittedValues) }
+            delay(2000) // Allow emitting initial value and registering callback.
+
+            // Modify the runtime document.
+            appFunctionManagerCompat.setAppFunctionEnabled(
+                functionIdToTest,
+                AppFunctionManagerCompat.APP_FUNCTION_STATE_DISABLED
+            )
+
+            job.join()
+            assertThat(emittedValues).hasSize(2)
+            // Assert first result to be default value.
+            assertThat(emittedValues[0].single { it.id == functionIdToTest }.isEnabled)
+                .isEqualTo(
+                    getTestFunctionIdToMetadataMap(context.packageName)
+                        .getValue(functionIdToTest)
+                        .isEnabled
+                )
+            // Assert next update has updated value.
+            assertThat(emittedValues[1].single { it.id == functionIdToTest }.isEnabled).isFalse()
+        }
+
+    @Test
+    fun searchAppFunctions_multipleUpdates_returnsUpdatesAfterDebouncing() =
+        runBlocking<Unit> {
+            val functionIdToTest = FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT
+            val searchFunctionSpec =
+                AppFunctionSearchSpec(packageNames = setOf(context.packageName))
+            val appFunctionSearchFlow = appFunctionReader.searchAppFunctions(searchFunctionSpec)
+            val emittedValues = mutableListOf<List<AppFunctionMetadata>>()
+            val job = launch { appFunctionSearchFlow.toList(emittedValues) }
+            delay(2000) // Allow emitting initial value and registering callback.
+
+            // Modify the runtime document twice.
+            appFunctionManagerCompat.setAppFunctionEnabled(
+                functionIdToTest,
+                AppFunctionManagerCompat.APP_FUNCTION_STATE_DISABLED
+            )
+            appFunctionManagerCompat.setAppFunctionEnabled(
+                functionIdToTest,
+                AppFunctionManagerCompat.APP_FUNCTION_STATE_ENABLED
+            )
+            delay(2000)
+
+            job.cancel()
+            // Only 2 updates are emitted.
+            assertThat(emittedValues).hasSize(2)
+            assertThat(emittedValues[1].single { it.id == functionIdToTest }.isEnabled).isTrue()
+        }
+
+    private companion object {
+        fun getTestFunctionIdToMetadataMap(packageName: String) =
+            mapOf(
+                FunctionIds.NO_SCHEMA_EXECUTION_SUCCEED to
+                    AppFunctionMetadata(
+                        id = FunctionIds.NO_SCHEMA_EXECUTION_SUCCEED,
+                        packageName = packageName,
+                        isEnabled = true,
+                        schema = null,
+                        parameters = emptyList(),
+                        response =
+                            AppFunctionResponseMetadata(
+                                valueType =
+                                    AppFunctionPrimitiveTypeMetadata(
+                                        type = AppFunctionPrimitiveTypeMetadata.TYPE_STRING,
+                                        isNullable = false
+                                    )
+                            ),
+                        components = AppFunctionComponentsMetadata()
+                    ),
+                FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT to
+                    AppFunctionMetadata(
+                        id = FunctionIds.NO_SCHEMA_ENABLED_BY_DEFAULT,
+                        packageName = packageName,
+                        isEnabled = true,
+                        schema = null,
+                        parameters = emptyList(),
+                        response =
+                            AppFunctionResponseMetadata(
+                                valueType =
+                                    AppFunctionPrimitiveTypeMetadata(
+                                        type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
+                                        isNullable = false
+                                    )
+                            ),
+                        components = AppFunctionComponentsMetadata()
+                    ),
+                FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT to
+                    AppFunctionMetadata(
+                        id = FunctionIds.NO_SCHEMA_DISABLED_BY_DEFAULT,
+                        packageName = packageName,
+                        isEnabled = false,
+                        schema = null,
+                        parameters = emptyList(),
+                        response =
+                            AppFunctionResponseMetadata(
+                                valueType =
+                                    AppFunctionPrimitiveTypeMetadata(
+                                        type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
+                                        isNullable = false
+                                    )
+                            ),
+                        components = AppFunctionComponentsMetadata()
+                    ),
+                FunctionIds.NO_SCHEMA_EXECUTION_FAIL to
+                    AppFunctionMetadata(
+                        id = FunctionIds.NO_SCHEMA_EXECUTION_FAIL,
+                        packageName = packageName,
+                        isEnabled = true,
+                        schema = null,
+                        parameters = emptyList(),
+                        response =
+                            AppFunctionResponseMetadata(
+                                valueType =
+                                    AppFunctionPrimitiveTypeMetadata(
+                                        type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
+                                        isNullable = false
+                                    )
+                            ),
+                        components = AppFunctionComponentsMetadata()
+                    ),
+                FunctionIds.NOTES_SCHEMA_PRINT to
+                    AppFunctionMetadata(
+                        id = FunctionIds.NOTES_SCHEMA_PRINT,
+                        packageName = packageName,
+                        isEnabled = true,
+                        schema =
+                            AppFunctionSchemaMetadata(
+                                category = "notes",
+                                name = "print",
+                                version = 1
+                            ),
+                        parameters = emptyList(),
+                        response =
+                            AppFunctionResponseMetadata(
+                                valueType =
+                                    AppFunctionPrimitiveTypeMetadata(
+                                        type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
+                                        isNullable = false
+                                    )
+                            ),
+                        components = AppFunctionComponentsMetadata()
+                    ),
+                FunctionIds.MEDIA_SCHEMA_PRINT to
+                    AppFunctionMetadata(
+                        id = FunctionIds.MEDIA_SCHEMA_PRINT,
+                        packageName = packageName,
+                        isEnabled = true,
+                        schema =
+                            AppFunctionSchemaMetadata(
+                                category = "media",
+                                name = "print",
+                                version = 1
+                            ),
+                        parameters = emptyList(),
+                        response =
+                            AppFunctionResponseMetadata(
+                                valueType =
+                                    AppFunctionPrimitiveTypeMetadata(
+                                        type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
+                                        isNullable = false
+                                    )
+                            ),
+                        components = AppFunctionComponentsMetadata()
+                    ),
+                FunctionIds.MEDIA_SCHEMA2_PRINT to
+                    AppFunctionMetadata(
+                        id = FunctionIds.MEDIA_SCHEMA2_PRINT,
+                        packageName = packageName,
+                        isEnabled = true,
+                        schema =
+                            AppFunctionSchemaMetadata(
+                                category = "media",
+                                name = "print",
+                                version = 2
+                            ),
+                        parameters = emptyList(),
+                        response =
+                            AppFunctionResponseMetadata(
+                                valueType =
+                                    AppFunctionPrimitiveTypeMetadata(
+                                        type = AppFunctionPrimitiveTypeMetadata.TYPE_UNIT,
+                                        isNullable = false
+                                    )
+                            ),
+                        components = AppFunctionComponentsMetadata()
+                    ),
+            )
+    }
+}
diff --git a/appfunctions/appfunctions-runtime/src/main/java/androidx/appfunctions/AppFunctionManagerCompat.kt b/appfunctions/appfunctions-runtime/src/main/java/androidx/appfunctions/AppFunctionManagerCompat.kt
index 71ce3b0..9cbfe8a 100644
--- a/appfunctions/appfunctions-runtime/src/main/java/androidx/appfunctions/AppFunctionManagerCompat.kt
+++ b/appfunctions/appfunctions-runtime/src/main/java/androidx/appfunctions/AppFunctionManagerCompat.kt
@@ -27,10 +27,8 @@
 import androidx.appfunctions.internal.ExtensionAppFunctionManagerApi
 import androidx.appfunctions.internal.TranslatorSelector
 import androidx.appfunctions.internal.TranslatorSelectorImpl
-import androidx.appfunctions.metadata.AppFunctionMetadata
 import androidx.appfunctions.metadata.AppFunctionSchemaMetadata
 import com.android.extensions.appfunctions.AppFunctionManager
-import kotlinx.coroutines.flow.Flow
 
 /**
  * Provides access to interact with App Functions. This is a backward-compatible wrapper for the
@@ -183,32 +181,6 @@
         }
     }
 
-    /**
-     * Observes for available app functions metadata based on the provided filters.
-     *
-     * Allows discovering app functions that match the given [searchSpec] criteria and continuously
-     * emits updates when relevant metadata changes.
-     *
-     * Updates to [AppFunctionMetadata] can occur when the app defining the function is updated or
-     * when a function's enabled state changes.
-     *
-     * If multiple updates happen within a short duration, only the latest update might be emitted.
-     *
-     * @param searchSpec an [AppFunctionSearchSpec] instance specifying the filters for searching
-     *   the app function metadata.
-     * @return a flow that emits a list of [AppFunctionMetadata] matching the search criteria and
-     *   updated versions of this list when underlying data changes.
-     * @throws UnsupportedOperationException if AppFunction is not supported on this device.
-     */
-    @RequiresPermission(value = "android.permission.EXECUTE_APP_FUNCTIONS", conditional = true)
-    public fun observeAppFunctions(
-        searchSpec: AppFunctionSearchSpec
-    ): Flow<List<AppFunctionMetadata>> {
-        checkAppFunctionsFeatureSupported()
-
-        return appFunctionReader.searchAppFunctions(searchSpec)
-    }
-
     private fun checkAppFunctionsFeatureSupported() {
         if (!isSupported()) {
             throw UnsupportedOperationException("AppFunction feature is not supported.")
diff --git a/appsearch/appsearch-builtin-types/build.gradle b/appsearch/appsearch-builtin-types/build.gradle
index 1f4543c..46282d4a 100644
--- a/appsearch/appsearch-builtin-types/build.gradle
+++ b/appsearch/appsearch-builtin-types/build.gradle
@@ -57,6 +57,6 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.appsearch.builtintypes"
 }
diff --git a/appsearch/appsearch-debug-view/build.gradle b/appsearch/appsearch-debug-view/build.gradle
index 0e7c1f7..690b28b 100644
--- a/appsearch/appsearch-debug-view/build.gradle
+++ b/appsearch/appsearch-debug-view/build.gradle
@@ -29,7 +29,7 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.appsearch.debugview"
 }
 
diff --git a/appsearch/appsearch-debug-view/samples/build.gradle b/appsearch/appsearch-debug-view/samples/build.gradle
index 74dfaba..cf74890 100644
--- a/appsearch/appsearch-debug-view/samples/build.gradle
+++ b/appsearch/appsearch-debug-view/samples/build.gradle
@@ -29,7 +29,7 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.appsearch.debugview.samples"
 }
 
diff --git a/appsearch/appsearch-ktx/build.gradle b/appsearch/appsearch-ktx/build.gradle
index d7c22fd..cf2be5f 100644
--- a/appsearch/appsearch-ktx/build.gradle
+++ b/appsearch/appsearch-ktx/build.gradle
@@ -50,6 +50,6 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.appsearch.ktx"
 }
diff --git a/appsearch/appsearch-local-storage/api/1.1.0-beta02.txt b/appsearch/appsearch-local-storage/api/1.1.0-beta02.txt
index 0574cfd..425b7b2 100644
--- a/appsearch/appsearch-local-storage/api/1.1.0-beta02.txt
+++ b/appsearch/appsearch-local-storage/api/1.1.0-beta02.txt
@@ -4,7 +4,6 @@
   public class LocalStorage {
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures();
   }
 
   public static final class LocalStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-local-storage/api/current.txt b/appsearch/appsearch-local-storage/api/current.txt
index 0574cfd..425b7b2 100644
--- a/appsearch/appsearch-local-storage/api/current.txt
+++ b/appsearch/appsearch-local-storage/api/current.txt
@@ -4,7 +4,6 @@
   public class LocalStorage {
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures();
   }
 
   public static final class LocalStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-local-storage/api/restricted_1.1.0-beta02.txt b/appsearch/appsearch-local-storage/api/restricted_1.1.0-beta02.txt
index 0574cfd..425b7b2 100644
--- a/appsearch/appsearch-local-storage/api/restricted_1.1.0-beta02.txt
+++ b/appsearch/appsearch-local-storage/api/restricted_1.1.0-beta02.txt
@@ -4,7 +4,6 @@
   public class LocalStorage {
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures();
   }
 
   public static final class LocalStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-local-storage/api/restricted_current.txt b/appsearch/appsearch-local-storage/api/restricted_current.txt
index 0574cfd..425b7b2 100644
--- a/appsearch/appsearch-local-storage/api/restricted_current.txt
+++ b/appsearch/appsearch-local-storage/api/restricted_current.txt
@@ -4,7 +4,6 @@
   public class LocalStorage {
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.localstorage.LocalStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures();
   }
 
   public static final class LocalStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-local-storage/build.gradle b/appsearch/appsearch-local-storage/build.gradle
index f972c09..63ebdfc 100644
--- a/appsearch/appsearch-local-storage/build.gradle
+++ b/appsearch/appsearch-local-storage/build.gradle
@@ -30,7 +30,7 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     compileOptions {
         sourceCompatibility = JavaVersion.VERSION_1_8
         targetCompatibility = JavaVersion.VERSION_1_8
diff --git a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
index fe53380..fdeb1d4 100644
--- a/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
+++ b/appsearch/appsearch-local-storage/src/main/java/androidx/appsearch/localstorage/LocalStorage.java
@@ -28,7 +28,6 @@
 import androidx.appsearch.app.AppSearchEnvironmentFactory;
 import androidx.appsearch.app.AppSearchSession;
 import androidx.appsearch.app.ExperimentalAppSearchApi;
-import androidx.appsearch.app.Features;
 import androidx.appsearch.app.GlobalSearchSession;
 import androidx.appsearch.exceptions.AppSearchException;
 import androidx.appsearch.flags.Flags;
@@ -325,15 +324,6 @@
     }
 
     /**
-     * Returns the {@link Features} to check for the availability of certain features for this
-     * AppSearch storage.
-     */
-    @ExperimentalAppSearchApi
-    public static @NonNull Features getFeatures() {
-        return new FeaturesImpl();
-    }
-
-    /**
      * Returns the singleton instance of {@link LocalStorage}.
      *
      * <p>If the system is not initialized, it will be initialized using the provided
diff --git a/appsearch/appsearch-platform-storage/api/1.1.0-beta02.txt b/appsearch/appsearch-platform-storage/api/1.1.0-beta02.txt
index 41a348f..4709926 100644
--- a/appsearch/appsearch-platform-storage/api/1.1.0-beta02.txt
+++ b/appsearch/appsearch-platform-storage/api/1.1.0-beta02.txt
@@ -5,7 +5,6 @@
     method @RequiresApi(android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM) public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.EnterpriseGlobalSearchSession!> createEnterpriseGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures(android.content.Context);
   }
 
   public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/api/current.txt b/appsearch/appsearch-platform-storage/api/current.txt
index 41a348f..4709926 100644
--- a/appsearch/appsearch-platform-storage/api/current.txt
+++ b/appsearch/appsearch-platform-storage/api/current.txt
@@ -5,7 +5,6 @@
     method @RequiresApi(android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM) public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.EnterpriseGlobalSearchSession!> createEnterpriseGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures(android.content.Context);
   }
 
   public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/api/restricted_1.1.0-beta02.txt b/appsearch/appsearch-platform-storage/api/restricted_1.1.0-beta02.txt
index 41a348f..4709926 100644
--- a/appsearch/appsearch-platform-storage/api/restricted_1.1.0-beta02.txt
+++ b/appsearch/appsearch-platform-storage/api/restricted_1.1.0-beta02.txt
@@ -5,7 +5,6 @@
     method @RequiresApi(android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM) public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.EnterpriseGlobalSearchSession!> createEnterpriseGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures(android.content.Context);
   }
 
   public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/api/restricted_current.txt b/appsearch/appsearch-platform-storage/api/restricted_current.txt
index 41a348f..4709926 100644
--- a/appsearch/appsearch-platform-storage/api/restricted_current.txt
+++ b/appsearch/appsearch-platform-storage/api/restricted_current.txt
@@ -5,7 +5,6 @@
     method @RequiresApi(android.os.Build.VERSION_CODES.VANILLA_ICE_CREAM) public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.EnterpriseGlobalSearchSession!> createEnterpriseGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.GlobalSearchSession!> createGlobalSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.GlobalSearchContext);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.appsearch.app.AppSearchSession!> createSearchSessionAsync(androidx.appsearch.platformstorage.PlatformStorage.SearchContext);
-    method @SuppressCompatibility @androidx.appsearch.app.ExperimentalAppSearchApi public static androidx.appsearch.app.Features getFeatures(android.content.Context);
   }
 
   public static final class PlatformStorage.GlobalSearchContext {
diff --git a/appsearch/appsearch-platform-storage/build.gradle b/appsearch/appsearch-platform-storage/build.gradle
index 2e6303f..91ec378 100644
--- a/appsearch/appsearch-platform-storage/build.gradle
+++ b/appsearch/appsearch-platform-storage/build.gradle
@@ -52,6 +52,6 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.appsearch.platformstorage"
 }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
index e80ea96..15577cb 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/FeaturesImpl.java
@@ -123,21 +123,19 @@
                         || AppSearchVersionUtil.getAppSearchVersionCode(mContext)
                         >= AppSearchVersionUtil.APPSEARCH_M2024_11_VERSION_CODE;
 
-            // Android B Features
-            case Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG:
-                // fall through
-            case Features.SEARCH_SPEC_ADD_INFORMATIONAL_RANKING_EXPRESSIONS:
-                // fall through
-            case Features.SEARCH_RESULT_PARENT_TYPES:
-                return AppSearchVersionUtil.isAtLeastB();
-
             // Pending Android B Features
+            case Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG:
+                // TODO(b/326656531) : Update when feature is ready in service-appsearch.
+                // fall through
             case Features.SCHEMA_EMBEDDING_QUANTIZATION:
                 // TODO(b/359959345) : Update when feature is ready in service-appsearch.
                 // fall through
             case Features.SEARCH_SPEC_SEARCH_STRING_PARAMETERS:
                 // TODO(b/332620561) : Update when feature is ready in service-appsearch.
                 // fall through
+            case Features.SEARCH_SPEC_ADD_INFORMATIONAL_RANKING_EXPRESSIONS:
+                // TODO(b/332642571) : Update when feature is ready in service-appsearch.
+                // fall through
             case Features.SEARCH_SPEC_ADD_FILTER_DOCUMENT_IDS:
                 // TODO(b/367464836) : Update when feature is ready in service-appsearch.
                 // fall through
@@ -147,6 +145,9 @@
             case Features.SCHEMA_SCORABLE_PROPERTY_CONFIG:
                 // TODO(b/357105837) : Update when feature is ready in service-appsearch.
                 // fall through
+            case Features.SEARCH_RESULT_PARENT_TYPES:
+                // TODO(b/371610934) : Update when feature is ready in service-appsearch.
+                return false;
 
             // Beyond Android B Features
             case Features.SCHEMA_SET_DESCRIPTION:
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
index c22e802..7838ec1 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/PlatformStorage.java
@@ -25,7 +25,6 @@
 import androidx.appsearch.app.AppSearchEnvironmentFactory;
 import androidx.appsearch.app.AppSearchSession;
 import androidx.appsearch.app.EnterpriseGlobalSearchSession;
-import androidx.appsearch.app.ExperimentalAppSearchApi;
 import androidx.appsearch.app.Features;
 import androidx.appsearch.app.GlobalSearchSession;
 import androidx.appsearch.exceptions.AppSearchException;
@@ -318,15 +317,6 @@
         return future;
     }
 
-    /**
-     * Returns the {@link Features} to check for the availability of certain features for this
-     * AppSearch storage.
-     */
-    @ExperimentalAppSearchApi
-    public static @NonNull Features getFeatures(@NonNull Context context) {
-        return new FeaturesImpl(context);
-    }
-
     @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM)
     private static class ApiHelperForV {
         private ApiHelperForV() {
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
index 1e3935a..86b4625 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/GenericDocumentToPlatformConverter.java
@@ -16,10 +16,8 @@
 
 package androidx.appsearch.platformstorage.converter;
 
-import android.annotation.SuppressLint;
 import android.os.Build;
 
-import androidx.annotation.DoNotInline;
 import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
@@ -28,7 +26,6 @@
 import androidx.appsearch.app.ExperimentalAppSearchApi;
 import androidx.appsearch.app.Features;
 import androidx.appsearch.app.GenericDocument;
-import androidx.appsearch.platformstorage.util.AppSearchVersionUtil;
 import androidx.core.util.Preconditions;
 
 import org.jspecify.annotations.NonNull;
@@ -97,14 +94,9 @@
                 }
                 platformBuilder.setPropertyDocument(propertyName, platformSubDocuments);
             } else if (property instanceof EmbeddingVector[]) {
-                if (!AppSearchVersionUtil.isAtLeastB()) {
-                    throw new UnsupportedOperationException(
-                            Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG
-                                    + " is not available on this AppSearch implementation.");
-                }
-                EmbeddingVector[] embeddingVectors = (EmbeddingVector[]) property;
-                ApiHelperForB.setPlatformPropertyEmbedding(platformBuilder, propertyName,
-                        embeddingVectors);
+                // TODO(b/326656531): Remove this once embedding search APIs are available.
+                throw new UnsupportedOperationException(Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG
+                        + " is not available on this AppSearch implementation.");
             } else if (property instanceof AppSearchBlobHandle[]) {
                 // TODO(b/273591938): Remove this once blob APIs are available.
                 throw new UnsupportedOperationException(Features.BLOB_STORAGE
@@ -164,13 +156,9 @@
                     jetpackSubDocuments[j] = toJetpackGenericDocument(documentValues[j]);
                 }
                 jetpackBuilder.setPropertyDocument(propertyName, jetpackSubDocuments);
-            } else if (AppSearchVersionUtil.isAtLeastB()
-                    && property instanceof android.app.appsearch.EmbeddingVector[]) {
-                android.app.appsearch.EmbeddingVector[] embeddingVectors =
-                        (android.app.appsearch.EmbeddingVector[]) property;
-                ApiHelperForB.setJetpackPropertyEmbedding(jetpackBuilder, propertyName,
-                        embeddingVectors);
             } else {
+                // TODO(b/326656531) : Add an entry for EmbeddingVector once it becomes
+                //  available in platform.
                 throw new IllegalStateException(
                         String.format("Property \"%s\" has unsupported value type %s", propertyName,
                                 property.getClass().toString()));
@@ -180,43 +168,4 @@
     }
 
     private GenericDocumentToPlatformConverter() {}
-
-    @RequiresApi(36)
-    private static class ApiHelperForB {
-        private ApiHelperForB() {
-        }
-
-        @SuppressLint("NewApi") // EmbeddingVector is incorrectly flagged as needing 34-ext16
-        @DoNotInline
-        static void setPlatformPropertyEmbedding(
-                android.app.appsearch.GenericDocument.@NonNull Builder<
-                        android.app.appsearch.GenericDocument.Builder<?>> platformBuilder,
-                @NonNull String propertyName,
-                EmbeddingVector @NonNull [] jetpackEmbeddingVectors) {
-            android.app.appsearch.EmbeddingVector[] platformEmbeddingVectors =
-                    new android.app.appsearch.EmbeddingVector[jetpackEmbeddingVectors.length];
-            for (int i = 0; i < jetpackEmbeddingVectors.length; i++) {
-                platformEmbeddingVectors[i] = new android.app.appsearch.EmbeddingVector(
-                        jetpackEmbeddingVectors[i].getValues(),
-                        jetpackEmbeddingVectors[i].getModelSignature());
-            }
-            platformBuilder.setPropertyEmbedding(propertyName, platformEmbeddingVectors);
-        }
-
-        @SuppressLint("NewApi") // getValues() is incorrectly flagged as needing 34-ext16
-        @DoNotInline
-        static void setJetpackPropertyEmbedding(
-                GenericDocument.@NonNull Builder<GenericDocument.Builder<?>> jetpackBuilder,
-                @NonNull String propertyName,
-                android.app.appsearch.EmbeddingVector @NonNull [] platformEmbeddingVectors) {
-            EmbeddingVector[] jetpackEmbeddingVectors =
-                    new EmbeddingVector[platformEmbeddingVectors.length];
-            for (int i = 0; i < platformEmbeddingVectors.length; i++) {
-                jetpackEmbeddingVectors[i] = new EmbeddingVector(
-                        platformEmbeddingVectors[i].getValues(),
-                        platformEmbeddingVectors[i].getModelSignature());
-            }
-            jetpackBuilder.setPropertyEmbedding(propertyName, jetpackEmbeddingVectors);
-        }
-    }
 }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java
index 296bb0bd6..256558e 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SchemaToPlatformConverter.java
@@ -29,7 +29,6 @@
 import androidx.appsearch.app.AppSearchSchema;
 import androidx.appsearch.app.ExperimentalAppSearchApi;
 import androidx.appsearch.app.Features;
-import androidx.appsearch.platformstorage.util.AppSearchVersionUtil;
 import androidx.core.util.Preconditions;
 
 import org.jspecify.annotations.NonNull;
@@ -232,19 +231,11 @@
             }
             return platformBuilder.build();
         } else if (jetpackProperty instanceof AppSearchSchema.EmbeddingPropertyConfig) {
-            if (!AppSearchVersionUtil.isAtLeastB()) {
-                throw new UnsupportedOperationException(Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG
-                        + " is not available on this AppSearch implementation.");
-            }
-            AppSearchSchema.EmbeddingPropertyConfig embeddingProperty =
-                    (AppSearchSchema.EmbeddingPropertyConfig) jetpackProperty;
-            if (embeddingProperty.getQuantizationType()
-                    != AppSearchSchema.EmbeddingPropertyConfig.QUANTIZATION_TYPE_NONE) {
-                // TODO(b/359959345): Remove this once embedding quantization is available.
-                throw new UnsupportedOperationException(Features.SCHEMA_EMBEDDING_QUANTIZATION
-                        + " is not available on this AppSearch implementation.");
-            }
-            return ApiHelperForB.createPlatformEmbeddingPropertyConfig(embeddingProperty);
+            // TODO(b/326656531): Remove this once embedding search APIs are available.
+            // TODO(b/359959345): Remember to add the check for quantization when embedding has
+            //  become available but quantization has not yet.
+            throw new UnsupportedOperationException(Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG
+                    + " is not available on this AppSearch implementation.");
         } else if (jetpackProperty instanceof AppSearchSchema.BlobHandlePropertyConfig) {
             // TODO(b/273591938): Remove this once blob APIs are available.
             throw new UnsupportedOperationException(Features.BLOB_STORAGE
@@ -257,7 +248,7 @@
 
     // Most stringProperty.get calls cause WrongConstant lint errors because the methods are not
     // defined as returning the same constants as the corresponding setter expects, but they do
-    @SuppressLint({"WrongConstant", "NewApi"}) // EmbeddingPropertyConfig incorrectly flagged
+    @SuppressLint("WrongConstant")
     private static AppSearchSchema.@NonNull PropertyConfig toJetpackProperty(
             android.app.appsearch.AppSearchSchema.@NonNull PropertyConfig platformProperty) {
         Preconditions.checkNotNull(platformProperty);
@@ -334,14 +325,9 @@
                 jetpackBuilder.addIndexableNestedProperties(indexableNestedProperties);
             }
             return jetpackBuilder.build();
-        } else if (AppSearchVersionUtil.isAtLeastB() && platformProperty
-                instanceof android.app.appsearch.AppSearchSchema.EmbeddingPropertyConfig) {
-            // TODO(b/359959345): Update quantization once it becomes available in platform.
-            android.app.appsearch.AppSearchSchema.EmbeddingPropertyConfig embeddingProperty =
-                    (android.app.appsearch.AppSearchSchema
-                            .EmbeddingPropertyConfig) platformProperty;
-            return ApiHelperForB.createJetpackEmbeddingPropertyConfig(embeddingProperty);
         } else {
+            // TODO(b/326656531) : Add an entry for EmbeddingPropertyConfig once it becomes
+            //  available in platform.
             throw new IllegalArgumentException(
                     "Invalid property type " + platformProperty.getClass()
                             + ": " + platformProperty);
@@ -422,36 +408,4 @@
             return platformDocumentProperty.getIndexableNestedProperties();
         }
     }
-
-    @RequiresApi(36)
-    @SuppressLint("NewApi") // EmbeddingPropertyConfig incorrectly flagged as 34-ext16
-    private static class ApiHelperForB {
-        private ApiHelperForB() {
-        }
-
-        @DoNotInline
-        @SuppressLint("WrongConstant")
-        static android.app.appsearch.AppSearchSchema.PropertyConfig
-                createPlatformEmbeddingPropertyConfig(
-                AppSearchSchema.@NonNull EmbeddingPropertyConfig jetpackEmbeddingProperty) {
-            return new android.app.appsearch.AppSearchSchema.EmbeddingPropertyConfig.Builder(
-                    jetpackEmbeddingProperty.getName())
-                    .setCardinality(jetpackEmbeddingProperty.getCardinality())
-                    .setIndexingType(jetpackEmbeddingProperty.getIndexingType())
-                    .build();
-        }
-
-        @DoNotInline
-        @SuppressLint("WrongConstant")
-        static AppSearchSchema.EmbeddingPropertyConfig
-                createJetpackEmbeddingPropertyConfig(
-                android.app.appsearch.AppSearchSchema.@NonNull EmbeddingPropertyConfig
-                        platformEmbeddingProperty) {
-            return new AppSearchSchema.EmbeddingPropertyConfig.Builder(
-                    platformEmbeddingProperty.getName())
-                    .setCardinality(platformEmbeddingProperty.getCardinality())
-                    .setIndexingType(platformEmbeddingProperty.getIndexingType())
-                    .build();
-        }
-    }
 }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
index 966b408..5e5b702 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchResultToPlatformConverter.java
@@ -16,24 +16,18 @@
 
 package androidx.appsearch.platformstorage.converter;
 
-import android.annotation.SuppressLint;
 import android.os.Build;
-import android.util.Log;
 
 import androidx.annotation.DoNotInline;
-import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
-import androidx.appsearch.app.ExperimentalAppSearchApi;
 import androidx.appsearch.app.GenericDocument;
 import androidx.appsearch.app.SearchResult;
-import androidx.appsearch.platformstorage.util.AppSearchVersionUtil;
 import androidx.core.util.Preconditions;
 
 import org.jspecify.annotations.NonNull;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * Translates between Platform and Jetpack versions of {@link SearchResult}.
@@ -42,12 +36,9 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 @RequiresApi(Build.VERSION_CODES.S)
 public class SearchResultToPlatformConverter {
-    private static final String TAG = "AppSearchSearchResPlatC";
-
     private SearchResultToPlatformConverter() {}
 
     /** Translates from Platform to Jetpack versions of {@link SearchResult}. */
-    @OptIn(markerClass = ExperimentalAppSearchApi.class)
     public static @NonNull SearchResult toJetpackSearchResult(
             android.app.appsearch.@NonNull SearchResult platformResult) {
         Preconditions.checkNotNull(platformResult);
@@ -69,27 +60,8 @@
                 builder.addJoinedResult(toJetpackSearchResult(joinedResult));
             }
         }
-        if (AppSearchVersionUtil.isAtLeastB()) {
-            List<Double> informationalRankingSignals =
-                    ApiHelperForB.getInformationalRankingSignals(platformResult);
-            for (int i = 0; i < informationalRankingSignals.size(); i++) {
-                builder.addInformationalRankingSignal(informationalRankingSignals.get(i));
-            }
-
-            try {
-                // TODO(b/371610934): Ensure the parent type map is set for older devices receiving
-                //  mainline updates. AppSearch will relocate parent type information from
-                //  GenericDocument to SearchResult in new versions. Omitting this step will result
-                //  in missing parent data and incorrect polymorphic deserialization behavior for
-                //  GenericDocument.
-                builder.setParentTypeMap(ApiHelperForB.getParentTypeMap(platformResult));
-            } catch (NoSuchMethodError e) {
-                // Catch NoSuchMethodError thrown by older pre-release Android B devices that may
-                // not have the getParentTypeMap method. This is a temporary workaround until all
-                // B devices have the method available.
-                Log.e(TAG, "Failed to set parent type map.", e);
-            }
-        }
+        // TODO(b/332642571): Add informational ranking signal once it is available in platform.
+        // TODO(b/371610934): Set parentTypeMap once it is available in platform.
         return builder.build();
     }
 
@@ -148,23 +120,4 @@
             return result.getJoinedResults();
         }
     }
-
-    @RequiresApi(36)
-    private static class ApiHelperForB {
-        private ApiHelperForB() {
-        }
-
-        @DoNotInline
-        @SuppressLint("NewApi") // getInformationalRankingSignals() incorrectly flagged as 34-ext16
-        static List<Double> getInformationalRankingSignals(
-                android.app.appsearch.@NonNull SearchResult result) {
-            return result.getInformationalRankingSignals();
-        }
-
-        @DoNotInline
-        static Map<String, List<String>> getParentTypeMap(
-                android.app.appsearch.@NonNull SearchResult result) {
-            return result.getParentTypeMap();
-        }
-    }
 }
diff --git a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java
index b6ca26c..9c07c7d 100644
--- a/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java
+++ b/appsearch/appsearch-platform-storage/src/main/java/androidx/appsearch/platformstorage/converter/SearchSpecToPlatformConverter.java
@@ -24,7 +24,6 @@
 import androidx.annotation.OptIn;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
-import androidx.appsearch.app.EmbeddingVector;
 import androidx.appsearch.app.ExperimentalAppSearchApi;
 import androidx.appsearch.app.Features;
 import androidx.appsearch.app.JoinSpec;
@@ -150,14 +149,9 @@
             }
         }
         if (!jetpackSearchSpec.getEmbeddingParameters().isEmpty()) {
-            if (!AppSearchVersionUtil.isAtLeastB()) {
-                throw new UnsupportedOperationException(Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG
-                        + " is not available on this AppSearch implementation.");
-            }
-            ApiHelperForB.addEmbeddingParameters(platformBuilder,
-                    jetpackSearchSpec.getEmbeddingParameters());
-            ApiHelperForB.setDefaultEmbeddingSearchMetricType(platformBuilder,
-                    jetpackSearchSpec.getDefaultEmbeddingSearchMetricType());
+            // TODO(b/326656531): Remove this once embedding search APIs are available.
+            throw new UnsupportedOperationException(Features.SCHEMA_EMBEDDING_PROPERTY_CONFIG
+                    + " is not available on this AppSearch implementation.");
         }
         if (!jetpackSearchSpec.getSearchStringParameters().isEmpty()) {
             // TODO(b/332620561): Remove this once search parameter strings APIs is supported.
@@ -193,13 +187,10 @@
         }
 
         if (!jetpackSearchSpec.getInformationalRankingExpressions().isEmpty()) {
-            if (!AppSearchVersionUtil.isAtLeastB()) {
-                throw new UnsupportedOperationException(
-                        Features.SEARCH_SPEC_ADD_INFORMATIONAL_RANKING_EXPRESSIONS
-                                + " are not available on this AppSearch implementation.");
-            }
-            ApiHelperForB.addInformationalRankingExpressions(platformBuilder,
-                    jetpackSearchSpec.getInformationalRankingExpressions());
+            // TODO(b/332642571): Remove this once informational ranking expressions are available.
+            throw new UnsupportedOperationException(
+                    Features.SEARCH_SPEC_ADD_INFORMATIONAL_RANKING_EXPRESSIONS
+                            + " are not available on this AppSearch implementation.");
         }
 
         if (!jetpackSearchSpec.getFilterDocumentIds().isEmpty()) {
@@ -290,40 +281,4 @@
             platformBuilder.setSearchSourceLogTag(searchSourceLogTag);
         }
     }
-
-    @RequiresApi(36)
-    @SuppressLint("NewApi") // EmbeddingVector incorrectly flagged as 34-ext16
-    private static class ApiHelperForB {
-        private ApiHelperForB() {
-        }
-
-        @DoNotInline
-        static void addEmbeddingParameters(
-                android.app.appsearch.SearchSpec.@NonNull Builder platformBuilder,
-                @NonNull List<EmbeddingVector> embeddingVectors) {
-            android.app.appsearch.EmbeddingVector[] platformEmbeddingVectors =
-                    new android.app.appsearch.EmbeddingVector[embeddingVectors.size()];
-            for (int i = 0; i < embeddingVectors.size(); i++) {
-                platformEmbeddingVectors[i] = new android.app.appsearch.EmbeddingVector(
-                        embeddingVectors.get(i).getValues(),
-                        embeddingVectors.get(i).getModelSignature());
-            }
-            platformBuilder.addEmbeddingParameters(platformEmbeddingVectors);
-        }
-
-        @DoNotInline
-        @SuppressLint("WrongConstant")
-        static void setDefaultEmbeddingSearchMetricType(
-                android.app.appsearch.SearchSpec.@NonNull Builder platformBuilder,
-                @SearchSpec.EmbeddingSearchMetricType int defaultEmbeddingSearchMetricType) {
-            platformBuilder.setDefaultEmbeddingSearchMetricType(defaultEmbeddingSearchMetricType);
-        }
-
-        @DoNotInline
-        static void addInformationalRankingExpressions(
-                android.app.appsearch.SearchSpec.@NonNull Builder platformBuilder,
-                @NonNull List<String> informationalRankingExpressions) {
-            platformBuilder.addInformationalRankingExpressions(informationalRankingExpressions);
-        }
-    }
 }
diff --git a/appsearch/appsearch-play-services-storage/build.gradle b/appsearch/appsearch-play-services-storage/build.gradle
index 6651a80..7453214 100644
--- a/appsearch/appsearch-play-services-storage/build.gradle
+++ b/appsearch/appsearch-play-services-storage/build.gradle
@@ -55,7 +55,7 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.appsearch.playservicesstorage"
      defaultConfig {
     }
diff --git a/appsearch/appsearch-test-util/build.gradle b/appsearch/appsearch-test-util/build.gradle
index af58115..9bb1de6 100644
--- a/appsearch/appsearch-test-util/build.gradle
+++ b/appsearch/appsearch-test-util/build.gradle
@@ -43,6 +43,6 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     namespace = "androidx.appsearch.testutil"
 }
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index 11ac0a1..18a9a3b 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -29,7 +29,7 @@
 }
 
 android {
-    compileSdk = 36
+    compileSdk = 35
     buildTypes.configureEach {
         consumerProguardFiles "proguard-rules.pro"
     }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
index e2f6620..686ae18 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AnnotationProcessorPlatformTest.java
@@ -16,10 +16,13 @@
 // @exportToFramework:skipFile()
 package androidx.appsearch.app;
 
+import static org.junit.Assume.assumeFalse;
+
 import android.content.Context;
 import android.os.Build;
 
 import androidx.appsearch.platformstorage.PlatformStorage;
+import androidx.appsearch.platformstorage.util.AppSearchVersionUtil;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.filters.SdkSuppress;
 
@@ -35,4 +38,20 @@
         return PlatformStorage.createSearchSessionAsync(
                 new PlatformStorage.SearchContext.Builder(context, dbName).build());
     }
+
+    @Override
+    public void testPolymorphicDeserialization_Integration() throws Exception {
+        // TODO(b/371610934): Enable this test for B devices once we are able to call
+        //  SearchResult#getParentTypeMap in platform storage to hook up the parent information.
+        assumeFalse(AppSearchVersionUtil.isAtLeastB());
+        super.testPolymorphicDeserialization_Integration();
+    }
+
+    @Override
+    public void testPolymorphicDeserialization_NestedType_Integration() throws Exception {
+        // TODO(b/371610934): Enable this test for B devices once we are able to call
+        //  SearchResult#getParentTypeMap in platform storage to hook up the parent information.
+        assumeFalse(AppSearchVersionUtil.isAtLeastB());
+        super.testPolymorphicDeserialization_NestedType_Integration();
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java
index 3a820a0..f5ce5a15 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/app/AppSearchSessionPlatformInternalTest.java
@@ -29,6 +29,7 @@
 import androidx.appsearch.app.AppSearchSchema.StringPropertyConfig;
 import androidx.appsearch.flags.Flags;
 import androidx.appsearch.platformstorage.PlatformStorage;
+import androidx.appsearch.platformstorage.util.AppSearchVersionUtil;
 import androidx.appsearch.testutil.flags.RequiresFlagsEnabled;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.filters.SdkSuppress;
@@ -85,4 +86,12 @@
                 "StringPropertyConfig.DELETE_PROPAGATION_TYPE_PROPAGATE_FROM is not supported on "
                         + "this AppSearch implementation.");
     }
+
+    @Override
+    public void testQuery_genericDocumentWrapsParentTypeForPolymorphism() throws Exception {
+        // TODO(b/371610934): Enable this test for B devices once we are able to call
+        //  SearchResult#getParentTypeMap in platform storage to hook up the parent information.
+        assumeFalse(AppSearchVersionUtil.isAtLeastB());
+        super.testQuery_genericDocumentWrapsParentTypeForPolymorphism();
+    }
 }
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
index c09e3a3..6b38c44 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/SetSchemaRequestCtsTest.java
@@ -1231,34 +1231,6 @@
         assertThat(request.getMigrators()).isEmpty();
     }
 
-    @Test
-    public void testSetSchemaEquals() {
-        AppSearchSchema schema1 = new AppSearchSchema.Builder("type1").build();
-        Migrator migrator = new NoOpMigrator();
-        SetSchemaRequest request1 = new SetSchemaRequest.Builder()
-                .addSchemas(schema1)
-                .setMigrator("type1", migrator)
-                .setForceOverride(true)
-                .setVersion(1)
-                .build();
-        SetSchemaRequest request2 = new SetSchemaRequest.Builder()
-                .addSchemas(schema1)
-                .setMigrator("type1", migrator)
-                .setForceOverride(true)
-                .setVersion(1)
-                .build();
-        SetSchemaRequest request3 = new SetSchemaRequest.Builder()
-                .setForceOverride(true)
-                .setVersion(1)
-                .build();
-        // All parameters same.
-        assertThat(request1).isEqualTo(request2);
-        assertThat(request1.hashCode()).isEqualTo(request2.hashCode());
-        // Migrator not set.
-        assertThat(request1).isNotEqualTo(request3);
-        assertThat(request1.hashCode()).isNotEqualTo(request3.hashCode());
-    }
-
     /** Migrator that does nothing. */
     private static class NoOpMigrator extends Migrator {
         @Override
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
index 1e4e263..e463232 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/SetSchemaRequest.java
@@ -30,7 +30,6 @@
 import androidx.appsearch.flags.Flags;
 import androidx.collection.ArrayMap;
 import androidx.collection.ArraySet;
-import androidx.core.util.ObjectsCompat;
 import androidx.core.util.Preconditions;
 
 import java.lang.annotation.Retention;
@@ -381,33 +380,6 @@
         return mVersion;
     }
 
-    @Override
-    public boolean equals(@Nullable Object other) {
-        if (this == other) {
-            return true;
-        }
-        if (!(other instanceof SetSchemaRequest)) {
-            return false;
-        }
-        SetSchemaRequest otherRequest = (SetSchemaRequest) other;
-        return mSchemas.equals(otherRequest.mSchemas)
-                && mSchemasNotDisplayedBySystem.equals(otherRequest.mSchemasNotDisplayedBySystem)
-                && mSchemasVisibleToPackages.equals(otherRequest.mSchemasVisibleToPackages)
-                && mSchemasVisibleToPermissions.equals(otherRequest.mSchemasVisibleToPermissions)
-                && mPubliclyVisibleSchemas.equals(otherRequest.mPubliclyVisibleSchemas)
-                && mSchemasVisibleToConfigs.equals(otherRequest.mSchemasVisibleToConfigs)
-                && mMigrators.equals(otherRequest.mMigrators)
-                && mForceOverride == otherRequest.mForceOverride
-                && mVersion == otherRequest.mVersion;
-    }
-
-    @Override
-    public int hashCode() {
-        return ObjectsCompat.hash(mSchemas, mSchemasNotDisplayedBySystem, mSchemasVisibleToPackages,
-        mSchemasVisibleToPermissions, mPubliclyVisibleSchemas, mSchemasVisibleToConfigs, mMigrators,
-                mForceOverride, mVersion);
-    }
-
     /** Builder for {@link SetSchemaRequest} objects. */
     public static final class Builder {
         private static final int DEFAULT_VERSION = 1;
diff --git a/benchmark/benchmark-macro/dependencyAnalysis-baseline.json b/benchmark/benchmark-macro/dependencyAnalysis-baseline.json
index a538886..d3ba703 100644
--- a/benchmark/benchmark-macro/dependencyAnalysis-baseline.json
+++ b/benchmark/benchmark-macro/dependencyAnalysis-baseline.json
@@ -70,6 +70,14 @@
     },
     {
       "coordinates": {
+        "type": "module",
+        "identifier": "com.squareup.wire:wire-runtime",
+        "resolvedVersion": "5.2.1"
+      },
+      "fromConfiguration": "implementation"
+    },
+    {
+      "coordinates": {
         "type": "project",
         "identifier": ":benchmark:benchmark-traceprocessor"
       },
diff --git a/browser/browser/api/current.txt b/browser/browser/api/current.txt
index 6c80138..06ecaa3 100644
--- a/browser/browser/api/current.txt
+++ b/browser/browser/api/current.txt
@@ -492,13 +492,6 @@
     field public final java.util.List<android.net.Uri!> uris;
   }
 
-  public final class LaunchHandlerClientMode {
-    field public static final int AUTO = 0; // 0x0
-    field public static final int FOCUS_EXISTING = 2; // 0x2
-    field public static final int NAVIGATE_EXISTING = 1; // 0x1
-    field public static final int NAVIGATE_NEW = 3; // 0x3
-  }
-
   public final class ScreenOrientation {
     field public static final int ANY = 5; // 0x5
     field public static final int DEFAULT = 0; // 0x0
@@ -555,7 +548,6 @@
   public final class TrustedWebActivityIntent {
     method public androidx.browser.trusted.FileHandlingData? getFileHandlingData();
     method public android.content.Intent getIntent();
-    method public int getLaunchHandlerClientMode();
     method public android.net.Uri? getOriginalLaunchUrl();
     method public void launchTrustedWebActivity(android.content.Context);
   }
@@ -572,7 +564,6 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setFileHandlingData(androidx.browser.trusted.FileHandlingData);
-    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setLaunchHandlerClientMode(int);
     method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setOriginalLaunchUrl(android.net.Uri);
@@ -583,7 +574,6 @@
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
     field public static final String EXTRA_FILE_HANDLING_DATA = "androidx.browser.trusted.extra.FILE_HANDLING_DATA";
-    field public static final String EXTRA_LAUNCH_HANDLER_CLIENT_MODE = "androidx.browser.trusted.extra.LAUNCH_HANDLER_CLIENT_MODE";
     field public static final String EXTRA_ORIGINAL_LAUNCH_URL = "androidx.browser.trusted.extra.ORIGINAL_LAUNCH_URL";
     field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
diff --git a/browser/browser/api/restricted_current.txt b/browser/browser/api/restricted_current.txt
index 80cfe8f..9cb7cf8 100644
--- a/browser/browser/api/restricted_current.txt
+++ b/browser/browser/api/restricted_current.txt
@@ -503,13 +503,6 @@
     field public final java.util.List<android.net.Uri!> uris;
   }
 
-  public final class LaunchHandlerClientMode {
-    field public static final int AUTO = 0; // 0x0
-    field public static final int FOCUS_EXISTING = 2; // 0x2
-    field public static final int NAVIGATE_EXISTING = 1; // 0x1
-    field public static final int NAVIGATE_NEW = 3; // 0x3
-  }
-
   public final class ScreenOrientation {
     field public static final int ANY = 5; // 0x5
     field public static final int DEFAULT = 0; // 0x0
@@ -566,7 +559,6 @@
   public final class TrustedWebActivityIntent {
     method public androidx.browser.trusted.FileHandlingData? getFileHandlingData();
     method public android.content.Intent getIntent();
-    method public int getLaunchHandlerClientMode();
     method public android.net.Uri? getOriginalLaunchUrl();
     method public void launchTrustedWebActivity(android.content.Context);
   }
@@ -583,7 +575,6 @@
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDefaultColorSchemeParams(androidx.browser.customtabs.CustomTabColorSchemeParams);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setDisplayMode(androidx.browser.trusted.TrustedWebActivityDisplayMode);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setFileHandlingData(androidx.browser.trusted.FileHandlingData);
-    method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setLaunchHandlerClientMode(int);
     method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarColor(@ColorInt int);
     method @Deprecated public androidx.browser.trusted.TrustedWebActivityIntentBuilder setNavigationBarDividerColor(@ColorInt int);
     method public androidx.browser.trusted.TrustedWebActivityIntentBuilder setOriginalLaunchUrl(android.net.Uri);
@@ -594,7 +585,6 @@
     field public static final String EXTRA_ADDITIONAL_TRUSTED_ORIGINS = "android.support.customtabs.extra.ADDITIONAL_TRUSTED_ORIGINS";
     field public static final String EXTRA_DISPLAY_MODE = "androidx.browser.trusted.extra.DISPLAY_MODE";
     field public static final String EXTRA_FILE_HANDLING_DATA = "androidx.browser.trusted.extra.FILE_HANDLING_DATA";
-    field public static final String EXTRA_LAUNCH_HANDLER_CLIENT_MODE = "androidx.browser.trusted.extra.LAUNCH_HANDLER_CLIENT_MODE";
     field public static final String EXTRA_ORIGINAL_LAUNCH_URL = "androidx.browser.trusted.extra.ORIGINAL_LAUNCH_URL";
     field public static final String EXTRA_SCREEN_ORIENTATION = "androidx.browser.trusted.extra.SCREEN_ORIENTATION";
     field public static final String EXTRA_SHARE_DATA = "androidx.browser.trusted.extra.SHARE_DATA";
diff --git a/browser/browser/build.gradle b/browser/browser/build.gradle
index bf6d9f9..dba336e 100644
--- a/browser/browser/build.gradle
+++ b/browser/browser/build.gradle
@@ -26,10 +26,6 @@
     namespace = "androidx.browser"
 }
 
-android {
-    compileSdk = 36
-}
-
 dependencies {
     api(libs.jspecify)
     api("androidx.core:core:1.10.0")
diff --git a/browser/browser/dependencyAnalysis-baseline.json b/browser/browser/dependencyAnalysis-baseline.json
index b523227..7f6a514 100644
--- a/browser/browser/dependencyAnalysis-baseline.json
+++ b/browser/browser/dependencyAnalysis-baseline.json
@@ -4,10 +4,58 @@
     {
       "coordinates": {
         "type": "module",
+        "identifier": "androidx.test.espresso:espresso-core",
+        "resolvedVersion": "3.7.0-alpha01"
+      },
+      "fromConfiguration": "androidTestImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
+        "identifier": "androidx.test:monitor",
+        "resolvedVersion": "1.8.0-alpha01"
+      },
+      "toConfiguration": "androidTestImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
+        "identifier": "com.google.guava:guava",
+        "resolvedVersion": "33.3.1-jre"
+      },
+      "toConfiguration": "testImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
         "identifier": "com.linkedin.dexmaker:dexmaker-mockito",
         "resolvedVersion": "2.28.4"
       },
       "fromConfiguration": "androidTestImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
+        "identifier": "junit:junit",
+        "resolvedVersion": "4.13.2"
+      },
+      "toConfiguration": "androidTestImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
+        "identifier": "org.robolectric:annotations",
+        "resolvedVersion": "4.14"
+      },
+      "toConfiguration": "testImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
+        "identifier": "org.robolectric:shadowapi",
+        "resolvedVersion": "4.14"
+      },
+      "toConfiguration": "testImplementation"
     }
   ]
 }
\ No newline at end of file
diff --git a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
index e96e8b6..837916a 100644
--- a/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
+++ b/browser/browser/src/main/java/androidx/browser/customtabs/CustomTabsIntent.java
@@ -1519,9 +1519,6 @@
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
                 setShareIdentityEnabled();
             }
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
-                setAllowPassThroughOnTouchOutside();
-            }
             if (mActivityOptions != null) {
                 bundle = mActivityOptions.toBundle();
             }
@@ -1557,15 +1554,6 @@
             }
             Api34Impl.setShareIdentityEnabled(mActivityOptions, mShareIdentity);
         }
-
-        @RequiresApi(api = Build.VERSION_CODES.BAKLAVA)
-        private void setAllowPassThroughOnTouchOutside() {
-            if (mActivityOptions == null) {
-                mActivityOptions = Api23Impl.makeBasicActivityOptions();
-            }
-            boolean enabled = isBackgroundInteractionEnabled(mIntent);
-            Api36Impl.setAllowPassThroughOnTouchOutside(mActivityOptions, enabled);
-        }
     }
 
     /**
@@ -1897,12 +1885,4 @@
             activityOptions.setShareIdentityEnabled(enabled);
         }
     }
-
-    @RequiresApi(api = Build.VERSION_CODES.BAKLAVA)
-    private static class Api36Impl {
-        static void setAllowPassThroughOnTouchOutside(
-                ActivityOptions activityOptions, boolean enabled) {
-            activityOptions.setAllowPassThroughOnTouchOutside(enabled);
-        }
-    }
 }
diff --git a/browser/browser/src/main/java/androidx/browser/trusted/LaunchHandlerClientMode.java b/browser/browser/src/main/java/androidx/browser/trusted/LaunchHandlerClientMode.java
deleted file mode 100644
index 912b8f4..0000000
--- a/browser/browser/src/main/java/androidx/browser/trusted/LaunchHandlerClientMode.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2025 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.browser.trusted;
-
-import androidx.annotation.IntDef;
-import androidx.annotation.RestrictTo;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Represents launch handler client mode type value of a Launch Handler API
- * https://developer.mozilla.org/en-US/docs/Web/API/Launch_Handler_API
- */
-public final class LaunchHandlerClientMode {
-
-    private LaunchHandlerClientMode() {
-    }
-
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
-    @IntDef({
-            AUTO,
-            NAVIGATE_EXISTING,
-            FOCUS_EXISTING,
-            NAVIGATE_NEW,
-    })
-    @Retention(RetentionPolicy.SOURCE)
-    public @interface ClientMode {
-    }
-
-    /**
-     * The user agent's default launch routing behavior is used.
-     */
-    public static final int AUTO = 0;
-
-    /**
-     * If an existing web app client is open it is brought to focus and navigated to the launch's
-     * target URL. If there are no existing web app clients the navigate-new behavior is used
-     * instead.
-     */
-    public static final int NAVIGATE_EXISTING = 1;
-
-    /**
-     * If an existing web app client is open it is brought to focus but not navigated to the
-     * launch's target URL, instead the target URL is communicated via LaunchParams.
-     * If there are no existing web app clients the navigate-new behavior is used instead.
-     */
-    public static final int FOCUS_EXISTING = 2;
-
-    /**
-     * A new web app client is created to load the launch's target URL.
-     */
-    public static final int NAVIGATE_NEW = 3;
-}
diff --git a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntent.java b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntent.java
index a361522..a328275 100644
--- a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntent.java
+++ b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntent.java
@@ -69,19 +69,6 @@
     }
 
     /**
-     * Used for Launch Handler API to provide client mode to a browser.
-     *
-     * {@see https://developer.mozilla.org/en-US/docs/Web/API/Launch_Handler_API}
-     *
-     * @return An integer that represents Launch Handler API client mode.
-     */
-    public @LaunchHandlerClientMode.ClientMode int getLaunchHandlerClientMode() {
-        return getIntent().getIntExtra(
-                TrustedWebActivityIntentBuilder.EXTRA_LAUNCH_HANDLER_CLIENT_MODE,
-                LaunchHandlerClientMode.AUTO);
-    }
-
-    /**
      * Launches a Trusted Web Activity.
      */
     public void launchTrustedWebActivity(@NonNull Context context) {
diff --git a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java
index 7dc04eb..e9b4821 100644
--- a/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java
+++ b/browser/browser/src/main/java/androidx/browser/trusted/TrustedWebActivityIntentBuilder.java
@@ -90,13 +90,6 @@
     public static final String EXTRA_ORIGINAL_LAUNCH_URL =
             "androidx.browser.trusted.extra.ORIGINAL_LAUNCH_URL";
 
-    /**
-     * If a TWA is being launched using Launch Handler API, its client mode value is provided,
-     * see {@link #setLaunchHandlerClientMode}.
-     */
-    public static final String EXTRA_LAUNCH_HANDLER_CLIENT_MODE =
-            "androidx.browser.trusted.extra.LAUNCH_HANDLER_CLIENT_MODE";
-
     private final @NonNull Uri mUri;
     private final CustomTabsIntent.@NonNull Builder mIntentBuilder = new CustomTabsIntent.Builder();
 
@@ -110,9 +103,6 @@
 
     private @Nullable Uri mOriginalLaunchUrl;
 
-    @LaunchHandlerClientMode.ClientMode
-    private int mLaunchHandlerClientMode = LaunchHandlerClientMode.AUTO;
-
     private @NonNull TrustedWebActivityDisplayMode mDisplayMode =
             new TrustedWebActivityDisplayMode.DefaultMode();
 
@@ -317,17 +307,6 @@
     }
 
     /**
-     * Sets the parameter for delivering Launch Handler API client mode via a Trusted Web Activity.
-     *
-     * @param launchHandlerClientMode A string describing the client mode.
-     */
-    public @NonNull TrustedWebActivityIntentBuilder setLaunchHandlerClientMode(
-            @LaunchHandlerClientMode.ClientMode int launchHandlerClientMode) {
-        mLaunchHandlerClientMode = launchHandlerClientMode;
-        return this;
-    }
-
-    /**
      * Builds an instance of {@link TrustedWebActivityIntent}.
      *
      * @param session The {@link CustomTabsSession} to use for launching a Trusted Web Activity.
@@ -369,9 +348,6 @@
         if (mOriginalLaunchUrl != null) {
             intent.putExtra(EXTRA_ORIGINAL_LAUNCH_URL, mOriginalLaunchUrl);
         }
-
-        intent.putExtra(EXTRA_LAUNCH_HANDLER_CLIENT_MODE, mLaunchHandlerClientMode);
-
         return new TrustedWebActivityIntent(intent, sharedUris, fileHandlingUris);
     }
 
diff --git a/browser/browser/src/test/java/androidx/browser/trusted/TrustedWebActivityIntentBuilderTest.java b/browser/browser/src/test/java/androidx/browser/trusted/TrustedWebActivityIntentBuilderTest.java
index 795b324..99aec80 100644
--- a/browser/browser/src/test/java/androidx/browser/trusted/TrustedWebActivityIntentBuilderTest.java
+++ b/browser/browser/src/test/java/androidx/browser/trusted/TrustedWebActivityIntentBuilderTest.java
@@ -81,9 +81,6 @@
         FileHandlingData fileHandlingData = new FileHandlingData(
                 Arrays.asList(Uri.parse("content://test.uri")));
 
-        @LaunchHandlerClientMode.ClientMode int launchHandlerClientMode =
-                LaunchHandlerClientMode.NAVIGATE_EXISTING;
-
         CustomTabsSession session = TestUtil.makeMockSession();
 
         ImmersiveMode displayMode = new ImmersiveMode(true,
@@ -100,7 +97,6 @@
                         .setDisplayMode(displayMode)
                         .setOriginalLaunchUrl(originalLaunchUrl)
                         .setFileHandlingData(fileHandlingData)
-                        .setLaunchHandlerClientMode(launchHandlerClientMode)
                         .build(session)
                         .getIntent();
 
@@ -151,8 +147,5 @@
                 FileHandlingData.fromBundle(intent.getBundleExtra(
                         TrustedWebActivityIntentBuilder.EXTRA_FILE_HANDLING_DATA));
         assertEquals(fileHandlingData.uris.get(0), fileHandlingDataFromIntent.uris.get(0));
-
-        assertEquals(launchHandlerClientMode, intent.getIntExtra(
-                TrustedWebActivityIntentBuilder.EXTRA_LAUNCH_HANDLER_CLIENT_MODE, 0));
     }
 }
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 69f6139..a617199 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -871,7 +871,6 @@
         return when (compileSdk) {
             34 -> "8.1.1"
             35 -> "8.6.0"
-            36 -> "8.9.1"
             else -> throw Exception("Unknown compileSdk to minAgpVersion mapping")
         }
     }
diff --git a/buildSrc/repos.gradle b/buildSrc/repos.gradle
index 26f31ca..b46d7e2 100644
--- a/buildSrc/repos.gradle
+++ b/buildSrc/repos.gradle
@@ -45,9 +45,9 @@
             artifact()
         }
         content {
-            includeGroupByRegex "android.*"
-            includeGroupByRegex "com.android.support.*"
-            excludeGroupByRegex "androidx.databinding.*"
+            includeGroupByRegex("android.*")
+            includeGroupByRegex("com.android.support.*")
+            excludeGroupByRegex("androidx.databinding.*")
         }
     }
     handler.maven {
@@ -59,7 +59,7 @@
         if (metalavaRepoOverride != null) {
             // When using custom metalava repo, do not resolve metalava artifacts from this repo
             content {
-                excludeGroup "com.android.tools.metalava"
+                excludeGroup("com.android.tools.metalava")
             }
         }
     }
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraControlImplDeviceTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraControlImplDeviceTest.java
index 6ab9b1c..61b1d1b 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraControlImplDeviceTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraControlImplDeviceTest.java
@@ -438,7 +438,7 @@
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     public void setTorchStrengthLevel_valueUpdated()
             throws ExecutionException, InterruptedException {
-        assumeTrue(mCameraCharacteristicsCompat.isTorchStrengthLevelSupported());
+        assumeTrue(mHasFlashUnit);
 
         // Arrange
         ImageAnalysis imageAnalysis = new ImageAnalysis.Builder().build();
@@ -469,7 +469,7 @@
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     public void setTorchStrengthLevel_throwExceptionIfLessThanOne()
             throws ExecutionException, InterruptedException {
-        assumeTrue(mCameraCharacteristicsCompat.isTorchStrengthLevelSupported());
+        assumeTrue(mHasFlashUnit);
 
         // Arrange
         ImageAnalysis imageAnalysis = new ImageAnalysis.Builder().build();
@@ -496,7 +496,7 @@
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     public void setTorchStrengthLevel_throwExceptionIfLargerThanMax()
             throws ExecutionException, InterruptedException {
-        assumeTrue(mCameraCharacteristicsCompat.isTorchStrengthLevelSupported());
+        assumeTrue(mHasFlashUnit);
 
         // Arrange
         ImageAnalysis imageAnalysis = new ImageAnalysis.Builder().build();
@@ -610,7 +610,7 @@
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     public void capture_torchAsFlash_shouldUseDefaultTorchStrength()
             throws ExecutionException, InterruptedException, TimeoutException {
-        assumeTrue(mCameraCharacteristicsCompat.isTorchStrengthLevelSupported());
+        assumeTrue(mHasFlashUnit);
 
         // Arrange: explicitly set flash type to use torch as flash
         ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder().setFlashType(
diff --git a/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionConfigurationCompat.java b/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionConfigurationCompat.java
index ac105d2..7defce6 100644
--- a/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionConfigurationCompat.java
+++ b/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionConfigurationCompat.java
@@ -17,7 +17,6 @@
 package androidx.camera.featurecombinationquery;
 
 import android.hardware.camera2.params.OutputConfiguration;
-import android.hardware.camera2.params.SessionConfiguration;
 
 import org.jspecify.annotations.NonNull;
 
@@ -37,12 +36,6 @@
  * {@link android.hardware.camera2.CameraDevice.CameraDeviceSetup}. Use
  * {@link android.hardware.camera2.CameraDevice.CameraDeviceSetup#createCaptureRequest} and
  * {@link android.hardware.camera2.params.SessionConfiguration} for those devices instead.
- * <p>
- * In situations where {@link android.hardware.camera2.CameraDevice} object is available, it is
- * strongly recommended to use
- * {@link CameraDeviceSetupCompat#isSessionConfigurationSupported(SessionConfiguration)} instead of
- * {@link CameraDeviceSetupCompat#isSessionConfigurationSupported(SessionConfigurationCompat)} may
- * lead to inaccurate results if not constructed accurately.
  */
 public class SessionConfigurationCompat {
     private final List<OutputConfiguration> mOutputConfigs;
diff --git a/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionParametersCompat.java b/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionParametersCompat.java
index cc0eea5..04a5b40 100644
--- a/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionParametersCompat.java
+++ b/camera/camera-feature-combination-query/src/main/java/androidx/camera/featurecombinationquery/SessionParametersCompat.java
@@ -17,7 +17,6 @@
 package androidx.camera.featurecombinationquery;
 
 import android.hardware.camera2.CaptureRequest;
-import android.hardware.camera2.params.SessionConfiguration;
 
 import org.jspecify.annotations.NonNull;
 import org.jspecify.annotations.Nullable;
@@ -37,13 +36,6 @@
  * For device that support {@link android.hardware.camera2.CameraDevice.CameraDeviceSetup}, use
  * {@link android.hardware.camera2.CameraDevice.CameraDeviceSetup#createCaptureRequest} for
  * session parameters instead.
- * <p>
- * In situations where {@link android.hardware.camera2.CameraDevice} object is available, it is
- * strongly recommended to use
- * {@link CameraDeviceSetupCompat#isSessionConfigurationSupported(SessionConfiguration)} instead of
- * {@link CameraDeviceSetupCompat#isSessionConfigurationSupported(SessionConfigurationCompat)} as
- * {@link CameraDeviceSetupCompat#isSessionConfigurationSupported(SessionConfigurationCompat)} may
- * lead to inaccurate results if not constructed accurately.
  */
 public class SessionParametersCompat {
     @NonNull
diff --git a/camera/camera-lifecycle/build.gradle b/camera/camera-lifecycle/build.gradle
index 6bfff41..0be9f4c 100644
--- a/camera/camera-lifecycle/build.gradle
+++ b/camera/camera-lifecycle/build.gradle
@@ -61,12 +61,11 @@
     androidTestImplementation(project(":camera:camera-camera2"))
     androidTestImplementation(project(":camera:camera-camera2-pipe-integration"))
 
-    testImplementation(libs.kotlinCoroutinesTest)
-    testImplementation(libs.kotlinStdlib)
-    testImplementation(libs.testCore)
     testImplementation(libs.testRunner)
     testImplementation(libs.robolectric)
+    testImplementation(libs.kotlinStdlib)
     testImplementation(libs.truth)
+    testImplementation(libs.testCore)
     testImplementation("org.jetbrains.kotlinx:atomicfu:0.13.1")
     testImplementation(project(":internal-testutils-truth"))
     testImplementation(project(":camera:camera-testing")) {
diff --git a/camera/camera-lifecycle/src/main/java/androidx/camera/lifecycle/LifecycleCameraProviderImpl.kt b/camera/camera-lifecycle/src/main/java/androidx/camera/lifecycle/LifecycleCameraProviderImpl.kt
index 18b730aa..9e09db7e 100644
--- a/camera/camera-lifecycle/src/main/java/androidx/camera/lifecycle/LifecycleCameraProviderImpl.kt
+++ b/camera/camera-lifecycle/src/main/java/androidx/camera/lifecycle/LifecycleCameraProviderImpl.kt
@@ -109,7 +109,7 @@
                     }
 
                     override fun onFailure(t: Throwable) {
-                        shutdownAsync(clearConfigProvider = false)
+                        shutdownAsync()
                     }
                 },
                 CameraXExecutors.directExecutor()
@@ -140,7 +140,7 @@
             }
         }
 
-    internal fun shutdownAsync(clearConfigProvider: Boolean = true): ListenableFuture<Void> {
+    internal fun shutdownAsync(): ListenableFuture<Void> {
         Threads.runOnMainSync {
             unbindAll()
             lifecycleCameraRepository.removeLifecycleCameras(lifecycleCameraKeys)
@@ -154,9 +154,7 @@
             if (cameraX != null) cameraX!!.shutdown() else Futures.immediateFuture<Void>(null)
 
         synchronized(lock) {
-            if (clearConfigProvider) {
-                cameraXConfigProvider = null
-            }
+            cameraXConfigProvider = null
             cameraXInitializeFuture = null
             cameraXShutdownFuture = shutdownFuture
             cameraInfoMap.clear()
diff --git a/camera/camera-lifecycle/src/test/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt b/camera/camera-lifecycle/src/test/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
deleted file mode 100644
index 3bd5a89..0000000
--- a/camera/camera-lifecycle/src/test/java/androidx/camera/lifecycle/ProcessCameraProviderTest.kt
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2025 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.lifecycle
-
-import android.content.Context
-import android.content.pm.PackageManager
-import android.os.Build
-import android.os.Handler
-import android.os.Looper
-import android.os.SystemClock
-import androidx.camera.core.CameraSelector
-import androidx.camera.core.CameraXConfig
-import androidx.camera.core.InitializationException
-import androidx.camera.core.impl.CameraDeviceSurfaceManager
-import androidx.camera.core.impl.CameraFactory
-import androidx.camera.core.impl.CameraFactory.Provider
-import androidx.camera.core.impl.CameraThreadConfig
-import androidx.camera.core.impl.UseCaseConfigFactory
-import androidx.camera.testing.fakes.FakeCamera
-import androidx.camera.testing.fakes.FakeCameraInfoInternal
-import androidx.camera.testing.impl.fakes.FakeCameraCoordinator
-import androidx.camera.testing.impl.fakes.FakeCameraDeviceSurfaceManager
-import androidx.camera.testing.impl.fakes.FakeCameraFactory
-import androidx.camera.testing.impl.fakes.FakeUseCaseConfigFactory
-import androidx.concurrent.futures.await
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.core.internal.os.HandlerExecutor
-import androidx.testutils.assertThrows
-import java.util.concurrent.TimeUnit
-import kotlinx.coroutines.Deferred
-import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.async
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.test.TestScope
-import kotlinx.coroutines.test.currentTime
-import kotlinx.coroutines.test.runTest
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.robolectric.RobolectricTestRunner
-import org.robolectric.Shadows.shadowOf
-import org.robolectric.annotation.Config
-import org.robolectric.annotation.internal.DoNotInstrument
-import org.robolectric.shadows.ShadowPackageManager
-import org.robolectric.shadows.ShadowSystemClock
-
-@RunWith(RobolectricTestRunner::class)
-@DoNotInstrument
-@Config(minSdk = Build.VERSION_CODES.LOLLIPOP)
-@OptIn(ExperimentalCoroutinesApi::class)
-class ProcessCameraProviderTest {
-
-    private val context = ApplicationProvider.getApplicationContext<Context>()
-    private val handler = Handler(Looper.getMainLooper()) // Same to the looper of TestScope
-    private val handlerExecutor = HandlerExecutor(handler)
-    private lateinit var shadowPackageManager: ShadowPackageManager
-    private var repeatingJob: Deferred<Unit>? = null
-
-    @Before
-    fun setUp() {
-        // This test asserts both the type of the exception thrown, and the type of the cause of the
-        // exception thrown in many cases. The Kotlin stacktrace recovery feature is useful for
-        // debugging, but it inserts exceptions into the `cause` chain and interferes with this
-        // test.
-        System.setProperty("kotlinx.coroutines.stacktrace.recovery", false.toString())
-        shadowPackageManager = shadowOf(context.packageManager)
-        shadowPackageManager.setSystemFeature(PackageManager.FEATURE_CAMERA, true)
-        shadowPackageManager.setSystemFeature(PackageManager.FEATURE_CAMERA_FRONT, true)
-    }
-
-    @After
-    fun tearDown() {
-        repeatingJob?.cancel()
-    }
-
-    @Test
-    fun processCameraProviderFail_retainCameraConfig() = runTest {
-        // Arrange
-        val configBuilder: CameraXConfig.Builder =
-            CameraXConfig.Builder.fromConfig(
-                    createCameraXConfig(
-                        cameraFactory =
-                            createFakeCameraFactory(frontCamera = false, backCamera = false)
-                    )
-                )
-                .apply {
-                    setCameraExecutor(handlerExecutor)
-                    setSchedulerHandler(handler)
-                }
-
-        // Simulate the system time increases.
-        repeatingJob = simulateSystemTimeIncrease()
-
-        ProcessCameraProvider.configureInstance(configBuilder.build())
-
-        // Act
-        assertThrows<InitializationException> { ProcessCameraProvider.getInstance(context).await() }
-
-        // Assert
-        // When retrying ProcessCameraProvider#getInstance, it should be able to try without calling
-        // configureInstance again.
-        assertThrows<InitializationException> { ProcessCameraProvider.getInstance(context).await() }
-    }
-
-    private fun createCameraXConfig(
-        cameraFactory: CameraFactory = createFakeCameraFactory(),
-        surfaceManager: CameraDeviceSurfaceManager? = FakeCameraDeviceSurfaceManager(),
-        useCaseConfigFactory: UseCaseConfigFactory? = FakeUseCaseConfigFactory()
-    ): CameraXConfig {
-        val cameraFactoryProvider =
-            Provider { _: Context?, _: CameraThreadConfig?, _: CameraSelector?, _: Long ->
-                cameraFactory
-            }
-        return CameraXConfig.Builder()
-            .setCameraFactoryProvider(cameraFactoryProvider)
-            .apply {
-                surfaceManager?.let {
-                    setDeviceSurfaceManagerProvider { _: Context?, _: Any?, _: Set<String?>? -> it }
-                }
-                useCaseConfigFactory?.let { setUseCaseConfigFactoryProvider { _: Context? -> it } }
-            }
-            .build()
-    }
-
-    private fun createFakeCameraFactory(
-        frontCamera: Boolean = false,
-        backCamera: Boolean = false,
-    ): CameraFactory =
-        FakeCameraFactory(null).also { cameraFactory ->
-            if (backCamera) {
-                cameraFactory.insertCamera(CameraSelector.LENS_FACING_BACK, CAMERA_ID_0) {
-                    FakeCamera(
-                        CAMERA_ID_0,
-                        null,
-                        FakeCameraInfoInternal(CAMERA_ID_0, 0, CameraSelector.LENS_FACING_BACK)
-                    )
-                }
-            }
-            if (frontCamera) {
-                cameraFactory.insertCamera(CameraSelector.LENS_FACING_FRONT, CAMERA_ID_1) {
-                    FakeCamera(
-                        CAMERA_ID_1,
-                        null,
-                        FakeCameraInfoInternal(CAMERA_ID_1, 0, CameraSelector.LENS_FACING_FRONT)
-                    )
-                }
-            }
-            cameraFactory.cameraCoordinator = FakeCameraCoordinator()
-        }
-
-    private fun TestScope.simulateSystemTimeIncrease() = async {
-        val startTimeMs = SystemClock.elapsedRealtime()
-        while (SystemClock.elapsedRealtime() - startTimeMs < 20000L) {
-            shadowOf(handler.looper).idle()
-            if (SystemClock.elapsedRealtime() < currentTime) {
-                ShadowSystemClock.advanceBy(
-                    currentTime - SystemClock.elapsedRealtime(),
-                    TimeUnit.MILLISECONDS
-                )
-            }
-            delay(FAKE_INIT_PROCESS_TIME_MS)
-        }
-    }
-
-    companion object {
-        private const val CAMERA_ID_0 = "0"
-        private const val CAMERA_ID_1 = "1"
-        private const val FAKE_INIT_PROCESS_TIME_MS = 33L
-    }
-}
diff --git a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/IgnoreVideoRecordingProblematicDeviceRule.kt b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/IgnoreVideoRecordingProblematicDeviceRule.kt
index 425c371..7a5c337 100644
--- a/camera/camera-testing/src/main/java/androidx/camera/testing/impl/IgnoreVideoRecordingProblematicDeviceRule.kt
+++ b/camera/camera-testing/src/main/java/androidx/camera/testing/impl/IgnoreVideoRecordingProblematicDeviceRule.kt
@@ -36,9 +36,8 @@
         public fun skipVideoRecordingTestIfNotSupportedByEmulator() {
             // Skip test for b/168175357, b/233661493
             Assume.assumeFalse(
-                "Skip tests for Cuttlefish MediaCodec issues",
-                Build.MODEL.contains("Cuttlefish") &&
-                    (Build.VERSION.SDK_INT == 29 || Build.VERSION.SDK_INT == 33)
+                "Cuttlefish has MediaCodec dequeInput/Output buffer fails issue. Unable to test.",
+                Build.MODEL.contains("Cuttlefish") && Build.VERSION.SDK_INT == 29
             )
             // Skip test for b/268102904
             Assume.assumeFalse(
diff --git a/camera/camera-video/dependencyAnalysis-baseline.json b/camera/camera-video/dependencyAnalysis-baseline.json
index 670f23e..2f942e0 100644
--- a/camera/camera-video/dependencyAnalysis-baseline.json
+++ b/camera/camera-video/dependencyAnalysis-baseline.json
@@ -15,7 +15,7 @@
         "identifier": "androidx.arch.core:core-common",
         "resolvedVersion": "2.1.0"
       },
-      "toConfiguration": "testImplementation"
+      "toConfiguration": "api"
     },
     {
       "coordinates": {
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
index b6e8894..3f0a91b 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/RecorderTest.kt
@@ -49,12 +49,12 @@
 import androidx.camera.core.impl.utils.executor.CameraXExecutors.mainThreadExecutor
 import androidx.camera.lifecycle.ProcessCameraProvider
 import androidx.camera.lifecycle.awaitInstance
+import androidx.camera.testing.impl.AndroidUtil.isEmulator
 import androidx.camera.testing.impl.AudioUtil
 import androidx.camera.testing.impl.CameraPipeConfigTestRule
 import androidx.camera.testing.impl.CameraUtil
 import androidx.camera.testing.impl.ExtensionsUtil
 import androidx.camera.testing.impl.GarbageCollectionUtil
-import androidx.camera.testing.impl.IgnoreVideoRecordingProblematicDeviceRule
 import androidx.camera.testing.impl.LabTestRule
 import androidx.camera.testing.impl.SurfaceTextureProvider
 import androidx.camera.testing.impl.asFlow
@@ -120,7 +120,6 @@
 import org.junit.Test
 import org.junit.rules.TemporaryFolder
 import org.junit.rules.TestName
-import org.junit.rules.TestRule
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
 import org.mockito.ArgumentMatchers.argThat
@@ -169,8 +168,6 @@
             Manifest.permission.RECORD_AUDIO
         )
 
-    @get:Rule val skipRule: TestRule = IgnoreVideoRecordingProblematicDeviceRule()
-
     @get:Rule val labTest: LabTestRule = LabTestRule()
 
     companion object {
@@ -195,7 +192,30 @@
 
     @Before
     fun setUp() = runBlocking {
+        // Skip for b/264902324
+        assumeFalse(
+            "Emulator API 30 crashes running this test.",
+            Build.VERSION.SDK_INT == 30 && isEmulator()
+        )
+
+        // Skip for b/399704074
+        assumeFalse(
+            "Emulator API 26 crashes running this test.",
+            Build.VERSION.SDK_INT == 26 && isEmulator()
+        )
+
         assumeTrue(CameraUtil.hasCameraWithLensFacing(CameraSelector.LENS_FACING_BACK))
+        // Skip for b/168175357, b/233661493
+        assumeFalse(
+            "Skip tests for Cuttlefish MediaCodec issues",
+            Build.MODEL.contains("Cuttlefish") &&
+                (Build.VERSION.SDK_INT == 29 || Build.VERSION.SDK_INT == 33)
+        )
+        // Skip for b/331618729
+        assumeFalse(
+            "Emulator API 28 crashes running this test.",
+            Build.VERSION.SDK_INT == 28 && isEmulator()
+        )
         // Skip for b/241876294
         assumeFalse(
             "Skip test for devices with ExtraSupportedResolutionQuirk, since the extra" +
@@ -203,6 +223,8 @@
             DeviceQuirks.get(ExtraSupportedResolutionQuirk::class.java) != null
         )
         assumeTrue(AudioUtil.canStartAudioRecord(MediaRecorder.AudioSource.CAMCORDER))
+        // Skip for b/331618729
+        assumeNotBrokenEmulator()
 
         ProcessCameraProvider.configureInstance(cameraConfig)
         cameraProvider = ProcessCameraProvider.awaitInstance(context)
diff --git a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoTestingUtil.kt b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoTestingUtil.kt
index 5b74507..e5e9d50 100644
--- a/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoTestingUtil.kt
+++ b/camera/camera-video/src/androidTest/java/androidx/camera/video/VideoTestingUtil.kt
@@ -74,6 +74,13 @@
     )
 }
 
+fun assumeNotBrokenEmulator() {
+    assumeFalse(
+        "Skip tests for Emulator API 30 crashing issue",
+        Build.MODEL.contains("gphone") && Build.VERSION.SDK_INT == 30
+    )
+}
+
 fun getRotationNeeded(videoCapture: VideoCapture<Recorder>, cameraInfo: CameraInfo) =
     cameraInfo.getSensorRotationDegrees(videoCapture.targetRotation)
 
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/CameraControlDeviceTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/CameraControlDeviceTest.kt
index cb0508e..812d501 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/CameraControlDeviceTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/CameraControlDeviceTest.kt
@@ -158,7 +158,7 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     fun setTorchStrengthLevel_torchEnabled_futureCompletes() {
-        assumeTrue(cameraProvider.getCameraInfo(cameraSelector).isTorchStrengthSupported)
+        assumeTrue(CameraUtil.hasFlashUnitWithLensFacing(cameraSelector.lensFacing!!))
 
         bindUseCases()
 
@@ -171,7 +171,7 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     fun setTorchStrengthLevel_torchDisabled_futureCompletes() {
-        assumeTrue(cameraProvider.getCameraInfo(cameraSelector).isTorchStrengthSupported)
+        assumeTrue(CameraUtil.hasFlashUnitWithLensFacing(cameraSelector.lensFacing!!))
 
         bindUseCases()
 
@@ -183,7 +183,7 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     fun setTorchStrengthLevel_throwExceptionIfLessThanOne() {
-        assumeTrue(cameraProvider.getCameraInfo(cameraSelector).isTorchStrengthSupported)
+        assumeTrue(CameraUtil.hasFlashUnitWithLensFacing(cameraSelector.lensFacing!!))
 
         bindUseCases()
 
@@ -202,7 +202,7 @@
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
     fun setTorchStrengthLevel_throwExceptionIfLargerThanMax() {
-        assumeTrue(cameraProvider.getCameraInfo(cameraSelector).isTorchStrengthSupported)
+        assumeTrue(CameraUtil.hasFlashUnitWithLensFacing(cameraSelector.lensFacing!!))
 
         bindUseCases()
 
@@ -223,6 +223,8 @@
     @Test
     @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM - 1)
     fun setTorchStrengthLevel_throwExceptionWhenApiNotMet() {
+        assumeTrue(CameraUtil.hasFlashUnitWithLensFacing(cameraSelector.lensFacing!!))
+
         bindUseCases()
 
         try {
diff --git a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/PreviewTest.kt b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/PreviewTest.kt
index d4091f4..02c8e56 100644
--- a/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/PreviewTest.kt
+++ b/camera/integration-tests/coretestapp/src/androidTest/java/androidx/camera/integration/core/camera2/PreviewTest.kt
@@ -1537,8 +1537,6 @@
     @Test
     @SdkSuppress(minSdkVersion = 21, maxSdkVersion = 32)
     fun setMirrorModeIsNoOp_priorToAPI33() = runBlocking {
-        // Skip for b/404348154
-        assumeFalse("Skip test for API 26.", Build.VERSION.SDK_INT == 26)
         verifyMirrorMode(
             CameraSelector.DEFAULT_BACK_CAMERA,
             mirrorMode = MirrorMode.MIRROR_MODE_ON,
diff --git a/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt b/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt
index c241909..6175a8c 100644
--- a/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt
+++ b/camera/integration-tests/viewtestapp/src/androidTest/java/androidx/camera/integration/view/EffectsFragmentDeviceTest.kt
@@ -17,7 +17,6 @@
 package androidx.camera.integration.view
 
 import android.net.Uri
-import android.os.Build
 import androidx.camera.camera2.Camera2Config
 import androidx.camera.camera2.pipe.integration.CameraPipeConfig
 import androidx.camera.core.CameraXConfig
@@ -39,7 +38,6 @@
 import java.util.concurrent.Semaphore
 import java.util.concurrent.TimeUnit
 import org.junit.After
-import org.junit.Assume.assumeFalse
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
@@ -108,8 +106,6 @@
 
     @Test
     fun toggleCameraLatencyTest() {
-        // Skip for b/404348512
-        assumeFalse("Skip test for API 26.", Build.VERSION.SDK_INT == 26)
         // Arrange: use COMPATIBLE mode to get an accurate measurement.
         instrumentation.runOnMainSync {
             fragment.previewView.implementationMode = PreviewView.ImplementationMode.COMPATIBLE
diff --git a/car/app/app/api/current.txt b/car/app/app/api/current.txt
index c025b1c..f2419f1 100644
--- a/car/app/app/api/current.txt
+++ b/car/app/app/api/current.txt
@@ -1180,21 +1180,17 @@
   }
 
   @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public class Badge {
-    method @Deprecated public androidx.car.app.model.CarColor? getBackgroundColor();
-    method public androidx.car.app.model.CarColor? getDotColor();
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
     method public androidx.car.app.model.CarIcon? getIcon();
-    method public androidx.car.app.model.CarColor? getIconBackgroundColor();
     method public boolean hasDot();
   }
 
   public static final class Badge.Builder {
     ctor public Badge.Builder();
     method public androidx.car.app.model.Badge build();
-    method @Deprecated public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
-    method public androidx.car.app.model.Badge.Builder setDotColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
     method public androidx.car.app.model.Badge.Builder setHasDot(boolean);
     method public androidx.car.app.model.Badge.Builder setIcon(androidx.car.app.model.CarIcon);
-    method public androidx.car.app.model.Badge.Builder setIconBackgroundColor(androidx.car.app.model.CarColor);
   }
 
   @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarColor {
@@ -1755,7 +1751,6 @@
     ctor protected Section(androidx.car.app.model.Section.BaseBuilder<T!,? extends java.lang.Object!>);
     method public androidx.car.app.serialization.ListDelegate<T!> getItemsDelegate();
     method public androidx.car.app.model.CarText? getNoItemsMessage();
-    method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
     method public androidx.car.app.model.CarText? getTitle();
   }
 
@@ -1766,7 +1761,6 @@
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setItems(java.util.List<T!>);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setNoItemsMessage(androidx.car.app.model.CarText?);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setNoItemsMessage(CharSequence?);
-    method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setOnItemVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener?);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setTitle(androidx.car.app.model.CarText?);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setTitle(CharSequence?);
   }
diff --git a/car/app/app/api/restricted_current.txt b/car/app/app/api/restricted_current.txt
index c025b1c..f2419f1 100644
--- a/car/app/app/api/restricted_current.txt
+++ b/car/app/app/api/restricted_current.txt
@@ -1180,21 +1180,17 @@
   }
 
   @SuppressCompatibility @androidx.car.app.annotations.CarProtocol @androidx.car.app.annotations.ExperimentalCarApi public class Badge {
-    method @Deprecated public androidx.car.app.model.CarColor? getBackgroundColor();
-    method public androidx.car.app.model.CarColor? getDotColor();
+    method public androidx.car.app.model.CarColor? getBackgroundColor();
     method public androidx.car.app.model.CarIcon? getIcon();
-    method public androidx.car.app.model.CarColor? getIconBackgroundColor();
     method public boolean hasDot();
   }
 
   public static final class Badge.Builder {
     ctor public Badge.Builder();
     method public androidx.car.app.model.Badge build();
-    method @Deprecated public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
-    method public androidx.car.app.model.Badge.Builder setDotColor(androidx.car.app.model.CarColor);
+    method public androidx.car.app.model.Badge.Builder setBackgroundColor(androidx.car.app.model.CarColor);
     method public androidx.car.app.model.Badge.Builder setHasDot(boolean);
     method public androidx.car.app.model.Badge.Builder setIcon(androidx.car.app.model.CarIcon);
-    method public androidx.car.app.model.Badge.Builder setIconBackgroundColor(androidx.car.app.model.CarColor);
   }
 
   @SuppressCompatibility @androidx.car.app.annotations.CarProtocol public final class CarColor {
@@ -1755,7 +1751,6 @@
     ctor protected Section(androidx.car.app.model.Section.BaseBuilder<T!,? extends java.lang.Object!>);
     method public androidx.car.app.serialization.ListDelegate<T!> getItemsDelegate();
     method public androidx.car.app.model.CarText? getNoItemsMessage();
-    method public androidx.car.app.model.OnItemVisibilityChangedDelegate? getOnItemVisibilityChangedDelegate();
     method public androidx.car.app.model.CarText? getTitle();
   }
 
@@ -1766,7 +1761,6 @@
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setItems(java.util.List<T!>);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setNoItemsMessage(androidx.car.app.model.CarText?);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setNoItemsMessage(CharSequence?);
-    method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setOnItemVisibilityChangedListener(androidx.car.app.model.ItemList.OnItemVisibilityChangedListener?);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setTitle(androidx.car.app.model.CarText?);
     method @com.google.errorprone.annotations.CanIgnoreReturnValue public B setTitle(CharSequence?);
   }
diff --git a/car/app/app/src/main/java/androidx/car/app/model/Badge.java b/car/app/app/src/main/java/androidx/car/app/model/Badge.java
index 71fff36..06f5c16 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/Badge.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/Badge.java
@@ -29,19 +29,17 @@
  * Represents a badge that can be displayed as an overlay on top of an image.
  *
  * <p>A badge denotes some sort of call to action, notification, alert, etc. An example is
- * badging of application icons in a launcher to add a number which denotes how many active
- * notifications that application has.
- *
- * <p>Badges may have a dot which is a colored circle appearing in a different location to the icon.
+ * badging of application icons in a launcher to add a number at the top right corner which
+ * denotes how many active notifications that application has.
  */
 @CarProtocol
 @ExperimentalCarApi
 @KeepFields
 public class Badge {
+
     private final boolean mHasDot;
-    private final @Nullable CarColor mDotColor;
+    private final @Nullable CarColor mBackgroundColor;
     private final @Nullable CarIcon mIcon;
-    private final @Nullable CarColor mIconBackgroundColor;
 
     /**
      * Returns whether the badge has a dot.
@@ -53,20 +51,10 @@
     }
 
     /**
-     * Returns the dot color.
-     */
-    public @Nullable CarColor getDotColor() {
-        return mDotColor;
-    }
-
-    /**
      * Returns the dot background color.
-     *
-     * @deprecated use {@link #getDotColor()} instead.
      */
-    @Deprecated
     public @Nullable CarColor getBackgroundColor() {
-        return mDotColor;
+        return mBackgroundColor;
     }
 
     /**
@@ -78,24 +66,16 @@
         return mIcon;
     }
 
-    /**
-     * Returns the icon background color.
-     */
-    public @Nullable CarColor getIconBackgroundColor() {
-        return mIconBackgroundColor;
-    }
-
     @Override
     public @NonNull String toString() {
         return "[hasDot: " + mHasDot
-                + ", dotColor: " + mDotColor
-                + ", icon: " + mIcon
-                + ", iconBackgroundColor: " + mIconBackgroundColor + "]";
+                + ", backgroundColor: " + mBackgroundColor
+                + ", icon: " + mIcon + "]";
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(mHasDot, mDotColor, mIcon, mIconBackgroundColor);
+        return Objects.hash(mHasDot, mBackgroundColor, mIcon);
     }
 
     @Override
@@ -109,35 +89,28 @@
         Badge otherBadge = (Badge) other;
 
         return mHasDot == otherBadge.mHasDot
-                && Objects.equals(mDotColor, otherBadge.mDotColor)
-                && Objects.equals(mIcon, otherBadge.mIcon)
-                && Objects.equals(mIconBackgroundColor, otherBadge.mIconBackgroundColor);
+                && Objects.equals(mBackgroundColor, otherBadge.mBackgroundColor)
+                && Objects.equals(mIcon, otherBadge.mIcon);
     }
 
     Badge(Builder builder) {
         mHasDot = builder.mHasDot;
-        mDotColor = builder.mDotColor;
+        mBackgroundColor = builder.mBackgroundColor;
         mIcon = builder.mIcon;
-        mIconBackgroundColor = builder.mIconBackgroundColor;
     }
 
     /** Constructs an empty instance, used by serialization code. */
     private Badge() {
         mHasDot = false;
-        mDotColor = null;
+        mBackgroundColor = null;
         mIcon = null;
-        mIconBackgroundColor = null;
     }
 
     /** A builder of {@link Badge}. */
     public static final class Builder {
         boolean mHasDot;
-        @Nullable
-        CarColor mDotColor;
-        @Nullable
-        CarIcon mIcon;
-        @Nullable
-        CarColor mIconBackgroundColor;
+        @Nullable CarColor mBackgroundColor;
+        @Nullable CarIcon mIcon;
 
         /**
          * Enables a circular dot that denotes some sort of alert, notification, etc.
@@ -148,21 +121,10 @@
         }
 
         /**
-         * Sets the color of the dot to the given {@code color}.
-         */
-        public @NonNull Builder setDotColor(@NonNull CarColor color) {
-            mDotColor = color;
-            return this;
-        }
-
-        /**
          * Sets the color of the dot to the given {@code backgroundColor}.
-         *
-         * @deprecated use {@link #setDotColor(CarColor)} instead.
          */
-        @Deprecated
         public @NonNull Builder setBackgroundColor(@NonNull CarColor backgroundColor) {
-            mDotColor = backgroundColor;
+            mBackgroundColor = backgroundColor;
             return this;
         }
 
@@ -179,31 +141,16 @@
         }
 
         /**
-         * Sets the color of the icon background to the given {@code color}.
-         */
-        public @NonNull Builder setIconBackgroundColor(@NonNull CarColor color) {
-            mIconBackgroundColor = color;
-            return this;
-        }
-
-        /**
          * Constructs the {@link Badge} defined by this builder.
          *
          * @throws IllegalStateException if the badge doesn't have a dot or an icon.
-         * @throws IllegalStateException if the a dot color is set but the badge has no dot.
-         * @throws IllegalStateException if the a icon background color is set but the badge has
-         * no icon.
          */
         public @NonNull Badge build() {
             if (!mHasDot && mIcon == null) {
                 throw new IllegalStateException("A badge must have a dot or an icon set");
             }
-            if (!mHasDot && mDotColor != null) {
-                throw new IllegalStateException("The dot must be enabled to set the dot "
-                        + "color.");
-            }
-            if (mIcon == null && mIconBackgroundColor != null) {
-                throw new IllegalStateException("The icon must be set to set the icon background "
+            if (!mHasDot && mBackgroundColor != null) {
+                throw new IllegalStateException("The dot must be enabled to set the background "
                         + "color.");
             }
             return new Badge(this);
diff --git a/car/app/app/src/main/java/androidx/car/app/model/ItemList.java b/car/app/app/src/main/java/androidx/car/app/model/ItemList.java
index ac54af1..b109465 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/ItemList.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/ItemList.java
@@ -70,7 +70,7 @@
          *
          * <p>The start index is inclusive, and the end index is exclusive. For example, if only the
          * first item in a list is visible, the start and end indices would be 0 and 1,
-         * respectively.
+         * respectively. If no items are visible, the indices will be set to -1.
          *
          * @param startIndex the index of the first item that is visible
          * @param endIndex   the index of the first item that is not visible after the visible
diff --git a/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegate.java b/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegate.java
index 7325995..f8ee0ba 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegate.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegate.java
@@ -34,10 +34,12 @@
      *
      * <p>The start index is inclusive, and the end index is exclusive. For example, if only the
      * first item in a list is visible, the start and end indices would be 0 and 1,
-     * respectively.
+     * respectively. If no items are visible, the indices will be set to -1.
      *
-     * @param startIndex the index (inclusive) of the first visible element
-     * @param endIndex   the index (exclusive) of the last visible element
+     * @param startIndex the index (inclusive) of the first visible element, or -1 if no items
+     *                   are visible
+     * @param endIndex   the index (exclusive) of the last visible element, or -1 if no items
+     *                   are visible
      * @param callback   the {@link OnDoneCallback} to trigger when the client finishes handling
      *                   the event
      */
diff --git a/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegateImpl.java b/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegateImpl.java
index 6e3a5a1..a5b0879 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegateImpl.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/OnItemVisibilityChangedDelegateImpl.java
@@ -35,8 +35,8 @@
 import org.jspecify.annotations.Nullable;
 
 /**
- * Implementation class for {@link OnItemVisibilityChangedDelegate} that uses the {@link
- * IOnItemVisibilityChangedListener} binder interface.
+ * Implementation class for {@link OnItemVisibilityChangedDelegate}.
+ *
  */
 @RestrictTo(LIBRARY)
 @CarProtocol
diff --git a/car/app/app/src/main/java/androidx/car/app/model/Section.java b/car/app/app/src/main/java/androidx/car/app/model/Section.java
index 9fa9035..9a119f2 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/Section.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/Section.java
@@ -16,13 +16,9 @@
 
 package androidx.car.app.model;
 
-import static androidx.annotation.RestrictTo.Scope.LIBRARY;
-
-import androidx.annotation.RestrictTo;
 import androidx.car.app.annotations.CarProtocol;
 import androidx.car.app.annotations.ExperimentalCarApi;
 import androidx.car.app.annotations.KeepFields;
-import androidx.car.app.model.ItemList.OnItemVisibilityChangedListener;
 import androidx.car.app.model.constraints.CarTextConstraints;
 import androidx.car.app.serialization.ListDelegate;
 import androidx.car.app.serialization.ListDelegateImpl;
@@ -50,14 +46,12 @@
     private final @NonNull ListDelegate<T> mItemsDelegate;
     private final @Nullable CarText mTitle;
     private final @Nullable CarText mNoItemsMessage;
-    private final @Nullable OnItemVisibilityChangedDelegate mOnItemVisibilityChangedDelegate;
 
     // Empty constructor for serialization
     protected Section() {
         mItemsDelegate = new ListDelegateImpl<>(Collections.emptyList());
         mTitle = null;
         mNoItemsMessage = null;
-        mOnItemVisibilityChangedDelegate = null;
     }
 
     /** Constructor that fills out fields from any section builder. */
@@ -65,7 +59,6 @@
         mItemsDelegate = new ListDelegateImpl<>(Collections.unmodifiableList(builder.mItems));
         mTitle = builder.mHeader;
         mNoItemsMessage = builder.mNoItemsMessage;
-        mOnItemVisibilityChangedDelegate = builder.mOnItemVisibilityChangedDelegate;
     }
 
     /** Returns the items added to this section. */
@@ -85,14 +78,6 @@
         return mNoItemsMessage;
     }
 
-    /**
-     * Returns the {@link OnItemVisibilityChangedDelegate} to be called when the visible items in
-     * this {@link Section} changes, or {@code null} if one isn't set.
-     */
-    public @Nullable OnItemVisibilityChangedDelegate getOnItemVisibilityChangedDelegate() {
-        return mOnItemVisibilityChangedDelegate;
-    }
-
     @Override
     public boolean equals(@Nullable Object other) {
         if (other == null) {
@@ -103,26 +88,19 @@
         }
         Section<?> section = (Section<?>) other;
 
-        return Objects.equals(mItemsDelegate, section.mItemsDelegate)
-                && Objects.equals(mTitle, section.mTitle)
-                && Objects.equals(mNoItemsMessage, section.mNoItemsMessage)
-                && Objects.equals(mOnItemVisibilityChangedDelegate == null,
-                section.mOnItemVisibilityChangedDelegate == null);
+        return Objects.equals(mItemsDelegate, section.mItemsDelegate) && Objects.equals(mTitle,
+                section.mTitle)
+                && Objects.equals(mNoItemsMessage, section.mNoItemsMessage);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(
-                mItemsDelegate, mTitle, mNoItemsMessage, mOnItemVisibilityChangedDelegate == null);
+        return Objects.hash(mItemsDelegate, mTitle, mNoItemsMessage);
     }
 
     @Override
     public @NonNull String toString() {
-        return "Section { title: " + mTitle
-                + ", noItemsMessage: " + mNoItemsMessage
-                + ", itemsDelegate: " + mItemsDelegate
-                + ", onItemVisibilityChangedDelegate: "
-                + (mOnItemVisibilityChangedDelegate != null);
+        return "Section";
     }
 
     /**
@@ -136,50 +114,10 @@
         @NonNull List<T> mItems = new ArrayList<>();
         @Nullable CarText mHeader;
         @Nullable CarText mNoItemsMessage;
-        @Nullable OnItemVisibilityChangedDelegate mOnItemVisibilityChangedDelegate;
 
         protected BaseBuilder() {
         }
 
-        /**
-         * Sets the {@link OnItemVisibilityChangedListener} to call when the visible items in this
-         * {@link Section} changes.
-         *
-         * <p>Note that the listener relates to UI events and will be executed on the main thread
-         * using {@code Looper#getMainLooper()}.
-         *
-         * <p>It's possible for more than 1 {@link Section} to be visible on the screen at the same
-         * time, in which case, every visible Section's {@link OnItemVisibilityChangedListener}
-         * will be triggered with their respective visible items.
-         *
-         * <p>Passing {@code null} will clear the {@link OnItemVisibilityChangedListener}.
-         */
-        @CanIgnoreReturnValue
-        @SuppressWarnings({"SetterReturnsThis", "unchecked", "ExecutorRegistration"})
-        public @NonNull B setOnItemVisibilityChangedListener(
-                @Nullable OnItemVisibilityChangedListener onItemVisibilityChangedListener) {
-            if (onItemVisibilityChangedListener == null) {
-                mOnItemVisibilityChangedDelegate = null;
-            } else {
-                mOnItemVisibilityChangedDelegate =
-                        OnItemVisibilityChangedDelegateImpl.create(onItemVisibilityChangedListener);
-            }
-            return (B) this;
-        }
-
-        /**
-         * Use {@link #setOnItemVisibilityChangedListener(OnItemVisibilityChangedListener)} instead.
-         */
-        @CanIgnoreReturnValue
-        @SuppressWarnings({"SetterReturnsThis", "unchecked"})
-        @RestrictTo(LIBRARY)
-        public @NonNull B setOnItemVisibilityChangedDelegate(
-                @Nullable OnItemVisibilityChangedDelegate onItemVisibilityChangedDelegate) {
-            mOnItemVisibilityChangedDelegate = onItemVisibilityChangedDelegate;
-            return (B) this;
-        }
-
-
         /** Sets the items for this section, overwriting any other previously set items. */
         @CanIgnoreReturnValue
         @SuppressWarnings({"SetterReturnsThis", "unchecked"})
diff --git a/car/app/app/src/main/java/androidx/car/app/serialization/ListDelegateImpl.kt b/car/app/app/src/main/java/androidx/car/app/serialization/ListDelegateImpl.kt
index 9755d79..628be63 100644
--- a/car/app/app/src/main/java/androidx/car/app/serialization/ListDelegateImpl.kt
+++ b/car/app/app/src/main/java/androidx/car/app/serialization/ListDelegateImpl.kt
@@ -75,10 +75,6 @@
 
     override fun hashCode(): Int = listHashCode
 
-    override fun toString(): String {
-        return "ListDelegate { Size: $size, listHashCode: $listHashCode }"
-    }
-
     private class RemoteListStub<T>(private val mContent: List<T>) : IRemoteList.Stub() {
         @Throws(RemoteException::class)
         override fun requestItemRange(startIndex: Int, endIndex: Int, callback: IOnDoneCallback) {
diff --git a/car/app/app/src/test/java/androidx/car/app/model/BadgeTest.java b/car/app/app/src/test/java/androidx/car/app/model/BadgeTest.java
index cef984f..96b1797 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/BadgeTest.java
+++ b/car/app/app/src/test/java/androidx/car/app/model/BadgeTest.java
@@ -35,22 +35,17 @@
     }
 
     @Test
-    public void build_withIconAndIconBackgroundColor() {
-        Badge b = new Badge.Builder()
-                .setIcon(CarIcon.ALERT)
-                .setIconBackgroundColor(CarColor.GREEN)
-                .build();
+    public void build_withIcon() {
+        Badge b = new Badge.Builder().setIcon(CarIcon.ALERT).build();
 
         assertThat(b.getIcon()).isEqualTo(CarIcon.ALERT);
-        assertThat(b.getIconBackgroundColor()).isEqualTo(CarColor.GREEN);
     }
 
-    @Test
-    public void build_withDotAndDotColor() {
-        Badge b = new Badge.Builder().setHasDot(true).setDotColor(CarColor.PRIMARY).build();
+    public void build_withDotAndBackgroundColor() {
+        Badge b = new Badge.Builder().setHasDot(true).setBackgroundColor(CarColor.PRIMARY).build();
 
         assertThat(b.hasDot()).isEqualTo(true);
-        assertThat(b.getDotColor()).isEqualTo(CarColor.PRIMARY);
+        assertThat(b.getBackgroundColor()).isEqualTo(CarColor.PRIMARY);
     }
 
     @Test
@@ -65,30 +60,22 @@
     }
 
     @Test
-    public void build_setDotColorWithoutDot_ThrowsException() {
+    public void build_setBackgroundColorWithoutDot_ThrowsException() {
         assertThrows(IllegalStateException.class,
                 () -> new Badge.Builder()
                         .setIcon(CarIcon.ALERT)
-                        .setDotColor(CarColor.PRIMARY).build());
-    }
-
-    @Test
-    public void build_setIconBackgroundColorWithoutIcon_ThrowsException() {
-        assertThrows(IllegalStateException.class,
-                () -> new Badge.Builder()
-                        .setHasDot(true)
-                        .setIconBackgroundColor(CarColor.PRIMARY).build());
+                        .setBackgroundColor(CarColor.PRIMARY).build());
     }
 
     @Test
     public void equals() {
         Badge b1 = new Badge.Builder()
                 .setHasDot(true)
-                .setDotColor(CarColor.PRIMARY)
+                .setBackgroundColor(CarColor.PRIMARY)
                 .setIcon(CarIcon.ALERT).build();
         Badge b2 = new Badge.Builder()
                 .setHasDot(true)
-                .setDotColor(CarColor.PRIMARY)
+                .setBackgroundColor(CarColor.PRIMARY)
                 .setIcon(CarIcon.ALERT).build();
 
         assertThat(b1.equals(b2)).isTrue();
@@ -103,9 +90,9 @@
     }
 
     @Test
-    public void notEquals_differentDotColor() {
-        Badge b1 = new Badge.Builder().setHasDot(true).setDotColor(CarColor.BLUE).build();
-        Badge b2 = new Badge.Builder().setHasDot(true).setDotColor(CarColor.RED).build();
+    public void notEquals_differentBackgroundColor() {
+        Badge b1 = new Badge.Builder().setHasDot(true).setBackgroundColor(CarColor.BLUE).build();
+        Badge b2 = new Badge.Builder().setHasDot(true).setBackgroundColor(CarColor.RED).build();
 
         assertThat(b1.equals(b2)).isFalse();
     }
@@ -122,7 +109,6 @@
     public void string() {
         Badge b = new Badge.Builder().setHasDot(true).build();
 
-        assertThat(b.toString()).isEqualTo(
-                "[hasDot: true, dotColor: null, icon: null, iconBackgroundColor: null]");
+        assertThat(b.toString()).isEqualTo("[hasDot: true, backgroundColor: null, icon: null]");
     }
 }
diff --git a/car/app/app/src/test/java/androidx/car/app/model/SectionTest.kt b/car/app/app/src/test/java/androidx/car/app/model/SectionTest.kt
index de5ed10..1a96fb0 100644
--- a/car/app/app/src/test/java/androidx/car/app/model/SectionTest.kt
+++ b/car/app/app/src/test/java/androidx/car/app/model/SectionTest.kt
@@ -68,13 +68,6 @@
     }
 
     @Test
-    fun getOnItemVisibilityChangedDelegate() {
-        val section = TestSection.Builder().setOnItemVisibilityChangedListener { _, _ -> }.build()
-
-        assertThat(section.onItemVisibilityChangedDelegate).isNotNull()
-    }
-
-    @Test
     fun setTitleCarText_throwsException_whenMoreThanJustText() {
         try {
             // #setTitle(CarText)
@@ -133,7 +126,6 @@
                 .addItem(TestItem(2))
                 .setNoItemsMessage("Some message")
                 .setTitle("some title")
-                .setOnItemVisibilityChangedListener { _, _ -> }
                 .build()
 
         @Suppress("ReplaceCallWithBinaryOperator") assertThat(section.equals(section)).isTrue()
@@ -147,7 +139,6 @@
                 .addItem(TestItem(2))
                 .setNoItemsMessage("Some message")
                 .setTitle("some title")
-                .setOnItemVisibilityChangedListener { _, _ -> }
                 .build()
         val section2 =
             TestSection.Builder()
@@ -155,7 +146,6 @@
                 .addItem(TestItem(2))
                 .setNoItemsMessage("Some message")
                 .setTitle("some title")
-                .setOnItemVisibilityChangedListener { _, _ -> }
                 .build()
 
         // Is symmetric
@@ -171,8 +161,7 @@
                 TestSection.Builder().addItem(TestItem(1)).build(),
                 TestSection.Builder().addItem(TestItem(2)).build(),
                 TestSection.Builder().setTitle("title").build(),
-                TestSection.Builder().setNoItemsMessage("no items").build(),
-                TestSection.Builder().setOnItemVisibilityChangedListener { _, _ -> }.build(),
+                TestSection.Builder().setNoItemsMessage("no items").build()
             )
 
         // Test all different sections against each other
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index 657468f..e5b55ce 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -1173,7 +1173,7 @@
 
   public final class LazyLayoutCacheWindowKt {
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow LazyLayoutCacheWindow(optional float ahead, optional float behind);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow LazyLayoutCacheWindow(optional @FloatRange(from=0.0) float aheadFraction, optional @FloatRange(from=0.0) float behindFraction);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow LazyLayoutCacheWindow(optional float aheadFraction, optional float behindFraction);
   }
 
   public abstract class LazyLayoutIntervalContent<Interval extends androidx.compose.foundation.lazy.layout.LazyLayoutIntervalContent.Interval> {
@@ -1244,10 +1244,8 @@
   }
 
   public static interface LazyLayoutPrefetchState.LazyLayoutPrefetchResultScope {
-    method public int getIndex();
     method public int getPlaceablesCount();
-    method public long getSize(int placeableIndex);
-    property public abstract int index;
+    method public long getSize(int index);
     property public abstract int placeablesCount;
   }
 
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 0858d2f..d69a9eb 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -1175,7 +1175,7 @@
 
   public final class LazyLayoutCacheWindowKt {
     method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow LazyLayoutCacheWindow(optional float ahead, optional float behind);
-    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow LazyLayoutCacheWindow(optional @FloatRange(from=0.0) float aheadFraction, optional @FloatRange(from=0.0) float behindFraction);
+    method @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public static androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow LazyLayoutCacheWindow(optional float aheadFraction, optional float behindFraction);
   }
 
   public abstract class LazyLayoutIntervalContent<Interval extends androidx.compose.foundation.lazy.layout.LazyLayoutIntervalContent.Interval> {
@@ -1246,10 +1246,8 @@
   }
 
   public static interface LazyLayoutPrefetchState.LazyLayoutPrefetchResultScope {
-    method public int getIndex();
     method public int getPlaceablesCount();
-    method public long getSize(int placeableIndex);
-    property public abstract int index;
+    method public long getSize(int index);
     property public abstract int placeablesCount;
   }
 
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle b/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
index 732a93e..f278819 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/build.gradle
@@ -26,7 +26,7 @@
     implementation("androidx.core:core:1.12.0")
     implementation(libs.kotlinStdlib)
 
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":compose:animation:animation"))
     implementation(project(":compose:foundation:foundation"))
     implementation(project(":compose:foundation:foundation:foundation-samples"))
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestureTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestureTest.kt
index 0b9eb60..1a0200b 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestureTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestureTest.kt
@@ -16,25 +16,34 @@
 
 package androidx.compose.foundation.contextmenu
 
+import androidx.compose.foundation.background
 import androidx.compose.foundation.contextmenu.ContextMenuState.Status
 import androidx.compose.foundation.gestures.awaitEachGesture
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.text.selection.assertThatOffset
+import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.input.pointer.PointerEventType
+import androidx.compose.ui.input.pointer.PointerInputScope
 import androidx.compose.ui.input.pointer.changedToDown
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.MouseButton
+import androidx.compose.ui.test.click
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performMouseInput
 import androidx.compose.ui.test.rightClick
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.util.fastAll
+import androidx.compose.ui.util.fastForEach
+import androidx.compose.ui.util.fastMap
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth.assertThat
@@ -49,6 +58,7 @@
 
     private val tag = "testTag"
 
+    // region Modifier.contextMenuGestures Tests
     @Test
     fun whenContextMenuGestures_thenRightClick_isOpenAtOffset() {
         val state = ContextMenuState()
@@ -109,4 +119,115 @@
         assertThatContextMenuState(state).statusIsOpen()
         assertThat(pressCount).isEqualTo(2)
     }
+
+    // endregion Modifier.contextMenuGestures Tests
+
+    // region PointerInputScope.onRightClickDown Tests
+    @Composable
+    private fun TestRightClickBox(
+        onClick: (Offset) -> Unit,
+    ) {
+        Box(
+            modifier =
+                Modifier.background(Color.LightGray).size(100.dp).testTag(tag).pointerInput(Unit) {
+                    onRightClickDown(onClick)
+                }
+        )
+    }
+
+    @Test
+    fun whenOnRightClickDown_rightClick_doesTriggerWithCorrectOffset() {
+        var clickCount = 0
+        val expectedOffset = Offset(10f, 10f)
+        rule.setContent {
+            TestRightClickBox {
+                assertThatOffset(it).equalsWithTolerance(expectedOffset)
+                clickCount++
+            }
+        }
+        rule.onNodeWithTag(tag).performMouseInput { rightClick(expectedOffset) }
+        assertThat(clickCount).isEqualTo(1)
+    }
+
+    @Test
+    fun whenOnRightClickDown_leftClick_doesNotTrigger() {
+        var clickCount = 0
+        rule.setContent { TestRightClickBox { clickCount++ } }
+        rule.onNodeWithTag(tag).performMouseInput { click() }
+        assertThat(clickCount).isEqualTo(0)
+    }
+
+    @Test
+    fun whenOnRightClickDown_triggersOnPressAndNotOnRelease() {
+        var clickCount = 0
+        rule.setContent { TestRightClickBox { clickCount++ } }
+        val interaction = rule.onNodeWithTag(tag)
+
+        interaction.performMouseInput {
+            updatePointerTo(center)
+            press(MouseButton.Secondary)
+        }
+        assertThat(clickCount).isEqualTo(1)
+
+        interaction.performMouseInput { release(MouseButton.Secondary) }
+        assertThat(clickCount).isEqualTo(1)
+    }
+
+    @Test
+    fun whenOnRightClickDown_alreadyConsumed_doesNotTrigger() {
+        var clickCount = 0
+        rule.setContent {
+            Box(modifier = Modifier.pointerInput(Unit) { onRightClickDown { clickCount++ } }) {
+                Box(
+                    modifier =
+                        Modifier.background(Color.LightGray).size(100.dp).testTag(tag).pointerInput(
+                            Unit
+                        ) {
+                            awaitPointerEventScope {
+                                while (true) {
+                                    awaitPointerEvent().changes.fastForEach { it.consume() }
+                                }
+                            }
+                        }
+                )
+            }
+        }
+
+        rule.onNodeWithTag(tag).performMouseInput { rightClick() }
+        assertThat(clickCount).isEqualTo(0)
+    }
+
+    @Test
+    fun whenOnRightClickDown_consumesRightClickPressAndRelease() {
+        suspend fun PointerInputScope.assertCorrectlyConsumed() {
+            awaitPointerEventScope {
+                while (true) {
+                    val event = awaitPointerEvent()
+                    assertThat(event.changes.fastMap { it.isConsumed }.toSet()).run {
+                        when (event.type) {
+                            PointerEventType.Press,
+                            PointerEventType.Release -> containsExactly(true)
+                            else -> containsExactly(false)
+                        }
+                    }
+                }
+            }
+        }
+
+        rule.setContent {
+            Box(modifier = Modifier.pointerInput(Unit) { assertCorrectlyConsumed() }) {
+                Box(
+                    modifier =
+                        Modifier.background(Color.LightGray).size(100.dp).testTag(tag).pointerInput(
+                            Unit
+                        ) {
+                            onRightClickDown { /* Nothing */ }
+                        }
+                )
+            }
+        }
+
+        rule.onNodeWithTag(tag).performMouseInput { rightClick() }
+    }
+    // endregion PointerInputScope.onRightClickDown Tests
 }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/MinLinesMemoryLeakTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/MinLinesMemoryLeakTest.kt
index 9c35133..c516566 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/MinLinesMemoryLeakTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/MinLinesMemoryLeakTest.kt
@@ -41,18 +41,11 @@
         // issues for other tests that use leak canary
         private lateinit var savedLeakCanaryConfig: LeakCanary.Config
 
-        private val IgnoreFrameTrackerLeaks =
-            listOf(
-                AndroidReferenceMatchers.instanceFieldLeak(
-                    className = "com.android.internal.jank.FrameTracker",
-                    fieldName = "mConfig",
-                    "Ignoring a leak due to misconfigured framework jank tracking b/349355283"
-                ),
-                AndroidReferenceMatchers.instanceFieldLeak(
-                    className = "com.android.internal.jank.FrameTracker",
-                    fieldName = "mListener",
-                    "Ignoring a leak due to misconfigured framework jank tracking b/349355283"
-                )
+        private val IgnoreFrameTrackerLeak =
+            AndroidReferenceMatchers.instanceFieldLeak(
+                className = "com.android.internal.jank.FrameTracker",
+                fieldName = "mConfig",
+                "Ignoring a leak due to misconfigured framework jank tracking b/349355283"
             )
 
         @JvmStatic
@@ -61,9 +54,7 @@
             val current = LeakCanary.config
             savedLeakCanaryConfig = current
             LeakCanary.config =
-                current.copy(
-                    referenceMatchers = current.referenceMatchers + IgnoreFrameTrackerLeaks
-                )
+                current.copy(referenceMatchers = current.referenceMatchers + IgnoreFrameTrackerLeak)
         }
 
         @JvmStatic
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/gestures/RightClickGesturesTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/gestures/RightClickGesturesTest.kt
deleted file mode 100644
index 4e76868..0000000
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/gestures/RightClickGesturesTest.kt
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text.contextmenu.gestures
-
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.text.selection.assertThatOffset
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.input.pointer.PointerEventType
-import androidx.compose.ui.input.pointer.PointerInputScope
-import androidx.compose.ui.input.pointer.pointerInput
-import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.MouseButton
-import androidx.compose.ui.test.click
-import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.test.onNodeWithTag
-import androidx.compose.ui.test.performMouseInput
-import androidx.compose.ui.test.rightClick
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.util.fastForEach
-import androidx.compose.ui.util.fastMap
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.MediumTest
-import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@MediumTest
-class OnRightClickDownTest {
-    @get:Rule val rule = createComposeRule()
-
-    private val tag = "testTag"
-
-    @Composable
-    private fun TestRightClickBox(
-        onClick: (Offset) -> Unit,
-    ) {
-        Box(
-            modifier =
-                Modifier.background(Color.LightGray).size(100.dp).testTag(tag).pointerInput(Unit) {
-                    onRightClickDown(onClick)
-                }
-        )
-    }
-
-    @Test
-    fun whenOnRightClickDown_rightClick_doesTriggerWithCorrectOffset() {
-        var clickCount = 0
-        val expectedOffset = Offset(10f, 10f)
-        rule.setContent {
-            TestRightClickBox {
-                assertThatOffset(it).equalsWithTolerance(expectedOffset)
-                clickCount++
-            }
-        }
-        rule.onNodeWithTag(tag).performMouseInput { rightClick(expectedOffset) }
-        assertThat(clickCount).isEqualTo(1)
-    }
-
-    @Test
-    fun whenOnRightClickDown_leftClick_doesNotTrigger() {
-        var clickCount = 0
-        rule.setContent { TestRightClickBox { clickCount++ } }
-        rule.onNodeWithTag(tag).performMouseInput { click() }
-        assertThat(clickCount).isEqualTo(0)
-    }
-
-    @Test
-    fun whenOnRightClickDown_triggersOnPressAndNotOnRelease() {
-        var clickCount = 0
-        rule.setContent { TestRightClickBox { clickCount++ } }
-        val interaction = rule.onNodeWithTag(tag)
-
-        interaction.performMouseInput {
-            updatePointerTo(center)
-            press(MouseButton.Secondary)
-        }
-        assertThat(clickCount).isEqualTo(1)
-
-        interaction.performMouseInput { release(MouseButton.Secondary) }
-        assertThat(clickCount).isEqualTo(1)
-    }
-
-    @Test
-    fun whenOnRightClickDown_alreadyConsumed_doesNotTrigger() {
-        var clickCount = 0
-        rule.setContent {
-            Box(modifier = Modifier.pointerInput(Unit) { onRightClickDown { clickCount++ } }) {
-                Box(
-                    modifier =
-                        Modifier.background(Color.LightGray).size(100.dp).testTag(tag).pointerInput(
-                            Unit
-                        ) {
-                            awaitPointerEventScope {
-                                while (true) {
-                                    awaitPointerEvent().changes.fastForEach { it.consume() }
-                                }
-                            }
-                        }
-                )
-            }
-        }
-
-        rule.onNodeWithTag(tag).performMouseInput { rightClick() }
-        assertThat(clickCount).isEqualTo(0)
-    }
-
-    @Test
-    fun whenOnRightClickDown_consumesRightClickPressAndRelease() {
-        suspend fun PointerInputScope.assertCorrectlyConsumed() {
-            awaitPointerEventScope {
-                while (true) {
-                    val event = awaitPointerEvent()
-                    assertThat(event.changes.fastMap { it.isConsumed }.toSet()).run {
-                        when (event.type) {
-                            PointerEventType.Press,
-                            PointerEventType.Release -> containsExactly(true)
-                            else -> containsExactly(false)
-                        }
-                    }
-                }
-            }
-        }
-
-        rule.setContent {
-            Box(modifier = Modifier.pointerInput(Unit) { assertCorrectlyConsumed() }) {
-                Box(
-                    modifier =
-                        Modifier.background(Color.LightGray).size(100.dp).testTag(tag).pointerInput(
-                            Unit
-                        ) {
-                            onRightClickDown { /* Nothing */ }
-                        }
-                )
-            }
-        }
-
-        rule.onNodeWithTag(tag).performMouseInput { rightClick() }
-    }
-}
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/modifier/TextContextMenuGesturesModifierTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/modifier/TextContextMenuGesturesModifierTest.kt
deleted file mode 100644
index e9abef8..0000000
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/modifier/TextContextMenuGesturesModifierTest.kt
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text.contextmenu.modifier
-
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.offset
-import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.text.contextmenu.builder.TextContextMenuBuilderScope
-import androidx.compose.foundation.text.contextmenu.data.TextContextMenuSession
-import androidx.compose.foundation.text.contextmenu.provider.LocalTextContextMenuDropdownProvider
-import androidx.compose.foundation.text.contextmenu.provider.TextContextMenuDataProvider
-import androidx.compose.foundation.text.contextmenu.provider.TextContextMenuProvider
-import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.derivedStateOf
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.neverEqualPolicy
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.geometry.takeOrElse
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.layout.LayoutCoordinates
-import androidx.compose.ui.layout.onGloballyPositioned
-import androidx.compose.ui.platform.testTag
-import androidx.compose.ui.test.SemanticsNodeInteraction
-import androidx.compose.ui.test.click
-import androidx.compose.ui.test.junit4.createComposeRule
-import androidx.compose.ui.test.onNodeWithTag
-import androidx.compose.ui.test.performMouseInput
-import androidx.compose.ui.test.performTouchInput
-import androidx.compose.ui.test.rightClick
-import androidx.compose.ui.unit.IntOffset
-import androidx.compose.ui.unit.round
-import androidx.compose.ui.unit.toOffset
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.MediumTest
-import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@MediumTest
-class TextContextMenuGesturesModifierTest {
-    @get:Rule val rule = createComposeRule()
-
-    private val baseLength = 100
-    private val baseLengthDp = with(rule.density) { baseLength.toDp() }
-
-    @Test
-    fun whenTouchTap_nothingHappens() =
-        runTest(postGestureModifier = Modifier.background(Color.LightGray).size(baseLengthDp)) {
-            onBox().performTouchInput { click() }
-            assertNullDataProvider()
-            assertPreShowContextMenuInvocationCount(0)
-        }
-
-    @Test
-    fun whenLeftClick_nothingHappens() =
-        runTest(postGestureModifier = Modifier.background(Color.LightGray).size(baseLengthDp)) {
-            onBox().performMouseInput { click() }
-            assertNullDataProvider()
-            assertPreShowContextMenuInvocationCount(0)
-        }
-
-    @Test
-    fun whenRightClick_dataProviderTriggers() =
-        runTest(
-            preGestureModifier = Modifier.addTextContextMenuComponents { testItem(TestItem.One) },
-            postGestureModifier = Modifier.background(Color.LightGray).size(baseLengthDp)
-        ) {
-            val clickOffset = IntOffset(10, 10)
-            rightClick(clickOffset.toOffset())
-            assertDataContains(TestItem.One)
-            assertClickPositionEquals(clickOffset)
-            assertPreShowContextMenuInvocationCount(1)
-        }
-
-    @Test
-    fun whenDestinationCoordinatesMove_dataProviderPositionsCorrectly() {
-        val initialOffset = IntOffset.Zero
-        val finalOffset = IntOffset(baseLength, baseLength)
-        var offset by mutableStateOf(initialOffset)
-        runTest(
-            preGestureModifier = Modifier.size(baseLengthDp * 2),
-            postGestureModifier =
-                Modifier.offset { offset }.background(Color.LightGray).size(baseLengthDp)
-        ) {
-            val clickOffset = IntOffset(10, 10)
-
-            rightClick(clickOffset.toOffset())
-            assertClickPositionEquals(clickOffset)
-            assertPreShowContextMenuInvocationCount(1)
-
-            offset = finalOffset
-            rule.waitForIdle()
-            // The destinationCoordinates move,
-            // but the localCoordinates at the gesture location do not,
-            // so the result in the destination coordinates should be subtracting any movement.
-            assertClickPositionEquals(clickOffset - finalOffset)
-            assertPreShowContextMenuInvocationCount(1)
-        }
-    }
-
-    @Test
-    fun whenGestureCoordinatesMove_dataProviderPositionsCorrectly() {
-        val initialOffset = IntOffset.Zero
-        val finalOffset = IntOffset(baseLength, baseLength)
-        var offset by mutableStateOf(initialOffset)
-        runTest(
-            preGestureModifier = Modifier.size(baseLengthDp * 2).offset { offset },
-            postGestureModifier = Modifier.background(Color.LightGray).size(baseLengthDp)
-        ) {
-            val clickOffset = IntOffset(10, 10)
-
-            rightClick(clickOffset.toOffset())
-            assertClickPositionEquals(clickOffset)
-            assertPreShowContextMenuInvocationCount(1)
-
-            offset = finalOffset
-            rule.waitForIdle()
-            // Both layouts move the same amount, so the result should be the same
-            assertClickPositionEquals(clickOffset)
-            assertPreShowContextMenuInvocationCount(1)
-        }
-    }
-
-    @Test
-    fun whenDataProviderDataUpdates_dataResultUpdates() {
-        var item by mutableStateOf(TestItem.One)
-        runTest(
-            preGestureModifier = Modifier.addTextContextMenuComponents { testItem(item) },
-            postGestureModifier = Modifier.background(Color.LightGray).size(baseLengthDp)
-        ) {
-            rightClick()
-            assertDataContains(TestItem.One)
-            assertPreShowContextMenuInvocationCount(1)
-
-            item = TestItem.Two
-            rule.waitForIdle()
-            assertDataContains(TestItem.Two)
-            assertPreShowContextMenuInvocationCount(1)
-        }
-    }
-
-    private fun runTest(
-        preGestureModifier: Modifier = Modifier,
-        postGestureModifier: Modifier = Modifier,
-        block: TestScope.() -> Unit
-    ) {
-        TestScope(preGestureModifier, postGestureModifier).block()
-    }
-
-    private inner class TestScope(
-        preGestureModifier: Modifier,
-        postGestureModifier: Modifier,
-    ) {
-        private val tag = "testTag"
-
-        private var dataProvider by
-            mutableStateOf<TextContextMenuDataProvider?>(null, neverEqualPolicy())
-
-        private var destinationCoordinates by
-            mutableStateOf<LayoutCoordinates?>(null, neverEqualPolicy())
-
-        private var onPreShowContextMenuInvocationCount = 0
-
-        private val actualPosition by derivedStateOf {
-            assertNotNull(dataProvider).position(assertNotNull(destinationCoordinates))
-        }
-
-        private val actualDataComponents by derivedStateOf {
-            assertNotNull(dataProvider).data().components
-        }
-
-        init {
-            rule.setContent {
-                CompositionLocalProvider(
-                    LocalTextContextMenuDropdownProvider provides FakeProvider { dataProvider = it }
-                ) {
-                    Box(
-                        preGestureModifier
-                            .textContextMenuGestures { onPreShowContextMenuInvocationCount++ }
-                            .then(postGestureModifier)
-                            .onGloballyPositioned { destinationCoordinates = it }
-                            .testTag(tag)
-                    )
-                }
-            }
-        }
-
-        fun assertNullDataProvider() {
-            assertThat(dataProvider).isNull()
-        }
-
-        fun assertClickPositionEquals(expectedOffset: IntOffset) {
-            assertThat(actualPosition.round()).isEqualTo(expectedOffset)
-        }
-
-        fun assertDataContains(vararg items: TestItem) {
-            assertThat(actualDataComponents).hasSize(items.size)
-            items.zip(actualDataComponents).forEach { (expectedTestItem, actualComponent) ->
-                assertThat(actualComponent.key).isEqualTo(expectedTestItem)
-            }
-        }
-
-        fun assertPreShowContextMenuInvocationCount(n: Int) {
-            assertThat(onPreShowContextMenuInvocationCount).isEqualTo(n)
-        }
-
-        fun onBox(): SemanticsNodeInteraction = rule.onNodeWithTag(tag)
-
-        fun rightClick(clickPosition: Offset = Offset.Unspecified) {
-            onBox().performMouseInput { rightClick(clickPosition.takeOrElse { center }) }
-        }
-    }
-}
-
-private enum class TestItem(val label: String) {
-    One("One"),
-    Two("Two"),
-}
-
-private fun TextContextMenuBuilderScope.testItem(
-    item: TestItem,
-    onClick: TextContextMenuSession.() -> Unit = {}
-) {
-    item(key = item, label = item.label, onClick = onClick)
-}
-
-private fun interface FakeProvider : TextContextMenuProvider {
-    fun onShow(dataProvider: TextContextMenuDataProvider)
-
-    override suspend fun showTextContextMenu(dataProvider: TextContextMenuDataProvider) {
-        onShow(dataProvider)
-    }
-}
-
-private fun <T : Any> assertNotNull(value: T?): T = value.also { assertThat(it).isNotNull() }!!
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProviderTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProviderTest.kt
index 3d7761de..36220d9 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProviderTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProviderTest.kt
@@ -16,7 +16,6 @@
 
 package androidx.compose.foundation.text.contextmenu.provider
 
-import android.annotation.SuppressLint
 import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
@@ -182,7 +181,8 @@
 
             assertContextMenuExistsWithNumbers(1)
             assertThatJob(contextMenuCoroutine).isActive()
-            val initialBounds = anchorLayoutCoordinates.boundsInRoot().roundToIntRect()
+            val initialBounds =
+                assertNotNull(anchorLayoutCoordinates).boundsInRoot().roundToIntRect()
 
             length = 50
             rule.waitForIdle()
@@ -190,7 +190,7 @@
             assertContextMenuExistsWithNumbers(1)
             assertThatJob(contextMenuCoroutine).isActive()
 
-            val finalBounds = anchorLayoutCoordinates.boundsInRoot().roundToIntRect()
+            val finalBounds = assertNotNull(anchorLayoutCoordinates).boundsInRoot().roundToIntRect()
             val expectedBounds = initialBounds.translate(IntOffset(50, 50))
             assertThat(finalBounds).isEqualTo(expectedBounds)
         }
@@ -207,7 +207,7 @@
         (
             session: TextContextMenuSession,
             dataProvider: TextContextMenuDataProvider,
-            anchorLayoutCoordinates: () -> LayoutCoordinates,
+            anchorLayoutCoordinates: LayoutCoordinates,
         ) -> Unit = { _, _, _ ->
             Box(modifier = Modifier.background(Color.LightGray).size(50.dp).testTag(tag))
         }
@@ -273,7 +273,7 @@
                     ProvideTestBasicTextContextMenu(
                         onContextMenuComposition = { session, anchorLayoutCoordinates ->
                             testScope.session = session
-                            testScope.anchorLayoutCoordinatesFunction = anchorLayoutCoordinates
+                            testScope.anchorLayoutCoordinates = anchorLayoutCoordinates
                         }
                     ) {
                         testScope.provider = LocalTestContextMenuProvider.current
@@ -289,13 +289,10 @@
     }
 
     private inner class TestScope {
-        var anchorLayoutCoordinatesFunction: (() -> LayoutCoordinates)? = null
-        val anchorLayoutCoordinates: LayoutCoordinates
-            get() = assertNotNull(anchorLayoutCoordinatesFunction).invoke()
-
         var coroutineScope: CoroutineScope? = null
         var provider: TextContextMenuProvider? = null
         var session: TextContextMenuSession? = null
+        var anchorLayoutCoordinates: LayoutCoordinates? = null
         var enabled by mutableStateOf(true)
 
         fun launch(block: suspend CoroutineScope.() -> Unit): Job =
@@ -328,7 +325,6 @@
 private const val ContextMenuTag = "ContextMenu"
 
 @Composable
-@SuppressLint("ModifierParameter")
 private fun OuterBox(modifier: Modifier = Modifier.fillMaxSize(), content: @Composable () -> Unit) {
     Box(modifier, Alignment.Center) { content() }
 }
@@ -346,7 +342,7 @@
     onContextMenuComposition:
         (
             session: TextContextMenuSession?,
-            anchorLayoutCoordinates: () -> LayoutCoordinates,
+            anchorLayoutCoordinates: LayoutCoordinates?,
         ) -> Unit,
     content: @Composable () -> Unit
 ) {
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldLongPressTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldLongPressTest.kt
index 46e98c0..16d69d4 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldLongPressTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldLongPressTest.kt
@@ -150,12 +150,9 @@
     @Test
     fun longPressOnEmptyRegion_showsTextToolbar() {
         val state = TextFieldState("abc")
-        var toolbarShown = false
+        var showMenuCalled = 0
         val textToolbar =
-            FakeTextToolbar(
-                onShowMenu = { _, _, _, _, _, _ -> toolbarShown = true },
-                onHideMenu = { toolbarShown = false }
-            )
+            FakeTextToolbar(onShowMenu = { _, _, _, _, _, _ -> showMenuCalled++ }, onHideMenu = {})
         val clipboard = FakeClipboard("hello")
         rule.setTextFieldTestContent {
             CompositionLocalProvider(
@@ -174,7 +171,7 @@
             longClick(Offset(fontSize.toPx() * 5, fontSize.toPx() / 2))
         }
 
-        rule.runOnIdle { assertThat(toolbarShown).isTrue() }
+        rule.runOnIdle { assertThat(showMenuCalled).isEqualTo(1) }
     }
 
     @Test
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerContextMenuFlagFlippedTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerContextMenuFlagFlippedTest.kt
deleted file mode 100644
index 015da88..0000000
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerContextMenuFlagFlippedTest.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text.selection
-
-import androidx.compose.foundation.ComposeFoundationFlags
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.test.filters.MediumTest
-import org.junit.After
-import org.junit.Before
-
-/**
- * We expect the [SelectionContainerContextMenuFlagFlippedTest] to succeed no matter how the
- * [ComposeFoundationFlags.isNewContextMenuEnabled] is flipped.
- *
- * When the [ComposeFoundationFlags.isNewContextMenuEnabled] flag is removed, this test should be
- * removed and the [SelectionContainerContextMenuFlagFlippedTest] class should have its `open`
- * keyword removed.
- */
-@OptIn(ExperimentalFoundationApi::class)
-@MediumTest
-class SelectionContainerContextMenuFlagFlippedTest : SelectionContainerContextMenuTest() {
-    private var initialFlag = ComposeFoundationFlags.isNewContextMenuEnabled
-
-    @Before
-    fun setup() {
-        ComposeFoundationFlags.isNewContextMenuEnabled = !initialFlag
-    }
-
-    @After
-    fun cleanup() {
-        ComposeFoundationFlags.isNewContextMenuEnabled = initialFlag
-    }
-}
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerContextMenuTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerContextMenuTest.kt
index 384e3ed..1d37ca5 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerContextMenuTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerContextMenuTest.kt
@@ -56,7 +56,7 @@
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
-open class SelectionContainerContextMenuTest {
+class SelectionContainerContextMenuTest {
     @get:Rule val rule = createComposeRule()
 
     private val textTag = "text"
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuBuilderTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuBuilderTest.kt
new file mode 100644
index 0000000..8c44ce1
--- /dev/null
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuBuilderTest.kt
@@ -0,0 +1,849 @@
+/*
+ * Copyright 2025 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.foundation.textfield
+
+import androidx.compose.foundation.ComposeFoundationFlags
+import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.internal.readText
+import androidx.compose.foundation.internal.toClipEntry
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.text.BasicSecureTextField
+import androidx.compose.foundation.text.BasicTextField
+import androidx.compose.foundation.text.FocusedWindowTest
+import androidx.compose.foundation.text.TextContextMenuItems
+import androidx.compose.foundation.text.contextmenu.data.TextContextMenuItem
+import androidx.compose.foundation.text.contextmenu.data.TextContextMenuKeys.AutofillKey
+import androidx.compose.foundation.text.contextmenu.data.TextContextMenuKeys.CopyKey
+import androidx.compose.foundation.text.contextmenu.data.TextContextMenuKeys.CutKey
+import androidx.compose.foundation.text.contextmenu.data.TextContextMenuKeys.PasteKey
+import androidx.compose.foundation.text.contextmenu.data.TextContextMenuKeys.SelectAllKey
+import androidx.compose.foundation.text.contextmenu.data.TextContextMenuSession
+import androidx.compose.foundation.text.contextmenu.test.TestTextContextMenuDataInvoker
+import androidx.compose.foundation.text.contextmenu.test.assertItems
+import androidx.compose.foundation.text.contextmenu.test.testTextContextMenuDataReader
+import androidx.compose.foundation.text.input.TextFieldDecorator
+import androidx.compose.foundation.text.input.TextFieldState
+import androidx.compose.foundation.text.input.internal.selection.FakeClipboard
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalClipboard
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.click
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.longClick
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performMouseInput
+import androidx.compose.ui.test.performTouchInput
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.input.PasswordVisualTransformation
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.VisualTransformation
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.MediumTest
+import androidx.test.filters.SdkSuppress
+import com.google.common.truth.Truth.assertThat
+import com.google.common.truth.Truth.assertWithMessage
+import kotlinx.coroutines.test.runTest
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@MediumTest
+@RunWith(AndroidJUnit4::class)
+class TextFieldContextMenuBuilderTest : FocusedWindowTest {
+    @get:Rule val rule = createComposeRule()
+
+    private val textFieldTag = "BTF"
+
+    private var initialIsNewContextMenuEnabled = false
+
+    @OptIn(ExperimentalFoundationApi::class)
+    @Before
+    fun setup() {
+        initialIsNewContextMenuEnabled = ComposeFoundationFlags.isNewContextMenuEnabled
+        ComposeFoundationFlags.isNewContextMenuEnabled = true
+    }
+
+    @OptIn(ExperimentalFoundationApi::class)
+    @After
+    fun cleanup() {
+        ComposeFoundationFlags.isNewContextMenuEnabled = initialIsNewContextMenuEnabled
+    }
+
+    private enum class SelectionAmount {
+        NONE,
+        PARTIAL,
+        ALL
+    }
+
+    // region BTF1 Context Menu Item Action Tests
+    @Test
+    fun btf1_contextMenu_whenMouse_onClickCut() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Cut,
+            expectedText = "Text  Text",
+            expectedSelection = TextRange(5),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf1_contextMenu_whenMouse_onClickCopy() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Copy,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(5, 9),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf1_contextMenu_whenMouse_onClickPaste() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Paste,
+            expectedText = "Text clip Text",
+            expectedSelection = TextRange(9),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    @Test
+    fun btf1_contextMenu_whenMouse_onClickSelectAll() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.SelectAll,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(0, 14),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    @Test
+    fun btf1_contextMenu_whenTouch_onClickCut() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Cut,
+            expectedText = "Text  Text",
+            expectedSelection = TextRange(5),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf1_contextMenu_whenTouch_onClickCopy() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Copy,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(9),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf1_contextMenu_whenTouch_onClickPaste() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Paste,
+            expectedText = "Text clip Text",
+            expectedSelection = TextRange(9),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    @Test
+    fun btf1_contextMenu_whenTouch_onClickSelectAll() = runTest {
+        runBtf1ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = false,
+            itemToInvoke = TextContextMenuItems.SelectAll,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(0, 14),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    private suspend fun runBtf1ClickContextMenuItemTest(
+        isMouse: Boolean,
+        expectedSessionClosed: Boolean,
+        itemToInvoke: TextContextMenuItems,
+        expectedText: String,
+        expectedSelection: TextRange,
+        expectedClipboardContent: String,
+    ) {
+        val initialText = "Text Text Text"
+        val initialClipboardText = "clip"
+
+        var value by
+            mutableStateOf(
+                TextFieldValue(
+                    text = initialText,
+                    selection = TextRange(5, 9),
+                )
+            )
+
+        val clipboard =
+            FakeClipboard(
+                initialText = initialClipboardText,
+                supportsClipEntry = true,
+            )
+
+        var sessionClosed = false
+        val fakeSession =
+            object : TextContextMenuSession {
+                override fun close() {
+                    sessionClosed = true
+                }
+            }
+
+        val reader = TestTextContextMenuDataInvoker()
+        rule.setTextFieldTestContent {
+            CompositionLocalProvider(LocalClipboard provides clipboard) {
+                BasicTextField(
+                    value = value,
+                    onValueChange = { value = it },
+                    modifier = Modifier.testTag(textFieldTag),
+                ) { innerTextField ->
+                    Box(
+                        propagateMinConstraints = true,
+                        modifier = Modifier.testTextContextMenuDataReader(reader)
+                    ) {
+                        innerTextField()
+                    }
+                }
+            }
+        }
+
+        // start selection of middle word
+        if (isMouse) {
+            rule.onNodeWithTag(textFieldTag).performMouseInput { repeat(2) { click() } }
+        } else {
+            rule.onNodeWithTag(textFieldTag).performTouchInput { longClick() }
+        }
+
+        // collect our context menu items.
+        val data = reader.invokeTraversal()
+
+        // get and verify component
+        val component = data.components.singleOrNull { it.key == itemToInvoke.key }
+        assertWithMessage("Component with key %s not found", itemToInvoke.key)
+            .that(component)
+            .isNotNull()
+        assertThat(component).isInstanceOf(TextContextMenuItem::class.java)
+        val item = component as TextContextMenuItem
+
+        // simulate clicking the item.
+        rule.runOnUiThread { item.onClick(fakeSession) }
+
+        // verify whether close called
+        if (expectedSessionClosed) {
+            assertThat(sessionClosed).isTrue()
+        } else {
+            assertThat(sessionClosed).isFalse()
+        }
+
+        // Operation was applied
+        assertThat(value.text).isEqualTo(expectedText)
+        assertThat(value.selection).isEqualTo(expectedSelection)
+        val clipboardContent = clipboard.getClipEntry()?.readText()
+        assertThat(clipboardContent).isNotNull()
+        assertThat(clipboardContent!!).isEqualTo(expectedClipboardContent)
+    }
+
+    // endregion BTF1 Context Menu Item Action Tests
+
+    // region BTF1 Context Menu Correct Item Tests
+    @Test
+    @SdkSuppress(maxSdkVersion = 25)
+    fun btf1_contextMenu_emptyClipboard_noSelection_itemsMatch_beforeApi26() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(SelectAllKey),
+        )
+
+    @Test
+    @SdkSuppress(minSdkVersion = 26)
+    fun btf1_contextMenu_emptyClipboard_noSelection_itemsMatch_afterApi26() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(SelectAllKey, AutofillKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_emptyClipboard_partialSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(CutKey, CopyKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_emptyClipboard_fullSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(CutKey, CopyKey),
+        )
+
+    @Test
+    @SdkSuppress(maxSdkVersion = 25)
+    fun btf1_contextMenu_nonEmptyClipboard_noSelection_itemsMatch_beforeApi26() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey),
+        )
+
+    @Test
+    @SdkSuppress(minSdkVersion = 26)
+    fun btf1_contextMenu_nonEmptyClipboard_noSelection_itemsMatch_afterApi26() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey, AutofillKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_nonEmptyClipboard_partialSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(CutKey, CopyKey, PasteKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_nonEmptyClipboard_fullSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(CutKey, CopyKey, PasteKey),
+        )
+
+    @Test
+    @SdkSuppress(maxSdkVersion = 25)
+    fun btf1_contextMenu_password_noSelection_itemsMatch_beforeApi26() =
+        runBtf1CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey),
+        )
+
+    @Test
+    @SdkSuppress(minSdkVersion = 26)
+    fun btf1_contextMenu_password_noSelection_itemsMatch_afterApi26() =
+        runBtf1CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey, AutofillKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_password_partialSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(PasteKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_password_fullSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(PasteKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_readOnly_noSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isReadOnly = true,
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(SelectAllKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_readOnly_partialSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isReadOnly = true,
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(CopyKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf1_contextMenu_readOnly_fullSelection_itemsMatch() =
+        runBtf1CorrectItemsTest(
+            isReadOnly = true,
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(CopyKey),
+        )
+
+    private fun runBtf1CorrectItemsTest(
+        isPassword: Boolean = false,
+        isReadOnly: Boolean = false,
+        isEmptyClipboard: Boolean = false,
+        selectionAmount: SelectionAmount = SelectionAmount.PARTIAL,
+        expectedItems: List<Any>,
+    ) = runTest {
+        check(!(isPassword && isReadOnly)) { "Can't be a password field and read-only." }
+
+        val initialText = "Text Text Text"
+        var value by
+            mutableStateOf(
+                TextFieldValue(
+                    text = initialText,
+                    selection =
+                        when (selectionAmount) {
+                            SelectionAmount.NONE -> TextRange.Zero
+                            SelectionAmount.PARTIAL -> TextRange(5, 9)
+                            SelectionAmount.ALL -> TextRange(0, 14)
+                        }
+                )
+            )
+
+        val visualTransformation =
+            if (isPassword) PasswordVisualTransformation() else VisualTransformation.None
+
+        val clipboard =
+            FakeClipboard(supportsClipEntry = true).apply {
+                if (isEmptyClipboard) {
+                    setClipEntry(null)
+                } else {
+                    setClipEntry(AnnotatedString("Clipboard Text").toClipEntry())
+                }
+            }
+
+        val reader = TestTextContextMenuDataInvoker()
+        rule.setTextFieldTestContent {
+            CompositionLocalProvider(LocalClipboard provides clipboard) {
+                BasicTextField(
+                    value = value,
+                    onValueChange = { value = it },
+                    visualTransformation = visualTransformation,
+                    readOnly = isReadOnly,
+                    modifier = Modifier.testTag(textFieldTag)
+                ) { innerTextField ->
+                    Box(
+                        propagateMinConstraints = true,
+                        modifier = Modifier.testTextContextMenuDataReader(reader)
+                    ) {
+                        innerTextField()
+                    }
+                }
+            }
+        }
+
+        val data = reader.invokeTraversal()
+        data.assertItems(expectedItems)
+    }
+
+    // endregion BTF1 Context Menu Correct Item Tests
+
+    // region BTF2 Context Menu Item Action Tests
+    @Test
+    fun btf2_contextMenu_whenMouse_onClickCut() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Cut,
+            expectedText = "Text  Text",
+            expectedSelection = TextRange(5),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf2_contextMenu_whenMouse_onClickCopy() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Copy,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(5, 9),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf2_contextMenu_whenMouse_onClickPaste() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Paste,
+            expectedText = "Text clip Text",
+            expectedSelection = TextRange(9),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    @Test
+    fun btf2_contextMenu_whenMouse_onClickSelectAll() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = true,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.SelectAll,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(0, 14),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    @Test
+    fun btf2_contextMenu_whenTouch_onClickCut() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Cut,
+            expectedText = "Text  Text",
+            expectedSelection = TextRange(5),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf2_contextMenu_whenTouch_onClickCopy() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Copy,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(9),
+            expectedClipboardContent = "Text",
+        )
+    }
+
+    @Test
+    fun btf2_contextMenu_whenTouch_onClickPaste() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = true,
+            itemToInvoke = TextContextMenuItems.Paste,
+            expectedText = "Text clip Text",
+            expectedSelection = TextRange(9),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    @Test
+    fun btf2_contextMenu_whenTouch_onClickSelectAll() = runTest {
+        runBtf2ClickContextMenuItemTest(
+            isMouse = false,
+            expectedSessionClosed = false,
+            itemToInvoke = TextContextMenuItems.SelectAll,
+            expectedText = "Text Text Text",
+            expectedSelection = TextRange(0, 14),
+            expectedClipboardContent = "clip",
+        )
+    }
+
+    private suspend fun runBtf2ClickContextMenuItemTest(
+        isMouse: Boolean,
+        expectedSessionClosed: Boolean,
+        itemToInvoke: TextContextMenuItems,
+        expectedText: String,
+        expectedSelection: TextRange,
+        expectedClipboardContent: String,
+    ) {
+        val initialText = "Text Text Text"
+        val initialClipboardText = "clip"
+
+        val state = TextFieldState(initialText)
+
+        val clipboard =
+            FakeClipboard(
+                initialText = initialClipboardText,
+                supportsClipEntry = true,
+            )
+
+        var sessionClosed = false
+        val fakeSession =
+            object : TextContextMenuSession {
+                override fun close() {
+                    sessionClosed = true
+                }
+            }
+
+        val reader = TestTextContextMenuDataInvoker()
+        rule.setTextFieldTestContent {
+            CompositionLocalProvider(LocalClipboard provides clipboard) {
+                BasicTextField(
+                    state = state,
+                    modifier = Modifier.testTag(textFieldTag),
+                    decorator = { innerTextField ->
+                        Box(
+                            propagateMinConstraints = true,
+                            modifier = Modifier.testTextContextMenuDataReader(reader)
+                        ) {
+                            innerTextField()
+                        }
+                    }
+                )
+            }
+        }
+
+        // start selection of middle word
+        if (isMouse) {
+            rule.onNodeWithTag(textFieldTag).performMouseInput { repeat(2) { click() } }
+        } else {
+            rule.onNodeWithTag(textFieldTag).performTouchInput { longClick() }
+        }
+
+        // collect our context menu items.
+        val data = reader.invokeTraversal()
+
+        // get and verify component
+        val component = data.components.singleOrNull { it.key == itemToInvoke.key }
+        assertWithMessage("Component with key %s not found", itemToInvoke.key)
+            .that(component)
+            .isNotNull()
+        assertThat(component).isInstanceOf(TextContextMenuItem::class.java)
+        val item = component as TextContextMenuItem
+
+        // simulate clicking the item.
+        rule.runOnUiThread { item.onClick(fakeSession) }
+
+        // verify whether close called
+        if (expectedSessionClosed) {
+            assertThat(sessionClosed).isTrue()
+        } else {
+            assertThat(sessionClosed).isFalse()
+        }
+
+        // Operation was applied
+        assertThat(state.text).isEqualTo(expectedText)
+        assertThat(state.selection).isEqualTo(expectedSelection)
+        val clipboardContent = clipboard.getClipEntry()?.readText()
+        assertThat(clipboardContent).isNotNull()
+        assertThat(clipboardContent!!).isEqualTo(expectedClipboardContent)
+    }
+
+    // endregion BTF2 Context Menu Item Action Tests
+
+    // region BTF2 Context Menu Correct Item Tests
+    @Test
+    @SdkSuppress(maxSdkVersion = 25)
+    fun btf2_contextMenu_emptyClipboard_noSelection_itemsMatch_beforeApi26() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(SelectAllKey),
+        )
+
+    @Test
+    @SdkSuppress(minSdkVersion = 26)
+    fun btf2_contextMenu_emptyClipboard_noSelection_itemsMatch_afterApi26() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(SelectAllKey, AutofillKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_emptyClipboard_partialSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(CutKey, CopyKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_emptyClipboard_fullSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(CutKey, CopyKey),
+        )
+
+    @Test
+    @SdkSuppress(maxSdkVersion = 25)
+    fun btf2_contextMenu_nonEmptyClipboard_noSelection_itemsMatch_beforeApi26() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey),
+        )
+
+    @Test
+    @SdkSuppress(minSdkVersion = 26)
+    fun btf2_contextMenu_nonEmptyClipboard_noSelection_itemsMatch_afterApi26() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey, AutofillKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_nonEmptyClipboard_partialSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(CutKey, CopyKey, PasteKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_nonEmptyClipboard_fullSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isEmptyClipboard = false,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(CutKey, CopyKey, PasteKey),
+        )
+
+    @Test
+    @SdkSuppress(maxSdkVersion = 25)
+    fun btf2_contextMenu_password_noSelection_itemsMatch_beforeApi26() =
+        runBtf2CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey),
+        )
+
+    @Test
+    @SdkSuppress(minSdkVersion = 26)
+    fun btf2_contextMenu_password_noSelection_itemsMatch_afterApi26() =
+        runBtf2CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(PasteKey, SelectAllKey, AutofillKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_password_partialSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(PasteKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_password_fullSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isPassword = true,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(PasteKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_readOnly_noSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isReadOnly = true,
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.NONE,
+            expectedItems = listOf(SelectAllKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_readOnly_partialSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isReadOnly = true,
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.PARTIAL,
+            expectedItems = listOf(CopyKey, SelectAllKey),
+        )
+
+    @Test
+    fun btf2_contextMenu_readOnly_fullSelection_itemsMatch() =
+        runBtf2CorrectItemsTest(
+            isReadOnly = true,
+            isEmptyClipboard = true,
+            selectionAmount = SelectionAmount.ALL,
+            expectedItems = listOf(CopyKey),
+        )
+
+    private fun runBtf2CorrectItemsTest(
+        isPassword: Boolean = false,
+        isReadOnly: Boolean = false,
+        isEmptyClipboard: Boolean = false,
+        selectionAmount: SelectionAmount = SelectionAmount.PARTIAL,
+        expectedItems: List<Any>,
+    ) = runTest {
+        check(!(isPassword && isReadOnly)) { "Can't be a password field and read-only." }
+
+        val initialText = "Text Text Text"
+        val state =
+            TextFieldState(
+                initialText = initialText,
+                initialSelection =
+                    when (selectionAmount) {
+                        SelectionAmount.NONE -> TextRange.Zero
+                        SelectionAmount.PARTIAL -> TextRange(5, 9)
+                        SelectionAmount.ALL -> TextRange(0, 14)
+                    }
+            )
+
+        val clipboard =
+            FakeClipboard(supportsClipEntry = true).apply {
+                if (isEmptyClipboard) {
+                    setClipEntry(null)
+                } else {
+                    setClipEntry(AnnotatedString("Clipboard Text").toClipEntry())
+                }
+            }
+
+        val reader = TestTextContextMenuDataInvoker()
+        val decorator = TextFieldDecorator { innerTextField ->
+            Box(
+                propagateMinConstraints = true,
+                modifier = Modifier.testTextContextMenuDataReader(reader)
+            ) {
+                innerTextField()
+            }
+        }
+
+        rule.setTextFieldTestContent {
+            CompositionLocalProvider(LocalClipboard provides clipboard) {
+                if (isPassword) {
+                    BasicSecureTextField(
+                        state = state,
+                        decorator = decorator,
+                        modifier = Modifier.testTag(textFieldTag)
+                    )
+                } else {
+                    BasicTextField(
+                        state = state,
+                        decorator = decorator,
+                        readOnly = isReadOnly,
+                        modifier = Modifier.testTag(textFieldTag)
+                    )
+                }
+            }
+        }
+
+        val data = reader.invokeTraversal()
+        data.assertItems(expectedItems)
+    }
+    // endregion BTF2 Context Menu Correct Item Tests
+}
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuFlagFlippedTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuFlagFlippedTest.kt
deleted file mode 100644
index 4dc1054..0000000
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuFlagFlippedTest.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.textfield
-
-import androidx.compose.foundation.ComposeFoundationFlags
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.test.filters.MediumTest
-import org.junit.After
-import org.junit.Before
-
-/**
- * We expect the [TextFieldContextMenuTest] to succeed no matter how the
- * [ComposeFoundationFlags.isNewContextMenuEnabled] is flipped.
- *
- * When the [ComposeFoundationFlags.isNewContextMenuEnabled] flag is removed, this test should be
- * removed and the [TextFieldContextMenuTest] class should have its `open` keyword removed.
- */
-@OptIn(ExperimentalFoundationApi::class)
-@MediumTest
-class TextFieldContextMenuFlagFlippedTest : TextFieldContextMenuTest() {
-    private var initialFlag = ComposeFoundationFlags.isNewContextMenuEnabled
-
-    @Before
-    fun setup() {
-        ComposeFoundationFlags.isNewContextMenuEnabled = !initialFlag
-    }
-
-    @After
-    fun cleanup() {
-        ComposeFoundationFlags.isNewContextMenuEnabled = initialFlag
-    }
-}
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuTest.kt
index 6b855c5..1b6fad3 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldContextMenuTest.kt
@@ -61,7 +61,7 @@
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
-open class TextFieldContextMenuTest : FocusedWindowTest {
+class TextFieldContextMenuTest : FocusedWindowTest {
     @get:Rule val rule = createComposeRule()
 
     private val textFieldTag = "BTF"
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestures.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestures.android.kt
index bef0aaf..05b3084 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestures.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/contextmenu/ContextMenuGestures.android.kt
@@ -16,11 +16,19 @@
 
 package androidx.compose.foundation.contextmenu
 
+import androidx.annotation.VisibleForTesting
 import androidx.compose.foundation.contextmenu.ContextMenuState.Status
-import androidx.compose.foundation.text.contextmenu.gestures.onRightClickDown
+import androidx.compose.foundation.gestures.awaitEachGesture
+import androidx.compose.foundation.gestures.waitForUpOrCancellation
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.input.pointer.AwaitPointerEventScope
+import androidx.compose.ui.input.pointer.PointerInputChange
+import androidx.compose.ui.input.pointer.PointerInputScope
+import androidx.compose.ui.input.pointer.changedToDown
+import androidx.compose.ui.input.pointer.isSecondaryPressed
 import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.util.fastAll
 
 /** Unique key to avoid [Unit] clashes in [pointerInput]. */
 private object ContextMenuKey
@@ -42,3 +50,27 @@
  */
 internal fun Modifier.contextMenuGestures(onOpenGesture: (Offset) -> Unit): Modifier =
     pointerInput(ContextMenuKey) { onRightClickDown(onOpenGesture) }
+
+/** Similar to PointerInputScope.detectTapAndPress, but for right clicks. */
+@VisibleForTesting
+internal suspend fun PointerInputScope.onRightClickDown(onDown: (Offset) -> Unit) {
+    awaitEachGesture {
+        val down = awaitFirstRightClickDown()
+        down.consume()
+        onDown(down.position)
+        waitForUpOrCancellation()?.consume()
+    }
+}
+
+/**
+ * Similar to AwaitPointerEventScope.awaitFirstDown, but with an additional check to ensure it is a
+ * right click.
+ */
+private suspend fun AwaitPointerEventScope.awaitFirstRightClickDown(): PointerInputChange {
+    while (true) {
+        val event = awaitPointerEvent()
+        if (event.buttons.isSecondaryPressed && event.changes.fastAll { it.changedToDown() }) {
+            return event.changes[0]
+        }
+    }
+}
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/ContextMenu.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/ContextMenu.android.kt
index 6b9763d..169162b 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/ContextMenu.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/ContextMenu.android.kt
@@ -18,8 +18,6 @@
 
 import android.content.res.Resources
 import android.os.Build
-import androidx.compose.foundation.ComposeFoundationFlags
-import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.R
 import androidx.compose.foundation.contextmenu.ContextMenuScope
 import androidx.compose.foundation.contextmenu.ContextMenuState
@@ -27,8 +25,6 @@
 import androidx.compose.foundation.text.contextmenu.builder.TextContextMenuBuilderScope
 import androidx.compose.foundation.text.contextmenu.data.TextContextMenuKeys
 import androidx.compose.foundation.text.contextmenu.data.TextContextMenuSession
-import androidx.compose.foundation.text.contextmenu.internal.ProvideDefaultTextContextMenuDropdown
-import androidx.compose.foundation.text.contextmenu.modifier.textContextMenuGestures
 import androidx.compose.foundation.text.input.internal.selection.TextFieldSelectionState
 import androidx.compose.foundation.text.input.internal.selection.contextMenuBuilder
 import androidx.compose.foundation.text.selection.SelectionManager
@@ -39,114 +35,82 @@
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.ui.Modifier
 import androidx.compose.ui.res.stringResource
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.launch
 
-@OptIn(ExperimentalFoundationApi::class)
 @Composable
 internal actual fun ContextMenuArea(
     manager: TextFieldSelectionManager,
     content: @Composable () -> Unit
 ) {
-    if (ComposeFoundationFlags.isNewContextMenuEnabled) {
-        val modifier =
-            if (manager.enabled) {
-                Modifier.textContextMenuGestures(
-                    onPreShowContextMenu = { manager.updateClipboardEntry() }
-                )
-            } else {
-                Modifier
-            }
-        ProvideDefaultTextContextMenuDropdown(modifier, content)
-    } else {
-        val state = remember { ContextMenuState() }
-        val coroutineScope = rememberCoroutineScope()
-        val menuItemsAvailability = remember { mutableStateOf(MenuItemsAvailability.None) }
+    val state = remember { ContextMenuState() }
+    val coroutineScope = rememberCoroutineScope()
+    val menuItemsAvailability = remember { mutableStateOf(MenuItemsAvailability.None) }
 
-        androidx.compose.foundation.contextmenu.ContextMenuArea(
-            state = state,
-            onDismiss = { state.close() },
-            contextMenuBuilderBlock = manager.contextMenuBuilder(state, menuItemsAvailability),
-            enabled = manager.enabled,
-            onOpenGesture = {
-                coroutineScope.launch(start = CoroutineStart.UNDISPATCHED) {
-                    menuItemsAvailability.value = manager.getContextMenuItemsAvailability()
-                }
-            },
-            content = content,
-        )
-    }
+    androidx.compose.foundation.contextmenu.ContextMenuArea(
+        state = state,
+        onDismiss = { state.close() },
+        contextMenuBuilderBlock = manager.contextMenuBuilder(state, menuItemsAvailability),
+        enabled = manager.enabled,
+        onOpenGesture = {
+            coroutineScope.launch(start = CoroutineStart.UNDISPATCHED) {
+                menuItemsAvailability.value = manager.getContextMenuItemsAvailability()
+            }
+        },
+        content = content,
+    )
 }
 
-@OptIn(ExperimentalFoundationApi::class)
 @Composable
 internal actual fun ContextMenuArea(
     selectionState: TextFieldSelectionState,
     enabled: Boolean,
     content: @Composable () -> Unit
 ) {
-    if (ComposeFoundationFlags.isNewContextMenuEnabled) {
-        val modifier =
-            if (enabled) {
-                Modifier.textContextMenuGestures(
-                    onPreShowContextMenu = { selectionState.updateClipboardEntry() }
-                )
-            } else {
-                Modifier
-            }
-        ProvideDefaultTextContextMenuDropdown(modifier, content)
-    } else {
-        val state = remember { ContextMenuState() }
-        val coroutineScope = rememberCoroutineScope()
-        val menuItemsAvailability = remember { mutableStateOf(MenuItemsAvailability.None) }
-        val menuBuilder =
-            selectionState.contextMenuBuilder(
-                state = state,
-                itemsAvailability = menuItemsAvailability,
-                onMenuItemClicked = { item ->
-                    coroutineScope.launch(start = CoroutineStart.UNDISPATCHED) {
-                        when (item) {
-                            TextContextMenuItems.Cut -> cut()
-                            TextContextMenuItems.Copy -> copy(false)
-                            TextContextMenuItems.Paste -> paste()
-                            TextContextMenuItems.SelectAll -> selectAll()
-                            TextContextMenuItems.Autofill -> autofill()
-                        }
+    val state = remember { ContextMenuState() }
+    val coroutineScope = rememberCoroutineScope()
+    val menuItemsAvailability = remember { mutableStateOf(MenuItemsAvailability.None) }
+    val menuBuilder =
+        selectionState.contextMenuBuilder(
+            state = state,
+            itemsAvailability = menuItemsAvailability,
+            onMenuItemClicked = { item ->
+                coroutineScope.launch(start = CoroutineStart.UNDISPATCHED) {
+                    when (item) {
+                        TextContextMenuItems.Cut -> cut()
+                        TextContextMenuItems.Copy -> copy(false)
+                        TextContextMenuItems.Paste -> paste()
+                        TextContextMenuItems.SelectAll -> selectAll()
+                        TextContextMenuItems.Autofill -> autofill()
                     }
                 }
-            )
-
-        androidx.compose.foundation.contextmenu.ContextMenuArea(
-            state = state,
-            onDismiss = { state.close() },
-            contextMenuBuilderBlock = menuBuilder,
-            enabled = enabled,
-            onOpenGesture = {
-                coroutineScope.launch(start = CoroutineStart.UNDISPATCHED) {
-                    menuItemsAvailability.value = selectionState.getContextMenuItemsAvailability()
-                }
-            },
-            content = content,
+            }
         )
-    }
+
+    androidx.compose.foundation.contextmenu.ContextMenuArea(
+        state = state,
+        onDismiss = { state.close() },
+        contextMenuBuilderBlock = menuBuilder,
+        enabled = enabled,
+        onOpenGesture = {
+            coroutineScope.launch(start = CoroutineStart.UNDISPATCHED) {
+                menuItemsAvailability.value = selectionState.getContextMenuItemsAvailability()
+            }
+        },
+        content = content,
+    )
 }
 
-@OptIn(ExperimentalFoundationApi::class)
 @Composable
 internal actual fun ContextMenuArea(manager: SelectionManager, content: @Composable () -> Unit) {
-    if (ComposeFoundationFlags.isNewContextMenuEnabled) {
-        ProvideDefaultTextContextMenuDropdown(Modifier.textContextMenuGestures(), content)
-    } else {
-        val state = remember { ContextMenuState() }
-        androidx.compose.foundation.contextmenu.ContextMenuArea(
-            state = state,
-            onDismiss = { state.close() },
-            contextMenuBuilderBlock = manager.contextMenuBuilder(state),
-            content = content,
-        )
-    }
+    val state = remember { ContextMenuState() }
+    androidx.compose.foundation.contextmenu.ContextMenuArea(
+        state = state,
+        onDismiss = { state.close() },
+        contextMenuBuilderBlock = manager.contextMenuBuilder(state),
+        content = content,
+    )
 }
 
 /**
diff --git a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/contextmenu/internal/DefaultTextContextMenuDropdownProvider.android.kt b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/contextmenu/internal/DefaultTextContextMenuDropdownProvider.android.kt
index 63475f7..7af0df3 100644
--- a/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/contextmenu/internal/DefaultTextContextMenuDropdownProvider.android.kt
+++ b/compose/foundation/foundation/src/androidMain/kotlin/androidx/compose/foundation/text/contextmenu/internal/DefaultTextContextMenuDropdownProvider.android.kt
@@ -33,6 +33,7 @@
 import androidx.compose.runtime.derivedStateOf
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberUpdatedState
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.paint
 import androidx.compose.ui.graphics.Color
@@ -40,7 +41,6 @@
 import androidx.compose.ui.graphics.isUnspecified
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.layout.LayoutCoordinates
-import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntRect
@@ -64,34 +64,20 @@
     )
 }
 
-@Composable
-internal fun ProvideDefaultTextContextMenuDropdown(
-    modifier: Modifier,
-    content: @Composable () -> Unit
-) {
-    ProvideBasicTextContextMenu(
-        modifier = modifier,
-        providableCompositionLocal = LocalTextContextMenuDropdownProvider,
-        contextMenu = { session, dataProvider, anchorLayoutCoordinates ->
-            OpenContextMenu(session, dataProvider, anchorLayoutCoordinates)
-        },
-        content = content
-    )
-}
-
 private val DefaultPopupProperties = PopupProperties(focusable = true)
 
 @Composable
 private fun OpenContextMenu(
     session: TextContextMenuSession,
     dataProvider: TextContextMenuDataProvider,
-    anchorLayoutCoordinates: () -> LayoutCoordinates,
+    anchorLayoutCoordinates: LayoutCoordinates,
 ) {
+    val updatedAnchorLayoutCoordinates by rememberUpdatedState(anchorLayoutCoordinates)
     val popupPositionProvider =
         remember(dataProvider) {
             MaintainWindowPositionPopupPositionProvider(
                 ContextMenuPopupPositionProvider({
-                    dataProvider.position(anchorLayoutCoordinates()).round()
+                    dataProvider.position(updatedAnchorLayoutCoordinates).round()
                 })
             )
         }
@@ -135,17 +121,8 @@
 // Lift of relevant M3 Icon parts.
 @Composable
 private fun IconBox(@DrawableRes resId: Int, tint: Color) {
-    val context = LocalContext.current
-    val drawableResourceId =
-        remember(context, resId) {
-            context
-                .obtainStyledAttributes(intArrayOf(resId))
-                .getResourceId(/* index= */ 0, /* defValue= */ -1)
-        }
-    if (drawableResourceId == -1) return
-
-    val painter = painterResource(drawableResourceId)
     val colorFilter = remember(tint) { if (tint.isUnspecified) null else ColorFilter.tint(tint) }
+    val painter = painterResource(resId)
     Box(
         Modifier.size(ContextMenuSpec.IconSize)
             .paint(painter, colorFilter = colorFilter, contentScale = ContentScale.Fit)
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/CacheWindowLogic.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyLayoutCacheWindowStrategy.kt
similarity index 75%
rename from compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/CacheWindowLogic.kt
rename to compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyLayoutCacheWindowStrategy.kt
index 6e2c61f..82f13e4 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/CacheWindowLogic.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyLayoutCacheWindowStrategy.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2025 The Android Open Source Project
+ * Copyright 2024 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,24 +14,30 @@
  * limitations under the License.
  */
 
-package androidx.compose.foundation.lazy.layout
+package androidx.compose.foundation.lazy
 
 import androidx.collection.mutableIntIntMapOf
 import androidx.collection.mutableIntObjectMapOf
 import androidx.collection.mutableIntSetOf
 import androidx.compose.foundation.ExperimentalFoundationApi
+import androidx.compose.foundation.gestures.snapping.singleAxisViewportSize
+import androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow
 import androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState.PrefetchHandle
-import androidx.compose.ui.unit.Density
+import androidx.compose.foundation.lazy.layout.NestedPrefetchScope
+import androidx.compose.ui.util.fastForEach
 import androidx.compose.ui.util.traceValue
 import kotlin.math.absoluteValue
 import kotlin.math.roundToInt
 import kotlin.math.sign
 
-/** Implements the logic for [LazyLayoutCacheWindow] prefetching and item preservation. */
+/**
+ * This is a transition class based on [LazyListPrefetchStrategy] where we will perform a window
+ * based prefetching for items in the direction of the scroll movement (ahead).
+ */
 @OptIn(ExperimentalFoundationApi::class)
-internal abstract class CacheWindowLogic(
+internal class CacheWindowListPrefetchStrategy(
     private val cacheWindow: LazyLayoutCacheWindow,
-) {
+) : LazyListPrefetchStrategy {
 
     /** Handles for prefetched items in the current forward window. */
     private val prefetchWindowHandles = mutableIntObjectMapOf<PrefetchHandle>()
@@ -44,7 +50,7 @@
     private val windowCache = mutableIntIntMapOf()
     private var previousPassDelta = 0f
 
-    protected var nestedPrefetchItemCount: Int = 2
+    private var nestedPrefetchItemCount: Int = 2
 
     /**
      * Indices for the start and end of the cache window. The items between
@@ -74,9 +80,9 @@
     /** Keep the latest item count where it can be used more easily. */
     private var itemsCount = 0
 
-    fun CacheWindowScope.onScroll(delta: Float) {
+    override fun LazyListPrefetchScope.onScroll(delta: Float, layoutInfo: LazyListLayoutInfo) {
         traceWindowInfo()
-        updateCacheWindow(delta)
+        updateCacheWindow(delta, layoutInfo)
         previousPassDelta = delta
         traceWindowInfo()
     }
@@ -88,16 +94,16 @@
         traceValue("prefetchWindowEndIndex", prefetchWindowEndIndex.toLong())
     }
 
-    fun CacheWindowScope.onVisibleItemsUpdated() {
-        itemsCount = totalItemsCount
+    override fun LazyListPrefetchScope.onVisibleItemsUpdated(layoutInfo: LazyListLayoutInfo) {
+        itemsCount = layoutInfo.totalItemsCount
         // If visible items changed, update cached information. Any items that were visible
         // and became out of bounds will either count for the cache window or be cancelled/removed
         // by [cancelOutOfBounds]. If any items changed sizes we re-trigger the window filling
         // update.
-        if (hasVisibleItems) {
-            forEachVisibleItem { index, mainAxisSize -> cacheVisibleItemsInfo(index, mainAxisSize) }
+        if (layoutInfo.visibleItemsInfo.isNotEmpty()) {
+            layoutInfo.visibleItemsInfo.fastForEach { cacheVisibleItemsInfo(it.index, it.size) }
             if (shouldRefillWindow) {
-                updateCacheWindow(0.0f)
+                updateCacheWindow(0.0f, layoutInfo)
                 shouldRefillWindow = false
             }
         } else {
@@ -107,39 +113,65 @@
         }
     }
 
+    override fun NestedPrefetchScope.onNestedPrefetch(firstVisibleItemIndex: Int) {
+        repeat(nestedPrefetchItemCount) { schedulePrecomposition(firstVisibleItemIndex + it) }
+    }
+
     fun hasValidBounds() =
         prefetchWindowStartIndex != Int.MAX_VALUE && prefetchWindowEndIndex != Int.MIN_VALUE
 
-    private fun CacheWindowScope.updateCacheWindow(delta: Float) {
-        if (hasVisibleItems) {
-            val viewport = mainAxisViewportSize
+    private fun LazyListPrefetchScope.updateCacheWindow(
+        delta: Float,
+        layoutInfo: LazyListLayoutInfo
+    ) {
+        with(layoutInfo) {
+            if (visibleItemsInfo.isNotEmpty()) {
+                val firstVisibleItem = visibleItemsInfo.first()
+                val lastVisibleItem = visibleItemsInfo.last()
 
-            val prefetchForwardWindow =
-                with(cacheWindow) { density?.calculateAheadWindow(viewport) ?: 0 }
-            val keepAroundWindow =
-                with(cacheWindow) { density?.calculateBehindWindow(viewport) ?: 0 }
+                val viewport = singleAxisViewportSize
+                // how much of the first item is peeking out of view at the start of the layout.
+                val firstItemOverflowOffset =
+                    (firstVisibleItem.offset + beforeContentPadding).coerceAtMost(0)
 
-            // save latest item count
-            itemsCount = totalItemsCount
+                // how much of the last item is peeking out of view at the end of the layout
+                val lastItemOverflowOffset =
+                    lastVisibleItem.offset + lastVisibleItem.size + mainAxisItemSpacing
 
-            onKeepAround(
-                visibleWindowStart = firstVisibleItemIndex,
-                visibleWindowEnd = lastVisibleItemIndex,
-                keepAroundWindow = keepAroundWindow,
-                scrollDelta = delta,
-                itemsCount = totalItemsCount,
-                mainAxisExtraSpaceStart = mainAxisExtraSpaceStart,
-                mainAxisExtraSpaceEnd = mainAxisExtraSpaceEnd,
-            )
+                // extra space is always positive in this context
+                val mainAxisExtraSpaceStart = firstItemOverflowOffset.absoluteValue
 
-            onPrefetchForward(
-                visibleWindowStart = firstVisibleItemIndex,
-                visibleWindowEnd = lastVisibleItemIndex,
-                prefetchForwardWindow = prefetchForwardWindow,
-                scrollDelta = delta,
-                mainAxisExtraSpaceStart = mainAxisExtraSpaceStart,
-                mainAxisExtraSpaceEnd = mainAxisExtraSpaceEnd
-            )
+                // extra space is always positive in this context
+                val mainAxisExtraSpaceEnd =
+                    (lastItemOverflowOffset - viewportEndOffset).absoluteValue
+                val density = (layoutInfo as? LazyListMeasureResult)?.density
+                val prefetchForwardWindow =
+                    with(cacheWindow) { density?.calculateAheadWindow(viewport) ?: 0 }
+                val keepAroundWindow =
+                    with(cacheWindow) { density?.calculateBehindWindow(viewport) ?: 0 }
+
+                // save latest item count
+                itemsCount = totalItemsCount
+
+                onKeepAround(
+                    visibleWindowStart = firstVisibleItem.index,
+                    visibleWindowEnd = lastVisibleItem.index,
+                    keepAroundWindow = keepAroundWindow,
+                    scrollDelta = delta,
+                    itemsCount = totalItemsCount,
+                    mainAxisExtraSpaceStart = mainAxisExtraSpaceStart,
+                    mainAxisExtraSpaceEnd = mainAxisExtraSpaceEnd,
+                )
+
+                onPrefetchForward(
+                    visibleWindowStart = firstVisibleItem.index,
+                    visibleWindowEnd = lastVisibleItem.index,
+                    prefetchForwardWindow = prefetchForwardWindow,
+                    scrollDelta = delta,
+                    mainAxisExtraSpaceStart = mainAxisExtraSpaceStart,
+                    mainAxisExtraSpaceEnd = mainAxisExtraSpaceEnd
+                )
+            }
         }
     }
 
@@ -162,7 +194,7 @@
      * prefetch returns, we check if the window is filled and if not we schedule the next
      * prefetching.
      */
-    private fun CacheWindowScope.onPrefetchForward(
+    private fun LazyListPrefetchScope.onPrefetchForward(
         visibleWindowStart: Int,
         visibleWindowEnd: Int,
         prefetchForwardWindow: Int,
@@ -278,7 +310,7 @@
         }
     }
 
-    private fun CacheWindowScope.getItemSizeOrPrefetch(index: Int, isUrgent: Boolean): Int {
+    private fun LazyListPrefetchScope.getItemSizeOrPrefetch(index: Int, isUrgent: Boolean): Int {
         return if (windowCache.containsKey(index)) {
             windowCache[index]
         } else if (prefetchWindowHandles.containsKey(index)) {
@@ -339,13 +371,13 @@
      * Item prefetching finished, we can cache its information and schedule the next prefetching if
      * needed.
      */
-    private fun CacheWindowScope.onItemPrefetched(index: Int, itemSize: Int) {
+    private fun LazyListPrefetchScope.onItemPrefetched(index: Int, itemSize: Int) {
         cachePrefetchedItem(index, itemSize)
         scheduleNextItemIfNeeded()
         traceWindowInfo()
     }
 
-    private fun CacheWindowScope.scheduleNextItemIfNeeded() {
+    private fun LazyListPrefetchScope.scheduleNextItemIfNeeded() {
         var nextPrefetchableIndex: Int = -1
         // if was scrolling forward
         if (previousPassDelta.sign <= 0) {
@@ -364,30 +396,4 @@
     }
 }
 
-@OptIn(ExperimentalFoundationApi::class)
-/** Bridge between LazyLayout and its implementation. */
-internal interface CacheWindowScope {
-    val totalItemsCount: Int
-    val visibleItemCount: Int
-    val hasVisibleItems: Boolean
-    val mainAxisExtraSpaceStart: Int
-    val mainAxisExtraSpaceEnd: Int
-    val firstVisibleItemIndex: Int
-    val lastVisibleItemIndex: Int
-    val mainAxisViewportSize: Int
-    val density: Density?
-
-    fun schedulePrefetch(laneIndex: Int, onItemPrefetched: (Int) -> Unit): PrefetchHandle
-
-    fun getVisibleItemSize(indexInVisibleItems: Int): Int
-
-    fun getVisibleItemIndex(indexInVisibleItems: Int): Int
-}
-
-internal inline fun CacheWindowScope.forEachVisibleItem(
-    action: (itemIndex: Int, mainAxisSize: Int) -> Unit
-) {
-    repeat(visibleItemCount) { action(getVisibleItemIndex(it), getVisibleItemSize(it)) }
-}
-
 private const val InvalidItemSize = -1
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
index 9124c52..6916d42a 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
@@ -26,7 +26,6 @@
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.calculateEndPadding
 import androidx.compose.foundation.layout.calculateStartPadding
-import androidx.compose.foundation.lazy.layout.CacheWindowLogic
 import androidx.compose.foundation.lazy.layout.LazyLayout
 import androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope
 import androidx.compose.foundation.lazy.layout.StickyItemsPlacement
@@ -390,7 +389,7 @@
 
             state.applyMeasureResult(measureResult, isLookingAhead)
             // apply keep around after updating the strategy with measure result.
-            (state.prefetchStrategy as? CacheWindowLogic)?.keepAroundItems(
+            (state.prefetchStrategy as? CacheWindowListPrefetchStrategy)?.keepAroundItems(
                 measureResult.visibleItemsInfo,
                 measuredItemProvider
             )
@@ -399,7 +398,7 @@
     }
 
 @OptIn(ExperimentalFoundationApi::class)
-private fun CacheWindowLogic.keepAroundItems(
+private fun CacheWindowListPrefetchStrategy.keepAroundItems(
     visibleItemsList: List<LazyListMeasuredItem>,
     measuredItemProvider: LazyListMeasuredItemProvider
 ) {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListCacheWindowStrategy.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListCacheWindowStrategy.kt
deleted file mode 100644
index 5129ecd..0000000
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListCacheWindowStrategy.kt
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.lazy
-
-import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.gestures.snapping.singleAxisViewportSize
-import androidx.compose.foundation.lazy.layout.CacheWindowLogic
-import androidx.compose.foundation.lazy.layout.CacheWindowScope
-import androidx.compose.foundation.lazy.layout.LazyLayoutCacheWindow
-import androidx.compose.foundation.lazy.layout.LazyLayoutPrefetchState.PrefetchHandle
-import androidx.compose.foundation.lazy.layout.NestedPrefetchScope
-import androidx.compose.ui.unit.Density
-import kotlin.math.absoluteValue
-
-/**
- * This is a transition class based on [androidx.compose.foundation.lazy.LazyListPrefetchStrategy]
- * where we will perform a window based prefetching for items in the direction of the scroll
- * movement (ahead).
- */
-@OptIn(ExperimentalFoundationApi::class)
-internal class LazyListCacheWindowStrategy(cacheWindow: LazyLayoutCacheWindow) :
-    CacheWindowLogic(cacheWindow), LazyListPrefetchStrategy {
-    private val cacheWindowScope = LazyListCacheWindowScope()
-
-    override fun LazyListPrefetchScope.onScroll(delta: Float, layoutInfo: LazyListLayoutInfo) {
-        applyWindowScope(layoutInfo) { onScroll(delta) }
-    }
-
-    override fun LazyListPrefetchScope.onVisibleItemsUpdated(layoutInfo: LazyListLayoutInfo) {
-        applyWindowScope(layoutInfo) { onVisibleItemsUpdated() }
-    }
-
-    override fun NestedPrefetchScope.onNestedPrefetch(firstVisibleItemIndex: Int) {
-        repeat(nestedPrefetchItemCount) { schedulePrecomposition(firstVisibleItemIndex + it) }
-    }
-
-    /** Adapts the LazyListPrefetchScope and LazyListLayoutInfo to a single scope. */
-    private inline fun LazyListPrefetchScope.applyWindowScope(
-        layoutInfo: LazyListLayoutInfo,
-        block: CacheWindowScope.() -> Unit
-    ) {
-        cacheWindowScope.layoutInfo = layoutInfo
-        cacheWindowScope.prefetchScope = this
-        block(cacheWindowScope)
-    }
-}
-
-@OptIn(ExperimentalFoundationApi::class)
-internal class LazyListCacheWindowScope() : CacheWindowScope {
-    lateinit var layoutInfo: LazyListLayoutInfo
-    lateinit var prefetchScope: LazyListPrefetchScope
-
-    override val totalItemsCount: Int
-        get() = layoutInfo.totalItemsCount
-
-    override val hasVisibleItems: Boolean
-        get() = layoutInfo.visibleItemsInfo.isNotEmpty()
-
-    override val mainAxisExtraSpaceStart: Int
-        get() {
-            val firstVisibleItem = layoutInfo.visibleItemsInfo.first()
-            // how much of the first item is peeking out of view at the start of the layout.
-            val firstItemOverflowOffset =
-                (firstVisibleItem.offset + layoutInfo.beforeContentPadding).coerceAtMost(0)
-            // extra space is always positive in this context
-            return firstItemOverflowOffset.absoluteValue
-        }
-
-    override val mainAxisExtraSpaceEnd: Int
-        get() {
-            val lastVisibleItem = layoutInfo.visibleItemsInfo.last()
-            // how much of the last item is peeking out of view at the end of the layout
-            val lastItemOverflowOffset =
-                lastVisibleItem.offset + lastVisibleItem.size + layoutInfo.mainAxisItemSpacing
-
-            // extra space is always positive in this context
-            return (lastItemOverflowOffset - layoutInfo.viewportEndOffset).absoluteValue
-        }
-
-    override val firstVisibleItemIndex: Int
-        get() = layoutInfo.visibleItemsInfo.first().index
-
-    override val lastVisibleItemIndex: Int
-        get() = layoutInfo.visibleItemsInfo.last().index
-
-    override val mainAxisViewportSize: Int
-        get() = layoutInfo.singleAxisViewportSize
-
-    override val density: Density?
-        get() = (layoutInfo as? LazyListMeasureResult)?.density
-
-    override fun schedulePrefetch(laneIndex: Int, onItemPrefetched: (Int) -> Unit): PrefetchHandle {
-        return prefetchScope.schedulePrefetch(laneIndex, onItemPrefetched)
-    }
-
-    override val visibleItemCount: Int
-        get() = layoutInfo.visibleItemsInfo.size
-
-    override fun getVisibleItemSize(indexInVisibleItems: Int): Int =
-        layoutInfo.visibleItemsInfo[indexInVisibleItems].size
-
-    override fun getVisibleItemIndex(indexInVisibleItems: Int): Int =
-        layoutInfo.visibleItemsInfo[indexInVisibleItems].index
-}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
index 5cb8856..bd97653 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
@@ -130,7 +130,7 @@
         LazyListState(
             initialFirstVisibleItemIndex,
             initialFirstVisibleItemScrollOffset,
-            prefetchStrategy = LazyListCacheWindowStrategy(cacheWindow)
+            prefetchStrategy = CacheWindowListPrefetchStrategy(cacheWindow)
         )
     }
 }
@@ -171,7 +171,7 @@
     ) : this(
         firstVisibleItemIndex,
         firstVisibleItemScrollOffset,
-        LazyListCacheWindowStrategy(cacheWindow)
+        CacheWindowListPrefetchStrategy(cacheWindow)
     )
 
     /**
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayout.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayout.kt
index aa08c14..9880185 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayout.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayout.kt
@@ -89,7 +89,7 @@
 
     override fun getSlotsToRetain(slotIds: SubcomposeSlotReusePolicy.SlotIdsSet) {
         countPerType.clear()
-        slotIds.fastForEach { slotId ->
+        slotIds.forEach { slotId ->
             val type = factory.getContentType(slotId)
             val currentCount = countPerType.getOrDefault(type, 0)
             if (currentCount == MaxItemsToRetainForReuse) {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutCacheWindow.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutCacheWindow.kt
index bc53149..155be34 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutCacheWindow.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutCacheWindow.kt
@@ -16,7 +16,6 @@
 
 package androidx.compose.foundation.lazy.layout
 
-import androidx.annotation.FloatRange
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Density
@@ -33,20 +32,16 @@
 interface LazyLayoutCacheWindow {
 
     /**
-     * Calculates the prefetch window area in pixels for prefetching on the scroll direction, "ahead
-     * window". The prefetch window strategy will prepare items in the ahead area in advance s they
-     * are ready to be used when they become visible.
-     *
-     * @param viewport The size of the viewport in this Lazy Layout in pixels.
+     * Calculates the prefetch window area for prefetching on the scroll direction, "ahead window".
+     * The prefetch window strategy will prepare items in the ahead area in advance so they're ready
+     * to be used when they become visible.
      */
     fun Density.calculateAheadWindow(viewport: Int): Int = 0
 
     /**
-     * Calculates the window area in pixels for keeping items in the scroll counter direction,
-     * "behind window". Items in the behind window will not be disposed and can be accessed more
-     * quickly if they become visible again.
-     *
-     * @param viewport The size of the viewport in this Lazy Layout in pixels.
+     * Calculates the window area for keeping items in the scroll counter direction, "behind
+     * window". Items in the behind window will not be disposed and can be accessed more quickly if
+     * they become visible again.
      */
     fun Density.calculateBehindWindow(viewport: Int): Int = 0
 }
@@ -91,8 +86,8 @@
  */
 @ExperimentalFoundationApi
 fun LazyLayoutCacheWindow(
-    @FloatRange(from = 0.0) aheadFraction: Float = 0.0f,
-    @FloatRange(from = 0.0) behindFraction: Float = 0.0f
+    aheadFraction: Float = 0.0f,
+    behindFraction: Float = 0.0f
 ): LazyLayoutCacheWindow = FractionLazyLayoutCacheWindow(aheadFraction, behindFraction)
 
 @OptIn(ExperimentalFoundationApi::class)
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState.kt
index e37bf5f..d58d3e4 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState.kt
@@ -166,11 +166,8 @@
         /** The amount of placeables composed into this item. */
         val placeablesCount: Int
 
-        /** The index of the prefetched item. */
-        val index: Int
-
-        /** Retrieves the latest measured size for a given placeable [placeableIndex] in pixels. */
-        fun getSize(placeableIndex: Int): IntSize
+        /** Retrieves the latest measured size for a given placeable [index] in pixels. */
+        fun getSize(index: Int): IntSize
     }
 
     private inner class NestedPrefetchScopeImpl : NestedPrefetchScope {
@@ -287,10 +284,6 @@
 internal class Averages {
     /** Average time the full composition phase has taken. */
     var compositionTimeNanos: Long = 0L
-    /** Average time needed to resume the pausable composition until the next interruption. */
-    var resumeTimeNanos: Long = 0L
-    /** Average time needed to pause the pausable composition. */
-    var pauseTimeNanos: Long = 0L
     /** Average time the apply phase has taken. */
     var applyTimeNanos: Long = 0L
     /** Average time the measure phase has taken. */
@@ -300,14 +293,6 @@
         compositionTimeNanos = calculateAverageTime(timeNanos, compositionTimeNanos)
     }
 
-    fun saveResumeTimeNanos(timeNanos: Long) {
-        resumeTimeNanos = calculateAverageTime(timeNanos, resumeTimeNanos)
-    }
-
-    fun savePauseTimeNanos(timeNanos: Long) {
-        pauseTimeNanos = calculateAverageTime(timeNanos, pauseTimeNanos)
-    }
-
     fun saveApplyTimeNanos(timeNanos: Long) {
         applyTimeNanos = calculateAverageTime(timeNanos, applyTimeNanos)
     }
@@ -382,7 +367,7 @@
 
     @ExperimentalFoundationApi
     private inner class HandleAndRequestImpl(
-        override val index: Int,
+        private val index: Int,
         private val prefetchMetrics: PrefetchMetrics,
         private val onItemPremeasured: (LazyLayoutPrefetchResultScope.() -> Unit)?
     ) : PrefetchHandle, PrefetchRequest, LazyLayoutPrefetchResultScope {
@@ -422,8 +407,8 @@
         override val placeablesCount: Int
             get() = (precomposeHandle?.placeablesCount ?: 0)
 
-        override fun getSize(placeableIndex: Int): IntSize {
-            return (precomposeHandle?.getSize(placeableIndex) ?: IntSize.Zero)
+        override fun getSize(index: Int): IntSize {
+            return (precomposeHandle?.getSize(index) ?: IntSize.Zero)
         }
 
         private fun shouldExecute(available: Long, average: Long): Boolean {
@@ -478,27 +463,17 @@
             // and manually update it later by calling updateElapsedAndAvailableTime()
             resetAvailableTimeTo(availableTimeNanos())
             if (!isComposed) {
-                if (ComposeFoundationFlags.isPausableCompositionInPrefetchEnabled) {
-                    if (
-                        shouldExecute(
-                            availableTimeNanos,
-                            average.resumeTimeNanos + average.pauseTimeNanos
-                        )
-                    ) {
-                        trace("compose:lazy:prefetch:compose") {
-                            performPausableComposition(itemProvider, contentType, average)
-                        }
-                    }
-                } else {
-                    if (shouldExecute(availableTimeNanos, average.compositionTimeNanos)) {
-                        trace("compose:lazy:prefetch:compose") {
+                if (shouldExecute(availableTimeNanos, average.compositionTimeNanos)) {
+                    trace("compose:lazy:prefetch:compose") {
+                        if (ComposeFoundationFlags.isPausableCompositionInPrefetchEnabled) {
+                            performPausableComposition(itemProvider, contentType)
+                        } else {
                             performFullComposition(itemProvider, contentType)
                         }
-                        updateElapsedAndAvailableTime()
-                        average.saveCompositionTimeNanos(elapsedTimeNanos)
                     }
-                }
-                if (!isComposed) {
+                    updateElapsedAndAvailableTime()
+                    average.saveCompositionTimeNanos(elapsedTimeNanos)
+                } else {
                     return true
                 }
             }
@@ -559,46 +534,24 @@
             return false
         }
 
-        private var pauseRequested = false
-
         private fun performPausableComposition(
             itemProvider: LazyLayoutItemProvider,
-            contentType: Any?,
-            averages: Averages
+            contentType: Any?
         ) {
-            val composition =
-                pausedPrecomposition
-                    ?: run {
-                        val key = itemProvider.getKey(index)
-                        val content = itemContentFactory.getContent(index, key, contentType)
-                        subcomposeLayoutState.createPausedPrecomposition(key, content).also {
-                            pausedPrecomposition = it
-                        }
-                    }
-
-            pauseRequested = false
-
-            composition.resume {
-                if (!pauseRequested) {
-                    updateElapsedAndAvailableTime()
-                    averages.saveResumeTimeNanos(elapsedTimeNanos)
-                    pauseRequested =
-                        !shouldExecute(
-                            availableTimeNanos,
-                            averages.resumeTimeNanos + averages.pauseTimeNanos
-                        )
+            requirePrecondition(precomposeHandle == null) { "Request was already composed!" }
+            val key = itemProvider.getKey(index)
+            val content = itemContentFactory.getContent(index, key, contentType)
+            val pausedPrecomposition =
+                subcomposeLayoutState.createPausedPrecomposition(key, content)
+            while (!pausedPrecomposition.isComplete) {
+                // as a first step we don't really pause the composition, but we split the
+                // whole composition and the apply step.
+                pausedPrecomposition.resume { /*should never pause*/
+                    false
                 }
-                pauseRequested
             }
-
-            updateElapsedAndAvailableTime()
-            if (pauseRequested) {
-                averages.savePauseTimeNanos(elapsedTimeNanos)
-            } else {
-                averages.saveResumeTimeNanos(elapsedTimeNanos)
-            }
-
-            isComposed = composition.isComplete
+            this.pausedPrecomposition = pausedPrecomposition
+            isComposed = true
         }
 
         private fun performFullComposition(
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/BasicTextField.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/BasicTextField.kt
index f030605..0186f5698 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/BasicTextField.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/BasicTextField.kt
@@ -369,7 +369,13 @@
         )
     }
 
-    DisposableEffect(textFieldSelectionState) { onDispose { textFieldSelectionState.dispose() } }
+    DisposableEffect(textFieldSelectionState) {
+        // This runs before the above SideEffect, but we need to ensure the clipboard is updated
+        // before updateClipboardEntry is called, so set it here as well.
+        textFieldSelectionState.updateClipboard(currentClipboard)
+        coroutineScope.launch { textFieldSelectionState.updateClipboardEntry() }
+        onDispose { textFieldSelectionState.dispose() }
+    }
 
     val handwritingEnabled =
         !isPassword &&
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
index 69d6e5e..bc03131 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
@@ -473,7 +473,10 @@
     val showCursor = enabled && !readOnly && windowInfo.isWindowFocused && !state.hasHighlight()
     val cursorModifier = Modifier.cursor(state, value, offsetMapping, cursorBrush, showCursor)
 
-    DisposableEffect(manager) { onDispose { manager.hideSelectionToolbar() } }
+    DisposableEffect(manager) {
+        coroutineScope.launch { manager.updateClipboardEntry() }
+        onDispose { manager.hideSelectionToolbar() }
+    }
 
     DisposableEffect(imeOptions) {
         if (state.hasFocus) {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/gestures/RightClickGestures.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/gestures/RightClickGestures.kt
deleted file mode 100644
index 6fdd1e5..0000000
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/gestures/RightClickGestures.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text.contextmenu.gestures
-
-import androidx.compose.foundation.gestures.awaitEachGesture
-import androidx.compose.foundation.gestures.waitForUpOrCancellation
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.input.pointer.AwaitPointerEventScope
-import androidx.compose.ui.input.pointer.PointerInputChange
-import androidx.compose.ui.input.pointer.PointerInputScope
-import androidx.compose.ui.input.pointer.changedToDown
-import androidx.compose.ui.input.pointer.isSecondaryPressed
-import androidx.compose.ui.util.fastAll
-
-/** Similar to PointerInputScope.detectTapAndPress, but for right clicks. */
-internal suspend fun PointerInputScope.onRightClickDown(onDown: (Offset) -> Unit) {
-    awaitEachGesture {
-        val down = awaitFirstRightClickDown()
-        down.consume()
-        onDown(down.position)
-        waitForUpOrCancellation()?.consume()
-    }
-}
-
-/**
- * Similar to AwaitPointerEventScope.awaitFirstDown, but with an additional check to ensure it is a
- * right click.
- */
-private suspend fun AwaitPointerEventScope.awaitFirstRightClickDown(): PointerInputChange {
-    while (true) {
-        val event = awaitPointerEvent()
-        if (event.buttons.isSecondaryPressed && event.changes.fastAll { it.changedToDown() }) {
-            return event.changes[0]
-        }
-    }
-}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/modifier/TextContextMenuGesturesModifier.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/modifier/TextContextMenuGesturesModifier.kt
deleted file mode 100644
index d323377..0000000
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/modifier/TextContextMenuGesturesModifier.kt
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.foundation.text.contextmenu.modifier
-
-import androidx.compose.foundation.internal.checkPreconditionNotNull
-import androidx.compose.foundation.text.contextmenu.data.TextContextMenuData
-import androidx.compose.foundation.text.contextmenu.gestures.onRightClickDown
-import androidx.compose.foundation.text.contextmenu.provider.LocalTextContextMenuDropdownProvider
-import androidx.compose.foundation.text.contextmenu.provider.TextContextMenuDataProvider
-import androidx.compose.foundation.text.contextmenu.provider.TextContextMenuProvider
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.neverEqualPolicy
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.geometry.Rect
-import androidx.compose.ui.geometry.Size
-import androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode
-import androidx.compose.ui.layout.LayoutCoordinates
-import androidx.compose.ui.node.CompositionLocalConsumerModifierNode
-import androidx.compose.ui.node.DelegatingNode
-import androidx.compose.ui.node.GlobalPositionAwareModifierNode
-import androidx.compose.ui.node.ModifierNodeElement
-import androidx.compose.ui.node.currentValueOf
-import androidx.compose.ui.platform.InspectorInfo
-import kotlinx.coroutines.launch
-
-/**
- * Shows the dropdown context menu (via [LocalTextContextMenuDropdownProvider]) when a right click
- * is received.
- *
- * @param onPreShowContextMenu A lambda that will be invoked right before
- *   [TextContextMenuProvider.showTextContextMenu].
- */
-internal fun Modifier.textContextMenuGestures(
-    onPreShowContextMenu: (suspend () -> Unit)? = null,
-): Modifier = this then TextContextMenuGestureElement(onPreShowContextMenu)
-
-private class TextContextMenuGestureElement(
-    private val onPreShowContextMenu: (suspend () -> Unit)?,
-) : ModifierNodeElement<TextContextMenuGestureNode>() {
-    override fun create(): TextContextMenuGestureNode =
-        TextContextMenuGestureNode(onPreShowContextMenu)
-
-    override fun update(node: TextContextMenuGestureNode) {
-        node.update(onPreShowContextMenu)
-    }
-
-    override fun InspectorInfo.inspectableProperties() {
-        name = "TextContextMenuGestures"
-        properties["onPreShowContextMenu"] = onPreShowContextMenu
-    }
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is TextContextMenuGestureElement) return false
-
-        if (onPreShowContextMenu !== other.onPreShowContextMenu) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int = onPreShowContextMenu.hashCode()
-}
-
-private class TextContextMenuGestureNode(
-    private var onPreShowContextMenu: (suspend () -> Unit)?,
-) : DelegatingNode(), CompositionLocalConsumerModifierNode, GlobalPositionAwareModifierNode {
-
-    private companion object {
-        private const val MESSAGE = "Tried to open context menu before the anchor was placed."
-    }
-
-    private var localCoordinates: LayoutCoordinates? by mutableStateOf(null, neverEqualPolicy())
-
-    init {
-        delegate(SuspendingPointerInputModifierNode { onRightClickDown(::tryShowContextMenu) })
-    }
-
-    fun update(
-        onPreShowContextMenu: (suspend () -> Unit)?,
-    ) {
-        this.onPreShowContextMenu = onPreShowContextMenu
-    }
-
-    override fun onGloballyPositioned(coordinates: LayoutCoordinates) {
-        this.localCoordinates = coordinates
-    }
-
-    private fun tryShowContextMenu(localClickOffset: Offset) {
-        val provider = currentValueOf(LocalTextContextMenuDropdownProvider) ?: return
-        val dataProvider = ClickTextContextMenuDataProvider(localClickOffset)
-        coroutineScope.launch {
-            onPreShowContextMenu?.invoke()
-            provider.showTextContextMenu(dataProvider)
-        }
-    }
-
-    private inner class ClickTextContextMenuDataProvider(
-        private val localClickOffset: Offset,
-    ) : TextContextMenuDataProvider {
-        override fun position(destinationCoordinates: LayoutCoordinates): Offset {
-            val localCoordinates = checkPreconditionNotNull(localCoordinates) { MESSAGE }
-            return destinationCoordinates.localPositionOf(localCoordinates, localClickOffset)
-        }
-
-        override fun contentBounds(destinationCoordinates: LayoutCoordinates): Rect =
-            Rect(position(destinationCoordinates), Size.Zero)
-
-        override fun data(): TextContextMenuData = collectTextContextMenuData()
-    }
-}
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProvider.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProvider.kt
index 027412f..afc5b9c 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProvider.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/contextmenu/provider/BasicTextContextMenuProvider.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.contextmenu.provider
 
+import androidx.annotation.VisibleForTesting
 import androidx.compose.foundation.MutatorMutex
-import androidx.compose.foundation.internal.checkPreconditionNotNull
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.text.contextmenu.data.TextContextMenuSession
 import androidx.compose.runtime.Composable
@@ -27,7 +27,6 @@
 import androidx.compose.runtime.ProvidableCompositionLocal
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.neverEqualPolicy
 import androidx.compose.runtime.remember
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
@@ -59,13 +58,14 @@
         (
             session: TextContextMenuSession,
             dataProvider: TextContextMenuDataProvider,
-            anchorLayoutCoordinates: () -> LayoutCoordinates,
+            anchorLayoutCoordinates: LayoutCoordinates,
         ) -> Unit,
     content: @Composable () -> Unit
 ) {
     ProvideBasicTextContextMenu(Modifier, providableCompositionLocal, contextMenu, content)
 }
 
+@VisibleForTesting
 @Composable
 internal fun ProvideBasicTextContextMenu(
     modifier: Modifier,
@@ -75,24 +75,21 @@
         (
             session: TextContextMenuSession,
             dataProvider: TextContextMenuDataProvider,
-            anchorLayoutCoordinates: () -> LayoutCoordinates,
+            anchorLayoutCoordinates: LayoutCoordinates,
         ) -> Unit,
     content: @Composable () -> Unit
 ) {
     val provider = remember(contextMenu) { BasicTextContextMenuProvider(contextMenu) }
     DisposableEffect(provider) { onDispose { provider.cancel() } }
 
-    var layoutCoordinates: LayoutCoordinates? by remember {
-        mutableStateOf(null, neverEqualPolicy())
-    }
-
-    CompositionLocalProvider(providableCompositionLocal provides provider) {
-        Box(
-            propagateMinConstraints = true,
-            modifier = modifier.onGloballyPositioned { layoutCoordinates = it }
-        ) {
+    var layoutCoordinates by remember { mutableStateOf<LayoutCoordinates?>(null) }
+    Box(
+        propagateMinConstraints = true,
+        modifier = modifier.onGloballyPositioned { layoutCoordinates = it }
+    ) {
+        CompositionLocalProvider(providableCompositionLocal provides provider) {
             content()
-            provider.ContextMenu { checkPreconditionNotNull(layoutCoordinates) }
+            provider.ContextMenu(layoutCoordinates)
         }
     }
 }
@@ -103,7 +100,7 @@
         (
             session: TextContextMenuSession,
             dataProvider: TextContextMenuDataProvider,
-            anchorLayoutCoordinates: () -> LayoutCoordinates,
+            anchorLayoutCoordinates: LayoutCoordinates,
         ) -> Unit
 ) : TextContextMenuProvider {
     private val mutatorMutex = MutatorMutex()
@@ -122,7 +119,8 @@
     }
 
     @Composable
-    fun ContextMenu(anchorLayoutCoordinates: () -> LayoutCoordinates) {
+    fun ContextMenu(anchorLayoutCoordinates: LayoutCoordinates?) {
+        anchorLayoutCoordinates ?: return
         val session = session ?: return
         contextMenuBlock(session, session.dataProvider, anchorLayoutCoordinates)
     }
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldSelectionState.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldSelectionState.kt
index 486925a..a61bbbe 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldSelectionState.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/text/input/internal/selection/TextFieldSelectionState.kt
@@ -373,6 +373,10 @@
         this.isPassword = isPassword
     }
 
+    fun updateClipboard(clipboard: Clipboard) {
+        this.clipboard = clipboard
+    }
+
     /** Implements the complete set of gestures supported by the cursor handle. */
     suspend fun PointerInputScope.cursorHandleGestures() {
         coroutineScope {
diff --git a/compose/integration-tests/hero/jetsnack/jetsnack-implementation/build.gradle b/compose/integration-tests/hero/jetsnack/jetsnack-implementation/build.gradle
index 6a77c78..f36383c 100644
--- a/compose/integration-tests/hero/jetsnack/jetsnack-implementation/build.gradle
+++ b/compose/integration-tests/hero/jetsnack/jetsnack-implementation/build.gradle
@@ -46,7 +46,7 @@
     implementation("androidx.cardview:cardview:1.0.0")
 
     implementation(libs.kotlinStdlib)
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":compose:foundation:foundation-layout"))
     implementation(project(":compose:foundation:foundation"))
     implementation(project(":compose:material:material"))
diff --git a/compose/integration-tests/macrobenchmark-target/build.gradle b/compose/integration-tests/macrobenchmark-target/build.gradle
index 67b66ab..0181c01 100644
--- a/compose/integration-tests/macrobenchmark-target/build.gradle
+++ b/compose/integration-tests/macrobenchmark-target/build.gradle
@@ -53,7 +53,7 @@
 
     implementation(libs.kotlinStdlib)
     implementation(libs.material)
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation("androidx.appcompat:appcompat:1.4.1")
     implementation("androidx.cardview:cardview:1.0.0")
     // old version of common-java8 conflicts with newer version, because both have
diff --git a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/ui/specification/SpecificationTopAppBar.kt b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/ui/specification/SpecificationTopAppBar.kt
index 526f5a8..644965f 100644
--- a/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/ui/specification/SpecificationTopAppBar.kt
+++ b/compose/integration-tests/material-catalog/src/main/java/androidx/compose/material/catalog/ui/specification/SpecificationTopAppBar.kt
@@ -47,7 +47,7 @@
         lerp(
             MaterialTheme.colorScheme.surface,
             MaterialTheme.colorScheme.surfaceColorAtElevation(elevation = 3.dp),
-            FastOutLinearInEasing.transform(scrollBehavior?.state?.overlappedFraction() ?: 0f)
+            FastOutLinearInEasing.transform(scrollBehavior?.state?.overlappedFraction ?: 0f)
         )
 
     val foregroundColors =
diff --git a/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt b/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
index 9ff33dd..00cf2d9 100644
--- a/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
+++ b/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
@@ -1412,23 +1412,6 @@
     }
 
     @Test
-    fun outlinedTextField_withTrailingIcon_inIntrinsicHeight_andTooShortWidth_doesNotCrash() {
-        // Regression test for b/328954156
-        rule.setContent {
-            Box(Modifier.width(200.dp)) {
-                Box(Modifier.height(IntrinsicSize.Min)) {
-                    OutlinedTextField(
-                        state = rememberTextFieldState(),
-                        modifier = Modifier.padding(100.dp),
-                        trailingIcon = { Box(Modifier.size(20.dp)) },
-                    )
-                }
-            }
-        }
-        // Nothing to assert; just make sure it doesn't crash
-    }
-
-    @Test
     fun outlinedTextField_stringOverload_doesNotCallOnValueChange_whenCompositionUpdatesOnly() {
         var callbackCounter = 0
 
diff --git a/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt b/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
index 20e1e91..8136e1b 100644
--- a/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
+++ b/compose/material/material/src/androidInstrumentedTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
@@ -1478,23 +1478,6 @@
     }
 
     @Test
-    fun textField_withTrailingIcon_inIntrinsicHeight_andTooShortWidth_doesNotCrash() {
-        // Regression test for b/328954156
-        rule.setContent {
-            Box(Modifier.width(200.dp)) {
-                Box(Modifier.height(IntrinsicSize.Min)) {
-                    TextField(
-                        state = rememberTextFieldState(),
-                        modifier = Modifier.padding(100.dp),
-                        trailingIcon = { Box(Modifier.size(20.dp)) },
-                    )
-                }
-            }
-        }
-        // Nothing to assert; just make sure it doesn't crash
-    }
-
-    @Test
     fun textField_stringOverload_doesNotCallOnValueChange_whenCompositionUpdatesOnly() {
         var callbackCounter = 0
 
diff --git a/compose/material/material/src/androidMain/res/values-af/strings.xml b/compose/material/material/src/androidMain/res/values-af/strings.xml
index ddce6af..eede087 100644
--- a/compose/material/material/src/androidMain/res/values-af/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-af/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Opletberig"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Opletberig"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-am/strings.xml b/compose/material/material/src/androidMain/res/values-am/strings.xml
index cce41be..ec8e8e7 100644
--- a/compose/material/material/src/androidMain/res/values-am/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-am/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"ማንቂያ"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"ማንቂያ"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ar/strings.xml b/compose/material/material/src/androidMain/res/values-ar/strings.xml
index 5aeebd9..4db049a 100644
--- a/compose/material/material/src/androidMain/res/values-ar/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ar/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"تنبيه"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"تنبيه"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-as/strings.xml b/compose/material/material/src/androidMain/res/values-as/strings.xml
index e240e78..c5a47f6 100644
--- a/compose/material/material/src/androidMain/res/values-as/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-as/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"সতৰ্কবাৰ্তা"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"সতৰ্কবাৰ্তা"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-az/strings.xml b/compose/material/material/src/androidMain/res/values-az/strings.xml
index 59ebe11..0018239 100644
--- a/compose/material/material/src/androidMain/res/values-az/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-az/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Xəbərdarlıq"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Xəbərdarlıq"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-b+sr+Latn/strings.xml b/compose/material/material/src/androidMain/res/values-b+sr+Latn/strings.xml
index d84faa9..bc20a68 100644
--- a/compose/material/material/src/androidMain/res/values-b+sr+Latn/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-b+sr+Latn/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Obaveštenje"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Obaveštenje"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-be/strings.xml b/compose/material/material/src/androidMain/res/values-be/strings.xml
index 1c8125a..561925b 100644
--- a/compose/material/material/src/androidMain/res/values-be/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-be/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Абвестка"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Абвестка"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-bg/strings.xml b/compose/material/material/src/androidMain/res/values-bg/strings.xml
index 001b32a1..4134707 100644
--- a/compose/material/material/src/androidMain/res/values-bg/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-bg/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Сигнал"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Сигнал"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-bn/strings.xml b/compose/material/material/src/androidMain/res/values-bn/strings.xml
index 1c3087e..7968901 100644
--- a/compose/material/material/src/androidMain/res/values-bn/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-bn/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"সতর্কতা"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"সতর্কতা"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-bs/strings.xml b/compose/material/material/src/androidMain/res/values-bs/strings.xml
index a66b1c9..d7fc77e 100644
--- a/compose/material/material/src/androidMain/res/values-bs/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-bs/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Obavještenje"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Obavještenje"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ca/strings.xml b/compose/material/material/src/androidMain/res/values-ca/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-ca/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ca/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-cs/strings.xml b/compose/material/material/src/androidMain/res/values-cs/strings.xml
index f1407da..9e57e65 100644
--- a/compose/material/material/src/androidMain/res/values-cs/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-cs/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Upozornění"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Upozornění"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-da/strings.xml b/compose/material/material/src/androidMain/res/values-da/strings.xml
index dfddac3..3fe0251 100644
--- a/compose/material/material/src/androidMain/res/values-da/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-da/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Underretning"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Underretning"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-de/strings.xml b/compose/material/material/src/androidMain/res/values-de/strings.xml
index 3847958..c0ea84d 100644
--- a/compose/material/material/src/androidMain/res/values-de/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-de/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Warnmeldung"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Warnmeldung"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-el/strings.xml b/compose/material/material/src/androidMain/res/values-el/strings.xml
index 3dfa9e1..4971504 100644
--- a/compose/material/material/src/androidMain/res/values-el/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-el/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Ειδοποίηση"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Ειδοποίηση"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-en-rAU/strings.xml b/compose/material/material/src/androidMain/res/values-en-rAU/strings.xml
index d07e701..593990b 100644
--- a/compose/material/material/src/androidMain/res/values-en-rAU/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-en-rAU/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alert"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alert"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-en-rCA/strings.xml b/compose/material/material/src/androidMain/res/values-en-rCA/strings.xml
index d07e701..593990b 100644
--- a/compose/material/material/src/androidMain/res/values-en-rCA/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-en-rCA/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alert"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alert"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-en-rGB/strings.xml b/compose/material/material/src/androidMain/res/values-en-rGB/strings.xml
index d07e701..593990b 100644
--- a/compose/material/material/src/androidMain/res/values-en-rGB/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-en-rGB/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alert"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alert"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-en-rIN/strings.xml b/compose/material/material/src/androidMain/res/values-en-rIN/strings.xml
index d07e701..593990b 100644
--- a/compose/material/material/src/androidMain/res/values-en-rIN/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-en-rIN/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alert"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alert"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-en-rXC/strings.xml b/compose/material/material/src/androidMain/res/values-en-rXC/strings.xml
index 6958dbe..9c6c290 100644
--- a/compose/material/material/src/androidMain/res/values-en-rXC/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-en-rXC/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎Alert‎‏‎‎‏‎"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎Alert‎‏‎‎‏‎"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-es-rUS/strings.xml b/compose/material/material/src/androidMain/res/values-es-rUS/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-es-rUS/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-es-rUS/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-es/strings.xml b/compose/material/material/src/androidMain/res/values-es/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-es/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-es/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-et/strings.xml b/compose/material/material/src/androidMain/res/values-et/strings.xml
index 51360d6..b266a52 100644
--- a/compose/material/material/src/androidMain/res/values-et/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-et/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Teatis"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Hoiatus"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-eu/strings.xml b/compose/material/material/src/androidMain/res/values-eu/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-eu/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-eu/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-fa/strings.xml b/compose/material/material/src/androidMain/res/values-fa/strings.xml
index 61919ca..090a977 100644
--- a/compose/material/material/src/androidMain/res/values-fa/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-fa/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"هشدار"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"هشدار"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-fi/strings.xml b/compose/material/material/src/androidMain/res/values-fi/strings.xml
index 9c526ac..2a27a70 100644
--- a/compose/material/material/src/androidMain/res/values-fi/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-fi/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Ilmoitus"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Ilmoitus"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-fr-rCA/strings.xml b/compose/material/material/src/androidMain/res/values-fr-rCA/strings.xml
index f0b6d97..9258586 100644
--- a/compose/material/material/src/androidMain/res/values-fr-rCA/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-fr-rCA/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerte"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerte"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-fr/strings.xml b/compose/material/material/src/androidMain/res/values-fr/strings.xml
index f0b6d97..9258586 100644
--- a/compose/material/material/src/androidMain/res/values-fr/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-fr/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerte"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerte"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-gl/strings.xml b/compose/material/material/src/androidMain/res/values-gl/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-gl/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-gl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-gu/strings.xml b/compose/material/material/src/androidMain/res/values-gu/strings.xml
index 14fb7d8..f10fd0a 100644
--- a/compose/material/material/src/androidMain/res/values-gu/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-gu/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"અલર્ટ"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"અલર્ટ"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-hi/strings.xml b/compose/material/material/src/androidMain/res/values-hi/strings.xml
index f1e270e..4d36439 100644
--- a/compose/material/material/src/androidMain/res/values-hi/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-hi/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"सूचना"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"चेतावनी"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-hr/strings.xml b/compose/material/material/src/androidMain/res/values-hr/strings.xml
index 23b9180..6932e14 100644
--- a/compose/material/material/src/androidMain/res/values-hr/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-hr/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Upozorenje"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Upozorenje"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-hu/strings.xml b/compose/material/material/src/androidMain/res/values-hu/strings.xml
index 0725eda..5c340cc 100644
--- a/compose/material/material/src/androidMain/res/values-hu/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-hu/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Értesítés"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Figyelmeztetés"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-hy/strings.xml b/compose/material/material/src/androidMain/res/values-hy/strings.xml
index 031375c..ddefc83 100644
--- a/compose/material/material/src/androidMain/res/values-hy/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-hy/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Ծանուցում"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Ծանուցում"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-in/strings.xml b/compose/material/material/src/androidMain/res/values-in/strings.xml
index b67c9fb..0cf4690 100644
--- a/compose/material/material/src/androidMain/res/values-in/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-in/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Pemberitahuan"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Pemberitahuan"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-is/strings.xml b/compose/material/material/src/androidMain/res/values-is/strings.xml
index 5bc5962..1f62303 100644
--- a/compose/material/material/src/androidMain/res/values-is/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-is/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Viðvörun"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Viðvörun"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-it/strings.xml b/compose/material/material/src/androidMain/res/values-it/strings.xml
index 8b2d15d..70cafc0 100644
--- a/compose/material/material/src/androidMain/res/values-it/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-it/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Avviso"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Avviso"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-iw/strings.xml b/compose/material/material/src/androidMain/res/values-iw/strings.xml
index e801b30..5b67aea 100644
--- a/compose/material/material/src/androidMain/res/values-iw/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-iw/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"התראה"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"התראה"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ja/strings.xml b/compose/material/material/src/androidMain/res/values-ja/strings.xml
index ff305fd..10085f624 100644
--- a/compose/material/material/src/androidMain/res/values-ja/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ja/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"警告"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"アラート"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ka/strings.xml b/compose/material/material/src/androidMain/res/values-ka/strings.xml
index 9258d77..427c375 100644
--- a/compose/material/material/src/androidMain/res/values-ka/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ka/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"გაფრთხილება"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"გაფრთხილება"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-kk/strings.xml b/compose/material/material/src/androidMain/res/values-kk/strings.xml
index 1587aa9..ee437b9 100644
--- a/compose/material/material/src/androidMain/res/values-kk/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-kk/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Хабарландыру"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Ескерту"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-km/strings.xml b/compose/material/material/src/androidMain/res/values-km/strings.xml
index b574edf..77a002a 100644
--- a/compose/material/material/src/androidMain/res/values-km/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-km/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"ជូន​ដំណឹង"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"ជូន​ដំណឹង"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-kn/strings.xml b/compose/material/material/src/androidMain/res/values-kn/strings.xml
index cd1c91d..203a2fd 100644
--- a/compose/material/material/src/androidMain/res/values-kn/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-kn/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"ಎಚ್ಚರಿಕೆ"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"ಎಚ್ಚರಿಕೆ"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ko/strings.xml b/compose/material/material/src/androidMain/res/values-ko/strings.xml
index 4fb0854..bd259b1 100644
--- a/compose/material/material/src/androidMain/res/values-ko/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ko/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"주의"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"주의"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ky/strings.xml b/compose/material/material/src/androidMain/res/values-ky/strings.xml
index 8febd8a..0e0c075 100644
--- a/compose/material/material/src/androidMain/res/values-ky/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ky/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Эскертүү"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Эскертүү"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-lo/strings.xml b/compose/material/material/src/androidMain/res/values-lo/strings.xml
index 0f6adba..02341ad 100644
--- a/compose/material/material/src/androidMain/res/values-lo/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-lo/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"ແຈ້ງເຕືອນ"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"ແຈ້ງເຕືອນ"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-lt/strings.xml b/compose/material/material/src/androidMain/res/values-lt/strings.xml
index ae00034..2376e71 100644
--- a/compose/material/material/src/androidMain/res/values-lt/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-lt/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Įspėjimas"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Įspėjimas"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-lv/strings.xml b/compose/material/material/src/androidMain/res/values-lv/strings.xml
index f7e38b7..824500c 100644
--- a/compose/material/material/src/androidMain/res/values-lv/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-lv/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Brīdinājums"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Brīdinājums"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-mk/strings.xml b/compose/material/material/src/androidMain/res/values-mk/strings.xml
index d4c9c2b..bf6f4e7 100644
--- a/compose/material/material/src/androidMain/res/values-mk/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-mk/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Известување"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Предупредување"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ml/strings.xml b/compose/material/material/src/androidMain/res/values-ml/strings.xml
index 55ca822..0fbc905 100644
--- a/compose/material/material/src/androidMain/res/values-ml/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ml/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"മുന്നറിയിപ്പ്"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"മുന്നറിയിപ്പ്"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-mn/strings.xml b/compose/material/material/src/androidMain/res/values-mn/strings.xml
index 351378a..349fbd9 100644
--- a/compose/material/material/src/androidMain/res/values-mn/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-mn/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Дохио"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Сэрэмжлүүлэг"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-mr/strings.xml b/compose/material/material/src/androidMain/res/values-mr/strings.xml
index f1e270e..e0cbcf4 100644
--- a/compose/material/material/src/androidMain/res/values-mr/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-mr/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"सूचना"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"सूचना"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ms/strings.xml b/compose/material/material/src/androidMain/res/values-ms/strings.xml
index 81d062b..0981ad0 100644
--- a/compose/material/material/src/androidMain/res/values-ms/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ms/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Makluman"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Makluman"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-my/strings.xml b/compose/material/material/src/androidMain/res/values-my/strings.xml
index cad9dd5..0c202e3 100644
--- a/compose/material/material/src/androidMain/res/values-my/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-my/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"သတိပေးချက်"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"သတိပေးချက်"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-nb/strings.xml b/compose/material/material/src/androidMain/res/values-nb/strings.xml
index 24e670d..bc0d3fc 100644
--- a/compose/material/material/src/androidMain/res/values-nb/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-nb/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Varsel"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Varsel"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ne/strings.xml b/compose/material/material/src/androidMain/res/values-ne/strings.xml
index d56474a..4ab15ca 100644
--- a/compose/material/material/src/androidMain/res/values-ne/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ne/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"अलर्ट"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"अलर्ट"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-nl/strings.xml b/compose/material/material/src/androidMain/res/values-nl/strings.xml
index b1a9178..4becfb85 100644
--- a/compose/material/material/src/androidMain/res/values-nl/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-nl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Waarschuwing"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Melding"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-or/strings.xml b/compose/material/material/src/androidMain/res/values-or/strings.xml
index 8400a76..c172b1c 100644
--- a/compose/material/material/src/androidMain/res/values-or/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-or/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"ଆଲର୍ଟ"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"ଆଲର୍ଟ"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-pa/strings.xml b/compose/material/material/src/androidMain/res/values-pa/strings.xml
index 508a843..7c0941e 100644
--- a/compose/material/material/src/androidMain/res/values-pa/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-pa/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"ਅਲਰਟ"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"ਅਲਰਟ"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-pl/strings.xml b/compose/material/material/src/androidMain/res/values-pl/strings.xml
index d07e701..593990b 100644
--- a/compose/material/material/src/androidMain/res/values-pl/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-pl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alert"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alert"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-pt-rBR/strings.xml b/compose/material/material/src/androidMain/res/values-pt-rBR/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-pt-rBR/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-pt-rBR/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-pt-rPT/strings.xml b/compose/material/material/src/androidMain/res/values-pt-rPT/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-pt-rPT/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-pt-rPT/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-pt/strings.xml b/compose/material/material/src/androidMain/res/values-pt/strings.xml
index a80146fe..a6f7596 100644
--- a/compose/material/material/src/androidMain/res/values-pt/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-pt/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerta"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerta"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ro/strings.xml b/compose/material/material/src/androidMain/res/values-ro/strings.xml
index c5fe68f..5289b85 100644
--- a/compose/material/material/src/androidMain/res/values-ro/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ro/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alertă"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alertă"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ru/strings.xml b/compose/material/material/src/androidMain/res/values-ru/strings.xml
index 34b4a0a..ee37a75 100644
--- a/compose/material/material/src/androidMain/res/values-ru/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ru/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Оповещение"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Оповещение"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-si/strings.xml b/compose/material/material/src/androidMain/res/values-si/strings.xml
index e47df95..4c32b49 100644
--- a/compose/material/material/src/androidMain/res/values-si/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-si/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"ඇඟවීම"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"ඇඟවීම"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-sk/strings.xml b/compose/material/material/src/androidMain/res/values-sk/strings.xml
index 4714d82..4d6ad34 100644
--- a/compose/material/material/src/androidMain/res/values-sk/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-sk/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Upozornenie"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Upozornenie"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-sl/strings.xml b/compose/material/material/src/androidMain/res/values-sl/strings.xml
index 1690f6f..dc20efe 100644
--- a/compose/material/material/src/androidMain/res/values-sl/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-sl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Opozorilo"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Opozorilo"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-sq/strings.xml b/compose/material/material/src/androidMain/res/values-sq/strings.xml
index ae90d01..9ffe4d8 100644
--- a/compose/material/material/src/androidMain/res/values-sq/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-sq/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Sinjalizim"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Sinjalizim"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-sr/strings.xml b/compose/material/material/src/androidMain/res/values-sr/strings.xml
index 1744b1f..cb5dd4b 100644
--- a/compose/material/material/src/androidMain/res/values-sr/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-sr/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Обавештење"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Обавештење"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-sv/strings.xml b/compose/material/material/src/androidMain/res/values-sv/strings.xml
index eb0973b..0a54abb 100644
--- a/compose/material/material/src/androidMain/res/values-sv/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-sv/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Varning"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Varning"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-sw/strings.xml b/compose/material/material/src/androidMain/res/values-sw/strings.xml
index 9c0c367..71dbff20 100644
--- a/compose/material/material/src/androidMain/res/values-sw/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-sw/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Arifa"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Arifa"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ta/strings.xml b/compose/material/material/src/androidMain/res/values-ta/strings.xml
index de4221b..838deae 100644
--- a/compose/material/material/src/androidMain/res/values-ta/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ta/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"விழிப்பூட்டல்"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"விழிப்பூட்டல்"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-te/strings.xml b/compose/material/material/src/androidMain/res/values-te/strings.xml
index 2c92062..a22e1e3 100644
--- a/compose/material/material/src/androidMain/res/values-te/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-te/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"అలర్ట్"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"హెచ్చరిక"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-th/strings.xml b/compose/material/material/src/androidMain/res/values-th/strings.xml
index b93fa36..01548a3 100644
--- a/compose/material/material/src/androidMain/res/values-th/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-th/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"การแจ้งเตือน"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"การแจ้งเตือน"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-tl/strings.xml b/compose/material/material/src/androidMain/res/values-tl/strings.xml
index 027f449..8e0e6a1 100644
--- a/compose/material/material/src/androidMain/res/values-tl/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-tl/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Alerto"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Alerto"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-tr/strings.xml b/compose/material/material/src/androidMain/res/values-tr/strings.xml
index 09a273c..673d3be 100644
--- a/compose/material/material/src/androidMain/res/values-tr/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-tr/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Uyarı"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Uyarı"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-uk/strings.xml b/compose/material/material/src/androidMain/res/values-uk/strings.xml
index 0149517..1d6b358 100644
--- a/compose/material/material/src/androidMain/res/values-uk/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-uk/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Сповіщення"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Сповіщення"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-ur/strings.xml b/compose/material/material/src/androidMain/res/values-ur/strings.xml
index 4e3bcd8de..4985a53 100644
--- a/compose/material/material/src/androidMain/res/values-ur/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-ur/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"الرٹ"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"الرٹ"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-uz/strings.xml b/compose/material/material/src/androidMain/res/values-uz/strings.xml
index 8509571..7d49ab63 100644
--- a/compose/material/material/src/androidMain/res/values-uz/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-uz/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Ogohlantirish"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Signal"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-vi/strings.xml b/compose/material/material/src/androidMain/res/values-vi/strings.xml
index 8bb11c0..dca5b9c 100644
--- a/compose/material/material/src/androidMain/res/values-vi/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-vi/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Cảnh báo"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Cảnh báo"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-zh-rCN/strings.xml b/compose/material/material/src/androidMain/res/values-zh-rCN/strings.xml
index ce65453..98d4cfe 100644
--- a/compose/material/material/src/androidMain/res/values-zh-rCN/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-zh-rCN/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"提醒"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"提醒"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-zh-rHK/strings.xml b/compose/material/material/src/androidMain/res/values-zh-rHK/strings.xml
index ffd6df0..c8fdec1 100644
--- a/compose/material/material/src/androidMain/res/values-zh-rHK/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-zh-rHK/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"警示"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"警示"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-zh-rTW/strings.xml b/compose/material/material/src/androidMain/res/values-zh-rTW/strings.xml
index bfc3c16..b02cdec 100644
--- a/compose/material/material/src/androidMain/res/values-zh-rTW/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-zh-rTW/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"快訊"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"快訊"</string>
 </resources>
diff --git a/compose/material/material/src/androidMain/res/values-zu/strings.xml b/compose/material/material/src/androidMain/res/values-zu/strings.xml
index 2e902b0..b297877 100644
--- a/compose/material/material/src/androidMain/res/values-zu/strings.xml
+++ b/compose/material/material/src/androidMain/res/values-zu/strings.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-  Copyright 2021 The Android Open Source Project
+<!--
+  Copyright 2024 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.
@@ -17,5 +17,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="mc2_snackbar_pane_title" msgid="8471891128988107974">"Isexwayiso"</string>
+    <string name="mc2_snackbar_pane_title" msgid="2792228137354697160">"Isexwayiso"</string>
 </resources>
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
index 8cd017c..1f88099 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
@@ -37,7 +37,6 @@
 import androidx.compose.foundation.text.input.TextFieldLineLimits.MultiLine
 import androidx.compose.foundation.text.input.TextFieldLineLimits.SingleLine
 import androidx.compose.foundation.text.input.TextFieldState
-import androidx.compose.material.internal.subtractConstraintSafely
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Alignment
@@ -964,7 +963,7 @@
                 .fastFirstOrNull { it.layoutId == LeadingId }
                 ?.let {
                     remainingWidth =
-                        remainingWidth.subtractConstraintSafely(
+                        remainingWidth.substractConstraintSafely(
                             it.maxIntrinsicWidth(Constraints.Infinity)
                         )
                     intrinsicMeasurer(it, width)
@@ -974,7 +973,7 @@
                 .fastFirstOrNull { it.layoutId == TrailingId }
                 ?.let {
                     remainingWidth =
-                        remainingWidth.subtractConstraintSafely(
+                        remainingWidth.substractConstraintSafely(
                             it.maxIntrinsicWidth(Constraints.Infinity)
                         )
                     intrinsicMeasurer(it, width)
@@ -1006,6 +1005,13 @@
     }
 }
 
+private fun Int.substractConstraintSafely(from: Int): Int {
+    if (this == Constraints.Infinity) {
+        return this
+    }
+    return this - from
+}
+
 /**
  * Calculate the width of the [OutlinedTextField] given all elements that should be placed inside
  */
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
index 7955eae..65f98c6 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
@@ -40,7 +40,6 @@
 import androidx.compose.foundation.text.input.TextFieldLineLimits.SingleLine
 import androidx.compose.foundation.text.input.TextFieldState
 import androidx.compose.material.TextFieldDefaults.indicatorLine
-import androidx.compose.material.internal.subtractConstraintSafely
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Alignment
@@ -912,7 +911,7 @@
                 .fastFirstOrNull { it.layoutId == LeadingId }
                 ?.let {
                     remainingWidth =
-                        remainingWidth.subtractConstraintSafely(
+                        remainingWidth.substractConstraintSafely(
                             it.maxIntrinsicWidth(Constraints.Infinity)
                         )
                     intrinsicMeasurer(it, width)
@@ -922,7 +921,7 @@
                 .fastFirstOrNull { it.layoutId == TrailingId }
                 ?.let {
                     remainingWidth =
-                        remainingWidth.subtractConstraintSafely(
+                        remainingWidth.substractConstraintSafely(
                             it.maxIntrinsicWidth(Constraints.Infinity)
                         )
                     intrinsicMeasurer(it, width)
@@ -954,6 +953,13 @@
     }
 }
 
+private fun Int.substractConstraintSafely(from: Int): Int {
+    if (this == Constraints.Infinity) {
+        return this
+    }
+    return this - from
+}
+
 private fun calculateWidth(
     leadingWidth: Int,
     trailingWidth: Int,
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/internal/LayoutUtil.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/internal/LayoutUtil.kt
deleted file mode 100644
index 7f795b3..0000000
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/internal/LayoutUtil.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.compose.material.internal
-
-import androidx.compose.ui.unit.Constraints
-
-/**
- * Subtracts one value from another, where both values represent constraints used in layout.
- *
- * Notably:
- * - if [this] is [Constraints.Infinity], the result stays [Constraints.Infinity]
- * - the result is coerced to be non-negative
- */
-internal fun Int.subtractConstraintSafely(other: Int): Int {
-    if (this == Constraints.Infinity) {
-        return this
-    }
-    return (this - other).coerceAtLeast(0)
-}
diff --git a/compose/material3/adaptive/adaptive-layout/api/1.1.0-beta02.txt b/compose/material3/adaptive/adaptive-layout/api/1.1.0-beta02.txt
index 8facd95..e21acb7 100644
--- a/compose/material3/adaptive/adaptive-layout/api/1.1.0-beta02.txt
+++ b/compose/material3/adaptive/adaptive-layout/api/1.1.0-beta02.txt
@@ -8,7 +8,7 @@
 
   public static final class AdaptStrategy.Companion {
     method public androidx.compose.material3.adaptive.layout.AdaptStrategy getHide();
-    property public final androidx.compose.material3.adaptive.layout.AdaptStrategy Hide;
+    property public androidx.compose.material3.adaptive.layout.AdaptStrategy Hide;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public interface AnimatedPaneOverride {
@@ -22,12 +22,12 @@
     method public androidx.compose.animation.ExitTransition getExitTransition();
     method public androidx.compose.ui.Modifier getModifier();
     method public androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T> getScope();
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> boundsAnimationSpec;
-    property public final kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.AnimatedPaneScope,kotlin.Unit> content;
-    property public final androidx.compose.animation.EnterTransition enterTransition;
-    property public final androidx.compose.animation.ExitTransition exitTransition;
-    property public final androidx.compose.ui.Modifier modifier;
-    property public final androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T> scope;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> boundsAnimationSpec;
+    property public kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.AnimatedPaneScope,kotlin.Unit> content;
+    property public androidx.compose.animation.EnterTransition enterTransition;
+    property public androidx.compose.animation.ExitTransition exitTransition;
+    property public androidx.compose.ui.Modifier modifier;
+    property public androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T> scope;
   }
 
   public sealed interface AnimatedPaneScope extends androidx.compose.animation.AnimatedVisibilityScope {
@@ -53,10 +53,10 @@
     method public int getAvoidOccluding();
     method public int getAvoidSeparating();
     method public int getNeverAvoid();
-    property public final int AlwaysAvoid;
-    property public final int AvoidOccluding;
-    property public final int AvoidSeparating;
-    property public final int NeverAvoid;
+    property public int AlwaysAvoid;
+    property public int AvoidOccluding;
+    property public int AvoidSeparating;
+    property public int NeverAvoid;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ListDetailPaneScaffoldDefaults {
@@ -73,9 +73,9 @@
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getDetail();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getExtra();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getList();
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Detail;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole List;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Detail;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole List;
     field public static final androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole INSTANCE;
   }
 
@@ -101,8 +101,8 @@
   public static final class PaneAdaptedValue.Companion {
     method public String getExpanded();
     method public String getHidden();
-    property public final String Expanded;
-    property public final String Hidden;
+    property public String Expanded;
+    property public String Hidden;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public abstract sealed class PaneExpansionAnchor {
@@ -130,8 +130,8 @@
   public static final class PaneExpansionAnchor.Offset.Direction.Companion {
     method public int getFromEnd();
     method public int getFromStart();
-    property public final int FromEnd;
-    property public final int FromStart;
+    property public int FromEnd;
+    property public int FromStart;
   }
 
   public static final class PaneExpansionAnchor.Proportion extends androidx.compose.material3.adaptive.layout.PaneExpansionAnchor {
@@ -139,7 +139,7 @@
     method @androidx.compose.runtime.Composable public String getDescription();
     method public float getProportion();
     property @androidx.compose.runtime.Composable public String description;
-    property @FloatRange(from=0.0, to=1.0) public final float proportion;
+    property @FloatRange(from=0.0, to=1.0) public float proportion;
   }
 
   public final class PaneExpansionDraggableModifierKt {
@@ -153,13 +153,13 @@
     method public boolean isUnspecified();
     method public void setFirstPaneProportion(@FloatRange(from=0.0, to=1.0) float firstPaneProportion);
     method public void setFirstPaneWidth(int firstPaneWidth);
-    property public final androidx.compose.material3.adaptive.layout.PaneExpansionAnchor? currentAnchor;
+    property public androidx.compose.material3.adaptive.layout.PaneExpansionAnchor? currentAnchor;
     field public static final androidx.compose.material3.adaptive.layout.PaneExpansionState.Companion Companion;
     field public static final int Unspecified = -1; // 0xffffffff
   }
 
   public static final class PaneExpansionState.Companion {
-    property public static final int Unspecified;
+    property public static int Unspecified;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public sealed interface PaneExpansionStateKey {
@@ -168,7 +168,7 @@
 
   public static final class PaneExpansionStateKey.Companion {
     method public androidx.compose.material3.adaptive.layout.PaneExpansionStateKey getDefault();
-    property public final androidx.compose.material3.adaptive.layout.PaneExpansionStateKey Default;
+    property public androidx.compose.material3.adaptive.layout.PaneExpansionStateKey Default;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public sealed interface PaneExpansionStateKeyProvider {
@@ -184,7 +184,7 @@
   public final class PaneKt {
     method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static <S, T extends androidx.compose.material3.adaptive.layout.PaneScaffoldValue<S>> void AnimatedPane(androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T>, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enterTransition, optional androidx.compose.animation.ExitTransition exitTransition, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> boundsAnimationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.layout.AnimatedPaneScope,kotlin.Unit> content);
     method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.AnimatedPaneOverride> getLocalAnimatedPaneOverride();
-    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.AnimatedPaneOverride> LocalAnimatedPaneOverride;
+    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.AnimatedPaneOverride> LocalAnimatedPaneOverride;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public sealed interface PaneMotion {
@@ -204,21 +204,21 @@
     method public androidx.compose.material3.adaptive.layout.PaneMotion getExitToRight();
     method public androidx.compose.material3.adaptive.layout.PaneMotion getExitWithShrink();
     method public androidx.compose.material3.adaptive.layout.PaneMotion getNoMotion();
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion AnimateBounds;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeft;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeftDelayed;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRight;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRightDelayed;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterWithExpand;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion ExitToLeft;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion ExitToRight;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion ExitWithShrink;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion NoMotion;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion AnimateBounds;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeft;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeftDelayed;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRight;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRightDelayed;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterWithExpand;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion ExitToLeft;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion ExitToRight;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion ExitWithShrink;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion NoMotion;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @kotlin.jvm.JvmInline public static final value class PaneMotion.Type {
     method public int getValue();
-    property public final int value;
+    property public int value;
     field public static final androidx.compose.material3.adaptive.layout.PaneMotion.Type.Companion Companion;
   }
 
@@ -227,10 +227,10 @@
     method public int getExiting();
     method public int getHidden();
     method public int getShown();
-    property public final int Entering;
-    property public final int Exiting;
-    property public final int Hidden;
-    property public final int Shown;
+    property public int Entering;
+    property public int Exiting;
+    property public int Hidden;
+    property public int Shown;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class PaneMotionData {
@@ -239,11 +239,11 @@
     method public long getOriginSize();
     method public long getTargetPosition();
     method public long getTargetSize();
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion motion;
-    property public final long originPosition;
-    property public final long originSize;
-    property public final long targetPosition;
-    property public final long targetSize;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion motion;
+    property public long originPosition;
+    property public long originSize;
+    property public long targetPosition;
+    property public long targetSize;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class PaneMotionDefaults {
@@ -253,12 +253,12 @@
     method public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> getDelayedSizeAnimationSpec();
     method public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> getOffsetAnimationSpec();
     method public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> getSizeAnimationSpec();
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> AnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> DelayedAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> DelayedOffsetAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> DelayedSizeAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> OffsetAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> SizeAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> AnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> DelayedAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> DelayedOffsetAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> DelayedSizeAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> OffsetAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> SizeAnimationSpec;
     field public static final androidx.compose.material3.adaptive.layout.PaneMotionDefaults INSTANCE;
   }
 
@@ -278,18 +278,18 @@
     method public int getMaxHorizontalPartitions();
     method public int getMaxVerticalPartitions();
     method public float getVerticalPartitionSpacerSize();
-    property public final float defaultPanePreferredWidth;
-    property public final java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds;
-    property public final float horizontalPartitionSpacerSize;
-    property public final int maxHorizontalPartitions;
-    property public final int maxVerticalPartitions;
-    property public final float verticalPartitionSpacerSize;
+    property public float defaultPanePreferredWidth;
+    property public java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds;
+    property public float horizontalPartitionSpacerSize;
+    property public int maxHorizontalPartitions;
+    property public int maxVerticalPartitions;
+    property public float verticalPartitionSpacerSize;
     field public static final androidx.compose.material3.adaptive.layout.PaneScaffoldDirective.Companion Companion;
   }
 
   public static final class PaneScaffoldDirective.Companion {
     method public androidx.compose.material3.adaptive.layout.PaneScaffoldDirective getDefault();
-    property public final androidx.compose.material3.adaptive.layout.PaneScaffoldDirective Default;
+    property public androidx.compose.material3.adaptive.layout.PaneScaffoldDirective Default;
   }
 
   public final class PaneScaffoldDirectiveKt {
@@ -355,9 +355,9 @@
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getExtra();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getMain();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getSupporting();
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Main;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Supporting;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Main;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Supporting;
     field public static final androidx.compose.material3.adaptive.layout.SupportingPaneScaffoldRole INSTANCE;
   }
 
@@ -368,7 +368,7 @@
 
   public static final class ThreePaneMotion.Companion {
     method public androidx.compose.material3.adaptive.layout.ThreePaneMotion getNoMotion();
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneMotion NoMotion;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneMotion NoMotion;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldAdaptStrategies {
@@ -380,8 +380,8 @@
     ctor public ThreePaneScaffoldDestinationItem(androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole pane, optional T? contentKey);
     method public T? getContentKey();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getPane();
-    property public final T? contentKey;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole pane;
+    property public T? contentKey;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole pane;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public final class ThreePaneScaffoldHorizontalOrder {
@@ -396,7 +396,7 @@
 
   public final class ThreePaneScaffoldKt {
     method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldOverride> getLocalThreePaneScaffoldOverride();
-    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldOverride> LocalThreePaneScaffoldOverride;
+    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldOverride> LocalThreePaneScaffoldOverride;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public interface ThreePaneScaffoldOverride {
@@ -413,15 +413,15 @@
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldState getScaffoldState();
     method public kotlin.jvm.functions.Function0<kotlin.Unit> getSecondaryPane();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getTertiaryPane();
-    property public final androidx.compose.ui.Modifier modifier;
-    property public final kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.PaneExpansionState,kotlin.Unit>? paneExpansionDragHandle;
-    property public final androidx.compose.material3.adaptive.layout.PaneExpansionState paneExpansionState;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldHorizontalOrder paneOrder;
-    property public final kotlin.jvm.functions.Function0<kotlin.Unit> primaryPane;
-    property public final androidx.compose.material3.adaptive.layout.PaneScaffoldDirective scaffoldDirective;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldState scaffoldState;
-    property public final kotlin.jvm.functions.Function0<kotlin.Unit> secondaryPane;
-    property public final kotlin.jvm.functions.Function0<kotlin.Unit>? tertiaryPane;
+    property public androidx.compose.ui.Modifier modifier;
+    property public kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.PaneExpansionState,kotlin.Unit>? paneExpansionDragHandle;
+    property public androidx.compose.material3.adaptive.layout.PaneExpansionState paneExpansionState;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldHorizontalOrder paneOrder;
+    property public kotlin.jvm.functions.Function0<kotlin.Unit> primaryPane;
+    property public androidx.compose.material3.adaptive.layout.PaneScaffoldDirective scaffoldDirective;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldState scaffoldState;
+    property public kotlin.jvm.functions.Function0<kotlin.Unit> secondaryPane;
+    property public kotlin.jvm.functions.Function0<kotlin.Unit>? tertiaryPane;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public sealed interface ThreePaneScaffoldPaneScope extends androidx.compose.material3.adaptive.layout.ThreePaneScaffoldScope androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldValue> {
@@ -455,9 +455,9 @@
     method public String getSecondary();
     method public String getTertiary();
     property public androidx.compose.material3.adaptive.layout.PaneExpansionStateKey paneExpansionStateKey;
-    property public final String primary;
-    property public final String secondary;
-    property public final String tertiary;
+    property public String primary;
+    property public String secondary;
+    property public String tertiary;
   }
 
   public final class ThreePaneScaffoldValueKt {
diff --git a/compose/material3/adaptive/adaptive-layout/api/restricted_1.1.0-beta02.txt b/compose/material3/adaptive/adaptive-layout/api/restricted_1.1.0-beta02.txt
index 8facd95..e21acb7 100644
--- a/compose/material3/adaptive/adaptive-layout/api/restricted_1.1.0-beta02.txt
+++ b/compose/material3/adaptive/adaptive-layout/api/restricted_1.1.0-beta02.txt
@@ -8,7 +8,7 @@
 
   public static final class AdaptStrategy.Companion {
     method public androidx.compose.material3.adaptive.layout.AdaptStrategy getHide();
-    property public final androidx.compose.material3.adaptive.layout.AdaptStrategy Hide;
+    property public androidx.compose.material3.adaptive.layout.AdaptStrategy Hide;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public interface AnimatedPaneOverride {
@@ -22,12 +22,12 @@
     method public androidx.compose.animation.ExitTransition getExitTransition();
     method public androidx.compose.ui.Modifier getModifier();
     method public androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T> getScope();
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> boundsAnimationSpec;
-    property public final kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.AnimatedPaneScope,kotlin.Unit> content;
-    property public final androidx.compose.animation.EnterTransition enterTransition;
-    property public final androidx.compose.animation.ExitTransition exitTransition;
-    property public final androidx.compose.ui.Modifier modifier;
-    property public final androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T> scope;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> boundsAnimationSpec;
+    property public kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.AnimatedPaneScope,kotlin.Unit> content;
+    property public androidx.compose.animation.EnterTransition enterTransition;
+    property public androidx.compose.animation.ExitTransition exitTransition;
+    property public androidx.compose.ui.Modifier modifier;
+    property public androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T> scope;
   }
 
   public sealed interface AnimatedPaneScope extends androidx.compose.animation.AnimatedVisibilityScope {
@@ -53,10 +53,10 @@
     method public int getAvoidOccluding();
     method public int getAvoidSeparating();
     method public int getNeverAvoid();
-    property public final int AlwaysAvoid;
-    property public final int AvoidOccluding;
-    property public final int AvoidSeparating;
-    property public final int NeverAvoid;
+    property public int AlwaysAvoid;
+    property public int AvoidOccluding;
+    property public int AvoidSeparating;
+    property public int NeverAvoid;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ListDetailPaneScaffoldDefaults {
@@ -73,9 +73,9 @@
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getDetail();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getExtra();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getList();
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Detail;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole List;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Detail;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole List;
     field public static final androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole INSTANCE;
   }
 
@@ -101,8 +101,8 @@
   public static final class PaneAdaptedValue.Companion {
     method public String getExpanded();
     method public String getHidden();
-    property public final String Expanded;
-    property public final String Hidden;
+    property public String Expanded;
+    property public String Hidden;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public abstract sealed class PaneExpansionAnchor {
@@ -130,8 +130,8 @@
   public static final class PaneExpansionAnchor.Offset.Direction.Companion {
     method public int getFromEnd();
     method public int getFromStart();
-    property public final int FromEnd;
-    property public final int FromStart;
+    property public int FromEnd;
+    property public int FromStart;
   }
 
   public static final class PaneExpansionAnchor.Proportion extends androidx.compose.material3.adaptive.layout.PaneExpansionAnchor {
@@ -139,7 +139,7 @@
     method @androidx.compose.runtime.Composable public String getDescription();
     method public float getProportion();
     property @androidx.compose.runtime.Composable public String description;
-    property @FloatRange(from=0.0, to=1.0) public final float proportion;
+    property @FloatRange(from=0.0, to=1.0) public float proportion;
   }
 
   public final class PaneExpansionDraggableModifierKt {
@@ -153,13 +153,13 @@
     method public boolean isUnspecified();
     method public void setFirstPaneProportion(@FloatRange(from=0.0, to=1.0) float firstPaneProportion);
     method public void setFirstPaneWidth(int firstPaneWidth);
-    property public final androidx.compose.material3.adaptive.layout.PaneExpansionAnchor? currentAnchor;
+    property public androidx.compose.material3.adaptive.layout.PaneExpansionAnchor? currentAnchor;
     field public static final androidx.compose.material3.adaptive.layout.PaneExpansionState.Companion Companion;
     field public static final int Unspecified = -1; // 0xffffffff
   }
 
   public static final class PaneExpansionState.Companion {
-    property public static final int Unspecified;
+    property public static int Unspecified;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public sealed interface PaneExpansionStateKey {
@@ -168,7 +168,7 @@
 
   public static final class PaneExpansionStateKey.Companion {
     method public androidx.compose.material3.adaptive.layout.PaneExpansionStateKey getDefault();
-    property public final androidx.compose.material3.adaptive.layout.PaneExpansionStateKey Default;
+    property public androidx.compose.material3.adaptive.layout.PaneExpansionStateKey Default;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public sealed interface PaneExpansionStateKeyProvider {
@@ -184,7 +184,7 @@
   public final class PaneKt {
     method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Composable public static <S, T extends androidx.compose.material3.adaptive.layout.PaneScaffoldValue<S>> void AnimatedPane(androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<S,T>, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.animation.EnterTransition enterTransition, optional androidx.compose.animation.ExitTransition exitTransition, optional androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> boundsAnimationSpec, kotlin.jvm.functions.Function1<? super androidx.compose.material3.adaptive.layout.AnimatedPaneScope,kotlin.Unit> content);
     method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.AnimatedPaneOverride> getLocalAnimatedPaneOverride();
-    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.AnimatedPaneOverride> LocalAnimatedPaneOverride;
+    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.AnimatedPaneOverride> LocalAnimatedPaneOverride;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public sealed interface PaneMotion {
@@ -204,21 +204,21 @@
     method public androidx.compose.material3.adaptive.layout.PaneMotion getExitToRight();
     method public androidx.compose.material3.adaptive.layout.PaneMotion getExitWithShrink();
     method public androidx.compose.material3.adaptive.layout.PaneMotion getNoMotion();
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion AnimateBounds;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeft;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeftDelayed;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRight;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRightDelayed;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion EnterWithExpand;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion ExitToLeft;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion ExitToRight;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion ExitWithShrink;
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion NoMotion;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion AnimateBounds;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeft;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromLeftDelayed;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRight;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterFromRightDelayed;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion EnterWithExpand;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion ExitToLeft;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion ExitToRight;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion ExitWithShrink;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion NoMotion;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @kotlin.jvm.JvmInline public static final value class PaneMotion.Type {
     method public int getValue();
-    property public final int value;
+    property public int value;
     field public static final androidx.compose.material3.adaptive.layout.PaneMotion.Type.Companion Companion;
   }
 
@@ -227,10 +227,10 @@
     method public int getExiting();
     method public int getHidden();
     method public int getShown();
-    property public final int Entering;
-    property public final int Exiting;
-    property public final int Hidden;
-    property public final int Shown;
+    property public int Entering;
+    property public int Exiting;
+    property public int Hidden;
+    property public int Shown;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class PaneMotionData {
@@ -239,11 +239,11 @@
     method public long getOriginSize();
     method public long getTargetPosition();
     method public long getTargetSize();
-    property public final androidx.compose.material3.adaptive.layout.PaneMotion motion;
-    property public final long originPosition;
-    property public final long originSize;
-    property public final long targetPosition;
-    property public final long targetSize;
+    property public androidx.compose.material3.adaptive.layout.PaneMotion motion;
+    property public long originPosition;
+    property public long originSize;
+    property public long targetPosition;
+    property public long targetSize;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class PaneMotionDefaults {
@@ -253,12 +253,12 @@
     method public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> getDelayedSizeAnimationSpec();
     method public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> getOffsetAnimationSpec();
     method public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> getSizeAnimationSpec();
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> AnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> DelayedAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> DelayedOffsetAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> DelayedSizeAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> OffsetAnimationSpec;
-    property public final androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> SizeAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> AnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntRect> DelayedAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> DelayedOffsetAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> DelayedSizeAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntOffset> OffsetAnimationSpec;
+    property public androidx.compose.animation.core.FiniteAnimationSpec<androidx.compose.ui.unit.IntSize> SizeAnimationSpec;
     field public static final androidx.compose.material3.adaptive.layout.PaneMotionDefaults INSTANCE;
   }
 
@@ -278,18 +278,18 @@
     method public int getMaxHorizontalPartitions();
     method public int getMaxVerticalPartitions();
     method public float getVerticalPartitionSpacerSize();
-    property public final float defaultPanePreferredWidth;
-    property public final java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds;
-    property public final float horizontalPartitionSpacerSize;
-    property public final int maxHorizontalPartitions;
-    property public final int maxVerticalPartitions;
-    property public final float verticalPartitionSpacerSize;
+    property public float defaultPanePreferredWidth;
+    property public java.util.List<androidx.compose.ui.geometry.Rect> excludedBounds;
+    property public float horizontalPartitionSpacerSize;
+    property public int maxHorizontalPartitions;
+    property public int maxVerticalPartitions;
+    property public float verticalPartitionSpacerSize;
     field public static final androidx.compose.material3.adaptive.layout.PaneScaffoldDirective.Companion Companion;
   }
 
   public static final class PaneScaffoldDirective.Companion {
     method public androidx.compose.material3.adaptive.layout.PaneScaffoldDirective getDefault();
-    property public final androidx.compose.material3.adaptive.layout.PaneScaffoldDirective Default;
+    property public androidx.compose.material3.adaptive.layout.PaneScaffoldDirective Default;
   }
 
   public final class PaneScaffoldDirectiveKt {
@@ -355,9 +355,9 @@
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getExtra();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getMain();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getSupporting();
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Main;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Supporting;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Extra;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Main;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole Supporting;
     field public static final androidx.compose.material3.adaptive.layout.SupportingPaneScaffoldRole INSTANCE;
   }
 
@@ -368,7 +368,7 @@
 
   public static final class ThreePaneMotion.Companion {
     method public androidx.compose.material3.adaptive.layout.ThreePaneMotion getNoMotion();
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneMotion NoMotion;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneMotion NoMotion;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public final class ThreePaneScaffoldAdaptStrategies {
@@ -380,8 +380,8 @@
     ctor public ThreePaneScaffoldDestinationItem(androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole pane, optional T? contentKey);
     method public T? getContentKey();
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole getPane();
-    property public final T? contentKey;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole pane;
+    property public T? contentKey;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole pane;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Immutable public final class ThreePaneScaffoldHorizontalOrder {
@@ -396,7 +396,7 @@
 
   public final class ThreePaneScaffoldKt {
     method @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldOverride> getLocalThreePaneScaffoldOverride();
-    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldOverride> LocalThreePaneScaffoldOverride;
+    property @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldOverride> LocalThreePaneScaffoldOverride;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveComponentOverrideApi public interface ThreePaneScaffoldOverride {
@@ -413,15 +413,15 @@
     method public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldState getScaffoldState();
     method public kotlin.jvm.functions.Function0<kotlin.Unit> getSecondaryPane();
     method public kotlin.jvm.functions.Function0<kotlin.Unit>? getTertiaryPane();
-    property public final androidx.compose.ui.Modifier modifier;
-    property public final kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.PaneExpansionState,kotlin.Unit>? paneExpansionDragHandle;
-    property public final androidx.compose.material3.adaptive.layout.PaneExpansionState paneExpansionState;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldHorizontalOrder paneOrder;
-    property public final kotlin.jvm.functions.Function0<kotlin.Unit> primaryPane;
-    property public final androidx.compose.material3.adaptive.layout.PaneScaffoldDirective scaffoldDirective;
-    property public final androidx.compose.material3.adaptive.layout.ThreePaneScaffoldState scaffoldState;
-    property public final kotlin.jvm.functions.Function0<kotlin.Unit> secondaryPane;
-    property public final kotlin.jvm.functions.Function0<kotlin.Unit>? tertiaryPane;
+    property public androidx.compose.ui.Modifier modifier;
+    property public kotlin.jvm.functions.Function1<androidx.compose.material3.adaptive.layout.PaneExpansionState,kotlin.Unit>? paneExpansionDragHandle;
+    property public androidx.compose.material3.adaptive.layout.PaneExpansionState paneExpansionState;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldHorizontalOrder paneOrder;
+    property public kotlin.jvm.functions.Function0<kotlin.Unit> primaryPane;
+    property public androidx.compose.material3.adaptive.layout.PaneScaffoldDirective scaffoldDirective;
+    property public androidx.compose.material3.adaptive.layout.ThreePaneScaffoldState scaffoldState;
+    property public kotlin.jvm.functions.Function0<kotlin.Unit> secondaryPane;
+    property public kotlin.jvm.functions.Function0<kotlin.Unit>? tertiaryPane;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi public sealed interface ThreePaneScaffoldPaneScope extends androidx.compose.material3.adaptive.layout.ThreePaneScaffoldScope androidx.compose.material3.adaptive.layout.ExtendedPaneScaffoldPaneScope<androidx.compose.material3.adaptive.layout.ThreePaneScaffoldRole,androidx.compose.material3.adaptive.layout.ThreePaneScaffoldValue> {
@@ -455,9 +455,9 @@
     method public String getSecondary();
     method public String getTertiary();
     property public androidx.compose.material3.adaptive.layout.PaneExpansionStateKey paneExpansionStateKey;
-    property public final String primary;
-    property public final String secondary;
-    property public final String tertiary;
+    property public String primary;
+    property public String secondary;
+    property public String tertiary;
   }
 
   public final class ThreePaneScaffoldValueKt {
diff --git a/compose/material3/adaptive/adaptive-navigation/api/1.1.0-beta02.txt b/compose/material3/adaptive/adaptive-navigation/api/1.1.0-beta02.txt
index 0e485ac..53814cd 100644
--- a/compose/material3/adaptive/adaptive-navigation/api/1.1.0-beta02.txt
+++ b/compose/material3/adaptive/adaptive-navigation/api/1.1.0-beta02.txt
@@ -15,10 +15,10 @@
     method public String getPopUntilContentChange();
     method public String getPopUntilCurrentDestinationChange();
     method public String getPopUntilScaffoldValueChange();
-    property public final String PopLatest;
-    property public final String PopUntilContentChange;
-    property public final String PopUntilCurrentDestinationChange;
-    property public final String PopUntilScaffoldValueChange;
+    property public String PopLatest;
+    property public String PopUntilContentChange;
+    property public String PopUntilCurrentDestinationChange;
+    property public String PopUntilScaffoldValueChange;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public interface ThreePaneScaffoldNavigator<T> {
diff --git a/compose/material3/adaptive/adaptive-navigation/api/restricted_1.1.0-beta02.txt b/compose/material3/adaptive/adaptive-navigation/api/restricted_1.1.0-beta02.txt
index 0e485ac..53814cd 100644
--- a/compose/material3/adaptive/adaptive-navigation/api/restricted_1.1.0-beta02.txt
+++ b/compose/material3/adaptive/adaptive-navigation/api/restricted_1.1.0-beta02.txt
@@ -15,10 +15,10 @@
     method public String getPopUntilContentChange();
     method public String getPopUntilCurrentDestinationChange();
     method public String getPopUntilScaffoldValueChange();
-    property public final String PopLatest;
-    property public final String PopUntilContentChange;
-    property public final String PopUntilCurrentDestinationChange;
-    property public final String PopUntilScaffoldValueChange;
+    property public String PopLatest;
+    property public String PopUntilContentChange;
+    property public String PopUntilCurrentDestinationChange;
+    property public String PopUntilScaffoldValueChange;
   }
 
   @SuppressCompatibility @androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi @androidx.compose.runtime.Stable public interface ThreePaneScaffoldNavigator<T> {
diff --git a/compose/material3/adaptive/adaptive/api/1.1.0-beta02.txt b/compose/material3/adaptive/adaptive/api/1.1.0-beta02.txt
index 7dc7be8..3f44ac2 100644
--- a/compose/material3/adaptive/adaptive/api/1.1.0-beta02.txt
+++ b/compose/material3/adaptive/adaptive/api/1.1.0-beta02.txt
@@ -25,11 +25,11 @@
     method public boolean isOccluding();
     method public boolean isSeparating();
     method public boolean isVertical();
-    property public final androidx.compose.ui.geometry.Rect bounds;
-    property public final boolean isFlat;
-    property public final boolean isOccluding;
-    property public final boolean isSeparating;
-    property public final boolean isVertical;
+    property public androidx.compose.ui.geometry.Rect bounds;
+    property public boolean isFlat;
+    property public boolean isOccluding;
+    property public boolean isSeparating;
+    property public boolean isVertical;
   }
 
   @androidx.compose.runtime.Immutable public final class Posture {
@@ -37,8 +37,8 @@
     ctor public Posture(optional boolean isTabletop, optional java.util.List<androidx.compose.material3.adaptive.HingeInfo> hingeList);
     method public java.util.List<androidx.compose.material3.adaptive.HingeInfo> getHingeList();
     method public boolean isTabletop();
-    property public final java.util.List<androidx.compose.material3.adaptive.HingeInfo> hingeList;
-    property public final boolean isTabletop;
+    property public java.util.List<androidx.compose.material3.adaptive.HingeInfo> hingeList;
+    property public boolean isTabletop;
   }
 
   public final class PostureKt {
@@ -48,14 +48,20 @@
     method public static java.util.List<androidx.compose.ui.geometry.Rect> getOccludingVerticalHingeBounds(androidx.compose.material3.adaptive.Posture);
     method public static java.util.List<androidx.compose.ui.geometry.Rect> getSeparatingHorizontalHingeBounds(androidx.compose.material3.adaptive.Posture);
     method public static java.util.List<androidx.compose.ui.geometry.Rect> getSeparatingVerticalHingeBounds(androidx.compose.material3.adaptive.Posture);
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> allHorizontalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> allVerticalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> occludingHorizontalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> occludingVerticalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> separatingHorizontalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> separatingVerticalHingeBounds;
   }
 
   @androidx.compose.runtime.Immutable public final class WindowAdaptiveInfo {
     ctor public WindowAdaptiveInfo(androidx.window.core.layout.WindowSizeClass windowSizeClass, androidx.compose.material3.adaptive.Posture windowPosture);
     method public androidx.compose.material3.adaptive.Posture getWindowPosture();
     method public androidx.window.core.layout.WindowSizeClass getWindowSizeClass();
-    property public final androidx.compose.material3.adaptive.Posture windowPosture;
-    property public final androidx.window.core.layout.WindowSizeClass windowSizeClass;
+    property public androidx.compose.material3.adaptive.Posture windowPosture;
+    property public androidx.window.core.layout.WindowSizeClass windowSizeClass;
   }
 
 }
diff --git a/compose/material3/adaptive/adaptive/api/restricted_1.1.0-beta02.txt b/compose/material3/adaptive/adaptive/api/restricted_1.1.0-beta02.txt
index 7dc7be8..3f44ac2 100644
--- a/compose/material3/adaptive/adaptive/api/restricted_1.1.0-beta02.txt
+++ b/compose/material3/adaptive/adaptive/api/restricted_1.1.0-beta02.txt
@@ -25,11 +25,11 @@
     method public boolean isOccluding();
     method public boolean isSeparating();
     method public boolean isVertical();
-    property public final androidx.compose.ui.geometry.Rect bounds;
-    property public final boolean isFlat;
-    property public final boolean isOccluding;
-    property public final boolean isSeparating;
-    property public final boolean isVertical;
+    property public androidx.compose.ui.geometry.Rect bounds;
+    property public boolean isFlat;
+    property public boolean isOccluding;
+    property public boolean isSeparating;
+    property public boolean isVertical;
   }
 
   @androidx.compose.runtime.Immutable public final class Posture {
@@ -37,8 +37,8 @@
     ctor public Posture(optional boolean isTabletop, optional java.util.List<androidx.compose.material3.adaptive.HingeInfo> hingeList);
     method public java.util.List<androidx.compose.material3.adaptive.HingeInfo> getHingeList();
     method public boolean isTabletop();
-    property public final java.util.List<androidx.compose.material3.adaptive.HingeInfo> hingeList;
-    property public final boolean isTabletop;
+    property public java.util.List<androidx.compose.material3.adaptive.HingeInfo> hingeList;
+    property public boolean isTabletop;
   }
 
   public final class PostureKt {
@@ -48,14 +48,20 @@
     method public static java.util.List<androidx.compose.ui.geometry.Rect> getOccludingVerticalHingeBounds(androidx.compose.material3.adaptive.Posture);
     method public static java.util.List<androidx.compose.ui.geometry.Rect> getSeparatingHorizontalHingeBounds(androidx.compose.material3.adaptive.Posture);
     method public static java.util.List<androidx.compose.ui.geometry.Rect> getSeparatingVerticalHingeBounds(androidx.compose.material3.adaptive.Posture);
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> allHorizontalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> allVerticalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> occludingHorizontalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> occludingVerticalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> separatingHorizontalHingeBounds;
+    property public static java.util.List<androidx.compose.ui.geometry.Rect> separatingVerticalHingeBounds;
   }
 
   @androidx.compose.runtime.Immutable public final class WindowAdaptiveInfo {
     ctor public WindowAdaptiveInfo(androidx.window.core.layout.WindowSizeClass windowSizeClass, androidx.compose.material3.adaptive.Posture windowPosture);
     method public androidx.compose.material3.adaptive.Posture getWindowPosture();
     method public androidx.window.core.layout.WindowSizeClass getWindowSizeClass();
-    property public final androidx.compose.material3.adaptive.Posture windowPosture;
-    property public final androidx.window.core.layout.WindowSizeClass windowSizeClass;
+    property public androidx.compose.material3.adaptive.Posture windowPosture;
+    property public androidx.window.core.layout.WindowSizeClass windowSizeClass;
   }
 
 }
diff --git a/compose/material3/integration-tests/macrobenchmark-target/build.gradle b/compose/material3/integration-tests/macrobenchmark-target/build.gradle
index 2a69104..47c6f31 100644
--- a/compose/material3/integration-tests/macrobenchmark-target/build.gradle
+++ b/compose/material3/integration-tests/macrobenchmark-target/build.gradle
@@ -18,7 +18,7 @@
 }
 
 dependencies {
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":compose:material3:material3"))
     implementation("androidx.compose.material:material-icons-core:1.6.8")
 }
diff --git a/compose/material3/material3/api/current.txt b/compose/material3/material3/api/current.txt
index 904aa89..f179e71 100644
--- a/compose/material3/material3/api/current.txt
+++ b/compose/material3/material3/api/current.txt
@@ -214,7 +214,6 @@
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors buttonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors buttonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonElevation buttonElevation(optional float defaultElevation, optional float pressedElevation, optional float focusedElevation, optional float hoveredElevation, optional float disabledElevation);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues contentPaddingFor(float buttonHeight);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors elevatedButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors elevatedButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonElevation elevatedButtonElevation(optional float defaultElevation, optional float pressedElevation, optional float focusedElevation, optional float hoveredElevation, optional float disabledElevation);
@@ -224,16 +223,6 @@
     method public androidx.compose.foundation.layout.PaddingValues getButtonWithIconContentPadding();
     method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getElevatedShape();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraLargeContainerHeight();
-    method public androidx.compose.foundation.layout.PaddingValues getExtraLargeContentPadding();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraLargeIconSize();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraLargeIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargePressedShape();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraSmallContainerHeight();
-    method public androidx.compose.foundation.layout.PaddingValues getExtraSmallContentPadding();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraSmallIconSize();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraSmallIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallPressedShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getFilledTonalShape();
     method public float getIconSize();
     method public float getIconSpacing();
@@ -241,12 +230,10 @@
     method public androidx.compose.foundation.layout.PaddingValues getLargeContentPadding();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getLargeIconSize();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getLargeIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getLargePressedShape();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getMediumContainerHeight();
     method public androidx.compose.foundation.layout.PaddingValues getMediumContentPadding();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getMediumIconSize();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getMediumIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getMediumPressedShape();
     method public float getMinHeight();
     method public float getMinWidth();
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke getOutlinedButtonBorder();
@@ -255,32 +242,26 @@
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method @Deprecated public androidx.compose.foundation.layout.PaddingValues getSmallButtonContentPadding();
     method public androidx.compose.foundation.layout.PaddingValues getSmallContentPadding();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getSmallIconSize();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getSquareShape();
     method public androidx.compose.foundation.layout.PaddingValues getTextButtonContentPadding();
     method public androidx.compose.foundation.layout.PaddingValues getTextButtonWithIconContentPadding();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getTextShape();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float iconSizeFor(float buttonHeight);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float iconSpacingFor(float buttonHeight);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXLargeContainerHeight();
+    method public androidx.compose.foundation.layout.PaddingValues getXLargeContentPadding();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXLargeIconSize();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXLargeIconSpacing();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXSmallContainerHeight();
+    method public androidx.compose.foundation.layout.PaddingValues getXSmallContentPadding();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXSmallIconSize();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXSmallIconSpacing();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedButtonBorder(optional boolean enabled);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors outlinedButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors outlinedButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonShapes shapes();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonShapes shapes(optional androidx.compose.ui.graphics.Shape? shape, optional androidx.compose.ui.graphics.Shape? pressedShape);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonShapes shapesFor(float buttonHeight);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors textButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors textButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.text.TextStyle textStyleFor(float buttonHeight);
     property public androidx.compose.foundation.layout.PaddingValues ButtonWithIconContentPadding;
     property public androidx.compose.foundation.layout.PaddingValues ContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraLargeContainerHeight;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues ExtraLargeContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraLargeIconSize;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraLargeIconSpacing;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraSmallContainerHeight;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues ExtraSmallContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraSmallIconSize;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraSmallIconSpacing;
     property public float IconSize;
     property public float IconSpacing;
     property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float LargeContainerHeight;
@@ -295,15 +276,18 @@
     property public float MinWidth;
     property @Deprecated @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues SmallButtonContentPadding;
     property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues SmallContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float SmallIconSize;
     property public androidx.compose.foundation.layout.PaddingValues TextButtonContentPadding;
     property public androidx.compose.foundation.layout.PaddingValues TextButtonWithIconContentPadding;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XLargeContainerHeight;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues XLargeContentPadding;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XLargeIconSize;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XLargeIconSpacing;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XSmallContainerHeight;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues XSmallContentPadding;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XSmallIconSize;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XSmallIconSpacing;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape elevatedShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargePressedShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallPressedShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape filledTonalShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largePressedShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumPressedShape;
     property @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedButtonBorder;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape outlinedShape;
     property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape pressedShape;
@@ -3097,12 +3081,6 @@
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors elevatedToggleButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor, optional long checkedContainerColor, optional long checkedContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getCheckedShape();
     method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargeCheckedSquareShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargePressedShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargeSquareShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallCheckedSquareShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallPressedShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallSquareShape();
     method public float getIconSize();
     method public float getIconSpacing();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getLargeCheckedSquareShape();
@@ -3116,11 +3094,16 @@
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getRoundShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXLargeCheckedSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXLargePressedShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXLargeSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXSmallCheckedSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXSmallPressedShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXSmallSquareShape();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors outlinedToggleButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors outlinedToggleButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor, optional long checkedContainerColor, optional long checkedContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonShapes shapes();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonShapes shapes(optional androidx.compose.ui.graphics.Shape? shape, optional androidx.compose.ui.graphics.Shape? pressedShape, optional androidx.compose.ui.graphics.Shape? checkedShape);
-    method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonShapes shapesFor(float buttonHeight);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors toggleButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors toggleButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor, optional long checkedContainerColor, optional long checkedContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors tonalToggleButtonColors();
@@ -3128,20 +3111,20 @@
     property public androidx.compose.foundation.layout.PaddingValues ContentPadding;
     property public float IconSize;
     property public float IconSpacing;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape LargeCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape LargePressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape LargeSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape MediumCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape MediumPressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape MediumSquareShape;
     property public float MinHeight;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XLargeCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XLargePressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XLargeSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XSmallCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XSmallPressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XSmallSquareShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape checkedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargeCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargePressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargeSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallPressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largeCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largePressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largeSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumPressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumSquareShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape pressedShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape roundShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape shape;
@@ -3284,8 +3267,7 @@
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors largeTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors mediumTopAppBarColors();
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors mediumTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
-    method @Deprecated @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
-    method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll, optional boolean reverseLayout);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors topAppBarColors();
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors topAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors topAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor, optional long subtitleContentColor);
@@ -3305,14 +3287,12 @@
   @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Stable public interface TopAppBarScrollBehavior {
     method public androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>? getFlingAnimationSpec();
     method public androidx.compose.ui.input.nestedscroll.NestedScrollConnection getNestedScrollConnection();
-    method public boolean getReverseLayout();
     method public androidx.compose.animation.core.AnimationSpec<java.lang.Float>? getSnapAnimationSpec();
     method public androidx.compose.material3.TopAppBarState getState();
     method public boolean isPinned();
     property public abstract androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>? flingAnimationSpec;
     property public abstract boolean isPinned;
     property public abstract androidx.compose.ui.input.nestedscroll.NestedScrollConnection nestedScrollConnection;
-    property public abstract boolean reverseLayout;
     property public abstract androidx.compose.animation.core.AnimationSpec<java.lang.Float>? snapAnimationSpec;
     property public abstract androidx.compose.material3.TopAppBarState state;
   }
@@ -3323,8 +3303,7 @@
     method public float getContentOffset();
     method public float getHeightOffset();
     method public float getHeightOffsetLimit();
-    method @Deprecated public float getOverlappedFraction();
-    method public float overlappedFraction(optional boolean reverseLayout);
+    method public float getOverlappedFraction();
     method public void setContentOffset(float);
     method public void setHeightOffset(float);
     method public void setHeightOffsetLimit(float);
@@ -3332,7 +3311,7 @@
     property public float contentOffset;
     property public float heightOffset;
     property public float heightOffsetLimit;
-    property @Deprecated public float overlappedFraction;
+    property public float overlappedFraction;
     field public static final androidx.compose.material3.TopAppBarState.Companion Companion;
   }
 
diff --git a/compose/material3/material3/api/restricted_current.txt b/compose/material3/material3/api/restricted_current.txt
index 904aa89..f179e71 100644
--- a/compose/material3/material3/api/restricted_current.txt
+++ b/compose/material3/material3/api/restricted_current.txt
@@ -214,7 +214,6 @@
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors buttonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors buttonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonElevation buttonElevation(optional float defaultElevation, optional float pressedElevation, optional float focusedElevation, optional float hoveredElevation, optional float disabledElevation);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues contentPaddingFor(float buttonHeight);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors elevatedButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors elevatedButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonElevation elevatedButtonElevation(optional float defaultElevation, optional float pressedElevation, optional float focusedElevation, optional float hoveredElevation, optional float disabledElevation);
@@ -224,16 +223,6 @@
     method public androidx.compose.foundation.layout.PaddingValues getButtonWithIconContentPadding();
     method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getElevatedShape();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraLargeContainerHeight();
-    method public androidx.compose.foundation.layout.PaddingValues getExtraLargeContentPadding();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraLargeIconSize();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraLargeIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargePressedShape();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraSmallContainerHeight();
-    method public androidx.compose.foundation.layout.PaddingValues getExtraSmallContentPadding();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraSmallIconSize();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getExtraSmallIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallPressedShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getFilledTonalShape();
     method public float getIconSize();
     method public float getIconSpacing();
@@ -241,12 +230,10 @@
     method public androidx.compose.foundation.layout.PaddingValues getLargeContentPadding();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getLargeIconSize();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getLargeIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getLargePressedShape();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getMediumContainerHeight();
     method public androidx.compose.foundation.layout.PaddingValues getMediumContentPadding();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getMediumIconSize();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getMediumIconSpacing();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getMediumPressedShape();
     method public float getMinHeight();
     method public float getMinWidth();
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke getOutlinedButtonBorder();
@@ -255,32 +242,26 @@
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method @Deprecated public androidx.compose.foundation.layout.PaddingValues getSmallButtonContentPadding();
     method public androidx.compose.foundation.layout.PaddingValues getSmallContentPadding();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getSmallIconSize();
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getSquareShape();
     method public androidx.compose.foundation.layout.PaddingValues getTextButtonContentPadding();
     method public androidx.compose.foundation.layout.PaddingValues getTextButtonWithIconContentPadding();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getTextShape();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float iconSizeFor(float buttonHeight);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float iconSpacingFor(float buttonHeight);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXLargeContainerHeight();
+    method public androidx.compose.foundation.layout.PaddingValues getXLargeContentPadding();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXLargeIconSize();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXLargeIconSpacing();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXSmallContainerHeight();
+    method public androidx.compose.foundation.layout.PaddingValues getXSmallContentPadding();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXSmallIconSize();
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float getXSmallIconSpacing();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedButtonBorder(optional boolean enabled);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors outlinedButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors outlinedButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
     method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonShapes shapes();
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonShapes shapes(optional androidx.compose.ui.graphics.Shape? shape, optional androidx.compose.ui.graphics.Shape? pressedShape);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonShapes shapesFor(float buttonHeight);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors textButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ButtonColors textButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor);
-    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.text.TextStyle textStyleFor(float buttonHeight);
     property public androidx.compose.foundation.layout.PaddingValues ButtonWithIconContentPadding;
     property public androidx.compose.foundation.layout.PaddingValues ContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraLargeContainerHeight;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues ExtraLargeContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraLargeIconSize;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraLargeIconSpacing;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraSmallContainerHeight;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues ExtraSmallContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraSmallIconSize;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float ExtraSmallIconSpacing;
     property public float IconSize;
     property public float IconSpacing;
     property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float LargeContainerHeight;
@@ -295,15 +276,18 @@
     property public float MinWidth;
     property @Deprecated @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues SmallButtonContentPadding;
     property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues SmallContentPadding;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float SmallIconSize;
     property public androidx.compose.foundation.layout.PaddingValues TextButtonContentPadding;
     property public androidx.compose.foundation.layout.PaddingValues TextButtonWithIconContentPadding;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XLargeContainerHeight;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues XLargeContentPadding;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XLargeIconSize;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XLargeIconSpacing;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XSmallContainerHeight;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public androidx.compose.foundation.layout.PaddingValues XSmallContentPadding;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XSmallIconSize;
+    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi public float XSmallIconSpacing;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape elevatedShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargePressedShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallPressedShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape filledTonalShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largePressedShape;
-    property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumPressedShape;
     property @Deprecated @androidx.compose.runtime.Composable public androidx.compose.foundation.BorderStroke outlinedButtonBorder;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape outlinedShape;
     property @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape pressedShape;
@@ -3097,12 +3081,6 @@
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors elevatedToggleButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor, optional long checkedContainerColor, optional long checkedContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getCheckedShape();
     method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargeCheckedSquareShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargePressedShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraLargeSquareShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallCheckedSquareShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallPressedShape();
-    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getExtraSmallSquareShape();
     method public float getIconSize();
     method public float getIconSpacing();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getLargeCheckedSquareShape();
@@ -3116,11 +3094,16 @@
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getRoundShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getShape();
     method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXLargeCheckedSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXLargePressedShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXLargeSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXSmallCheckedSquareShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXSmallPressedShape();
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape getXSmallSquareShape();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors outlinedToggleButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors outlinedToggleButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor, optional long checkedContainerColor, optional long checkedContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonShapes shapes();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonShapes shapes(optional androidx.compose.ui.graphics.Shape? shape, optional androidx.compose.ui.graphics.Shape? pressedShape, optional androidx.compose.ui.graphics.Shape? checkedShape);
-    method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonShapes shapesFor(float buttonHeight);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors toggleButtonColors();
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors toggleButtonColors(optional long containerColor, optional long contentColor, optional long disabledContainerColor, optional long disabledContentColor, optional long checkedContainerColor, optional long checkedContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.ToggleButtonColors tonalToggleButtonColors();
@@ -3128,20 +3111,20 @@
     property public androidx.compose.foundation.layout.PaddingValues ContentPadding;
     property public float IconSize;
     property public float IconSpacing;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape LargeCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape LargePressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape LargeSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape MediumCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape MediumPressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape MediumSquareShape;
     property public float MinHeight;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XLargeCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XLargePressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XLargeSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XSmallCheckedSquareShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XSmallPressedShape;
+    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape XSmallSquareShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape checkedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargeCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargePressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraLargeSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallPressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape extraSmallSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largeCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largePressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape largeSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumCheckedSquareShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumPressedShape;
-    property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape mediumSquareShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape pressedShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape roundShape;
     property @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.Shape shape;
@@ -3284,8 +3267,7 @@
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors largeTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors mediumTopAppBarColors();
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors mediumTopAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
-    method @Deprecated @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
-    method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll, optional boolean reverseLayout);
+    method @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarScrollBehavior pinnedScrollBehavior(optional androidx.compose.material3.TopAppBarState state, optional kotlin.jvm.functions.Function0<java.lang.Boolean> canScroll);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors topAppBarColors();
     method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors topAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor);
     method @androidx.compose.runtime.Composable public androidx.compose.material3.TopAppBarColors topAppBarColors(optional long containerColor, optional long scrolledContainerColor, optional long navigationIconContentColor, optional long titleContentColor, optional long actionIconContentColor, optional long subtitleContentColor);
@@ -3305,14 +3287,12 @@
   @SuppressCompatibility @androidx.compose.material3.ExperimentalMaterial3Api @androidx.compose.runtime.Stable public interface TopAppBarScrollBehavior {
     method public androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>? getFlingAnimationSpec();
     method public androidx.compose.ui.input.nestedscroll.NestedScrollConnection getNestedScrollConnection();
-    method public boolean getReverseLayout();
     method public androidx.compose.animation.core.AnimationSpec<java.lang.Float>? getSnapAnimationSpec();
     method public androidx.compose.material3.TopAppBarState getState();
     method public boolean isPinned();
     property public abstract androidx.compose.animation.core.DecayAnimationSpec<java.lang.Float>? flingAnimationSpec;
     property public abstract boolean isPinned;
     property public abstract androidx.compose.ui.input.nestedscroll.NestedScrollConnection nestedScrollConnection;
-    property public abstract boolean reverseLayout;
     property public abstract androidx.compose.animation.core.AnimationSpec<java.lang.Float>? snapAnimationSpec;
     property public abstract androidx.compose.material3.TopAppBarState state;
   }
@@ -3323,8 +3303,7 @@
     method public float getContentOffset();
     method public float getHeightOffset();
     method public float getHeightOffsetLimit();
-    method @Deprecated public float getOverlappedFraction();
-    method public float overlappedFraction(optional boolean reverseLayout);
+    method public float getOverlappedFraction();
     method public void setContentOffset(float);
     method public void setHeightOffset(float);
     method public void setHeightOffsetLimit(float);
@@ -3332,7 +3311,7 @@
     property public float contentOffset;
     property public float heightOffset;
     property public float heightOffsetLimit;
-    property @Deprecated public float overlappedFraction;
+    property public float overlappedFraction;
     field public static final androidx.compose.material3.TopAppBarState.Companion Companion;
   }
 
diff --git a/compose/material3/material3/bcv/native/current.txt b/compose/material3/material3/bcv/native/current.txt
index 2fcde27..089f483 100644
--- a/compose/material3/material3/bcv/native/current.txt
+++ b/compose/material3/material3/bcv/native/current.txt
@@ -341,8 +341,6 @@
         abstract fun <get-isPinned>(): kotlin/Boolean // androidx.compose.material3/TopAppBarScrollBehavior.isPinned.<get-isPinned>|<get-isPinned>(){}[0]
     abstract val nestedScrollConnection // androidx.compose.material3/TopAppBarScrollBehavior.nestedScrollConnection|{}nestedScrollConnection[0]
         abstract fun <get-nestedScrollConnection>(): androidx.compose.ui.input.nestedscroll/NestedScrollConnection // androidx.compose.material3/TopAppBarScrollBehavior.nestedScrollConnection.<get-nestedScrollConnection>|<get-nestedScrollConnection>(){}[0]
-    abstract val reverseLayout // androidx.compose.material3/TopAppBarScrollBehavior.reverseLayout|{}reverseLayout[0]
-        abstract fun <get-reverseLayout>(): kotlin/Boolean // androidx.compose.material3/TopAppBarScrollBehavior.reverseLayout.<get-reverseLayout>|<get-reverseLayout>(){}[0]
     abstract val snapAnimationSpec // androidx.compose.material3/TopAppBarScrollBehavior.snapAnimationSpec|{}snapAnimationSpec[0]
         abstract fun <get-snapAnimationSpec>(): androidx.compose.animation.core/AnimationSpec<kotlin/Float>? // androidx.compose.material3/TopAppBarScrollBehavior.snapAnimationSpec.<get-snapAnimationSpec>|<get-snapAnimationSpec>(){}[0]
     abstract val state // androidx.compose.material3/TopAppBarScrollBehavior.state|{}state[0]
@@ -1773,8 +1771,6 @@
         final fun <get-heightOffsetLimit>(): kotlin/Float // androidx.compose.material3/TopAppBarState.heightOffsetLimit.<get-heightOffsetLimit>|<get-heightOffsetLimit>(){}[0]
         final fun <set-heightOffsetLimit>(kotlin/Float) // androidx.compose.material3/TopAppBarState.heightOffsetLimit.<set-heightOffsetLimit>|<set-heightOffsetLimit>(kotlin.Float){}[0]
 
-    final fun overlappedFraction(kotlin/Boolean = ...): kotlin/Float // androidx.compose.material3/TopAppBarState.overlappedFraction|overlappedFraction(kotlin.Boolean){}[0]
-
     final object Companion { // androidx.compose.material3/TopAppBarState.Companion|null[0]
         final val Saver // androidx.compose.material3/TopAppBarState.Companion.Saver|{}Saver[0]
             final fun <get-Saver>(): androidx.compose.runtime.saveable/Saver<androidx.compose.material3/TopAppBarState, *> // androidx.compose.material3/TopAppBarState.Companion.Saver.<get-Saver>|<get-Saver>(){}[0]
@@ -2290,22 +2286,6 @@
         final fun <get-ButtonWithIconContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.ButtonWithIconContentPadding.<get-ButtonWithIconContentPadding>|<get-ButtonWithIconContentPadding>(){}[0]
     final val ContentPadding // androidx.compose.material3/ButtonDefaults.ContentPadding|{}ContentPadding[0]
         final fun <get-ContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.ContentPadding.<get-ContentPadding>|<get-ContentPadding>(){}[0]
-    final val ExtraLargeContainerHeight // androidx.compose.material3/ButtonDefaults.ExtraLargeContainerHeight|{}ExtraLargeContainerHeight[0]
-        final fun <get-ExtraLargeContainerHeight>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.ExtraLargeContainerHeight.<get-ExtraLargeContainerHeight>|<get-ExtraLargeContainerHeight>(){}[0]
-    final val ExtraLargeContentPadding // androidx.compose.material3/ButtonDefaults.ExtraLargeContentPadding|{}ExtraLargeContentPadding[0]
-        final fun <get-ExtraLargeContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.ExtraLargeContentPadding.<get-ExtraLargeContentPadding>|<get-ExtraLargeContentPadding>(){}[0]
-    final val ExtraLargeIconSize // androidx.compose.material3/ButtonDefaults.ExtraLargeIconSize|{}ExtraLargeIconSize[0]
-        final fun <get-ExtraLargeIconSize>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.ExtraLargeIconSize.<get-ExtraLargeIconSize>|<get-ExtraLargeIconSize>(){}[0]
-    final val ExtraLargeIconSpacing // androidx.compose.material3/ButtonDefaults.ExtraLargeIconSpacing|{}ExtraLargeIconSpacing[0]
-        final fun <get-ExtraLargeIconSpacing>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.ExtraLargeIconSpacing.<get-ExtraLargeIconSpacing>|<get-ExtraLargeIconSpacing>(){}[0]
-    final val ExtraSmallContainerHeight // androidx.compose.material3/ButtonDefaults.ExtraSmallContainerHeight|{}ExtraSmallContainerHeight[0]
-        final fun <get-ExtraSmallContainerHeight>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.ExtraSmallContainerHeight.<get-ExtraSmallContainerHeight>|<get-ExtraSmallContainerHeight>(){}[0]
-    final val ExtraSmallContentPadding // androidx.compose.material3/ButtonDefaults.ExtraSmallContentPadding|{}ExtraSmallContentPadding[0]
-        final fun <get-ExtraSmallContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.ExtraSmallContentPadding.<get-ExtraSmallContentPadding>|<get-ExtraSmallContentPadding>(){}[0]
-    final val ExtraSmallIconSize // androidx.compose.material3/ButtonDefaults.ExtraSmallIconSize|{}ExtraSmallIconSize[0]
-        final fun <get-ExtraSmallIconSize>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.ExtraSmallIconSize.<get-ExtraSmallIconSize>|<get-ExtraSmallIconSize>(){}[0]
-    final val ExtraSmallIconSpacing // androidx.compose.material3/ButtonDefaults.ExtraSmallIconSpacing|{}ExtraSmallIconSpacing[0]
-        final fun <get-ExtraSmallIconSpacing>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.ExtraSmallIconSpacing.<get-ExtraSmallIconSpacing>|<get-ExtraSmallIconSpacing>(){}[0]
     final val IconSize // androidx.compose.material3/ButtonDefaults.IconSize|{}IconSize[0]
         final fun <get-IconSize>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.IconSize.<get-IconSize>|<get-IconSize>(){}[0]
     final val IconSpacing // androidx.compose.material3/ButtonDefaults.IconSpacing|{}IconSpacing[0]
@@ -2334,24 +2314,30 @@
         final fun <get-SmallButtonContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.SmallButtonContentPadding.<get-SmallButtonContentPadding>|<get-SmallButtonContentPadding>(){}[0]
     final val SmallContentPadding // androidx.compose.material3/ButtonDefaults.SmallContentPadding|{}SmallContentPadding[0]
         final fun <get-SmallContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.SmallContentPadding.<get-SmallContentPadding>|<get-SmallContentPadding>(){}[0]
-    final val SmallIconSize // androidx.compose.material3/ButtonDefaults.SmallIconSize|{}SmallIconSize[0]
-        final fun <get-SmallIconSize>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.SmallIconSize.<get-SmallIconSize>|<get-SmallIconSize>(){}[0]
     final val TextButtonContentPadding // androidx.compose.material3/ButtonDefaults.TextButtonContentPadding|{}TextButtonContentPadding[0]
         final fun <get-TextButtonContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.TextButtonContentPadding.<get-TextButtonContentPadding>|<get-TextButtonContentPadding>(){}[0]
     final val TextButtonWithIconContentPadding // androidx.compose.material3/ButtonDefaults.TextButtonWithIconContentPadding|{}TextButtonWithIconContentPadding[0]
         final fun <get-TextButtonWithIconContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.TextButtonWithIconContentPadding.<get-TextButtonWithIconContentPadding>|<get-TextButtonWithIconContentPadding>(){}[0]
+    final val XLargeContainerHeight // androidx.compose.material3/ButtonDefaults.XLargeContainerHeight|{}XLargeContainerHeight[0]
+        final fun <get-XLargeContainerHeight>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.XLargeContainerHeight.<get-XLargeContainerHeight>|<get-XLargeContainerHeight>(){}[0]
+    final val XLargeContentPadding // androidx.compose.material3/ButtonDefaults.XLargeContentPadding|{}XLargeContentPadding[0]
+        final fun <get-XLargeContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.XLargeContentPadding.<get-XLargeContentPadding>|<get-XLargeContentPadding>(){}[0]
+    final val XLargeIconSize // androidx.compose.material3/ButtonDefaults.XLargeIconSize|{}XLargeIconSize[0]
+        final fun <get-XLargeIconSize>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.XLargeIconSize.<get-XLargeIconSize>|<get-XLargeIconSize>(){}[0]
+    final val XLargeIconSpacing // androidx.compose.material3/ButtonDefaults.XLargeIconSpacing|{}XLargeIconSpacing[0]
+        final fun <get-XLargeIconSpacing>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.XLargeIconSpacing.<get-XLargeIconSpacing>|<get-XLargeIconSpacing>(){}[0]
+    final val XSmallContainerHeight // androidx.compose.material3/ButtonDefaults.XSmallContainerHeight|{}XSmallContainerHeight[0]
+        final fun <get-XSmallContainerHeight>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.XSmallContainerHeight.<get-XSmallContainerHeight>|<get-XSmallContainerHeight>(){}[0]
+    final val XSmallContentPadding // androidx.compose.material3/ButtonDefaults.XSmallContentPadding|{}XSmallContentPadding[0]
+        final fun <get-XSmallContentPadding>(): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.XSmallContentPadding.<get-XSmallContentPadding>|<get-XSmallContentPadding>(){}[0]
+    final val XSmallIconSize // androidx.compose.material3/ButtonDefaults.XSmallIconSize|{}XSmallIconSize[0]
+        final fun <get-XSmallIconSize>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.XSmallIconSize.<get-XSmallIconSize>|<get-XSmallIconSize>(){}[0]
+    final val XSmallIconSpacing // androidx.compose.material3/ButtonDefaults.XSmallIconSpacing|{}XSmallIconSpacing[0]
+        final fun <get-XSmallIconSpacing>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.XSmallIconSpacing.<get-XSmallIconSpacing>|<get-XSmallIconSpacing>(){}[0]
     final val elevatedShape // androidx.compose.material3/ButtonDefaults.elevatedShape|{}elevatedShape[0]
         final fun <get-elevatedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ButtonDefaults.elevatedShape.<get-elevatedShape>|<get-elevatedShape>(){}[0]
-    final val extraLargePressedShape // androidx.compose.material3/ButtonDefaults.extraLargePressedShape|{}extraLargePressedShape[0]
-        final fun <get-extraLargePressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ButtonDefaults.extraLargePressedShape.<get-extraLargePressedShape>|<get-extraLargePressedShape>(){}[0]
-    final val extraSmallPressedShape // androidx.compose.material3/ButtonDefaults.extraSmallPressedShape|{}extraSmallPressedShape[0]
-        final fun <get-extraSmallPressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ButtonDefaults.extraSmallPressedShape.<get-extraSmallPressedShape>|<get-extraSmallPressedShape>(){}[0]
     final val filledTonalShape // androidx.compose.material3/ButtonDefaults.filledTonalShape|{}filledTonalShape[0]
         final fun <get-filledTonalShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ButtonDefaults.filledTonalShape.<get-filledTonalShape>|<get-filledTonalShape>(){}[0]
-    final val largePressedShape // androidx.compose.material3/ButtonDefaults.largePressedShape|{}largePressedShape[0]
-        final fun <get-largePressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ButtonDefaults.largePressedShape.<get-largePressedShape>|<get-largePressedShape>(){}[0]
-    final val mediumPressedShape // androidx.compose.material3/ButtonDefaults.mediumPressedShape|{}mediumPressedShape[0]
-        final fun <get-mediumPressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ButtonDefaults.mediumPressedShape.<get-mediumPressedShape>|<get-mediumPressedShape>(){}[0]
     final val outlinedButtonBorder // androidx.compose.material3/ButtonDefaults.outlinedButtonBorder|{}outlinedButtonBorder[0]
         final fun <get-outlinedButtonBorder>(): androidx.compose.foundation/BorderStroke // androidx.compose.material3/ButtonDefaults.outlinedButtonBorder.<get-outlinedButtonBorder>|<get-outlinedButtonBorder>(){}[0]
     final val outlinedShape // androidx.compose.material3/ButtonDefaults.outlinedShape|{}outlinedShape[0]
@@ -2368,24 +2354,18 @@
     final fun buttonColors(): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.buttonColors|buttonColors(){}[0]
     final fun buttonColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.buttonColors|buttonColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun buttonElevation(androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ...): androidx.compose.material3/ButtonElevation // androidx.compose.material3/ButtonDefaults.buttonElevation|buttonElevation(androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp){}[0]
-    final fun contentPaddingFor(androidx.compose.ui.unit/Dp): androidx.compose.foundation.layout/PaddingValues // androidx.compose.material3/ButtonDefaults.contentPaddingFor|contentPaddingFor(androidx.compose.ui.unit.Dp){}[0]
     final fun elevatedButtonColors(): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.elevatedButtonColors|elevatedButtonColors(){}[0]
     final fun elevatedButtonColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.elevatedButtonColors|elevatedButtonColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun elevatedButtonElevation(androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ...): androidx.compose.material3/ButtonElevation // androidx.compose.material3/ButtonDefaults.elevatedButtonElevation|elevatedButtonElevation(androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp){}[0]
     final fun filledTonalButtonColors(): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.filledTonalButtonColors|filledTonalButtonColors(){}[0]
     final fun filledTonalButtonColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.filledTonalButtonColors|filledTonalButtonColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun filledTonalButtonElevation(androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ..., androidx.compose.ui.unit/Dp = ...): androidx.compose.material3/ButtonElevation // androidx.compose.material3/ButtonDefaults.filledTonalButtonElevation|filledTonalButtonElevation(androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp;androidx.compose.ui.unit.Dp){}[0]
-    final fun iconSizeFor(androidx.compose.ui.unit/Dp): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.iconSizeFor|iconSizeFor(androidx.compose.ui.unit.Dp){}[0]
-    final fun iconSpacingFor(androidx.compose.ui.unit/Dp): androidx.compose.ui.unit/Dp // androidx.compose.material3/ButtonDefaults.iconSpacingFor|iconSpacingFor(androidx.compose.ui.unit.Dp){}[0]
     final fun outlinedButtonBorder(kotlin/Boolean = ...): androidx.compose.foundation/BorderStroke // androidx.compose.material3/ButtonDefaults.outlinedButtonBorder|outlinedButtonBorder(kotlin.Boolean){}[0]
     final fun outlinedButtonColors(): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.outlinedButtonColors|outlinedButtonColors(){}[0]
     final fun outlinedButtonColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.outlinedButtonColors|outlinedButtonColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun shapes(): androidx.compose.material3/ButtonShapes // androidx.compose.material3/ButtonDefaults.shapes|shapes(){}[0]
-    final fun shapes(androidx.compose.ui.graphics/Shape? = ..., androidx.compose.ui.graphics/Shape? = ...): androidx.compose.material3/ButtonShapes // androidx.compose.material3/ButtonDefaults.shapes|shapes(androidx.compose.ui.graphics.Shape?;androidx.compose.ui.graphics.Shape?){}[0]
-    final fun shapesFor(androidx.compose.ui.unit/Dp): androidx.compose.material3/ButtonShapes // androidx.compose.material3/ButtonDefaults.shapesFor|shapesFor(androidx.compose.ui.unit.Dp){}[0]
     final fun textButtonColors(): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.textButtonColors|textButtonColors(){}[0]
     final fun textButtonColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/ButtonColors // androidx.compose.material3/ButtonDefaults.textButtonColors|textButtonColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
-    final fun textStyleFor(androidx.compose.ui.unit/Dp): androidx.compose.ui.text/TextStyle // androidx.compose.material3/ButtonDefaults.textStyleFor|textStyleFor(androidx.compose.ui.unit.Dp){}[0]
 }
 
 final object androidx.compose.material3/ButtonGroupDefaults { // androidx.compose.material3/ButtonGroupDefaults|null[0]
@@ -3199,34 +3179,34 @@
         final fun <get-IconSize>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ToggleButtonDefaults.IconSize.<get-IconSize>|<get-IconSize>(){}[0]
     final val IconSpacing // androidx.compose.material3/ToggleButtonDefaults.IconSpacing|{}IconSpacing[0]
         final fun <get-IconSpacing>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ToggleButtonDefaults.IconSpacing.<get-IconSpacing>|<get-IconSpacing>(){}[0]
+    final val LargeCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.LargeCheckedSquareShape|{}LargeCheckedSquareShape[0]
+        final fun <get-LargeCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.LargeCheckedSquareShape.<get-LargeCheckedSquareShape>|<get-LargeCheckedSquareShape>(){}[0]
+    final val LargePressedShape // androidx.compose.material3/ToggleButtonDefaults.LargePressedShape|{}LargePressedShape[0]
+        final fun <get-LargePressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.LargePressedShape.<get-LargePressedShape>|<get-LargePressedShape>(){}[0]
+    final val LargeSquareShape // androidx.compose.material3/ToggleButtonDefaults.LargeSquareShape|{}LargeSquareShape[0]
+        final fun <get-LargeSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.LargeSquareShape.<get-LargeSquareShape>|<get-LargeSquareShape>(){}[0]
+    final val MediumCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.MediumCheckedSquareShape|{}MediumCheckedSquareShape[0]
+        final fun <get-MediumCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.MediumCheckedSquareShape.<get-MediumCheckedSquareShape>|<get-MediumCheckedSquareShape>(){}[0]
+    final val MediumPressedShape // androidx.compose.material3/ToggleButtonDefaults.MediumPressedShape|{}MediumPressedShape[0]
+        final fun <get-MediumPressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.MediumPressedShape.<get-MediumPressedShape>|<get-MediumPressedShape>(){}[0]
+    final val MediumSquareShape // androidx.compose.material3/ToggleButtonDefaults.MediumSquareShape|{}MediumSquareShape[0]
+        final fun <get-MediumSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.MediumSquareShape.<get-MediumSquareShape>|<get-MediumSquareShape>(){}[0]
     final val MinHeight // androidx.compose.material3/ToggleButtonDefaults.MinHeight|{}MinHeight[0]
         final fun <get-MinHeight>(): androidx.compose.ui.unit/Dp // androidx.compose.material3/ToggleButtonDefaults.MinHeight.<get-MinHeight>|<get-MinHeight>(){}[0]
+    final val XLargeCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.XLargeCheckedSquareShape|{}XLargeCheckedSquareShape[0]
+        final fun <get-XLargeCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.XLargeCheckedSquareShape.<get-XLargeCheckedSquareShape>|<get-XLargeCheckedSquareShape>(){}[0]
+    final val XLargePressedShape // androidx.compose.material3/ToggleButtonDefaults.XLargePressedShape|{}XLargePressedShape[0]
+        final fun <get-XLargePressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.XLargePressedShape.<get-XLargePressedShape>|<get-XLargePressedShape>(){}[0]
+    final val XLargeSquareShape // androidx.compose.material3/ToggleButtonDefaults.XLargeSquareShape|{}XLargeSquareShape[0]
+        final fun <get-XLargeSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.XLargeSquareShape.<get-XLargeSquareShape>|<get-XLargeSquareShape>(){}[0]
+    final val XSmallCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.XSmallCheckedSquareShape|{}XSmallCheckedSquareShape[0]
+        final fun <get-XSmallCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.XSmallCheckedSquareShape.<get-XSmallCheckedSquareShape>|<get-XSmallCheckedSquareShape>(){}[0]
+    final val XSmallPressedShape // androidx.compose.material3/ToggleButtonDefaults.XSmallPressedShape|{}XSmallPressedShape[0]
+        final fun <get-XSmallPressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.XSmallPressedShape.<get-XSmallPressedShape>|<get-XSmallPressedShape>(){}[0]
+    final val XSmallSquareShape // androidx.compose.material3/ToggleButtonDefaults.XSmallSquareShape|{}XSmallSquareShape[0]
+        final fun <get-XSmallSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.XSmallSquareShape.<get-XSmallSquareShape>|<get-XSmallSquareShape>(){}[0]
     final val checkedShape // androidx.compose.material3/ToggleButtonDefaults.checkedShape|{}checkedShape[0]
         final fun <get-checkedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.checkedShape.<get-checkedShape>|<get-checkedShape>(){}[0]
-    final val extraLargeCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.extraLargeCheckedSquareShape|{}extraLargeCheckedSquareShape[0]
-        final fun <get-extraLargeCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.extraLargeCheckedSquareShape.<get-extraLargeCheckedSquareShape>|<get-extraLargeCheckedSquareShape>(){}[0]
-    final val extraLargePressedShape // androidx.compose.material3/ToggleButtonDefaults.extraLargePressedShape|{}extraLargePressedShape[0]
-        final fun <get-extraLargePressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.extraLargePressedShape.<get-extraLargePressedShape>|<get-extraLargePressedShape>(){}[0]
-    final val extraLargeSquareShape // androidx.compose.material3/ToggleButtonDefaults.extraLargeSquareShape|{}extraLargeSquareShape[0]
-        final fun <get-extraLargeSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.extraLargeSquareShape.<get-extraLargeSquareShape>|<get-extraLargeSquareShape>(){}[0]
-    final val extraSmallCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.extraSmallCheckedSquareShape|{}extraSmallCheckedSquareShape[0]
-        final fun <get-extraSmallCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.extraSmallCheckedSquareShape.<get-extraSmallCheckedSquareShape>|<get-extraSmallCheckedSquareShape>(){}[0]
-    final val extraSmallPressedShape // androidx.compose.material3/ToggleButtonDefaults.extraSmallPressedShape|{}extraSmallPressedShape[0]
-        final fun <get-extraSmallPressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.extraSmallPressedShape.<get-extraSmallPressedShape>|<get-extraSmallPressedShape>(){}[0]
-    final val extraSmallSquareShape // androidx.compose.material3/ToggleButtonDefaults.extraSmallSquareShape|{}extraSmallSquareShape[0]
-        final fun <get-extraSmallSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.extraSmallSquareShape.<get-extraSmallSquareShape>|<get-extraSmallSquareShape>(){}[0]
-    final val largeCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.largeCheckedSquareShape|{}largeCheckedSquareShape[0]
-        final fun <get-largeCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.largeCheckedSquareShape.<get-largeCheckedSquareShape>|<get-largeCheckedSquareShape>(){}[0]
-    final val largePressedShape // androidx.compose.material3/ToggleButtonDefaults.largePressedShape|{}largePressedShape[0]
-        final fun <get-largePressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.largePressedShape.<get-largePressedShape>|<get-largePressedShape>(){}[0]
-    final val largeSquareShape // androidx.compose.material3/ToggleButtonDefaults.largeSquareShape|{}largeSquareShape[0]
-        final fun <get-largeSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.largeSquareShape.<get-largeSquareShape>|<get-largeSquareShape>(){}[0]
-    final val mediumCheckedSquareShape // androidx.compose.material3/ToggleButtonDefaults.mediumCheckedSquareShape|{}mediumCheckedSquareShape[0]
-        final fun <get-mediumCheckedSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.mediumCheckedSquareShape.<get-mediumCheckedSquareShape>|<get-mediumCheckedSquareShape>(){}[0]
-    final val mediumPressedShape // androidx.compose.material3/ToggleButtonDefaults.mediumPressedShape|{}mediumPressedShape[0]
-        final fun <get-mediumPressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.mediumPressedShape.<get-mediumPressedShape>|<get-mediumPressedShape>(){}[0]
-    final val mediumSquareShape // androidx.compose.material3/ToggleButtonDefaults.mediumSquareShape|{}mediumSquareShape[0]
-        final fun <get-mediumSquareShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.mediumSquareShape.<get-mediumSquareShape>|<get-mediumSquareShape>(){}[0]
     final val pressedShape // androidx.compose.material3/ToggleButtonDefaults.pressedShape|{}pressedShape[0]
         final fun <get-pressedShape>(): androidx.compose.ui.graphics/Shape // androidx.compose.material3/ToggleButtonDefaults.pressedShape.<get-pressedShape>|<get-pressedShape>(){}[0]
     final val roundShape // androidx.compose.material3/ToggleButtonDefaults.roundShape|{}roundShape[0]
@@ -3242,7 +3222,6 @@
     final fun outlinedToggleButtonColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/ToggleButtonColors // androidx.compose.material3/ToggleButtonDefaults.outlinedToggleButtonColors|outlinedToggleButtonColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun shapes(): androidx.compose.material3/ToggleButtonShapes // androidx.compose.material3/ToggleButtonDefaults.shapes|shapes(){}[0]
     final fun shapes(androidx.compose.ui.graphics/Shape? = ..., androidx.compose.ui.graphics/Shape? = ..., androidx.compose.ui.graphics/Shape? = ...): androidx.compose.material3/ToggleButtonShapes // androidx.compose.material3/ToggleButtonDefaults.shapes|shapes(androidx.compose.ui.graphics.Shape?;androidx.compose.ui.graphics.Shape?;androidx.compose.ui.graphics.Shape?){}[0]
-    final fun shapesFor(androidx.compose.ui.unit/Dp): androidx.compose.material3/ToggleButtonShapes // androidx.compose.material3/ToggleButtonDefaults.shapesFor|shapesFor(androidx.compose.ui.unit.Dp){}[0]
     final fun toggleButtonColors(): androidx.compose.material3/ToggleButtonColors // androidx.compose.material3/ToggleButtonDefaults.toggleButtonColors|toggleButtonColors(){}[0]
     final fun toggleButtonColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/ToggleButtonColors // androidx.compose.material3/ToggleButtonDefaults.toggleButtonColors|toggleButtonColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun tonalToggleButtonColors(): androidx.compose.material3/ToggleButtonColors // androidx.compose.material3/ToggleButtonDefaults.tonalToggleButtonColors|tonalToggleButtonColors(){}[0]
@@ -3322,7 +3301,6 @@
     final fun mediumTopAppBarColors(): androidx.compose.material3/TopAppBarColors // androidx.compose.material3/TopAppBarDefaults.mediumTopAppBarColors|mediumTopAppBarColors(){}[0]
     final fun mediumTopAppBarColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/TopAppBarColors // androidx.compose.material3/TopAppBarDefaults.mediumTopAppBarColors|mediumTopAppBarColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun pinnedScrollBehavior(androidx.compose.material3/TopAppBarState = ..., kotlin/Function0<kotlin/Boolean> = ...): androidx.compose.material3/TopAppBarScrollBehavior // androidx.compose.material3/TopAppBarDefaults.pinnedScrollBehavior|pinnedScrollBehavior(androidx.compose.material3.TopAppBarState;kotlin.Function0<kotlin.Boolean>){}[0]
-    final fun pinnedScrollBehavior(androidx.compose.material3/TopAppBarState = ..., kotlin/Function0<kotlin/Boolean> = ..., kotlin/Boolean = ...): androidx.compose.material3/TopAppBarScrollBehavior // androidx.compose.material3/TopAppBarDefaults.pinnedScrollBehavior|pinnedScrollBehavior(androidx.compose.material3.TopAppBarState;kotlin.Function0<kotlin.Boolean>;kotlin.Boolean){}[0]
     final fun topAppBarColors(): androidx.compose.material3/TopAppBarColors // androidx.compose.material3/TopAppBarDefaults.topAppBarColors|topAppBarColors(){}[0]
     final fun topAppBarColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/TopAppBarColors // androidx.compose.material3/TopAppBarDefaults.topAppBarColors|topAppBarColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
     final fun topAppBarColors(androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ..., androidx.compose.ui.graphics/Color = ...): androidx.compose.material3/TopAppBarColors // androidx.compose.material3/TopAppBarDefaults.topAppBarColors|topAppBarColors(androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color;androidx.compose.ui.graphics.Color){}[0]
diff --git a/compose/material3/material3/integration-tests/material3-demos/build.gradle b/compose/material3/material3/integration-tests/material3-demos/build.gradle
index ae544ab..a0128d2 100644
--- a/compose/material3/material3/integration-tests/material3-demos/build.gradle
+++ b/compose/material3/material3/integration-tests/material3-demos/build.gradle
@@ -34,7 +34,7 @@
 
     implementation(libs.kotlinStdlib)
 
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":compose:animation:animation"))
     implementation(project(":compose:foundation:foundation"))
     implementation(project(":compose:foundation:foundation-layout"))
diff --git a/compose/material3/material3/integration-tests/material3-demos/src/main/java/androidx/compose/material3/demos/ToggleButtonDemos.kt b/compose/material3/material3/integration-tests/material3-demos/src/main/java/androidx/compose/material3/demos/ToggleButtonDemos.kt
index 85491f5..4ea8d32 100644
--- a/compose/material3/material3/integration-tests/material3-demos/src/main/java/androidx/compose/material3/demos/ToggleButtonDemos.kt
+++ b/compose/material3/material3/integration-tests/material3-demos/src/main/java/androidx/compose/material3/demos/ToggleButtonDemos.kt
@@ -35,6 +35,7 @@
 import androidx.compose.material3.ElevatedToggleButton
 import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
 import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.OutlinedToggleButton
 import androidx.compose.material3.Text
 import androidx.compose.material3.ToggleButton
@@ -82,7 +83,7 @@
                 Text("Large")
             }
             Box(
-                Modifier.heightIn(ButtonDefaults.ExtraLargeContainerHeight),
+                Modifier.heightIn(ButtonDefaults.XLargeContainerHeight),
                 contentAlignment = Alignment.Center
             ) {
                 Text("XLarge")
@@ -110,81 +111,95 @@
         ToggleButton(
             checked = checked[0],
             onCheckedChange = { checked[0] = it },
-            modifier = Modifier.heightIn(extraSmall),
-            shapes = ToggleButtonDefaults.shapesFor(extraSmall),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraSmall)
+            modifier = Modifier.heightIn(ButtonDefaults.XSmallContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XSmallPressedShape,
+                    ToggleButtonDefaults.XSmallCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XSmallContentPadding
         ) {
             Icon(
                 if (checked[0]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraSmall))
+                modifier = Modifier.size(ButtonDefaults.XSmallIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraSmall)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraSmall))
+            Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
+            Text("Label")
         }
 
-        ToggleButton(
-            checked = checked[1],
-            onCheckedChange = { checked[1] = it },
-            modifier = Modifier.heightIn(small),
-            shapes = ToggleButtonDefaults.shapesFor(small),
-            contentPadding = ButtonDefaults.contentPaddingFor(small)
-        ) {
+        ToggleButton(checked = checked[1], onCheckedChange = { checked[1] = it }) {
             Icon(
                 if (checked[1]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(small))
+                modifier = Modifier.size(ButtonDefaults.IconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(small)))
-            Text("Label", style = ButtonDefaults.textStyleFor(small))
+            Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+            Text("Label")
         }
 
         ToggleButton(
             checked = checked[2],
             onCheckedChange = { checked[2] = it },
-            modifier = Modifier.heightIn(medium),
-            shapes = ToggleButtonDefaults.shapesFor(medium),
-            contentPadding = ButtonDefaults.contentPaddingFor(medium)
+            modifier = Modifier.heightIn(ButtonDefaults.MediumContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.MediumPressedShape,
+                    ToggleButtonDefaults.MediumCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.MediumContentPadding
         ) {
             Icon(
                 if (checked[2]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(medium))
+                modifier = Modifier.size(ButtonDefaults.MediumIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(medium)))
-            Text("Label", style = ButtonDefaults.textStyleFor(medium))
+            Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.titleMedium)
         }
 
         ToggleButton(
             checked = checked[3],
             onCheckedChange = { checked[3] = it },
-            modifier = Modifier.heightIn(large),
-            shapes = ToggleButtonDefaults.shapesFor(large),
-            contentPadding = ButtonDefaults.contentPaddingFor(large)
+            modifier = Modifier.heightIn(ButtonDefaults.LargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.LargePressedShape,
+                    ToggleButtonDefaults.LargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.LargeContentPadding
         ) {
             Icon(
                 if (checked[3]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(large))
+                modifier = Modifier.size(ButtonDefaults.LargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(large)))
-            Text("Label", style = ButtonDefaults.textStyleFor(large))
+            Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineSmall)
         }
 
         ToggleButton(
             checked = checked[4],
             onCheckedChange = { checked[4] = it },
-            modifier = Modifier.heightIn(extraLarge),
-            shapes = ToggleButtonDefaults.shapesFor(extraLarge),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraLarge)
+            modifier = Modifier.heightIn(ButtonDefaults.XLargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XLargePressedShape,
+                    ToggleButtonDefaults.XLargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XLargeContentPadding
         ) {
             Icon(
                 if (checked[4]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraLarge))
+                modifier = Modifier.size(ButtonDefaults.XLargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraLarge)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraLarge))
+            Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineLarge)
         }
     }
 }
@@ -202,81 +217,95 @@
         ElevatedToggleButton(
             checked = checked[0],
             onCheckedChange = { checked[0] = it },
-            modifier = Modifier.heightIn(extraSmall),
-            shapes = ToggleButtonDefaults.shapesFor(extraSmall),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraSmall)
+            modifier = Modifier.heightIn(ButtonDefaults.XSmallContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XSmallPressedShape,
+                    ToggleButtonDefaults.XSmallCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XSmallContentPadding
         ) {
             Icon(
                 if (checked[0]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraSmall))
+                modifier = Modifier.size(ButtonDefaults.XSmallIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraSmall)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraSmall))
+            Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
+            Text("Label")
         }
 
-        ElevatedToggleButton(
-            checked = checked[1],
-            onCheckedChange = { checked[1] = it },
-            modifier = Modifier.heightIn(small),
-            shapes = ToggleButtonDefaults.shapesFor(small),
-            contentPadding = ButtonDefaults.contentPaddingFor(small)
-        ) {
+        ElevatedToggleButton(checked = checked[1], onCheckedChange = { checked[1] = it }) {
             Icon(
                 if (checked[1]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(small))
+                modifier = Modifier.size(ButtonDefaults.IconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(small)))
-            Text("Label", style = ButtonDefaults.textStyleFor(small))
+            Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+            Text("Label")
         }
 
         ElevatedToggleButton(
             checked = checked[2],
             onCheckedChange = { checked[2] = it },
-            modifier = Modifier.heightIn(medium),
-            shapes = ToggleButtonDefaults.shapesFor(medium),
-            contentPadding = ButtonDefaults.contentPaddingFor(medium)
+            modifier = Modifier.heightIn(ButtonDefaults.MediumContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.MediumPressedShape,
+                    ToggleButtonDefaults.MediumCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.MediumContentPadding
         ) {
             Icon(
                 if (checked[2]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(medium))
+                modifier = Modifier.size(ButtonDefaults.MediumIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(medium)))
-            Text("Label", style = ButtonDefaults.textStyleFor(medium))
+            Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.titleMedium)
         }
 
         ElevatedToggleButton(
             checked = checked[3],
             onCheckedChange = { checked[3] = it },
-            modifier = Modifier.heightIn(large),
-            shapes = ToggleButtonDefaults.shapesFor(large),
-            contentPadding = ButtonDefaults.contentPaddingFor(large)
+            modifier = Modifier.heightIn(ButtonDefaults.LargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.LargePressedShape,
+                    ToggleButtonDefaults.LargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.LargeContentPadding
         ) {
             Icon(
                 if (checked[3]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(large))
+                modifier = Modifier.size(ButtonDefaults.LargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(large)))
-            Text("Label", style = ButtonDefaults.textStyleFor(large))
+            Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineSmall)
         }
 
         ElevatedToggleButton(
             checked = checked[4],
             onCheckedChange = { checked[4] = it },
-            modifier = Modifier.heightIn(extraLarge),
-            shapes = ToggleButtonDefaults.shapesFor(extraLarge),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraLarge)
+            modifier = Modifier.heightIn(ButtonDefaults.XLargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XLargePressedShape,
+                    ToggleButtonDefaults.XLargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XLargeContentPadding
         ) {
             Icon(
                 if (checked[4]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraLarge))
+                modifier = Modifier.size(ButtonDefaults.XLargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraLarge)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraLarge))
+            Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineLarge)
         }
     }
 }
@@ -294,81 +323,95 @@
         TonalToggleButton(
             checked = checked[0],
             onCheckedChange = { checked[0] = it },
-            modifier = Modifier.heightIn(extraSmall),
-            shapes = ToggleButtonDefaults.shapesFor(extraSmall),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraSmall)
+            modifier = Modifier.heightIn(ButtonDefaults.XSmallContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XSmallPressedShape,
+                    ToggleButtonDefaults.XSmallCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XSmallContentPadding
         ) {
             Icon(
                 if (checked[0]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraSmall))
+                modifier = Modifier.size(ButtonDefaults.XSmallIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraSmall)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraSmall))
+            Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
+            Text("Label")
         }
 
-        TonalToggleButton(
-            checked = checked[1],
-            onCheckedChange = { checked[1] = it },
-            modifier = Modifier.heightIn(small),
-            shapes = ToggleButtonDefaults.shapesFor(small),
-            contentPadding = ButtonDefaults.contentPaddingFor(small)
-        ) {
+        TonalToggleButton(checked = checked[1], onCheckedChange = { checked[1] = it }) {
             Icon(
                 if (checked[1]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(small))
+                modifier = Modifier.size(ButtonDefaults.IconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(small)))
-            Text("Label", style = ButtonDefaults.textStyleFor(small))
+            Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+            Text("Label")
         }
 
         TonalToggleButton(
             checked = checked[2],
             onCheckedChange = { checked[2] = it },
-            modifier = Modifier.heightIn(medium),
-            shapes = ToggleButtonDefaults.shapesFor(medium),
-            contentPadding = ButtonDefaults.contentPaddingFor(medium)
+            modifier = Modifier.heightIn(ButtonDefaults.MediumContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.MediumPressedShape,
+                    ToggleButtonDefaults.MediumCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.MediumContentPadding
         ) {
             Icon(
                 if (checked[2]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(medium))
+                modifier = Modifier.size(ButtonDefaults.MediumIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(medium)))
-            Text("Label", style = ButtonDefaults.textStyleFor(medium))
+            Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.titleMedium)
         }
 
         TonalToggleButton(
             checked = checked[3],
             onCheckedChange = { checked[3] = it },
-            modifier = Modifier.heightIn(large),
-            shapes = ToggleButtonDefaults.shapesFor(large),
-            contentPadding = ButtonDefaults.contentPaddingFor(large)
+            modifier = Modifier.heightIn(ButtonDefaults.LargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.LargePressedShape,
+                    ToggleButtonDefaults.LargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.LargeContentPadding
         ) {
             Icon(
                 if (checked[3]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(large))
+                modifier = Modifier.size(ButtonDefaults.LargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(large)))
-            Text("Label", style = ButtonDefaults.textStyleFor(large))
+            Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineSmall)
         }
 
         TonalToggleButton(
             checked = checked[4],
             onCheckedChange = { checked[4] = it },
-            modifier = Modifier.heightIn(extraLarge),
-            shapes = ToggleButtonDefaults.shapesFor(extraLarge),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraLarge)
+            modifier = Modifier.heightIn(ButtonDefaults.XLargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XLargePressedShape,
+                    ToggleButtonDefaults.XLargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XLargeContentPadding
         ) {
             Icon(
                 if (checked[4]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraLarge))
+                modifier = Modifier.size(ButtonDefaults.XLargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraLarge)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraLarge))
+            Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineLarge)
         }
     }
 }
@@ -386,89 +429,95 @@
         OutlinedToggleButton(
             checked = checked[0],
             onCheckedChange = { checked[0] = it },
-            modifier = Modifier.heightIn(extraSmall),
-            shapes = ToggleButtonDefaults.shapesFor(extraSmall),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraSmall)
+            modifier = Modifier.heightIn(ButtonDefaults.XSmallContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XSmallPressedShape,
+                    ToggleButtonDefaults.XSmallCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XSmallContentPadding
         ) {
             Icon(
                 if (checked[0]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraSmall))
+                modifier = Modifier.size(ButtonDefaults.XSmallIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraSmall)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraSmall))
+            Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
+            Text("Label")
         }
 
-        OutlinedToggleButton(
-            checked = checked[1],
-            onCheckedChange = { checked[1] = it },
-            modifier = Modifier.heightIn(small),
-            shapes = ToggleButtonDefaults.shapesFor(small),
-            contentPadding = ButtonDefaults.contentPaddingFor(small)
-        ) {
+        OutlinedToggleButton(checked = checked[1], onCheckedChange = { checked[1] = it }) {
             Icon(
                 if (checked[1]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(small))
+                modifier = Modifier.size(ButtonDefaults.IconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(small)))
-            Text("Label", style = ButtonDefaults.textStyleFor(small))
+            Spacer(Modifier.size(ButtonDefaults.IconSpacing))
+            Text("Label")
         }
 
         OutlinedToggleButton(
             checked = checked[2],
             onCheckedChange = { checked[2] = it },
-            modifier = Modifier.heightIn(medium),
-            shapes = ToggleButtonDefaults.shapesFor(medium),
-            contentPadding = ButtonDefaults.contentPaddingFor(medium)
+            modifier = Modifier.heightIn(ButtonDefaults.MediumContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.MediumPressedShape,
+                    ToggleButtonDefaults.MediumCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.MediumContentPadding
         ) {
             Icon(
                 if (checked[2]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(medium))
+                modifier = Modifier.size(ButtonDefaults.MediumIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(medium)))
-            Text("Label", style = ButtonDefaults.textStyleFor(medium))
+            Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.titleMedium)
         }
 
         OutlinedToggleButton(
             checked = checked[3],
             onCheckedChange = { checked[3] = it },
-            modifier = Modifier.heightIn(large),
-            shapes = ToggleButtonDefaults.shapesFor(large),
-            contentPadding = ButtonDefaults.contentPaddingFor(large)
+            modifier = Modifier.heightIn(ButtonDefaults.LargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.LargePressedShape,
+                    ToggleButtonDefaults.LargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.LargeContentPadding
         ) {
             Icon(
                 if (checked[3]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(large))
+                modifier = Modifier.size(ButtonDefaults.LargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(large)))
-            Text("Label", style = ButtonDefaults.textStyleFor(large))
+            Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineSmall)
         }
 
         OutlinedToggleButton(
             checked = checked[4],
             onCheckedChange = { checked[4] = it },
-            modifier = Modifier.heightIn(extraLarge),
-            shapes = ToggleButtonDefaults.shapesFor(extraLarge),
-            contentPadding = ButtonDefaults.contentPaddingFor(extraLarge)
+            modifier = Modifier.heightIn(ButtonDefaults.XLargeContainerHeight),
+            shapes =
+                ToggleButtonDefaults.shapes(
+                    ToggleButtonDefaults.shape,
+                    ToggleButtonDefaults.XLargePressedShape,
+                    ToggleButtonDefaults.XLargeCheckedSquareShape
+                ),
+            contentPadding = ButtonDefaults.XLargeContentPadding
         ) {
             Icon(
                 if (checked[4]) Icons.Filled.Edit else Icons.Outlined.Edit,
                 contentDescription = "Localized description",
-                modifier = Modifier.size(ButtonDefaults.iconSizeFor(extraLarge))
+                modifier = Modifier.size(ButtonDefaults.XLargeIconSize)
             )
-            Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(extraLarge)))
-            Text("Label", style = ButtonDefaults.textStyleFor(extraLarge))
+            Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
+            Text(text = "Label", style = MaterialTheme.typography.headlineLarge)
         }
     }
 }
-
-@OptIn(ExperimentalMaterial3ExpressiveApi::class)
-val extraSmall = ButtonDefaults.ExtraSmallContainerHeight
-val small = ButtonDefaults.MinHeight
-@OptIn(ExperimentalMaterial3ExpressiveApi::class) val medium = ButtonDefaults.MediumContainerHeight
-@OptIn(ExperimentalMaterial3ExpressiveApi::class) val large = ButtonDefaults.LargeContainerHeight
-@OptIn(ExperimentalMaterial3ExpressiveApi::class)
-val extraLarge = ButtonDefaults.ExtraLargeContainerHeight
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt
index ff10191..ce1bc17 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ButtonSamples.kt
@@ -29,6 +29,7 @@
 import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
 import androidx.compose.material3.FilledTonalButton
 import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.OutlinedButton
 import androidx.compose.material3.Text
 import androidx.compose.material3.TextButton
@@ -154,18 +155,17 @@
 @Sampled
 @Composable
 fun XSmallButtonWithIconSample() {
-    val size = ButtonDefaults.ExtraSmallContainerHeight
     Button(
         onClick = { /* Do something! */ },
-        modifier = Modifier.heightIn(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.XSmallContainerHeight),
+        contentPadding = ButtonDefaults.XSmallContentPadding
     ) {
         Icon(
             Icons.Filled.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.XSmallIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+        Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
         Text("Label")
     }
 }
@@ -175,19 +175,18 @@
 @Sampled
 @Composable
 fun MediumButtonWithIconSample() {
-    val size = ButtonDefaults.MediumContainerHeight
     Button(
         onClick = { /* Do something! */ },
-        modifier = Modifier.heightIn(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.MediumContainerHeight),
+        contentPadding = ButtonDefaults.MediumContentPadding
     ) {
         Icon(
             Icons.Filled.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.MediumIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
-        Text("Label", style = ButtonDefaults.textStyleFor(size))
+        Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
+        Text(text = "Label", style = MaterialTheme.typography.titleMedium)
     }
 }
 
@@ -196,19 +195,18 @@
 @Sampled
 @Composable
 fun LargeButtonWithIconSample() {
-    val size = ButtonDefaults.LargeContainerHeight
     Button(
         onClick = { /* Do something! */ },
-        modifier = Modifier.heightIn(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.LargeContainerHeight),
+        contentPadding = ButtonDefaults.LargeContentPadding
     ) {
         Icon(
             Icons.Filled.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.LargeIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
-        Text("Label", style = ButtonDefaults.textStyleFor(size))
+        Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
+        Text(text = "Label", style = MaterialTheme.typography.headlineSmall)
     }
 }
 
@@ -217,18 +215,17 @@
 @Sampled
 @Composable
 fun XLargeButtonWithIconSample() {
-    val size = ButtonDefaults.ExtraLargeContainerHeight
     Button(
         onClick = { /* Do something! */ },
-        modifier = Modifier.heightIn(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.XLargeContainerHeight),
+        contentPadding = ButtonDefaults.XLargeContentPadding
     ) {
         Icon(
             Icons.Filled.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.XLargeIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
-        Text("Label", style = ButtonDefaults.textStyleFor(size))
+        Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
+        Text(text = "Label", style = MaterialTheme.typography.headlineLarge)
     }
 }
diff --git a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ToggleButtonSamples.kt b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ToggleButtonSamples.kt
index 3dac6e1..49b797d 100644
--- a/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ToggleButtonSamples.kt
+++ b/compose/material3/material3/samples/src/main/java/androidx/compose/material3/samples/ToggleButtonSamples.kt
@@ -27,6 +27,7 @@
 import androidx.compose.material3.ElevatedToggleButton
 import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
 import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.OutlinedToggleButton
 import androidx.compose.material3.Text
 import androidx.compose.material3.ToggleButton
@@ -123,20 +124,24 @@
 @Composable
 fun XSmallToggleButtonWithIconSample() {
     var checked by remember { mutableStateOf(false) }
-    val size = ButtonDefaults.ExtraSmallContainerHeight
     ToggleButton(
         checked = checked,
         onCheckedChange = { checked = it },
-        modifier = Modifier.heightIn(size),
-        shapes = ToggleButtonDefaults.shapesFor(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.XSmallContainerHeight),
+        shapes =
+            ToggleButtonDefaults.shapes(
+                shape = ToggleButtonDefaults.shape,
+                pressedShape = ToggleButtonDefaults.XSmallPressedShape,
+                checkedShape = ToggleButtonDefaults.XSmallCheckedSquareShape
+            ),
+        contentPadding = ButtonDefaults.XSmallContentPadding
     ) {
         Icon(
             if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.XSmallIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+        Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
         Text("Label")
     }
 }
@@ -147,21 +152,25 @@
 @Composable
 fun MediumToggleButtonWithIconSample() {
     var checked by remember { mutableStateOf(false) }
-    val size = ButtonDefaults.MediumContainerHeight
     ToggleButton(
         checked = checked,
         onCheckedChange = { checked = it },
-        modifier = Modifier.heightIn(size),
-        shapes = ToggleButtonDefaults.shapesFor(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.MediumContainerHeight),
+        shapes =
+            ToggleButtonDefaults.shapes(
+                shape = ToggleButtonDefaults.shape,
+                pressedShape = ToggleButtonDefaults.MediumPressedShape,
+                checkedShape = ToggleButtonDefaults.MediumCheckedSquareShape
+            ),
+        contentPadding = ButtonDefaults.MediumContentPadding
     ) {
         Icon(
             if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.MediumIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
-        Text("Label", style = ButtonDefaults.textStyleFor(size))
+        Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
+        Text(text = "Label", style = MaterialTheme.typography.titleMedium)
     }
 }
 
@@ -171,21 +180,25 @@
 @Composable
 fun LargeToggleButtonWithIconSample() {
     var checked by remember { mutableStateOf(false) }
-    val size = ButtonDefaults.LargeContainerHeight
     ToggleButton(
         checked = checked,
         onCheckedChange = { checked = it },
-        modifier = Modifier.heightIn(size),
-        shapes = ToggleButtonDefaults.shapesFor(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.LargeContainerHeight),
+        shapes =
+            ToggleButtonDefaults.shapes(
+                shape = ToggleButtonDefaults.shape,
+                pressedShape = ToggleButtonDefaults.LargePressedShape,
+                checkedShape = ToggleButtonDefaults.LargeCheckedSquareShape
+            ),
+        contentPadding = ButtonDefaults.LargeContentPadding
     ) {
         Icon(
             if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.LargeIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
-        Text("Label", style = ButtonDefaults.textStyleFor(size))
+        Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
+        Text(text = "Label", style = MaterialTheme.typography.headlineSmall)
     }
 }
 
@@ -195,20 +208,24 @@
 @Composable
 fun XLargeToggleButtonWithIconSample() {
     var checked by remember { mutableStateOf(false) }
-    val size = ButtonDefaults.ExtraLargeContainerHeight
     ToggleButton(
         checked = checked,
         onCheckedChange = { checked = it },
-        modifier = Modifier.heightIn(size),
-        shapes = ToggleButtonDefaults.shapesFor(size),
-        contentPadding = ButtonDefaults.contentPaddingFor(size)
+        modifier = Modifier.heightIn(ButtonDefaults.XLargeContainerHeight),
+        shapes =
+            ToggleButtonDefaults.shapes(
+                shape = ToggleButtonDefaults.shape,
+                pressedShape = ToggleButtonDefaults.XLargePressedShape,
+                checkedShape = ToggleButtonDefaults.XLargeCheckedSquareShape
+            ),
+        contentPadding = ButtonDefaults.XLargeContentPadding
     ) {
         Icon(
             if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
             contentDescription = "Localized description",
-            modifier = Modifier.size(ButtonDefaults.iconSizeFor(size))
+            modifier = Modifier.size(ButtonDefaults.XLargeIconSize)
         )
-        Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
-        Text("Label", style = ButtonDefaults.textStyleFor(size))
+        Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
+        Text(text = "Label", style = MaterialTheme.typography.headlineLarge)
     }
 }
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/AppBarTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/AppBarTest.kt
index 298d588..e9d9428 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/AppBarTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/AppBarTest.kt
@@ -2072,100 +2072,6 @@
             .assertTopPositionInRootIsEqualTo(rule.rootHeight() - 12.dp - fabBounds.height)
     }
 
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-    @Test
-    fun topAppBar_pinned_changeColors_reverseLayout_scrolledContent() {
-        lateinit var scrollBehavior: TopAppBarScrollBehavior
-        rule.setMaterialContent(lightColorScheme()) {
-            scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(reverseLayout = true)
-            Scaffold(
-                modifier = Modifier.fillMaxSize(),
-                topBar = {
-                    Box(Modifier.testTag(TopAppBarTestTag)) {
-                        TopAppBar(
-                            title = { Text("Title") },
-                            scrollBehavior = scrollBehavior,
-                            colors =
-                                TopAppBarDefaults.topAppBarColors(
-                                    containerColor = Color.Red,
-                                    scrolledContainerColor = Color.Green
-                                )
-                        )
-                    }
-                },
-                content = { paddingValues ->
-                    LazyColumn(
-                        modifier =
-                            Modifier.testTag(LazyListTag)
-                                .padding(paddingValues)
-                                .nestedScroll(scrollBehavior.nestedScrollConnection),
-                        reverseLayout = true,
-                    ) {
-                        items(List(100) { it }.size) { Text(it.toString()) }
-                    }
-                }
-            )
-        }
-
-        rule.onNodeWithTag(TopAppBarTestTag).captureToImage().assertContainsColor(Color.Green)
-
-        // Swipe down to scroll the content.
-        rule.onNodeWithTag(LazyListTag).performTouchInput { swipeDown(startY = 0f, endY = 500f) }
-        rule.waitForIdle()
-        rule.onNodeWithTag(TopAppBarTestTag).captureToImage().assertContainsColor(Color.Green)
-
-        // Swipe down to scroll the content and collapse the top app bar.
-        rule.onNodeWithTag(LazyListTag).performTouchInput {
-            swipeDown(startY = 500f, endY = height + 1000f)
-        }
-        rule.waitForIdle()
-        rule.onNodeWithTag(TopAppBarTestTag).captureToImage().assertContainsColor(Color.Red)
-    }
-
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-    @Test
-    fun topAppBar_pinned_changeColors_scrolledContent() {
-        lateinit var scrollBehavior: TopAppBarScrollBehavior
-        rule.setMaterialContent(lightColorScheme()) {
-            scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
-            Scaffold(
-                modifier = Modifier.fillMaxSize(),
-                topBar = {
-                    Box(Modifier.testTag(TopAppBarTestTag)) {
-                        TopAppBar(
-                            title = { Text("Title") },
-                            scrollBehavior = scrollBehavior,
-                            colors =
-                                TopAppBarDefaults.topAppBarColors(
-                                    containerColor = Color.Red,
-                                    scrolledContainerColor = Color.Green
-                                )
-                        )
-                    }
-                },
-                content = { paddingValues ->
-                    LazyColumn(
-                        modifier =
-                            Modifier.testTag(LazyListTag)
-                                .padding(paddingValues)
-                                .nestedScroll(scrollBehavior.nestedScrollConnection),
-                    ) {
-                        items(List(100) { it }.size) { Text(it.toString()) }
-                    }
-                }
-            )
-        }
-
-        rule.onNodeWithTag(TopAppBarTestTag).captureToImage().assertContainsColor(Color.Red)
-
-        // Swipe up to scroll the content.
-        rule.onNodeWithTag(LazyListTag).performTouchInput {
-            swipeUp(startY = height - 200f, endY = height - 1000f)
-        }
-        rule.waitForIdle()
-        rule.onNodeWithTag(TopAppBarTestTag).captureToImage().assertContainsColor(Color.Green)
-    }
-
     @Test
     fun bottomAppBar_exitAlways_allowHorizontalScroll() {
         lateinit var state: LazyListState
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ButtonTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ButtonTest.kt
index c64d2b8..acca58b 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ButtonTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ButtonTest.kt
@@ -447,28 +447,29 @@
     fun button_xSmall_positioning() {
         var expectedStartPadding: Dp = 0.dp
         var expectedEndPadding: Dp = 0.dp
-        val size = ButtonDefaults.ExtraSmallContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             val layoutDirection = LocalLayoutDirection.current
             expectedStartPadding =
-                ButtonDefaults.ExtraSmallContentPadding.calculateStartPadding(layoutDirection)
+                ButtonDefaults.XSmallContentPadding.calculateStartPadding(layoutDirection)
             expectedEndPadding =
-                ButtonDefaults.ExtraSmallContentPadding.calculateEndPadding(layoutDirection)
+                ButtonDefaults.XSmallContentPadding.calculateEndPadding(layoutDirection)
             Box {
                 Button(
                     onClick = { /* Do something! */ },
-                    modifier = Modifier.heightIn(size).testTag(ButtonTestTag),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.XSmallContainerHeight)
+                            .testTag(ButtonTestTag),
+                    contentPadding = ButtonDefaults.XSmallContentPadding
                 ) {
                     Icon(
                         Icons.Filled.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
+                            Modifier.size(ButtonDefaults.XSmallIconSize)
                                 .testTag(IconTestTag)
                                 .semantics(mergeDescendants = true) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
                     Text(
                         "Label",
                         modifier =
@@ -487,7 +488,7 @@
             "padding between start of button and start of icon"
         )
         (textBounds.left - iconBounds.right).assertIsEqualTo(
-            ButtonDefaults.ExtraSmallIconSpacing,
+            ButtonDefaults.XSmallIconSpacing,
             "spacing between icon and label"
         )
         (buttonBounds.right - textBounds.right).assertIsEqualTo(
@@ -495,7 +496,7 @@
             "padding between end of label and end of button"
         )
         buttonBounds.height.assertIsEqualTo(
-            ButtonDefaults.ExtraSmallContainerHeight,
+            ButtonDefaults.XSmallContainerHeight,
             "height of button"
         )
     }
@@ -505,7 +506,6 @@
     fun button_medium_positioning() {
         var expectedStartPadding: Dp = 0.dp
         var expectedEndPadding: Dp = 0.dp
-        val size = ButtonDefaults.MediumContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             val layoutDirection = LocalLayoutDirection.current
             expectedStartPadding =
@@ -515,18 +515,20 @@
             Box {
                 Button(
                     onClick = { /* Do something! */ },
-                    modifier = Modifier.heightIn(size).testTag(ButtonTestTag),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.MediumContainerHeight)
+                            .testTag(ButtonTestTag),
+                    contentPadding = ButtonDefaults.MediumContentPadding
                 ) {
                     Icon(
                         Icons.Filled.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
+                            Modifier.size(ButtonDefaults.MediumIconSize)
                                 .testTag(IconTestTag)
                                 .semantics(mergeDescendants = true) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
                     Text(
                         "Label",
                         modifier =
@@ -563,7 +565,6 @@
     fun button_large_positioning() {
         var expectedStartPadding: Dp = 0.dp
         var expectedEndPadding: Dp = 0.dp
-        val size = ButtonDefaults.LargeContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             val layoutDirection = LocalLayoutDirection.current
             expectedStartPadding =
@@ -573,18 +574,20 @@
             Box {
                 Button(
                     onClick = { /* Do something! */ },
-                    modifier = Modifier.heightIn(size).testTag(ButtonTestTag),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.LargeContainerHeight)
+                            .testTag(ButtonTestTag),
+                    contentPadding = ButtonDefaults.LargeContentPadding
                 ) {
                     Icon(
                         Icons.Filled.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
+                            Modifier.size(ButtonDefaults.LargeIconSize)
                                 .testTag(IconTestTag)
                                 .semantics(mergeDescendants = true) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
                     Text(
                         "Label",
                         modifier =
@@ -618,28 +621,29 @@
     fun button_xLarge_positioning() {
         var expectedStartPadding: Dp = 0.dp
         var expectedEndPadding: Dp = 0.dp
-        val size = ButtonDefaults.ExtraLargeContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             val layoutDirection = LocalLayoutDirection.current
             expectedStartPadding =
-                ButtonDefaults.ExtraLargeContentPadding.calculateStartPadding(layoutDirection)
+                ButtonDefaults.XLargeContentPadding.calculateStartPadding(layoutDirection)
             expectedEndPadding =
-                ButtonDefaults.ExtraLargeContentPadding.calculateEndPadding(layoutDirection)
+                ButtonDefaults.XLargeContentPadding.calculateEndPadding(layoutDirection)
             Box {
                 Button(
                     onClick = { /* Do something! */ },
-                    modifier = Modifier.heightIn(size).testTag(ButtonTestTag),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.XLargeContainerHeight)
+                            .testTag(ButtonTestTag),
+                    contentPadding = ButtonDefaults.XLargeContentPadding
                 ) {
                     Icon(
                         Icons.Filled.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
+                            Modifier.size(ButtonDefaults.XLargeIconSize)
                                 .testTag(IconTestTag)
                                 .semantics(mergeDescendants = true) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
                     Text(
                         "Label",
                         modifier =
@@ -658,7 +662,7 @@
             "padding between start of button and start of icon"
         )
         (textBounds.left - iconBounds.right).assertIsEqualTo(
-            ButtonDefaults.ExtraLargeIconSpacing,
+            ButtonDefaults.XLargeIconSpacing,
             "spacing between icon and label"
         )
         (buttonBounds.right - textBounds.right).assertIsEqualTo(
@@ -666,7 +670,7 @@
             "padding between end of label and end of button"
         )
         buttonBounds.height.assertIsEqualTo(
-            ButtonDefaults.ExtraLargeContainerHeight,
+            ButtonDefaults.XLargeContainerHeight,
             "height of button"
         )
     }
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CardTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CardTest.kt
index bdae6f7..212cf61 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CardTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/CardTest.kt
@@ -31,7 +31,6 @@
 import androidx.compose.testutils.assertShape
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.layout.onPlaced
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.semantics.SemanticsProperties
 import androidx.compose.ui.semantics.semantics
@@ -45,14 +44,12 @@
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performClick
-import androidx.compose.ui.test.performMouseInput
 import androidx.compose.ui.test.performTouchInput
 import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import com.google.common.truth.Truth
-import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 import org.junit.Rule
@@ -279,22 +276,4 @@
         // still 0
         Truth.assertThat(state.value).isEqualTo(0)
     }
-
-    // regression test for b/296567828
-    @Test
-    fun clickableOverload_hover_doesNotRecompose() {
-        var recomposeCounter = 0
-        rule.setMaterialContent(lightColorScheme()) {
-            Card(
-                modifier = Modifier.testTag("card").onPlaced { recomposeCounter++ },
-                onClick = {}
-            ) {
-                Spacer(Modifier.size(30.dp))
-            }
-        }
-
-        rule.onNodeWithTag("card").performMouseInput { moveTo(center) }
-
-        rule.runOnIdle { assertThat(recomposeCounter).isEqualTo(1) }
-    }
 }
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
index 2277752..997750f 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/OutlinedTextFieldTest.kt
@@ -28,7 +28,6 @@
 import androidx.compose.foundation.layout.IntrinsicSize
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.requiredWidth
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
@@ -1943,23 +1942,6 @@
     }
 
     @Test
-    fun outlinedTextField_withTrailingIcon_inIntrinsicHeight_andTooShortWidth_doesNotCrash() {
-        // Regression test for b/328954156
-        rule.setContent {
-            Box(Modifier.width(200.dp)) {
-                Box(Modifier.height(IntrinsicSize.Min)) {
-                    OutlinedTextField(
-                        state = rememberTextFieldState(),
-                        modifier = Modifier.padding(100.dp),
-                        trailingIcon = { Box(Modifier.size(20.dp)) },
-                    )
-                }
-            }
-        }
-        // Nothing to assert; just make sure it doesn't crash
-    }
-
-    @Test
     fun outlinedTextField_stringOverload_doesNotCallOnValueChange_whenCompositionUpdatesOnly() {
         var callbackCounter = 0
 
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TextFieldTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TextFieldTest.kt
index 9cafab4..b10e5f6 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TextFieldTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TextFieldTest.kt
@@ -31,7 +31,6 @@
 import androidx.compose.foundation.layout.IntrinsicSize
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.requiredWidth
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
@@ -2078,23 +2077,6 @@
     }
 
     @Test
-    fun textField_withTrailingIcon_inIntrinsicHeight_andTooShortWidth_doesNotCrash() {
-        // Regression test for b/328954156
-        rule.setContent {
-            Box(Modifier.width(200.dp)) {
-                Box(Modifier.height(IntrinsicSize.Min)) {
-                    TextField(
-                        state = rememberTextFieldState(),
-                        modifier = Modifier.padding(100.dp),
-                        trailingIcon = { Box(Modifier.size(20.dp)) },
-                    )
-                }
-            }
-        }
-        // Nothing to assert; just make sure it doesn't crash
-    }
-
-    @Test
     fun textField_stringOverload_doesNotCallOnValueChange_whenCompositionUpdatesOnly() {
         var callbackCounter = 0
 
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TimePickerTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TimePickerTest.kt
index e635421..16b4f65 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TimePickerTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/TimePickerTest.kt
@@ -492,22 +492,6 @@
 
     @OptIn(ExperimentalTestApi::class)
     @Test
-    fun timeInput_input12_maintainsAm() {
-        val state = TimePickerState(initialHour = 10, initialMinute = 0, is24Hour = false)
-
-        rule.setMaterialContent(lightColorScheme()) { TimeInput(state) }
-
-        rule.onNodeWithText("10").performKeyInput {
-            pressKey(Key.One)
-            pressKey(Key.Two)
-        }
-
-        assertThat(state.isPm).isFalse()
-        assertThat(state.hour).isEqualTo(0)
-    }
-
-    @OptIn(ExperimentalTestApi::class)
-    @Test
     fun timeInput_deleting_maintainsPm() {
         val state = TimePickerState(initialHour = 23, initialMinute = 23, is24Hour = false)
 
diff --git a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ToggleButtonTest.kt b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ToggleButtonTest.kt
index 58b3f2c..c4f2f68 100644
--- a/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ToggleButtonTest.kt
+++ b/compose/material3/material3/src/androidInstrumentedTest/kotlin/androidx/compose/material3/ToggleButtonTest.kt
@@ -335,25 +335,31 @@
 
     @Test
     fun toggleButton_XSmall_positioning() {
-        val size = ButtonDefaults.ExtraSmallContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             Box {
                 ToggleButton(
                     checked = false,
                     onCheckedChange = {},
-                    modifier = Modifier.heightIn(size).testTag(ToggleButtonTag),
-                    shapes = ToggleButtonDefaults.shapesFor(size),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.XSmallContainerHeight)
+                            .testTag(ToggleButtonTag),
+                    shapes =
+                        ToggleButtonDefaults.shapes(
+                            ToggleButtonDefaults.XSmallSquareShape,
+                            ToggleButtonDefaults.XSmallPressedShape,
+                            ToggleButtonDefaults.checkedShape
+                        ),
+                    contentPadding = ButtonDefaults.XSmallContentPadding
                 ) {
                     Icon(
                         Icons.Outlined.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
-                                .testTag(IconTag)
-                                .semantics(mergeDescendants = true) {}
+                            Modifier.size(ButtonDefaults.XSmallIconSize).testTag(IconTag).semantics(
+                                mergeDescendants = true
+                            ) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.XSmallIconSpacing))
                     Text(
                         "Label",
                         modifier = Modifier.testTag(TextTag).semantics(mergeDescendants = true) {}
@@ -373,28 +379,34 @@
 
     @Test
     fun toggleButton_Medium_positioning() {
-        val size = ButtonDefaults.MediumContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             Box {
                 ToggleButton(
                     checked = false,
                     onCheckedChange = {},
-                    modifier = Modifier.heightIn(size).testTag(ToggleButtonTag),
-                    shapes = ToggleButtonDefaults.shapesFor(size),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.MediumContainerHeight)
+                            .testTag(ToggleButtonTag),
+                    shapes =
+                        ToggleButtonDefaults.shapes(
+                            ToggleButtonDefaults.MediumSquareShape,
+                            ToggleButtonDefaults.MediumPressedShape,
+                            ToggleButtonDefaults.checkedShape
+                        ),
+                    contentPadding = ButtonDefaults.MediumContentPadding
                 ) {
                     Icon(
                         Icons.Outlined.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
-                                .testTag(IconTag)
-                                .semantics(mergeDescendants = true) {}
+                            Modifier.size(ButtonDefaults.MediumIconSize).testTag(IconTag).semantics(
+                                mergeDescendants = true
+                            ) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.MediumIconSpacing))
                     Text(
                         "Label",
-                        style = ButtonDefaults.textStyleFor(size),
+                        style = MaterialTheme.typography.titleMedium,
                         modifier = Modifier.testTag(TextTag).semantics(mergeDescendants = true) {}
                     )
                 }
@@ -412,28 +424,34 @@
 
     @Test
     fun toggleButton_Large_positioning() {
-        val size = ButtonDefaults.LargeContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             Box {
                 ToggleButton(
                     checked = false,
                     onCheckedChange = {},
-                    modifier = Modifier.heightIn(size).testTag(ToggleButtonTag),
-                    shapes = ToggleButtonDefaults.shapesFor(size),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.LargeContainerHeight)
+                            .testTag(ToggleButtonTag),
+                    shapes =
+                        ToggleButtonDefaults.shapes(
+                            ToggleButtonDefaults.LargeSquareShape,
+                            ToggleButtonDefaults.LargePressedShape,
+                            ToggleButtonDefaults.checkedShape
+                        ),
+                    contentPadding = ButtonDefaults.LargeContentPadding
                 ) {
                     Icon(
                         Icons.Outlined.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
-                                .testTag(IconTag)
-                                .semantics(mergeDescendants = true) {}
+                            Modifier.size(ButtonDefaults.LargeIconSize).testTag(IconTag).semantics(
+                                mergeDescendants = true
+                            ) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.LargeIconSpacing))
                     Text(
                         "Label",
-                        style = ButtonDefaults.textStyleFor(size),
+                        style = MaterialTheme.typography.headlineSmall,
                         modifier = Modifier.testTag(TextTag).semantics(mergeDescendants = true) {}
                     )
                 }
@@ -451,28 +469,34 @@
 
     @Test
     fun toggleButton_XLarge_positioning() {
-        val size = ButtonDefaults.ExtraLargeContainerHeight
         rule.setMaterialContent(lightColorScheme()) {
             Box {
                 ToggleButton(
                     checked = false,
                     onCheckedChange = {},
-                    modifier = Modifier.heightIn(size).testTag(ToggleButtonTag),
-                    shapes = ToggleButtonDefaults.shapesFor(size),
-                    contentPadding = ButtonDefaults.contentPaddingFor(size)
+                    modifier =
+                        Modifier.heightIn(ButtonDefaults.XLargeContainerHeight)
+                            .testTag(ToggleButtonTag),
+                    shapes =
+                        ToggleButtonDefaults.shapes(
+                            ToggleButtonDefaults.XLargeSquareShape,
+                            ToggleButtonDefaults.XLargePressedShape,
+                            ToggleButtonDefaults.checkedShape
+                        ),
+                    contentPadding = ButtonDefaults.XLargeContentPadding
                 ) {
                     Icon(
                         Icons.Outlined.Edit,
                         contentDescription = "Localized description",
                         modifier =
-                            Modifier.size(ButtonDefaults.iconSizeFor(size))
-                                .testTag(IconTag)
-                                .semantics(mergeDescendants = true) {}
+                            Modifier.size(ButtonDefaults.XLargeIconSize).testTag(IconTag).semantics(
+                                mergeDescendants = true
+                            ) {}
                     )
-                    Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
+                    Spacer(Modifier.size(ButtonDefaults.XLargeIconSpacing))
                     Text(
                         "Label",
-                        style = ButtonDefaults.textStyleFor(size),
+                        style = MaterialTheme.typography.headlineLarge,
                         modifier = Modifier.testTag(TextTag).semantics(mergeDescendants = true) {}
                     )
                 }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
index 9078c5f..22f2ed4 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/AppBar.kt
@@ -112,9 +112,7 @@
 import androidx.compose.ui.util.fastFirst
 import androidx.compose.ui.util.fastMaxOfOrNull
 import androidx.compose.ui.util.fastSumBy
-import kotlin.DeprecationLevel
 import kotlin.math.abs
-import kotlin.math.absoluteValue
 import kotlin.math.max
 import kotlin.math.roundToInt
 
@@ -1500,9 +1498,6 @@
      * keep track of the scroll events.
      */
     val nestedScrollConnection: NestedScrollConnection
-
-    /** Indicates that the layout direction of scrollable content is reversed. */
-    @Suppress("GetterSetterNames") @get:Suppress("GetterSetterNames") val reverseLayout: Boolean
 }
 
 /** Contains default values used for the top app bar implementations. */
@@ -1757,42 +1752,14 @@
      *   state. See [rememberTopAppBarState] for a state that is remembered across compositions.
      * @param canScroll a callback used to determine whether scroll events are to be handled by this
      *   pinned [TopAppBarScrollBehavior]
-     * @param reverseLayout indicates that this behavior is applied to a scrollable content that has
-     *   a reversed direction of scrolling and layout
      */
-    @Composable
-    fun pinnedScrollBehavior(
-        state: TopAppBarState = rememberTopAppBarState(),
-        canScroll: () -> Boolean = { true },
-        reverseLayout: Boolean = false,
-    ): TopAppBarScrollBehavior =
-        remember(state, canScroll) {
-            PinnedScrollBehavior(
-                state = state,
-                canScroll = canScroll,
-                reverseLayout = reverseLayout
-            )
-        }
-
-    /**
-     * Returns a pinned [TopAppBarScrollBehavior] that tracks nested-scroll callbacks and updates
-     * its [TopAppBarState.contentOffset] accordingly.
-     *
-     * The returned [TopAppBarScrollBehavior] is remembered across compositions.
-     *
-     * @param state the state object to be used to control or observe the top app bar's scroll
-     *   state. See [rememberTopAppBarState] for a state that is remembered across compositions.
-     * @param canScroll a callback used to determine whether scroll events are to be handled by this
-     *   pinned [TopAppBarScrollBehavior]
-     */
-    @Deprecated("Maintained for binary compatibility", level = DeprecationLevel.HIDDEN)
     @ExperimentalMaterial3Api
     @Composable
     fun pinnedScrollBehavior(
         state: TopAppBarState = rememberTopAppBarState(),
-        canScroll: () -> Boolean = { true }
+        canScroll: () -> Boolean = { true },
     ): TopAppBarScrollBehavior =
-        pinnedScrollBehavior(state = state, canScroll = canScroll, reverseLayout = false)
+        remember(state, canScroll) { PinnedScrollBehavior(state = state, canScroll = canScroll) }
 
     /**
      * Returns a [TopAppBarScrollBehavior]. A top app bar that is set up with this
@@ -2033,39 +2000,9 @@
      * A `0.0` indicates that the app bar does not overlap any content, while `1.0` indicates that
      * the entire visible app bar area overlaps the scrolled content.
      */
-    @Deprecated(
-        message = "Use the overlappedFraction function that can take a reverse layout parameter",
-        replaceWith = ReplaceWith("overlappedFraction(reverseLayout = )"),
-        DeprecationLevel.WARNING,
-    )
     val overlappedFraction: Float
-        get() = overlappedFraction()
-
-    /**
-     * Returns a value that represents the percentage of the app bar area that is overlapping with
-     * the content scrolled behind it.
-     *
-     * A `0.0` indicates that the app bar does not overlap any content, while `1.0` indicates that
-     * the entire visible app bar area overlaps the scrolled content.
-     *
-     * @param reverseLayout indicates that this behavior is applied to a scrollable content that has
-     *   a reversed layout direction.
-     */
-    fun overlappedFraction(reverseLayout: Boolean = false): Float {
-        if (reverseLayout) {
-            return if (heightOffsetLimit == -Float.MAX_VALUE && contentOffset == 0f) {
-                1f
-            } else if (heightOffsetLimit != 0f) {
-                1 -
-                    ((heightOffsetLimit + contentOffset.absoluteValue).coerceIn(
-                        minimumValue = heightOffsetLimit,
-                        maximumValue = 0f,
-                    ) / heightOffsetLimit)
-            } else {
-                0f
-            }
-        } else {
-            return if (heightOffsetLimit != 0f) {
+        get() =
+            if (heightOffsetLimit != 0f) {
                 1 -
                     ((heightOffsetLimit - contentOffset).coerceIn(
                         minimumValue = heightOffsetLimit,
@@ -2074,8 +2011,6 @@
             } else {
                 0f
             }
-        }
-    }
 
     companion object {
         /** The default [Saver] implementation for [TopAppBarState]. */
@@ -2664,16 +2599,14 @@
             "The expandedHeight is expected to be specified and finite"
         }
 
-        // Obtain the container color from the TopAppBarColors using the 'overlapFraction' (or
-        // 'reversedOverlappedFraction' for a reversed layout). This ensures that the colors will
-        // adjust whether the app bar behavior is pinned or scrolled.
+        // Obtain the container color from the TopAppBarColors using the `overlapFraction`. This
+        // ensures that the colors will adjust whether the app bar behavior is pinned or scrolled.
         // This may potentially animate or interpolate a transition between the container-color and
         // the container's scrolled-color according to the app bar's scroll state.
         val targetColor by
             remember(colors, scrollBehavior) {
                 derivedStateOf {
-                    val overlappingFraction =
-                        scrollBehavior?.let { it.state.overlappedFraction(it.reverseLayout) } ?: 0f
+                    val overlappingFraction = scrollBehavior?.state?.overlappedFraction ?: 0f
                     colors.containerColor(if (overlappingFraction > 0.01f) 1f else 0f)
                 }
             }
@@ -3422,14 +3355,11 @@
  * @param state a [TopAppBarState]
  * @param canScroll a callback used to determine whether scroll events are to be handled by this
  *   [PinnedScrollBehavior]
- * @param reverseLayout indicates that this behavior is applied to a scrollable content that has a
- *   reversed direction of scrolling and layout
  */
 @OptIn(ExperimentalMaterial3Api::class)
 private class PinnedScrollBehavior(
     override val state: TopAppBarState,
     val canScroll: () -> Boolean = { true },
-    override val reverseLayout: Boolean = false,
 ) : TopAppBarScrollBehavior {
     override val isPinned: Boolean = true
     override val snapAnimationSpec: AnimationSpec<Float>? = null
@@ -3481,7 +3411,7 @@
     override val snapAnimationSpec: AnimationSpec<Float>?,
     override val flingAnimationSpec: DecayAnimationSpec<Float>?,
     val canScroll: () -> Boolean = { true },
-    override val reverseLayout: Boolean = false,
+    val reverseLayout: Boolean = false,
 ) : TopAppBarScrollBehavior {
     override val isPinned: Boolean = false
     override var nestedScrollConnection =
@@ -3556,7 +3486,6 @@
     override val flingAnimationSpec: DecayAnimationSpec<Float>?,
     val canScroll: () -> Boolean = { true },
 ) : TopAppBarScrollBehavior {
-    override val reverseLayout: Boolean = false
     override val isPinned: Boolean = false
     override var nestedScrollConnection =
         object : NestedScrollConnection {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Button.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Button.kt
index b80e37c..1725866 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Button.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Button.kt
@@ -58,7 +58,6 @@
 import androidx.compose.ui.semantics.Role
 import androidx.compose.ui.semantics.role
 import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 
@@ -142,14 +141,15 @@
     val interactionSource = interactionSource ?: remember { MutableInteractionSource() }
     val containerColor = colors.containerColor(enabled)
     val contentColor = colors.contentColor(enabled)
+    val shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp
     Surface(
         onClick = onClick,
-        elevation = elevation,
         modifier = modifier.semantics { role = Role.Button },
         enabled = enabled,
         shape = shape,
         color = containerColor,
         contentColor = contentColor,
+        shadowElevation = shadowElevation,
         border = border,
         interactionSource = interactionSource
     ) {
@@ -231,7 +231,7 @@
     colors: ButtonColors = ButtonDefaults.buttonColors(),
     elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
     border: BorderStroke? = null,
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) {
@@ -244,6 +244,7 @@
     val pressed by interactionSource.collectIsPressedAsState()
     val containerColor = colors.containerColor(enabled)
     val contentColor = colors.contentColor(enabled)
+    val shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp
     val buttonShape = shapeByInteraction(shapes, pressed, defaultAnimationSpec)
 
     Surface(
@@ -253,7 +254,7 @@
         shape = buttonShape,
         color = containerColor,
         contentColor = contentColor,
-        elevation = elevation,
+        shadowElevation = shadowElevation,
         border = border,
         interactionSource = interactionSource
     ) {
@@ -409,7 +410,7 @@
     colors: ButtonColors = ButtonDefaults.elevatedButtonColors(),
     elevation: ButtonElevation? = ButtonDefaults.elevatedButtonElevation(),
     border: BorderStroke? = null,
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) =
@@ -562,7 +563,7 @@
     colors: ButtonColors = ButtonDefaults.filledTonalButtonColors(),
     elevation: ButtonElevation? = ButtonDefaults.filledTonalButtonElevation(),
     border: BorderStroke? = null,
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) =
@@ -713,7 +714,7 @@
     colors: ButtonColors = ButtonDefaults.outlinedButtonColors(),
     elevation: ButtonElevation? = null,
     border: BorderStroke? = ButtonDefaults.outlinedButtonBorder(enabled),
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) =
@@ -961,7 +962,7 @@
 
     /** Default content padding for an extra small button. */
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraSmallContentPadding
+    val XSmallContentPadding
         get() =
             PaddingValues(
                 // TODO update with the value from ButtonXSmallTokens.kt once it's been corrected
@@ -995,7 +996,7 @@
 
     /** Default content padding for an extra large button. */
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraLargeContentPadding
+    val XLargeContentPadding
         get() =
             PaddingValues(
                 start = ButtonXLargeTokens.LeadingSpace,
@@ -1046,7 +1047,7 @@
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
     @get:ExperimentalMaterial3ExpressiveApi
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraSmallContainerHeight = ButtonXSmallTokens.ContainerHeight
+    val XSmallContainerHeight = ButtonXSmallTokens.ContainerHeight
 
     /** The default height for a medium button container. */
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
@@ -1064,7 +1065,7 @@
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
     @get:ExperimentalMaterial3ExpressiveApi
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraLargeContainerHeight = ButtonXLargeTokens.ContainerHeight
+    val XLargeContainerHeight = ButtonXLargeTokens.ContainerHeight
 
     /** The default size of the icon when used inside a small button. */
     // TODO update with the correct value in BaselineButtonTokens when available
@@ -1074,13 +1075,7 @@
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
     @get:ExperimentalMaterial3ExpressiveApi
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraSmallIconSize = ButtonXSmallTokens.IconSize
-
-    /** The expressive size of the icon used inside a small button. */
-    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
-    @get:ExperimentalMaterial3ExpressiveApi
-    @ExperimentalMaterial3ExpressiveApi
-    val SmallIconSize = ButtonSmallTokens.IconSize
+    val XSmallIconSize = ButtonXSmallTokens.IconSize
 
     /** The default size of the icon used inside of a medium button. */
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
@@ -1098,7 +1093,7 @@
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
     @get:ExperimentalMaterial3ExpressiveApi
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraLargeIconSize = ButtonXLargeTokens.IconSize
+    val XLargeIconSize = ButtonXLargeTokens.IconSize
 
     /**
      * The default size of the spacing between an icon and a text when they used inside a small
@@ -1113,7 +1108,7 @@
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
     @get:ExperimentalMaterial3ExpressiveApi
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraSmallIconSpacing = 4.dp
+    val XSmallIconSpacing = 4.dp
 
     /** The default spacing between an icon and a text when they used inside any medium button. */
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
@@ -1133,7 +1128,7 @@
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
     @get:ExperimentalMaterial3ExpressiveApi
     @ExperimentalMaterial3ExpressiveApi
-    val ExtraLargeIconSpacing = ButtonXLargeTokens.IconLabelSpace
+    val XLargeIconSpacing = ButtonXLargeTokens.IconLabelSpace
 
     /** Square shape for default buttons. */
     @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
@@ -1149,34 +1144,6 @@
     val pressedShape: Shape
         @Composable get() = ButtonSmallTokens.PressedContainerShape.value
 
-    /** Pressed shape for extra small buttons. */
-    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
-    @get:ExperimentalMaterial3ExpressiveApi
-    @ExperimentalMaterial3ExpressiveApi
-    val extraSmallPressedShape: Shape
-        @Composable get() = ButtonXSmallTokens.PressedContainerShape.value
-
-    /** Pressed shape for medium buttons. */
-    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
-    @get:ExperimentalMaterial3ExpressiveApi
-    @ExperimentalMaterial3ExpressiveApi
-    val mediumPressedShape: Shape
-        @Composable get() = ButtonMediumTokens.PressedContainerShape.value
-
-    /** Pressed shape for large buttons. */
-    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
-    @get:ExperimentalMaterial3ExpressiveApi
-    @ExperimentalMaterial3ExpressiveApi
-    val largePressedShape: Shape
-        @Composable get() = ButtonLargeTokens.PressedContainerShape.value
-
-    /** Pressed shape for extra large buttons. */
-    @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
-    @get:ExperimentalMaterial3ExpressiveApi
-    @ExperimentalMaterial3ExpressiveApi
-    val extraLargePressedShape: Shape
-        @Composable get() = ButtonXLargeTokens.PressedContainerShape.value
-
     /** Default shape for a button. */
     val shape: Shape
         @Composable get() = ButtonSmallTokens.ContainerShapeRound.value
@@ -1205,30 +1172,14 @@
     @Composable
     fun shapes() = MaterialTheme.shapes.defaultButtonShapes
 
-    /**
-     * Creates a [ButtonShapes] that represents the default shape and pressedShape used in a
-     * [Button] and its variants.
-     *
-     * @param shape the unchecked shape for [ButtonShapes]
-     * @param pressedShape the unchecked shape for [ButtonShapes]
-     */
-    @Composable
-    @ExperimentalMaterial3ExpressiveApi
-    fun shapes(
-        shape: Shape? = null,
-        pressedShape: Shape? = null,
-    ): ButtonShapes =
-        MaterialTheme.shapes.defaultButtonShapes.copy(shape = shape, pressedShape = pressedShape)
-
     @OptIn(ExperimentalMaterial3ExpressiveApi::class)
     internal val Shapes.defaultButtonShapes: ButtonShapes
+        @Composable
         get() {
             return defaultButtonShapesCached
-                ?: ButtonShapes(
-                        shape = fromToken(ButtonSmallTokens.ContainerShapeRound),
-                        pressedShape = fromToken(ButtonSmallTokens.PressedContainerShape)
-                    )
-                    .also { defaultButtonShapesCached = it }
+                ?: ButtonShapes(shape = shape, pressedShape = pressedShape).also {
+                    defaultButtonShapesCached = it
+                }
         }
 
     /**
@@ -1575,110 +1526,6 @@
                     )
                 }
         )
-
-    /**
-     * Recommended [ButtonShapes] for a provided button height.
-     *
-     * @param buttonHeight The height of the button
-     */
-    @Composable
-    @ExperimentalMaterial3ExpressiveApi
-    fun shapesFor(buttonHeight: Dp): ButtonShapes {
-        val xSmallHeight = ExtraSmallContainerHeight
-        val smallHeight = MinHeight
-        val mediumHeight = MediumContainerHeight
-        val largeHeight = LargeContainerHeight
-        val xLargeHeight = ExtraLargeContainerHeight
-        return when {
-            buttonHeight <= (xSmallHeight + smallHeight) / 2 ->
-                shapes(shape = shape, pressedShape = extraSmallPressedShape)
-            buttonHeight <= (smallHeight + mediumHeight) / 2 -> shapes()
-            buttonHeight <= (mediumHeight + largeHeight) / 2 ->
-                shapes(shape = shape, pressedShape = mediumPressedShape)
-            buttonHeight <= (largeHeight + xLargeHeight) / 2 ->
-                shapes(shape = shape, pressedShape = largePressedShape)
-            else -> shapes(shape = shape, pressedShape = extraLargePressedShape)
-        }
-    }
-
-    /**
-     * Recommended [PaddingValues] for a provided button height.
-     *
-     * @param buttonHeight The height of the button
-     */
-    @ExperimentalMaterial3ExpressiveApi
-    fun contentPaddingFor(buttonHeight: Dp): PaddingValues {
-        val smallHeight = MinHeight
-        val mediumHeight = MediumContainerHeight
-        val largeHeight = LargeContainerHeight
-        val xLargeHeight = ExtraLargeContainerHeight
-        return when {
-            buttonHeight < smallHeight -> ExtraSmallContentPadding
-            buttonHeight < mediumHeight -> SmallContentPadding
-            buttonHeight < largeHeight -> MediumContentPadding
-            buttonHeight < xLargeHeight -> LargeContentPadding
-            else -> ExtraLargeContentPadding
-        }
-    }
-
-    /**
-     * Recommended Icon size for a provided button height.
-     *
-     * @param buttonHeight The height of the button
-     */
-    @ExperimentalMaterial3ExpressiveApi
-    fun iconSizeFor(buttonHeight: Dp): Dp {
-        val smallHeight = MinHeight
-        val mediumHeight = MediumContainerHeight
-        val largeHeight = LargeContainerHeight
-        val xLargeHeight = ExtraLargeContainerHeight
-        return when {
-            buttonHeight < smallHeight -> ExtraSmallIconSize
-            buttonHeight < mediumHeight -> SmallIconSize
-            buttonHeight < largeHeight -> MediumIconSize
-            buttonHeight < xLargeHeight -> LargeIconSize
-            else -> ExtraLargeIconSize
-        }
-    }
-
-    /**
-     * Recommended spacing after an [Icon] for a provided button height.
-     *
-     * @param buttonHeight The height of the button
-     */
-    @ExperimentalMaterial3ExpressiveApi
-    fun iconSpacingFor(buttonHeight: Dp): Dp {
-        val smallHeight = MinHeight
-        val mediumHeight = MediumContainerHeight
-        val largeHeight = LargeContainerHeight
-        val xLargeHeight = ExtraLargeContainerHeight
-        return when {
-            buttonHeight < smallHeight -> ExtraSmallIconSpacing
-            buttonHeight < mediumHeight -> IconSpacing
-            buttonHeight < largeHeight -> MediumIconSpacing
-            buttonHeight < xLargeHeight -> LargeIconSpacing
-            else -> ExtraLargeIconSpacing
-        }
-    }
-
-    /**
-     * Recommended [TextStyle] for a [Text] provided a button height.
-     *
-     * @param buttonHeight The height of the button
-     */
-    @Composable
-    @ExperimentalMaterial3ExpressiveApi
-    fun textStyleFor(buttonHeight: Dp): TextStyle {
-        val mediumHeight = MediumContainerHeight
-        val largeHeight = LargeContainerHeight
-        val xLargeHeight = ExtraLargeContainerHeight
-        return when {
-            buttonHeight < mediumHeight -> MaterialTheme.typography.labelLarge
-            buttonHeight < largeHeight -> MaterialTheme.typography.titleMedium
-            buttonHeight < xLargeHeight -> MaterialTheme.typography.headlineSmall
-            else -> MaterialTheme.typography.headlineLarge
-        }
-    }
 }
 
 /**
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Card.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Card.kt
index 8248706..ea5bb05 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Card.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Card.kt
@@ -142,9 +142,9 @@
         shape = shape,
         color = colors.containerColor(enabled),
         contentColor = colors.contentColor(enabled),
+        shadowElevation = elevation.shadowElevation(enabled, interactionSource).value,
         border = border,
         interactionSource = interactionSource,
-        elevation = elevation
     ) {
         Column(content = content)
     }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt
index 405ba8b..4613232 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Chip.kt
@@ -1957,7 +1957,7 @@
         enabled = enabled,
         shape = shape,
         color = colors.containerColor(enabled),
-        elevation = elevation,
+        shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp,
         border = border,
         interactionSource = interactionSource
     ) {
@@ -1995,6 +1995,8 @@
     paddingValues: PaddingValues,
     interactionSource: MutableInteractionSource?
 ) {
+    @Suppress("NAME_SHADOWING")
+    val interactionSource = interactionSource ?: remember { MutableInteractionSource() }
     // TODO(b/229794614): Animate transition between unselected and selected.
     Surface(
         selected = selected,
@@ -2003,7 +2005,7 @@
         enabled = enabled,
         shape = shape,
         color = colors.containerColor(enabled, selected),
-        elevation = elevation,
+        shadowElevation = elevation?.shadowElevation(enabled, interactionSource)?.value ?: 0.dp,
         border = border,
         interactionSource = interactionSource
     ) {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ComponentElevation.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ComponentElevation.kt
index 7f1ec69..3b8c99bb 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ComponentElevation.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ComponentElevation.kt
@@ -31,7 +31,6 @@
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
 import androidx.compose.ui.unit.Dp
-import androidx.compose.ui.unit.dp
 import kotlinx.coroutines.launch
 
 /**
@@ -97,16 +96,6 @@
     }
 }
 
-internal val ComponentElevation.hasShadows: Boolean
-    get() {
-        return elevation != 0.dp ||
-            pressedElevation != 0.dp ||
-            focusedElevation != 0.dp ||
-            hoveredElevation != 0.dp ||
-            disabledElevation != 0.dp ||
-            draggedElevation != 0.dp
-    }
-
 /**
  * Represents the shadow elevation used in a component, depending on its [enabled] state and
  * [interactionSource].
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
index 678ddba..672cc6c 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/FloatingActionButton.kt
@@ -165,7 +165,7 @@
         color = containerColor,
         contentColor = contentColor,
         tonalElevation = elevation.tonalElevation(),
-        elevation = elevation,
+        shadowElevation = elevation.shadowElevation(interactionSource = interactionSource).value,
         interactionSource = interactionSource
     ) {
         ProvideContentColorTextStyle(contentColor = contentColor, textStyle = textStyle) {
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButtonDefaults.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButtonDefaults.kt
index 95bd619..abd04e0 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButtonDefaults.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/IconButtonDefaults.kt
@@ -1065,11 +1065,12 @@
 
     @OptIn(ExperimentalMaterial3ExpressiveApi::class)
     internal val Shapes.defaultIconButtonShapes: IconButtonShapes
+        @Composable
         get() {
             return defaultIconButtonShapesCached
                 ?: IconButtonShapes(
-                        shape = fromToken(SmallIconButtonTokens.ContainerShapeRound),
-                        pressedShape = fromToken(SmallIconButtonTokens.PressedContainerShape),
+                        shape = smallRoundShape,
+                        pressedShape = smallPressedShape,
                     )
                     .also { defaultIconButtonShapesCached = it }
         }
@@ -1108,12 +1109,13 @@
 
     @OptIn(ExperimentalMaterial3ExpressiveApi::class)
     internal val Shapes.defaultIconToggleButtonShapes: IconToggleButtonShapes
+        @Composable
         get() {
             return defaultIconToggleButtonShapesCached
                 ?: IconToggleButtonShapes(
-                        shape = fromToken(SmallIconButtonTokens.ContainerShapeRound),
-                        pressedShape = fromToken(SmallIconButtonTokens.PressedContainerShape),
-                        checkedShape = fromToken(SmallIconButtonTokens.SelectedContainerShapeRound)
+                        shape = smallRoundShape,
+                        pressedShape = smallPressedShape,
+                        checkedShape = smallSelectedRoundShape
                     )
                     .also { defaultIconToggleButtonShapesCached = it }
         }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
index ea003b9..56cde4e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Slider.kt
@@ -98,8 +98,6 @@
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.input.pointer.positionChange
 import androidx.compose.ui.layout.Layout
-import androidx.compose.ui.layout.VerticalAlignmentLine
-import androidx.compose.ui.layout.layout
 import androidx.compose.ui.layout.layoutId
 import androidx.compose.ui.layout.onSizeChanged
 import androidx.compose.ui.platform.LocalLayoutDirection
@@ -847,7 +845,6 @@
         val isOnFirstOrLastStep =
             valueAsFraction == state.tickFractions.firstOrNull() ||
                 valueAsFraction == state.tickFractions.lastOrNull()
-        val trackCornerSize = trackPlaceable[CornerSizeAlignmentLine]
         if (state.orientation == Vertical) {
             sliderWidth = max(trackPlaceable.width, thumbPlaceable.width)
             sliderHeight = thumbPlaceable.height + trackPlaceable.height
@@ -856,8 +853,8 @@
             thumbOffsetX = (sliderWidth - thumbPlaceable.width) / 2
             thumbOffsetY =
                 if (state.steps > 0 && !isOnFirstOrLastStep) {
-                    ((trackPlaceable.height - trackCornerSize * 2) * valueAsFraction).roundToInt() +
-                        trackCornerSize
+                    ((trackPlaceable.height - state.trackCornerSize * 2) * valueAsFraction)
+                        .roundToInt() + state.trackCornerSize
                 } else {
                     (trackPlaceable.height * valueAsFraction).roundToInt()
                 }
@@ -871,8 +868,8 @@
             trackOffsetY = (sliderHeight - trackPlaceable.height) / 2
             thumbOffsetX =
                 if (state.steps > 0 && !isOnFirstOrLastStep) {
-                    ((trackPlaceable.width - trackCornerSize * 2) * valueAsFraction).roundToInt() +
-                        trackCornerSize
+                    ((trackPlaceable.width - state.trackCornerSize * 2) * valueAsFraction)
+                        .roundToInt() + state.trackCornerSize
                 } else {
                     (trackPlaceable.width * valueAsFraction).roundToInt()
                 }
@@ -1083,11 +1080,10 @@
             endValueAsFraction == state.tickFractions.firstOrNull() ||
                 endValueAsFraction == state.tickFractions.lastOrNull()
         val trackOffsetX = startThumbPlaceable.width / 2
-        val trackCornerSize = trackPlaceable[CornerSizeAlignmentLine]
         val startThumbOffsetX =
             if (state.steps > 0 && !isStartOnFirstOrLastStep) {
-                ((trackPlaceable.width - trackCornerSize * 2) * startValueAsFraction).roundToInt() +
-                    trackCornerSize
+                ((trackPlaceable.width - state.trackCornerSize * 2) * startValueAsFraction)
+                    .roundToInt() + state.trackCornerSize
             } else {
                 (trackPlaceable.width * startValueAsFraction).roundToInt()
             }
@@ -1096,8 +1092,9 @@
         val endCorrection = (startThumbPlaceable.width - endThumbPlaceable.width) / 2
         val endThumbOffsetX =
             if (state.steps > 0 && !isEndOnFirstOrLastStep) {
-                ((trackPlaceable.width - trackCornerSize * 2) * endValueAsFraction + endCorrection)
-                    .roundToInt() + trackCornerSize
+                ((trackPlaceable.width - state.trackCornerSize * 2) * endValueAsFraction +
+                        endCorrection)
+                    .roundToInt() + state.trackCornerSize
             } else {
                 (trackPlaceable.width * endValueAsFraction + endCorrection).roundToInt()
             }
@@ -1550,40 +1547,27 @@
         val activeTrackColor = colors.trackColor(enabled = enabled, active = true)
         val inactiveTickColor = colors.tickColor(enabled = enabled, active = false)
         val activeTickColor = colors.tickColor(enabled = enabled, active = true)
-        var cornerSize by remember { mutableIntStateOf(0) }
         Canvas(
             if (sliderState.orientation == Vertical) {
-                    modifier.width(TrackHeight).fillMaxHeight().let {
-                        if (sliderState.reverseVerticalDirection) it.scale(1f, -1f) else it
+                modifier.width(TrackHeight).fillMaxHeight().let {
+                    if (sliderState.reverseVerticalDirection) it.scale(1f, -1f) else it
+                }
+            } else {
+                modifier.fillMaxWidth().height(TrackHeight).let {
+                    if (sliderState.isRtl) it.scale(-1f, 1f) else it
+                }
+            }
+        ) {
+            sliderState.trackCornerSize =
+                if (trackCornerSize == Dp.Unspecified) {
+                    if (sliderState.orientation == Vertical) {
+                        size.width.roundToInt() / 2
+                    } else {
+                        size.height.roundToInt() / 2
                     }
                 } else {
-                    modifier.fillMaxWidth().height(TrackHeight).let {
-                        if (sliderState.isRtl) it.scale(-1f, 1f) else it
-                    }
+                    trackCornerSize.roundToPx()
                 }
-                .then(
-                    Modifier.layout { measurable, constraints ->
-                        val placeable = measurable.measure(constraints)
-                        cornerSize =
-                            if (trackCornerSize == Dp.Unspecified) {
-                                if (sliderState.orientation == Vertical) {
-                                    placeable.width / 2
-                                } else {
-                                    placeable.height / 2
-                                }
-                            } else {
-                                trackCornerSize.roundToPx()
-                            }
-                        layout(
-                            width = placeable.width,
-                            height = placeable.height,
-                            alignmentLines = mapOf(CornerSizeAlignmentLine to cornerSize)
-                        ) {
-                            placeable.place(0, 0)
-                        }
-                    }
-                )
-        ) {
             drawTrack(
                 tickFractions = sliderState.tickFractions,
                 activeRangeStart = 0f,
@@ -1600,7 +1584,7 @@
                 endThumbHeight = sliderState.thumbHeight.toDp(),
                 thumbTrackGapSize = thumbTrackGapSize,
                 trackInsideCornerSize = trackInsideCornerSize,
-                trackCornerSize = cornerSize.toDp(),
+                trackCornerSize = sliderState.trackCornerSize.toDp(),
                 drawStopIndicator = drawStopIndicator,
                 drawTick = drawTick,
                 isRangeSlider = false,
@@ -1691,24 +1675,13 @@
         val activeTrackColor = colors.trackColor(enabled, active = true)
         val inactiveTickColor = colors.tickColor(enabled, active = false)
         val activeTickColor = colors.tickColor(enabled, active = true)
-        var trackCornerSize by remember { mutableIntStateOf(0) }
         Canvas(
             modifier
                 .fillMaxWidth()
                 .height(TrackHeight)
                 .rotate(if (rangeSliderState.isRtl) 180f else 0f)
-                .layout { measurable, constraints ->
-                    val placeable = measurable.measure(constraints)
-                    trackCornerSize = placeable.height / 2
-                    layout(
-                        width = placeable.width,
-                        height = placeable.height,
-                        alignmentLines = mapOf(CornerSizeAlignmentLine to trackCornerSize)
-                    ) {
-                        placeable.place(0, 0)
-                    }
-                }
         ) {
+            rangeSliderState.trackCornerSize = size.height.roundToInt() / 2
             drawTrack(
                 rangeSliderState.tickFractions,
                 rangeSliderState.coercedActiveRangeStartAsFraction,
@@ -1725,7 +1698,7 @@
                 rangeSliderState.endThumbHeight.toDp(),
                 thumbTrackGapSize,
                 trackInsideCornerSize,
-                trackCornerSize.toDp(),
+                rangeSliderState.trackCornerSize.toDp(),
                 drawStopIndicator,
                 drawTick,
                 isRangeSlider = true,
@@ -2566,6 +2539,7 @@
     internal var thumbHeight by mutableIntStateOf(0)
     internal var trackWidth by mutableIntStateOf(0)
     internal var trackHeight by mutableIntStateOf(0)
+    internal var trackCornerSize by mutableIntStateOf(0)
     internal var orientation = Horizontal
     internal var reverseVerticalDirection = false
 
@@ -2762,6 +2736,7 @@
     internal var totalWidth by mutableIntStateOf(0)
     internal var rawOffsetStart by mutableFloatStateOf(0f)
     internal var rawOffsetEnd by mutableFloatStateOf(0f)
+    internal var trackCornerSize by mutableIntStateOf(0)
 
     internal var isRtl by mutableStateOf(false)
 
@@ -2983,5 +2958,3 @@
 @Stable
 internal val SliderRange.isSpecified: Boolean
     get() = packedValue != SliderRange.Unspecified.packedValue
-
-internal val CornerSizeAlignmentLine = VerticalAlignmentLine(::min)
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Surface.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Surface.kt
index 99be07d..c352d8e 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Surface.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/Surface.kt
@@ -452,127 +452,6 @@
     }
 }
 
-@Composable
-internal fun Surface(
-    onClick: () -> Unit,
-    elevation: ComponentElevation?,
-    interactionSource: MutableInteractionSource,
-    modifier: Modifier = Modifier,
-    enabled: Boolean = true,
-    shape: Shape = RectangleShape,
-    color: Color = MaterialTheme.colorScheme.surface,
-    contentColor: Color = contentColorFor(color),
-    tonalElevation: Dp = 0.dp,
-    border: BorderStroke? = null,
-    content: @Composable () -> Unit
-) {
-    @Suppress("NAME_SHADOWING")
-    val shadowModifier =
-        if (elevation?.hasShadows == true) {
-            val shadowElevation =
-                elevation.shadowElevation(enabled = enabled, interactionSource = interactionSource)
-            val density = LocalDensity.current
-            Modifier.graphicsLayer {
-                this.shape = shape
-                clip = false
-                this.shadowElevation = with(density) { shadowElevation.value.toPx() }
-            }
-        } else {
-            Modifier
-        }
-
-    val absoluteElevation = LocalAbsoluteTonalElevation.current + tonalElevation
-    CompositionLocalProvider(
-        LocalContentColor provides contentColor,
-        LocalAbsoluteTonalElevation provides absoluteElevation
-    ) {
-        Box(
-            modifier =
-                modifier
-                    .minimumInteractiveComponentSize()
-                    .then(shadowModifier)
-                    .surface(
-                        shape = shape,
-                        backgroundColor = surfaceColorAtElevation(color, tonalElevation),
-                        border = border,
-                        shadowElevation = 0f
-                    )
-                    .clickable(
-                        interactionSource = interactionSource,
-                        indication = ripple(),
-                        enabled = enabled,
-                        onClick = onClick
-                    )
-                    .childSemantics(),
-            propagateMinConstraints = true
-        ) {
-            content()
-        }
-    }
-}
-
-@Composable
-@NonRestartableComposable
-internal fun Surface(
-    selected: Boolean,
-    onClick: () -> Unit,
-    elevation: ComponentElevation?,
-    modifier: Modifier = Modifier,
-    enabled: Boolean = true,
-    shape: Shape = RectangleShape,
-    color: Color = MaterialTheme.colorScheme.surface,
-    contentColor: Color = contentColorFor(color),
-    border: BorderStroke? = null,
-    interactionSource: MutableInteractionSource? = null,
-    content: @Composable () -> Unit
-) {
-    @Suppress("NAME_SHADOWING")
-    val interactionSource = interactionSource ?: remember { MutableInteractionSource() }
-    val shadowModifier =
-        if (elevation?.hasShadows == true) {
-            val shadowElevation =
-                elevation.shadowElevation(enabled = enabled, interactionSource = interactionSource)
-            val density = LocalDensity.current
-            Modifier.graphicsLayer {
-                this.shape = shape
-                clip = false
-                this.shadowElevation = with(density) { shadowElevation.value.toPx() }
-            }
-        } else {
-            Modifier
-        }
-
-    CompositionLocalProvider(LocalContentColor provides contentColor) {
-        Box(
-            modifier =
-                modifier
-                    .minimumInteractiveComponentSize()
-                    .then(shadowModifier)
-                    .surface(
-                        shape = shape,
-                        backgroundColor =
-                            surfaceColorAtElevation(
-                                color = color,
-                                elevation = LocalAbsoluteTonalElevation.current
-                            ),
-                        border = border,
-                        shadowElevation = 0f
-                    )
-                    .selectable(
-                        selected = selected,
-                        interactionSource = interactionSource,
-                        indication = ripple(),
-                        enabled = enabled,
-                        onClick = onClick
-                    )
-                    .childSemantics(),
-            propagateMinConstraints = true
-        ) {
-            content()
-        }
-    }
-}
-
 @Stable
 private fun Modifier.surface(
     shape: Shape,
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
index 04bf28b..3e260bd 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TabRow.kt
@@ -542,7 +542,17 @@
     divider: @Composable () -> Unit,
     tabs: @Composable () -> Unit
 ) {
-    Surface(modifier = modifier, color = containerColor, contentColor = contentColor) {
+    Surface(
+        modifier =
+            modifier
+                .fillMaxWidth()
+                .wrapContentSize(align = Alignment.CenterStart)
+                .horizontalScroll(scrollState)
+                .selectableGroup()
+                .clipToBounds(),
+        color = containerColor,
+        contentColor = contentColor
+    ) {
         val coroutineScope = rememberCoroutineScope()
         // TODO Load the motionScheme tokens from the component tokens file
         val scrollAnimationSpec = MotionSchemeKeyTokens.DefaultSpatial.value<Float>()
@@ -603,13 +613,7 @@
                     tabs,
                     divider,
                     { scope.indicator() },
-                ),
-            modifier =
-                Modifier.fillMaxWidth()
-                    .wrapContentSize(align = Alignment.CenterStart)
-                    .horizontalScroll(scrollState)
-                    .selectableGroup()
-                    .clipToBounds(),
+                )
         ) { (tabMeasurables, dividerMeasurables, indicatorMeasurables), constraints ->
             val padding = edgePadding.roundToPx()
             val tabCount = tabMeasurables.size
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TimePicker.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TimePicker.kt
index fd072f5..4dc22d5 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TimePicker.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/TimePicker.kt
@@ -1802,12 +1802,7 @@
 
         if (newValue <= max) {
             if (selection == TimePickerSelectionMode.Hour) {
-                state.hour =
-                    if (newValue == 12 && !state.isPm && !state.is24hour) {
-                        0
-                    } else {
-                        newValue + if (state.isPm && !state.is24hour) 12 else 0
-                    }
+                state.hour = newValue + if (state.isPm && !state.is24hour) 12 else 0
                 if (newValue > 1 && !state.is24hour) {
                     state.selection = TimePickerSelectionMode.Minute
                 }
diff --git a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ToggleButton.kt b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ToggleButton.kt
index e500328..236ce95 100644
--- a/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ToggleButton.kt
+++ b/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/ToggleButton.kt
@@ -55,7 +55,6 @@
 import androidx.compose.ui.semantics.Role
 import androidx.compose.ui.semantics.role
 import androidx.compose.ui.semantics.semantics
-import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 
 /**
@@ -115,11 +114,11 @@
     onCheckedChange: (Boolean) -> Unit,
     modifier: Modifier = Modifier,
     enabled: Boolean = true,
-    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapesFor(ButtonDefaults.MinHeight),
+    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapes(),
     colors: ToggleButtonColors = ToggleButtonDefaults.toggleButtonColors(),
     elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
     border: BorderStroke? = null,
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ToggleButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) {
@@ -209,11 +208,11 @@
     onCheckedChange: (Boolean) -> Unit,
     modifier: Modifier = Modifier,
     enabled: Boolean = true,
-    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapesFor(ButtonDefaults.MinHeight),
+    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapes(),
     colors: ToggleButtonColors = ToggleButtonDefaults.elevatedToggleButtonColors(),
     elevation: ButtonElevation? = ButtonDefaults.elevatedButtonElevation(),
     border: BorderStroke? = null,
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ToggleButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) =
@@ -282,11 +281,11 @@
     onCheckedChange: (Boolean) -> Unit,
     modifier: Modifier = Modifier,
     enabled: Boolean = true,
-    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapesFor(ButtonDefaults.MinHeight),
+    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapes(),
     colors: ToggleButtonColors = ToggleButtonDefaults.tonalToggleButtonColors(),
     elevation: ButtonElevation? = ButtonDefaults.filledTonalButtonElevation(),
     border: BorderStroke? = null,
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ToggleButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) =
@@ -353,11 +352,11 @@
     onCheckedChange: (Boolean) -> Unit,
     modifier: Modifier = Modifier,
     enabled: Boolean = true,
-    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapesFor(ButtonDefaults.MinHeight),
+    shapes: ToggleButtonShapes = ToggleButtonDefaults.shapes(),
     colors: ToggleButtonColors = ToggleButtonDefaults.outlinedToggleButtonColors(),
     elevation: ButtonElevation? = null,
     border: BorderStroke? = if (!checked) ButtonDefaults.outlinedButtonBorder(enabled) else null,
-    contentPadding: PaddingValues = ButtonDefaults.contentPaddingFor(ButtonDefaults.MinHeight),
+    contentPadding: PaddingValues = ToggleButtonDefaults.ContentPadding,
     interactionSource: MutableInteractionSource? = null,
     content: @Composable RowScope.() -> Unit
 ) =
@@ -436,12 +435,13 @@
         )
 
     internal val Shapes.defaultToggleButtonShapes: ToggleButtonShapes
+        @Composable
         get() {
             return defaultToggleButtonShapesCached
                 ?: ToggleButtonShapes(
-                        shape = fromToken(ButtonSmallTokens.ContainerShapeRound),
-                        pressedShape = RoundedCornerShape(6.dp),
-                        checkedShape = fromToken(ButtonSmallTokens.SelectedContainerShapeSquare)
+                        shape = shape,
+                        pressedShape = pressedShape,
+                        checkedShape = checkedShape
                     )
                     .also { defaultToggleButtonShapesCached = it }
         }
@@ -467,51 +467,51 @@
         @Composable get() = ButtonSmallTokens.SelectedContainerShapeSquare.value
 
     /** The default square shape for a extra small toggle button */
-    val extraSmallSquareShape: Shape
+    val XSmallSquareShape: Shape
         @Composable get() = ButtonXSmallTokens.ContainerShapeSquare.value
 
     /** The default square shape for a medium toggle button */
-    val mediumSquareShape: Shape
+    val MediumSquareShape: Shape
         @Composable get() = ButtonMediumTokens.ContainerShapeSquare.value
 
     /** The default square shape for a large toggle button */
-    val largeSquareShape: Shape
+    val LargeSquareShape: Shape
         @Composable get() = ButtonLargeTokens.ContainerShapeSquare.value
 
     /** The default square shape for a extra large toggle button */
-    val extraLargeSquareShape: Shape
+    val XLargeSquareShape: Shape
         @Composable get() = ButtonXLargeTokens.ContainerShapeSquare.value
 
     /** The default pressed shape for a extra small toggle button */
-    val extraSmallPressedShape: Shape
+    val XSmallPressedShape: Shape
         @Composable get() = ButtonXSmallTokens.PressedContainerShape.value
 
     /** The default pressed shape for a medium toggle button */
-    val mediumPressedShape: Shape
+    val MediumPressedShape: Shape
         @Composable get() = ButtonMediumTokens.PressedContainerShape.value
 
     /** The default pressed shape for a large toggle button */
-    val largePressedShape: Shape
+    val LargePressedShape: Shape
         @Composable get() = ButtonLargeTokens.PressedContainerShape.value
 
     /** The default pressed shape for a extra large toggle button */
-    val extraLargePressedShape: Shape
+    val XLargePressedShape: Shape
         @Composable get() = ButtonXLargeTokens.PressedContainerShape.value
 
     /** The default checked square shape for a extra small toggle button */
-    val extraSmallCheckedSquareShape: Shape
+    val XSmallCheckedSquareShape: Shape
         @Composable get() = ButtonXSmallTokens.ContainerShapeSquare.value
 
     /** The default checked square shape for a medium toggle button */
-    val mediumCheckedSquareShape: Shape
+    val MediumCheckedSquareShape: Shape
         @Composable get() = ButtonMediumTokens.ContainerShapeSquare.value
 
     /** The default checked square shape for a large toggle button */
-    val largeCheckedSquareShape: Shape
+    val LargeCheckedSquareShape: Shape
         @Composable get() = ButtonLargeTokens.ContainerShapeSquare.value
 
     /** The default checked square shape for a extra large toggle button */
-    val extraLargeCheckedSquareShape: Shape
+    val XLargeCheckedSquareShape: Shape
         @Composable get() = ButtonXLargeTokens.ContainerShapeSquare.value
 
     /**
@@ -740,47 +740,6 @@
                     )
                     .also { defaultOutlinedToggleButtonColorsCached = it }
         }
-
-    /**
-     * Recommended [ToggleButtonShapes] for a provided toggle button height.
-     *
-     * @param buttonHeight The height of the button
-     */
-    @Composable
-    fun shapesFor(buttonHeight: Dp): ToggleButtonShapes {
-        val xSmallHeight = ButtonDefaults.ExtraSmallContainerHeight
-        val smallHeight = ButtonDefaults.MinHeight
-        val mediumHeight = ButtonDefaults.MediumContainerHeight
-        val largeHeight = ButtonDefaults.LargeContainerHeight
-        val xLargeHeight = ButtonDefaults.ExtraLargeContainerHeight
-        return when {
-            buttonHeight <= (xSmallHeight + smallHeight) / 2 ->
-                shapes(
-                    shape = shape,
-                    pressedShape = extraSmallPressedShape,
-                    checkedShape = extraSmallCheckedSquareShape
-                )
-            buttonHeight <= (smallHeight + mediumHeight) / 2 -> shapes()
-            buttonHeight <= (mediumHeight + largeHeight) / 2 ->
-                shapes(
-                    shape = shape,
-                    pressedShape = mediumPressedShape,
-                    checkedShape = mediumCheckedSquareShape
-                )
-            buttonHeight <= (largeHeight + xLargeHeight) / 2 ->
-                shapes(
-                    shape = shape,
-                    pressedShape = largePressedShape,
-                    checkedShape = largeCheckedSquareShape
-                )
-            else ->
-                shapes(
-                    shape = shape,
-                    pressedShape = extraLargePressedShape,
-                    checkedShape = extraLargeCheckedSquareShape
-                )
-        }
-    }
 }
 
 /**
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index ac1422f..2e05df7b 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -804,7 +804,7 @@
     method @androidx.compose.runtime.ComposeCompilerApi public static Void illegalDecoyCallException(String fName);
   }
 
-  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface FunctionKeyMeta {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMeta {
     method public abstract int endOffset();
     method public abstract int key();
     method public abstract int startOffset();
@@ -813,7 +813,7 @@
     property public abstract int startOffset;
   }
 
-  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface FunctionKeyMeta.Container {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public static @interface FunctionKeyMeta.Container {
     method public abstract androidx.compose.runtime.internal.FunctionKeyMeta[] value();
     property public abstract int endOffset;
     property public abstract int key;
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index 5dbdb3b..4283d65 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -858,7 +858,7 @@
     method @androidx.compose.runtime.ComposeCompilerApi public static Void illegalDecoyCallException(String fName);
   }
 
-  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface FunctionKeyMeta {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public @interface FunctionKeyMeta {
     method public abstract int endOffset();
     method public abstract int key();
     method public abstract int startOffset();
@@ -867,7 +867,7 @@
     property public abstract int startOffset;
   }
 
-  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface FunctionKeyMeta.Container {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.RUNTIME) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget.CLASS) public static @interface FunctionKeyMeta.Container {
     method public abstract androidx.compose.runtime.internal.FunctionKeyMeta[] value();
     property public abstract int endOffset;
     property public abstract int key;
diff --git a/compose/runtime/runtime/compose-runtime-benchmark/build.gradle b/compose/runtime/runtime/compose-runtime-benchmark/build.gradle
index 377bec3..1b1c3d3 100644
--- a/compose/runtime/runtime/compose-runtime-benchmark/build.gradle
+++ b/compose/runtime/runtime/compose-runtime-benchmark/build.gradle
@@ -52,7 +52,8 @@
     androidTestImplementation(libs.kotlinReflect)
     androidTestImplementation(libs.kotlinCoroutinesTest)
     androidTestImplementation(androidx.projectOrArtifact(":benchmark:benchmark-junit4"))
-    androidTestImplementation("androidx.activity:activity-compose:1.10.1")
+    androidTestImplementation("androidx.activity:activity:1.2.0")
+    androidTestImplementation(project(":activity:activity-compose"))
     // old version of common-java8 conflicts with newer version, because both have
     // DefaultLifecycleEventObserver.
     // Outside of androidx this is resolved via constraint added to lifecycle-common,
diff --git a/compose/runtime/runtime/integration-tests/build.gradle b/compose/runtime/runtime/integration-tests/build.gradle
index 6e954e7..b611fc7 100644
--- a/compose/runtime/runtime/integration-tests/build.gradle
+++ b/compose/runtime/runtime/integration-tests/build.gradle
@@ -90,7 +90,7 @@
                 implementation(project(":compose:material:material"))
                 implementation(project(":compose:ui:ui-test-junit4"))
                 implementation(project(":compose:test-utils"))
-                implementation("androidx.activity:activity-compose:1.10.1")
+                implementation(project(":activity:activity-compose"))
                 implementation(libs.testExtJunit)
                 implementation(libs.testRules)
                 implementation(libs.testRunner)
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/FunctionKeyMeta.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/FunctionKeyMeta.kt
index e85b7cc..ef13eca 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/FunctionKeyMeta.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/FunctionKeyMeta.kt
@@ -29,7 +29,7 @@
  * @param endOffset The startOffset of the function in the source file at the time of compilation.
  */
 @ComposeCompilerApi
-@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
+@Target(AnnotationTarget.CLASS)
 @Retention(AnnotationRetention.RUNTIME)
 @Repeatable
 annotation class FunctionKeyMeta(val key: Int, val startOffset: Int, val endOffset: Int)
diff --git a/compose/ui/ui/api/current.txt b/compose/ui/ui/api/current.txt
index 4f61adf..f30f836 100644
--- a/compose/ui/ui/api/current.txt
+++ b/compose/ui/ui/api/current.txt
@@ -2854,7 +2854,6 @@
     method public void clear();
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<? extends java.lang.Object?> elements);
-    method public inline void fastForEach(kotlin.jvm.functions.Function1<java.lang.Object?,kotlin.Unit> block);
     method public void forEach(kotlin.jvm.functions.Function1<java.lang.Object?,kotlin.Unit> block);
     method public int getSize();
     method public boolean isEmpty();
diff --git a/compose/ui/ui/api/restricted_current.txt b/compose/ui/ui/api/restricted_current.txt
index 733a3e0..0ed2da8 100644
--- a/compose/ui/ui/api/restricted_current.txt
+++ b/compose/ui/ui/api/restricted_current.txt
@@ -2862,7 +2862,6 @@
     method public void clear();
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<? extends java.lang.Object?> elements);
-    method public inline void fastForEach(kotlin.jvm.functions.Function1<java.lang.Object?,kotlin.Unit> block);
     method public void forEach(kotlin.jvm.functions.Function1<java.lang.Object?,kotlin.Unit> block);
     method public int getSize();
     method public boolean isEmpty();
@@ -2873,7 +2872,6 @@
     method public boolean retainAll(java.util.Collection<? extends java.lang.Object?> slotIds);
     method public boolean retainAll(kotlin.jvm.functions.Function1<java.lang.Object?,java.lang.Boolean> predicate);
     method public void trimToSize(int maxSlotsToRetainForReuse);
-    property @kotlin.PublishedApi internal androidx.collection.MutableOrderedScatterSet<java.lang.Object?> set;
     property public int size;
   }
 
diff --git a/compose/ui/ui/bcv/native/current.txt b/compose/ui/ui/bcv/native/current.txt
index cafa043..7baec99 100644
--- a/compose/ui/ui/bcv/native/current.txt
+++ b/compose/ui/ui/bcv/native/current.txt
@@ -682,8 +682,6 @@
     abstract fun getSlotsToRetain(androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet) // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.getSlotsToRetain|getSlotsToRetain(androidx.compose.ui.layout.SubcomposeSlotReusePolicy.SlotIdsSet){}[0]
 
     final class SlotIdsSet : kotlin.collections/Collection<kotlin/Any?> { // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet|null[0]
-        final val set // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.set|{}set[0]
-            final fun <get-set>(): androidx.collection/MutableOrderedScatterSet<kotlin/Any?> // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.set.<get-set>|<get-set>(){}[0]
         final val size // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.size|{}size[0]
             final fun <get-size>(): kotlin/Int // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.size.<get-size>|<get-size>(){}[0]
 
@@ -699,7 +697,6 @@
         final fun retainAll(kotlin.collections/Collection<kotlin/Any?>): kotlin/Boolean // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.retainAll|retainAll(kotlin.collections.Collection<kotlin.Any?>){}[0]
         final fun retainAll(kotlin/Function1<kotlin/Any?, kotlin/Boolean>): kotlin/Boolean // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.retainAll|retainAll(kotlin.Function1<kotlin.Any?,kotlin.Boolean>){}[0]
         final fun trimToSize(kotlin/Int) // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.trimToSize|trimToSize(kotlin.Int){}[0]
-        final inline fun fastForEach(kotlin/Function1<kotlin/Any?, kotlin/Unit>) // androidx.compose.ui.layout/SubcomposeSlotReusePolicy.SlotIdsSet.fastForEach|fastForEach(kotlin.Function1<kotlin.Any?,kotlin.Unit>){}[0]
     }
 }
 
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
index 4c72adb..83b0bf4 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt
@@ -19,6 +19,7 @@
 package androidx.compose.ui
 
 import android.content.Context
+import android.content.Intent
 import android.graphics.Bitmap
 import android.os.Build
 import android.os.Handler
@@ -2507,6 +2508,65 @@
         validateSquareColors(outerColor = Color.Blue, innerColor = Color.White, size = 10)
     }
 
+    // Tests that show layout bounds draws outlines around content and modifiers
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    @Test
+    @OptIn(InternalComposeUiApi::class)
+    fun showLayoutBounds_content() {
+        activityTestRule.runOnUiThreadIR {
+            activity.setContent {
+                FixedSize(size = 30, modifier = Modifier.background(Color.White)) {
+                    FixedSize(
+                        size = 10,
+                        modifier = Modifier.padding(5).padding(5).drawLatchModifier()
+                    )
+                }
+            }
+            val composeView = activityTestRule.findAndroidComposeView() as AndroidComposeView
+            composeView.showLayoutBounds = true
+        }
+        activityTestRule.waitAndScreenShot().apply {
+            assertRect(Color.White, size = 8)
+            assertRect(Color.Red, size = 10, holeSize = 8)
+            assertRect(Color.White, size = 18, holeSize = 10)
+            assertRect(Color.Blue, size = 20, holeSize = 18)
+            assertRect(Color.White, size = 28, holeSize = 20)
+            assertRect(Color.Red, size = 30, holeSize = 28)
+        }
+    }
+
+    // Ensure that showLayoutBounds is reset in onResume() to whatever is set in the
+    // settings.
+    @Test
+    @OptIn(InternalComposeUiApi::class)
+    fun showLayoutBounds_resetOnResume() {
+        activityTestRule.runOnUiThreadIR { activity.setContent {} }
+        val composeView = activityTestRule.findAndroidComposeView() as AndroidComposeView
+        // find out whatever the current setting value is for showLayoutBounds
+        val startShowLayoutBounds = composeView.showLayoutBounds
+
+        activityTestRule.runOnUiThread {
+            val intent = Intent(activity, TestActivity::class.java)
+            activity.startActivity(intent)
+        }
+
+        assertTrue(activity.stopLatch.await(5, TimeUnit.SECONDS))
+
+        activityTestRule.runOnUiThread {
+            // set showLayoutBounds to something different
+            composeView.showLayoutBounds = !startShowLayoutBounds
+            activity.resumeLatch = CountDownLatch(1)
+            TestActivity.resumedActivity!!.finish()
+        }
+
+        assertTrue(activity.resumeLatch.await(5, TimeUnit.SECONDS))
+
+        activityTestRule.runOnUiThread {
+            // ensure showLayoutBounds was reset in onResume()
+            assertEquals(startShowLayoutBounds, composeView.showLayoutBounds)
+        }
+    }
+
     @Test
     fun requestRemeasureForAlreadyMeasuredChildWhileTheParentIsStillMeasuring() {
         val drawlatch = CountDownLatch(1)
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/ShowLayoutBoundsTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/ShowLayoutBoundsTest.kt
deleted file mode 100644
index 1ef6f82..0000000
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/layout/ShowLayoutBoundsTest.kt
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.compose.ui.layout
-
-import android.content.Intent
-import android.graphics.Bitmap
-import android.os.Build
-import androidx.annotation.RequiresApi
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.ui.FixedSize
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.assertRect
-import androidx.compose.ui.background
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.asAndroidBitmap
-import androidx.compose.ui.padding
-import androidx.compose.ui.platform.AndroidComposeView
-import androidx.compose.ui.platform.LocalView
-import androidx.compose.ui.test.TestActivity
-import androidx.compose.ui.test.captureToImage
-import androidx.compose.ui.test.junit4.createAndroidComposeRule
-import androidx.compose.ui.test.onRoot
-import androidx.test.filters.MediumTest
-import androidx.test.filters.SdkSuppress
-import androidx.test.platform.app.InstrumentationRegistry
-import com.google.common.truth.Truth.assertThat
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import org.junit.After
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-
-@MediumTest
-class ShowLayoutBoundsTest {
-    @get:Rule val rule = createAndroidComposeRule<TestActivity>()
-
-    private fun setIsShowingLayoutBounds(value: Boolean) {
-        val uiAutomation = InstrumentationRegistry.getInstrumentation().uiAutomation
-        uiAutomation.executeShellCommand("setprop debug.layout $value")
-        // 1599295570 is SYSPROPS_TRANSACTION -- used to poke the system properties
-        // to notify that a change happened
-        uiAutomation.executeShellCommand("service call activity 1599295570")
-        rule.waitForIdle()
-    }
-
-    @Before
-    fun setup() {
-        setIsShowingLayoutBounds(true)
-    }
-
-    @After
-    fun tearDown() {
-        setIsShowingLayoutBounds(false)
-    }
-
-    @Test
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.Q)
-    fun showLayoutBoundsNotifiedWhenChanged() {
-        lateinit var view: AndroidComposeView
-        rule.setContent {
-            view = LocalView.current as AndroidComposeView
-            Box(Modifier.fillMaxSize())
-        }
-        val latch = CountDownLatch(1)
-        rule.runOnIdle {
-            assertThat(view.showLayoutBounds).isTrue()
-            view.viewTreeObserver.addOnPreDrawListener {
-                latch.countDown()
-                true
-            }
-        }
-        setIsShowingLayoutBounds(false)
-        assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue()
-        rule.runOnIdle { assertThat(view.showLayoutBounds).isFalse() }
-    }
-
-    // Tests that show layout bounds draws outlines around content and modifiers
-    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
-    @Test
-    fun showLayoutBounds_content() {
-        rule.setContent {
-            // Need to offset the content from the outer View
-            FixedSize(size = 40, modifier = Modifier.background(Color.White)) {
-                FixedSize(size = 30, modifier = Modifier.background(Color.White)) {
-                    FixedSize(size = 10, modifier = Modifier.padding(5).padding(5))
-                }
-            }
-        }
-        rule.waitForIdle()
-
-        takeScreenShot(40).apply {
-            assertRect(Color.White, size = 8)
-            assertRect(Color.Red, size = 10, holeSize = 8)
-            assertRect(Color.White, size = 18, holeSize = 10)
-            assertRect(Color.Blue, size = 20, holeSize = 18)
-            assertRect(Color.White, size = 28, holeSize = 20)
-            assertRect(Color.Red, size = 30, holeSize = 28)
-        }
-    }
-
-    // Ensure that showLayoutBounds is reset in onResume() to whatever is set in the
-    // settings.
-    @Test
-    fun showLayoutBounds_resetOnResume() {
-        lateinit var composeView: AndroidComposeView
-        rule.setContent { composeView = LocalView.current as AndroidComposeView }
-
-        val activity = rule.activity
-
-        rule.runOnUiThread {
-            val intent = Intent(activity, TestActivity::class.java)
-            activity.startActivity(intent)
-        }
-
-        assertThat(activity.stopLatch.await(5, TimeUnit.SECONDS))
-
-        // change showLayoutBounds to true without poking
-        setIsShowingLayoutBounds(true)
-
-        rule.runOnUiThread {
-            activity.resumeLatch = CountDownLatch(1)
-            TestActivity.resumedActivity!!.finish()
-        }
-
-        assertThat(activity.resumeLatch.await(5, TimeUnit.SECONDS)).isTrue()
-
-        rule.runOnIdle {
-            // ensure showLayoutBounds was reset in onResume()
-            assertThat(composeView.showLayoutBounds).isTrue()
-        }
-    }
-
-    // waitAndScreenShot() requires API level 26
-    @RequiresApi(Build.VERSION_CODES.O)
-    private fun takeScreenShot(width: Int, height: Int = width): Bitmap {
-        val bitmap = rule.onRoot().captureToImage().asAndroidBitmap()
-        assertThat(bitmap.width).isEqualTo(width)
-        assertThat(bitmap.height).isEqualTo(height)
-        return bitmap
-    }
-}
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/window/DialogTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/window/DialogTest.kt
index 6e59287..f12ab89 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/window/DialogTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/window/DialogTest.kt
@@ -76,6 +76,7 @@
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.round
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
 import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
 import androidx.test.uiautomator.UiDevice
@@ -112,7 +113,6 @@
 
         // Click inside the dialog
         interaction.performClick()
-        rule.waitForIdle()
 
         // Check that the Clickable was pressed and the Dialog is still visible.
         interaction.assertIsDisplayed()
@@ -128,12 +128,12 @@
 
         // Click inside the dialog
         interaction.performClick()
-        rule.waitForIdle()
 
         // Check that the Clickable was pressed and the Dialog is still visible.
         interaction.assertIsDisplayed()
     }
 
+    @FlakyTest(bugId = 402738067)
     @Test
     fun dialogTest_isDismissed_whenSpecified() {
         setupDialogTest()
@@ -156,6 +156,7 @@
         textInteraction.assertDoesNotExist()
     }
 
+    @FlakyTest(bugId = 402738067)
     @Test
     fun dialogTest_isDismissed_whenSpecified_decorFitsFalse() {
         setupDialogTest(dialogProperties = DialogProperties(decorFitsSystemWindows = false))
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
index e6026d6..a776c58 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView.android.kt
@@ -616,9 +616,6 @@
     @Suppress("UnnecessaryOptInAnnotation")
     @OptIn(InternalCoreApi::class)
     override var showLayoutBounds = false
-        get() {
-            return if (SDK_INT >= 30) Api30Impl.isShowingLayoutBounds(this) else field
-        }
 
     private var _androidViewsHandler: AndroidViewsHandler? = null
     internal val androidViewsHandler: AndroidViewsHandler
@@ -977,9 +974,7 @@
 
     override fun onResume(owner: LifecycleOwner) {
         // Refresh in onResume in case the value has changed.
-        if (SDK_INT < 30) {
-            showLayoutBounds = getIsShowingLayoutBounds()
-        }
+        showLayoutBounds = getIsShowingLayoutBounds()
     }
 
     override fun focusSearch(focused: View?, direction: Int): View? {
@@ -1145,7 +1140,7 @@
         keyboardModifiersRequireUpdate = true
         super.onWindowFocusChanged(hasWindowFocus)
 
-        if (hasWindowFocus && SDK_INT < 30) {
+        if (hasWindowFocus) {
             // Refresh in onResume in case the value has changed from the quick settings tile, in
             // which case the activity won't be paused/resumed (b/225937688).
             getIsShowingLayoutBounds().also { newShowLayoutBounds ->
@@ -1990,10 +1985,6 @@
 
     override fun onAttachedToWindow() {
         super.onAttachedToWindow()
-        if (SDK_INT < 30) {
-            showLayoutBounds = getIsShowingLayoutBounds()
-        }
-        addNotificationForSysPropsChange(this)
         _windowInfo.isWindowFocused = hasWindowFocus()
         _windowInfo.setOnInitializeContainerSize { calculateWindowSize(this) }
         updateWindowMetrics()
@@ -2064,7 +2055,6 @@
 
     override fun onDetachedFromWindow() {
         super.onDetachedFromWindow()
-        removeNotificationForSysPropsChange(this)
         snapshotObserver.stopObserving()
         _windowInfo.setOnInitializeContainerSize(null)
         val lifecycle =
@@ -2828,17 +2818,13 @@
     companion object {
         private var systemPropertiesClass: Class<*>? = null
         private var getBooleanMethod: Method? = null
-        private var addChangeCallbackMethod: Method? = null
-        private val composeViews = mutableObjectListOf<AndroidComposeView>()
-        private var systemPropertiesChangedRunnable: Runnable? = null
 
+        // TODO(mount): replace with ViewCompat.isShowingLayoutBounds() when it becomes available.
         @Suppress("BanUncheckedReflection")
         private fun getIsShowingLayoutBounds(): Boolean =
             try {
                 if (systemPropertiesClass == null) {
                     systemPropertiesClass = Class.forName("android.os.SystemProperties")
-                }
-                if (getBooleanMethod == null) {
                     getBooleanMethod =
                         systemPropertiesClass?.getDeclaredMethod(
                             "getBoolean",
@@ -2846,54 +2832,10 @@
                             Boolean::class.java
                         )
                 }
-                getBooleanMethod?.invoke(null, "debug.layout", false) as? Boolean == true
-            } catch (_: Exception) {
+                getBooleanMethod?.invoke(null, "debug.layout", false) as? Boolean ?: false
+            } catch (e: Exception) {
                 false
             }
-
-        @Suppress("BanUncheckedReflection")
-        private fun addNotificationForSysPropsChange(composeView: AndroidComposeView) {
-            if (SDK_INT > 28) {
-                // Removing the callback is prohibited on newer versions, so we should only add one
-                // callback and use it for all AndroidComposeViews
-                if (systemPropertiesChangedRunnable == null) {
-                    try {
-                        if (systemPropertiesClass == null) {
-                            systemPropertiesClass = Class.forName("android.os.SystemProperties")
-                        }
-                        if (addChangeCallbackMethod == null) {
-                            addChangeCallbackMethod =
-                                systemPropertiesClass?.getDeclaredMethod(
-                                    "addChangeCallback",
-                                    Runnable::class.java
-                                )
-                        }
-                        val runnable = Runnable {
-                            synchronized(composeViews) {
-                                if (SDK_INT < 30) {
-                                    composeViews.forEach {
-                                        val oldValue = it.showLayoutBounds
-                                        it.showLayoutBounds = getIsShowingLayoutBounds()
-                                        if (oldValue != it.showLayoutBounds) {
-                                            it.invalidateDescendants()
-                                        }
-                                    }
-                                } else {
-                                    composeViews.forEach { it.invalidateDescendants() }
-                                }
-                            }
-                        }
-                        addChangeCallbackMethod?.invoke(null, runnable)
-                        systemPropertiesChangedRunnable = runnable
-                    } catch (_: Exception) {}
-                }
-                synchronized(composeViews) { composeViews += composeView }
-            }
-        }
-
-        private fun removeNotificationForSysPropsChange(composeView: AndroidComposeView) {
-            synchronized(composeViews) { composeViews -= composeView }
-        }
     }
 
     /** Combines objects populated via ViewTree*Owner */
@@ -3194,9 +3136,3 @@
         }
     }
 }
-
-/** Split out to avoid class verification errors. This class will only be loaded when SDK >= 30. */
-@RequiresApi(30)
-private object Api30Impl {
-    @DoNotInline fun isShowingLayoutBounds(view: View) = view.isShowingLayoutBounds
-}
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/viewinterop/AndroidViewHolder.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/viewinterop/AndroidViewHolder.android.kt
index 1609b9c..a0513ac 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/viewinterop/AndroidViewHolder.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/viewinterop/AndroidViewHolder.android.kt
@@ -41,6 +41,7 @@
 import androidx.compose.ui.input.nestedscroll.nestedScroll
 import androidx.compose.ui.input.pointer.pointerInteropFilter
 import androidx.compose.ui.internal.checkPrecondition
+import androidx.compose.ui.internal.checkPreconditionNotNull
 import androidx.compose.ui.layout.IntrinsicMeasurable
 import androidx.compose.ui.layout.IntrinsicMeasureScope
 import androidx.compose.ui.layout.Measurable
@@ -246,18 +247,49 @@
 
     override fun onDeactivate() {
         reset()
-        if (
-            @OptIn(ExperimentalComposeUiApi::class) ComposeUiFlags.isRemoveFocusedViewFixEnabled &&
-                hasFocus() &&
-                isInTouchMode &&
-                SDK_INT > 28
-        ) {
-            // Removing a view that is focused results in focus being re-assigned to an existing
-            // view on screen. We don't want this behavior in touch mode.
+        if (@OptIn(ExperimentalComposeUiApi::class) ComposeUiFlags.isRemoveFocusedViewFixEnabled) {
+            if (!hasFocus()) {
+                removeAllViewsInLayout()
+                return
+            }
+
+            val focused = checkPreconditionNotNull(findFocus()) { "Couldn't find focused view" }
+
             // https://developer.android.com/about/versions/pie/android-9.0-changes-28#focus
-            findFocus().clearFocus()
+            if (isInTouchMode && SDK_INT > 28) {
+                focused.clearFocus()
+                removeAllViewsInLayout()
+                return
+            }
+
+            // When a focused View is removed, it will request a focus change. We'll give it a
+            // temporary View to focus on so that we don't do a recompose during applyChanges()
+            // while searching for a focusable View (e.g. in a LazyColumn)
+            val tempFocusable = View(context)
+            val rect = Rect(0, 0, focused.width, focused.height)
+            offsetDescendantRectToMyCoords(focused, rect)
+            addView(tempFocusable)
+
+            with(tempFocusable) {
+                isFocusable = true
+                isFocusableInTouchMode = true
+                nextFocusUpId = focused.nextFocusUpId
+                nextFocusDownId = focused.nextFocusDownId
+                nextFocusLeftId = focused.nextFocusLeftId
+                nextFocusRightId = focused.nextFocusRightId
+                nextFocusForwardId = focused.nextFocusForwardId
+                layout(rect.left, rect.top, rect.right, rect.bottom)
+                requestFocus()
+            }
+
+            removeViewsInLayout(0, childCount - 2)
+            post {
+                // Now we're ready to send focus to the next focusable item.
+                removeViewInLayout(tempFocusable)
+            }
+        } else {
+            removeAllViewsInLayout()
         }
-        removeAllViewsInLayout()
     }
 
     override fun onRelease() {
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
index 7032be4..947a8bf 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt
@@ -377,8 +377,7 @@
      */
     class SlotIdsSet
     internal constructor(
-        @PublishedApi
-        internal val set: MutableOrderedScatterSet<Any?> = mutableOrderedScatterSetOf()
+        private val set: MutableOrderedScatterSet<Any?> = mutableOrderedScatterSetOf()
     ) : Collection<Any?> {
 
         override val size: Int
@@ -453,24 +452,8 @@
          * Iterates over every element stored in this set by invoking the specified [block] lambda.
          * The iteration order is the same as the insertion order. It is safe to remove the element
          * passed to [block] during iteration.
-         *
-         * NOTE: This method is obscured by `Collection<T>.forEach` since it is marked with
-         *
-         * @HidesMember, which means in practice this will never get called. Please use
-         *   [fastForEach] instead.
          */
         fun forEach(block: (Any?) -> Unit) = set.forEach(block)
-
-        /**
-         * Iterates over every element stored in this set by invoking the specified [block] lambda.
-         * The iteration order is the same as the insertion order. It is safe to remove the element
-         * passed to [block] during iteration.
-         *
-         * NOTE: this method was added in order to allow for a more performant forEach method. It is
-         * necessary because [forEach] is obscured by `Collection<T>.forEach` since it is marked
-         * with @HidesMember.
-         */
-        inline fun fastForEach(block: (Any?) -> Unit) = set.forEach(block)
     }
 }
 
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
index b2904ce..1f81300 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutNode.kt
@@ -1390,10 +1390,8 @@
 
     override fun onReuse() {
         requirePrecondition(isAttached) { "onReuse is only expected on attached node" }
-        if (@OptIn(ExperimentalComposeUiApi::class) !ComposeUiFlags.isRemoveFocusedViewFixEnabled) {
-            interopViewFactoryHolder?.onReuse()
-            subcompositionsState?.onReuse()
-        }
+        interopViewFactoryHolder?.onReuse()
+        subcompositionsState?.onReuse()
         isCurrentlyCalculatingSemanticsConfiguration = false
         if (isDeactivated) {
             isDeactivated = false
@@ -1407,10 +1405,6 @@
         val oldSemanticsId = semanticsId
         semanticsId = generateSemanticsId()
         owner?.onPreLayoutNodeReused(this, oldSemanticsId)
-        if (@OptIn(ExperimentalComposeUiApi::class) ComposeUiFlags.isRemoveFocusedViewFixEnabled) {
-            interopViewFactoryHolder?.onReuse()
-            subcompositionsState?.onReuse()
-        }
         // resetModifierState detaches all nodes, so we need to re-attach them upon reuse.
         nodes.markAsAttached()
         nodes.runAttachLifecycle()
@@ -1423,10 +1417,8 @@
     }
 
     override fun onDeactivate() {
-        if (@OptIn(ExperimentalComposeUiApi::class) !ComposeUiFlags.isRemoveFocusedViewFixEnabled) {
-            interopViewFactoryHolder?.onDeactivate()
-            subcompositionsState?.onDeactivate()
-        }
+        interopViewFactoryHolder?.onDeactivate()
+        subcompositionsState?.onDeactivate()
         isDeactivated = true
         resetModifierState()
         // if the node is detached the semantics were already updated without this node.
@@ -1439,22 +1431,12 @@
             }
         }
         owner?.onLayoutNodeDeactivated(this)
-        if (@OptIn(ExperimentalComposeUiApi::class) ComposeUiFlags.isRemoveFocusedViewFixEnabled) {
-            interopViewFactoryHolder?.onDeactivate()
-            subcompositionsState?.onDeactivate()
-        }
     }
 
     override fun onRelease() {
-        if (@OptIn(ExperimentalComposeUiApi::class) !ComposeUiFlags.isRemoveFocusedViewFixEnabled) {
-            interopViewFactoryHolder?.onRelease()
-            subcompositionsState?.onRelease()
-        }
+        interopViewFactoryHolder?.onRelease()
+        subcompositionsState?.onRelease()
         forEachCoordinatorIncludingInner { it.onRelease() }
-        if (@OptIn(ExperimentalComposeUiApi::class) ComposeUiFlags.isRemoveFocusedViewFixEnabled) {
-            interopViewFactoryHolder?.onRelease()
-            subcompositionsState?.onRelease()
-        }
     }
 
     internal companion object {
diff --git a/constraintlayout/constraintlayout-compose/integration-tests/demos/build.gradle b/constraintlayout/constraintlayout-compose/integration-tests/demos/build.gradle
index 5f16eeb..2eae354 100644
--- a/constraintlayout/constraintlayout-compose/integration-tests/demos/build.gradle
+++ b/constraintlayout/constraintlayout-compose/integration-tests/demos/build.gradle
@@ -24,7 +24,7 @@
 dependencies {
     implementation(project(":constraintlayout:constraintlayout-compose"))
 
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":compose:foundation:foundation-layout"))
     implementation(project(":compose:runtime:runtime"))
     implementation(project(":compose:ui:ui"))
diff --git a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/build.gradle b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/build.gradle
index 6f1add4..06a93d7 100644
--- a/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/build.gradle
+++ b/constraintlayout/constraintlayout-compose/integration-tests/macrobenchmark-target/build.gradle
@@ -42,7 +42,7 @@
     implementation("androidx.recyclerview:recyclerview:1.2.1")
 
     implementation(libs.kotlinStdlib)
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation("androidx.appcompat:appcompat:1.4.1")
     implementation("androidx.cardview:cardview:1.0.0")
     // old version of common-java8 conflicts with newer version, because both have
diff --git a/core/core-backported-fixes/integration-tests/testapp/build.gradle b/core/core-backported-fixes/integration-tests/testapp/build.gradle
index 297c0c3..ca5aec7 100644
--- a/core/core-backported-fixes/integration-tests/testapp/build.gradle
+++ b/core/core-backported-fixes/integration-tests/testapp/build.gradle
@@ -25,7 +25,8 @@
     api(libs.kotlinStdlib)
     implementation(project(":core:core-backported-fixes"))
 
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
+    implementation(project(":activity:activity"))
     implementation("androidx.core:core-ktx:1.15.0")
     implementation(project(":compose:material:material"))
     implementation(project(":compose:material3:material3"))
@@ -37,7 +38,8 @@
 
     androidTestImplementation("androidx.core:core:1.15.0")
     androidTestImplementation("androidx.core:core-ktx:1.15.0")
-    androidTestImplementation("androidx.activity:activity-compose:1.10.1")
+    androidTestImplementation(project(":activity:activity-compose"))
+    androidTestImplementation(project(":activity:activity-ktx"))
     androidTestImplementation(project(":compose:ui:ui-test"))
     androidTestImplementation(project(":compose:ui:ui-test-junit4"))
     androidTestImplementation(libs.testRunner)
diff --git a/core/core/build.gradle.kts b/core/core/build.gradle.kts
index 4354454..ac0d1b253 100644
--- a/core/core/build.gradle.kts
+++ b/core/core/build.gradle.kts
@@ -27,7 +27,7 @@
     api("androidx.annotation:annotation-experimental:1.4.1")
     api("androidx.lifecycle:lifecycle-runtime:2.6.2")
     api("androidx.versionedparcelable:versionedparcelable:1.1.1")
-    api("androidx.core:core-viewtree:1.0.0")
+    api("androidx.core:core-viewtree:1.0.0-beta01")
     implementation("androidx.collection:collection:1.4.2")
     implementation("androidx.concurrent:concurrent-futures:1.0.0")
     implementation("androidx.interpolator:interpolator:1.0.0")
diff --git a/core/core/src/main/java/androidx/core/content/FileProvider.java b/core/core/src/main/java/androidx/core/content/FileProvider.java
index 6cdae68..b3b6c92 100644
--- a/core/core/src/main/java/androidx/core/content/FileProvider.java
+++ b/core/core/src/main/java/androidx/core/content/FileProvider.java
@@ -638,9 +638,6 @@
         if (!info.grantUriPermissions) {
             throw new SecurityException("Provider must grant uri permissions");
         }
-        if (info.authority == null || info.authority.trim().isEmpty()) {
-            throw new SecurityException("Provider must have a non-empty authority");
-        }
 
         final String authority = info.authority.split(";")[0];
         synchronized (mLock) {
diff --git a/core/core/src/main/java/androidx/core/view/insets/ProtectionLayout.java b/core/core/src/main/java/androidx/core/view/insets/ProtectionLayout.java
index 9162c61..240263a 100644
--- a/core/core/src/main/java/androidx/core/view/insets/ProtectionLayout.java
+++ b/core/core/src/main/java/androidx/core/view/insets/ProtectionLayout.java
@@ -144,12 +144,6 @@
     @Override
     protected void onAttachedToWindow() {
         super.onAttachedToWindow();
-        if (mGroup != null) {
-            // This is a rare case that onAttachedToWindow might be called twice without an
-            // onDetachedFromWindow call in between. Here removes the existing ProtectionGroup, or
-            // the new ProtectionGroup will throw IllegalStateException.
-            removeProtectionViews();
-        }
         addProtectionViews();
         requestApplyInsets();
     }
diff --git a/credentials/credentials/src/main/res/values-b+sr+Latn/strings.xml b/credentials/credentials/src/main/res/values-b+sr+Latn/strings.xml
index d1bd317..9cf1ec4 100644
--- a/credentials/credentials/src/main/res/values-b+sr+Latn/strings.xml
+++ b/credentials/credentials/src/main/res/values-b+sr+Latn/strings.xml
@@ -17,6 +17,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL" msgid="3929015085059320822">"Pristupni ključ"</string>
+    <string name="androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL" msgid="3929015085059320822">"Pristupni kôd"</string>
     <string name="android.credentials.TYPE_PASSWORD_CREDENTIAL" msgid="8397015543330865059">"Lozinka"</string>
 </resources>
diff --git a/credentials/credentials/src/main/res/values-pl/strings.xml b/credentials/credentials/src/main/res/values-pl/strings.xml
index 5ee549c..7c4d4c1 100644
--- a/credentials/credentials/src/main/res/values-pl/strings.xml
+++ b/credentials/credentials/src/main/res/values-pl/strings.xml
@@ -17,6 +17,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL" msgid="3929015085059320822">"Klucz dostępu"</string>
+    <string name="androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL" msgid="3929015085059320822">"Klucz"</string>
     <string name="android.credentials.TYPE_PASSWORD_CREDENTIAL" msgid="8397015543330865059">"Hasło"</string>
 </resources>
diff --git a/credentials/credentials/src/main/res/values-sr/strings.xml b/credentials/credentials/src/main/res/values-sr/strings.xml
index 278d406..0e0be5e 100644
--- a/credentials/credentials/src/main/res/values-sr/strings.xml
+++ b/credentials/credentials/src/main/res/values-sr/strings.xml
@@ -17,6 +17,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL" msgid="3929015085059320822">"Приступни кључ"</string>
+    <string name="androidx.credentials.TYPE_PUBLIC_KEY_CREDENTIAL" msgid="3929015085059320822">"Приступни кôд"</string>
     <string name="android.credentials.TYPE_PASSWORD_CREDENTIAL" msgid="8397015543330865059">"Лозинка"</string>
 </resources>
diff --git a/datastore/datastore-guava/build.gradle b/datastore/datastore-guava/build.gradle
index f23fdce..8635218 100644
--- a/datastore/datastore-guava/build.gradle
+++ b/datastore/datastore-guava/build.gradle
@@ -39,7 +39,7 @@
     api(libs.kotlinCoroutinesCore)
     api("androidx.annotation:annotation:1.1.0")
 
-    api("androidx.concurrent:concurrent-futures:1.2.0")
+    api(project(":concurrent:concurrent-futures"))
     api(project(":datastore:datastore"))
 
     implementation("androidx.concurrent:concurrent-futures-ktx:1.2.0")
diff --git a/development/studio/idea.properties b/development/studio/idea.properties
index 1218aa7..9461fa3 100644
--- a/development/studio/idea.properties
+++ b/development/studio/idea.properties
@@ -199,4 +199,4 @@
 #-----------------------------------------------------------------------
 # Enable compose @Preview rendering
 #-----------------------------------------------------------------------
-compose.project.uses.compose.override=true
\ No newline at end of file
+compose.project.uses.compose.override=true
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index ac66d78..2d22e03 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -270,7 +270,6 @@
     kmpDocs(project(":paging:paging-testing"))
     docs(project(":palette:palette"))
     docs(project(":palette:palette-ktx"))
-    docs(project(":pdf:pdf-compose"))
     docs(project(":pdf:pdf-document-service"))
     docs(project(":pdf:pdf-viewer"))
     docs(project(":pdf:pdf-viewer-fragment"))
@@ -284,7 +283,6 @@
     docs(project(":privacysandbox:activity:activity-provider"))
     docs(project(":privacysandbox:ads:ads-adservices"))
     docs(project(":privacysandbox:ads:ads-adservices-java"))
-    docs(project(":privacysandbox:ondevicepersonalization:ondevicepersonalization-client"))
     docs(project(":privacysandbox:sdkruntime:sdkruntime-client"))
     docs(project(":privacysandbox:sdkruntime:sdkruntime-core"))
     docs(project(":privacysandbox:sdkruntime:sdkruntime-provider"))
@@ -421,6 +419,7 @@
     docs(project(":xr:runtime:runtime-testing"))
     docs(project(":xr:scenecore:scenecore"))
     docs(project(":xr:scenecore:scenecore-testing"))
+    docs(project(":xr:xr-stubs"))
 }
 afterEvaluate {
   tasks["docs"].doFirst {
diff --git a/docs/api_guidelines/dependencies.md b/docs/api_guidelines/dependencies.md
index 9668476..74de906 100644
--- a/docs/api_guidelines/dependencies.md
+++ b/docs/api_guidelines/dependencies.md
@@ -411,7 +411,7 @@
 Note that this propagates the version requirement to all dependencies and is not
 appropriate for low-level libraries.
 
-#### Java language (host-side) {#java-host}
+#### Java language
 
 The Java language level determines the minimum version of the Java runtime
 required for lint checks and other host-side libraries like compilers.
@@ -436,11 +436,14 @@
 When doing so, library owners **must** file a bug and establish a timeline to
 un-pin and rejoin the rest of AndroidX.
 
-#### Java language (device-side) {#java-device}
+#### Desugaring and R8/D8
 
 Currently, the highest Java language level supported for Android libraries is
-Java 1.8 (`VERSION_1_8`). AndroidX **does not** currently support library API
-desugaring, so the use of Java 8 APIs requires `minSdk 26` or higher.
+Java 1.8 (`VERSION_1_8``) via D8/R8 desugaring. See Use Java 8 language features
+and APIs for more details.
+
+AndroidX **does not** currently support library API desugaring, so the use of
+Java 8 APIs requires increasing the library's `minSdk`.
 
 #### Android SDK
 
diff --git a/documentfile/OWNERS b/documentfile/OWNERS
index 7821525..0ad17a7 100644
--- a/documentfile/OWNERS
+++ b/documentfile/OWNERS
@@ -1,3 +1,3 @@
 # Bug component: 461432
 [email protected]
[email protected]
[email protected]
diff --git a/health/connect/connect-client/api/current.txt b/health/connect/connect-client/api/current.txt
index 2674dc2e..e4a0904 100644
--- a/health/connect/connect-client/api/current.txt
+++ b/health/connect/connect-client/api/current.txt
@@ -5,10 +5,6 @@
     method public suspend Object? aggregate(androidx.health.connect.client.request.AggregateRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.aggregate.AggregationResult>);
     method public suspend Object? aggregateGroupByDuration(androidx.health.connect.client.request.AggregateGroupByDurationRequest request, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.aggregate.AggregationResultGroupedByDuration>>);
     method public suspend Object? aggregateGroupByPeriod(androidx.health.connect.client.request.AggregateGroupByPeriodRequest request, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod>>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? createMedicalDataSource(androidx.health.connect.client.request.CreateMedicalDataSourceRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.records.MedicalDataSource>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? deleteMedicalDataSourceWithData(String id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? deleteMedicalResources(androidx.health.connect.client.request.DeleteMedicalResourcesRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? deleteMedicalResources(java.util.List<androidx.health.connect.client.records.MedicalResourceId> ids, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
@@ -17,20 +13,15 @@
     method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
     method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public static String getHealthConnectSettingsAction();
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? getMedicalDataSources(androidx.health.connect.client.request.GetMedicalDataSourcesRequest request, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalDataSource>>);
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? getMedicalDataSources(java.util.List<java.lang.String> ids, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalDataSource>>);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
     method public androidx.health.connect.client.PermissionController getPermissionController();
     method public static int getSdkStatus(android.content.Context context);
     method public static int getSdkStatus(android.content.Context context, optional String providerPackageName);
     method public suspend Object? insertRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.InsertRecordsResponse>);
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? readMedicalResources(androidx.health.connect.client.request.ReadMedicalResourcesRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadMedicalResourcesResponse>);
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? readMedicalResources(java.util.List<androidx.health.connect.client.records.MedicalResourceId> ids, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalResource>>);
     method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecord(kotlin.reflect.KClass<T> recordType, String recordId, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordResponse<T>>);
     method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecords(androidx.health.connect.client.request.ReadRecordsRequest<T> request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordsResponse<T>>);
     method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? upsertMedicalResources(java.util.List<androidx.health.connect.client.request.UpsertMedicalResourceRequest> requests, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalResource>>);
     property public default androidx.health.connect.client.HealthConnectFeatures features;
     property public abstract androidx.health.connect.client.PermissionController permissionController;
     field public static final androidx.health.connect.client.HealthConnectClient.Companion Companion;
@@ -65,7 +56,6 @@
   public interface HealthConnectFeatures {
     method public int getFeatureStatus(int feature);
     field public static final androidx.health.connect.client.HealthConnectFeatures.Companion Companion;
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final int FEATURE_PERSONAL_HEALTH_RECORD = 6; // 0x6
     field public static final int FEATURE_PLANNED_EXERCISE = 3; // 0x3
     field public static final int FEATURE_READ_HEALTH_DATA_HISTORY = 4; // 0x4
     field public static final int FEATURE_READ_HEALTH_DATA_IN_BACKGROUND = 1; // 0x1
@@ -75,14 +65,12 @@
   }
 
   public static final class HealthConnectFeatures.Companion {
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static int FEATURE_PERSONAL_HEALTH_RECORD;
     property public static int FEATURE_PLANNED_EXERCISE;
     property public static int FEATURE_READ_HEALTH_DATA_HISTORY;
     property public static int FEATURE_READ_HEALTH_DATA_IN_BACKGROUND;
     property public static int FEATURE_SKIN_TEMPERATURE;
     property public static int FEATURE_STATUS_AVAILABLE;
     property public static int FEATURE_STATUS_UNAVAILABLE;
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final int FEATURE_PERSONAL_HEALTH_RECORD = 6; // 0x6
     field public static final int FEATURE_PLANNED_EXERCISE = 3; // 0x3
     field public static final int FEATURE_READ_HEALTH_DATA_HISTORY = 4; // 0x4
     field public static final int FEATURE_READ_HEALTH_DATA_IN_BACKGROUND = 1; // 0x1
@@ -174,13 +162,6 @@
 
 }
 
-package androidx.health.connect.client.feature {
-
-  @SuppressCompatibility @kotlin.RequiresOptIn(message="This is a part of the Personal Health Record experimental Health Connect APIs and could change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalPersonalHealthRecordApi {
-  }
-
-}
-
 package androidx.health.connect.client.permission {
 
   public final class HealthPermission {
@@ -189,20 +170,7 @@
     field public static final androidx.health.connect.client.permission.HealthPermission.Companion Companion;
     field public static final String PERMISSION_READ_HEALTH_DATA_HISTORY = "android.permission.health.READ_HEALTH_DATA_HISTORY";
     field public static final String PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND = "android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES = "android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_CONDITIONS = "android.permission.health.READ_MEDICAL_DATA_CONDITIONS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS = "android.permission.health.READ_MEDICAL_DATA_LABORATORY_RESULTS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_MEDICATIONS = "android.permission.health.READ_MEDICAL_DATA_MEDICATIONS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS = "android.permission.health.READ_MEDICAL_DATA_PERSONAL_DETAILS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS = "android.permission.health.READ_MEDICAL_DATA_PRACTITIONER_DETAILS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PREGNANCY = "android.permission.health.READ_MEDICAL_DATA_PREGNANCY";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PROCEDURES = "android.permission.health.READ_MEDICAL_DATA_PROCEDURES";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY = "android.permission.health.READ_MEDICAL_DATA_SOCIAL_HISTORY";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_VACCINES = "android.permission.health.READ_MEDICAL_DATA_VACCINES";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_VISITS = "android.permission.health.READ_MEDICAL_DATA_VISITS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS = "android.permission.health.READ_MEDICAL_DATA_VITAL_SIGNS";
     field public static final String PERMISSION_WRITE_EXERCISE_ROUTE = "android.permission.health.WRITE_EXERCISE_ROUTE";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_WRITE_MEDICAL_DATA = "android.permission.health.WRITE_MEDICAL_DATA";
   }
 
   public static final class HealthPermission.Companion {
@@ -212,20 +180,7 @@
     method public String getWritePermission(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType);
     property public static String PERMISSION_READ_HEALTH_DATA_HISTORY;
     property public static String PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_CONDITIONS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_MEDICATIONS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PREGNANCY;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PROCEDURES;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_VACCINES;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_VISITS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS;
     property public static String PERMISSION_WRITE_EXERCISE_ROUTE;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_WRITE_MEDICAL_DATA;
   }
 
 }
@@ -1057,66 +1012,6 @@
     property public static int EXERCISE_TYPE_YOGA;
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class FhirResource {
-    ctor public FhirResource(int type, String id, String data);
-    method public String getData();
-    method public String getId();
-    method public int getType();
-    property public String data;
-    property public String id;
-    property public int type;
-    field public static final androidx.health.connect.client.records.FhirResource.Companion Companion;
-    field public static final int FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE = 2; // 0x2
-    field public static final int FHIR_RESOURCE_TYPE_CONDITION = 4; // 0x4
-    field public static final int FHIR_RESOURCE_TYPE_ENCOUNTER = 12; // 0xc
-    field public static final int FHIR_RESOURCE_TYPE_IMMUNIZATION = 1; // 0x1
-    field public static final int FHIR_RESOURCE_TYPE_LOCATION = 13; // 0xd
-    field public static final int FHIR_RESOURCE_TYPE_MEDICATION = 6; // 0x6
-    field public static final int FHIR_RESOURCE_TYPE_MEDICATION_REQUEST = 7; // 0x7
-    field public static final int FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT = 8; // 0x8
-    field public static final int FHIR_RESOURCE_TYPE_OBSERVATION = 3; // 0x3
-    field public static final int FHIR_RESOURCE_TYPE_ORGANIZATION = 14; // 0xe
-    field public static final int FHIR_RESOURCE_TYPE_PATIENT = 9; // 0x9
-    field public static final int FHIR_RESOURCE_TYPE_PRACTITIONER = 10; // 0xa
-    field public static final int FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE = 11; // 0xb
-    field public static final int FHIR_RESOURCE_TYPE_PROCEDURE = 5; // 0x5
-  }
-
-  public static final class FhirResource.Companion {
-    property public static int FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE;
-    property public static int FHIR_RESOURCE_TYPE_CONDITION;
-    property public static int FHIR_RESOURCE_TYPE_ENCOUNTER;
-    property public static int FHIR_RESOURCE_TYPE_IMMUNIZATION;
-    property public static int FHIR_RESOURCE_TYPE_LOCATION;
-    property public static int FHIR_RESOURCE_TYPE_MEDICATION;
-    property public static int FHIR_RESOURCE_TYPE_MEDICATION_REQUEST;
-    property public static int FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT;
-    property public static int FHIR_RESOURCE_TYPE_OBSERVATION;
-    property public static int FHIR_RESOURCE_TYPE_ORGANIZATION;
-    property public static int FHIR_RESOURCE_TYPE_PATIENT;
-    property public static int FHIR_RESOURCE_TYPE_PRACTITIONER;
-    property public static int FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE;
-    property public static int FHIR_RESOURCE_TYPE_PROCEDURE;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class FhirVersion implements java.lang.Comparable<androidx.health.connect.client.records.FhirVersion> {
-    ctor public FhirVersion(int major, int minor, int patch);
-    method public int compareTo(androidx.health.connect.client.records.FhirVersion other);
-    method public int getMajor();
-    method public int getMinor();
-    method public int getPatch();
-    method public boolean isSupportedFhirVersion();
-    method public static androidx.health.connect.client.records.FhirVersion parseFhirVersion(String fhirVersionString);
-    property public int major;
-    property public int minor;
-    property public int patch;
-    field public static final androidx.health.connect.client.records.FhirVersion.Companion Companion;
-  }
-
-  public static final class FhirVersion.Companion {
-    method public androidx.health.connect.client.records.FhirVersion parseFhirVersion(String fhirVersionString);
-  }
-
   public final class FloorsClimbedRecord implements androidx.health.connect.client.records.Record {
     ctor public FloorsClimbedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, double floors, androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
@@ -1267,80 +1162,6 @@
     field public static final int MEAL_TYPE_UNKNOWN = 0; // 0x0
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class MedicalDataSource {
-    ctor public MedicalDataSource(String id, String packageName, android.net.Uri fhirBaseUri, String displayName, androidx.health.connect.client.records.FhirVersion fhirVersion, java.time.Instant? lastDataUpdateTime);
-    method public String getDisplayName();
-    method public android.net.Uri getFhirBaseUri();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    method public String getId();
-    method public java.time.Instant? getLastDataUpdateTime();
-    method public String getPackageName();
-    property public String displayName;
-    property public android.net.Uri fhirBaseUri;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-    property public String id;
-    property public java.time.Instant? lastDataUpdateTime;
-    property public String packageName;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class MedicalResource {
-    ctor public MedicalResource(int type, androidx.health.connect.client.records.MedicalResourceId id, String dataSourceId, androidx.health.connect.client.records.FhirVersion fhirVersion, androidx.health.connect.client.records.FhirResource fhirResource);
-    method public String getDataSourceId();
-    method public androidx.health.connect.client.records.FhirResource getFhirResource();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    method public androidx.health.connect.client.records.MedicalResourceId getId();
-    method public int getType();
-    property public String dataSourceId;
-    property public androidx.health.connect.client.records.FhirResource fhirResource;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-    property public androidx.health.connect.client.records.MedicalResourceId id;
-    property public int type;
-    field public static final androidx.health.connect.client.records.MedicalResource.Companion Companion;
-    field public static final int MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES = 2; // 0x2
-    field public static final int MEDICAL_RESOURCE_TYPE_CONDITIONS = 7; // 0x7
-    field public static final int MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS = 6; // 0x6
-    field public static final int MEDICAL_RESOURCE_TYPE_MEDICATIONS = 9; // 0x9
-    field public static final int MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS = 10; // 0xa
-    field public static final int MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS = 11; // 0xb
-    field public static final int MEDICAL_RESOURCE_TYPE_PREGNANCY = 3; // 0x3
-    field public static final int MEDICAL_RESOURCE_TYPE_PROCEDURES = 8; // 0x8
-    field public static final int MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY = 4; // 0x4
-    field public static final int MEDICAL_RESOURCE_TYPE_VACCINES = 1; // 0x1
-    field public static final int MEDICAL_RESOURCE_TYPE_VISITS = 12; // 0xc
-    field public static final int MEDICAL_RESOURCE_TYPE_VITAL_SIGNS = 5; // 0x5
-  }
-
-  public static final class MedicalResource.Companion {
-    property public static int MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES;
-    property public static int MEDICAL_RESOURCE_TYPE_CONDITIONS;
-    property public static int MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS;
-    property public static int MEDICAL_RESOURCE_TYPE_MEDICATIONS;
-    property public static int MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS;
-    property public static int MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS;
-    property public static int MEDICAL_RESOURCE_TYPE_PREGNANCY;
-    property public static int MEDICAL_RESOURCE_TYPE_PROCEDURES;
-    property public static int MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY;
-    property public static int MEDICAL_RESOURCE_TYPE_VACCINES;
-    property public static int MEDICAL_RESOURCE_TYPE_VISITS;
-    property public static int MEDICAL_RESOURCE_TYPE_VITAL_SIGNS;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class MedicalResourceId {
-    ctor public MedicalResourceId(String dataSourceId, int fhirResourceType, String fhirResourceId);
-    method public static androidx.health.connect.client.records.MedicalResourceId fromFhirReference(String dataSourceId, String fhirReference);
-    method public String getDataSourceId();
-    method public String getFhirResourceId();
-    method public int getFhirResourceType();
-    property public String dataSourceId;
-    property public String fhirResourceId;
-    property public int fhirResourceType;
-    field public static final androidx.health.connect.client.records.MedicalResourceId.Companion Companion;
-  }
-
-  public static final class MedicalResourceId.Companion {
-    method public androidx.health.connect.client.records.MedicalResourceId fromFhirReference(String dataSourceId, String fhirReference);
-  }
-
   public final class MenstruationFlowRecord implements androidx.health.connect.client.records.Record {
     ctor public MenstruationFlowRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.records.metadata.Metadata metadata, optional int flow);
     method public int getFlow();
@@ -2194,56 +2015,6 @@
     ctor public ChangesTokenRequest(java.util.Set<? extends kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record>> recordTypes, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilters);
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class CreateMedicalDataSourceRequest {
-    ctor public CreateMedicalDataSourceRequest(android.net.Uri fhirBaseUri, String displayName, androidx.health.connect.client.records.FhirVersion fhirVersion);
-    method public String getDisplayName();
-    method public android.net.Uri getFhirBaseUri();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    property public String displayName;
-    property public android.net.Uri fhirBaseUri;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class DeleteMedicalResourcesRequest {
-    ctor public DeleteMedicalResourcesRequest();
-    ctor public DeleteMedicalResourcesRequest(optional java.util.Set<java.lang.String> dataSourceIds, optional java.util.Set<java.lang.Integer> medicalResourceTypes);
-    method public java.util.Set<java.lang.String> getDataSourceIds();
-    method public java.util.Set<java.lang.Integer> getMedicalResourceTypes();
-    property public java.util.Set<java.lang.String> dataSourceIds;
-    property public java.util.Set<java.lang.Integer> medicalResourceTypes;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class GetMedicalDataSourcesRequest {
-    ctor public GetMedicalDataSourcesRequest(java.util.List<java.lang.String> packageNames);
-    method public java.util.List<java.lang.String> getPackageNames();
-    property public java.util.List<java.lang.String> packageNames;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class ReadMedicalResourcesInitialRequest extends androidx.health.connect.client.request.ReadMedicalResourcesRequest {
-    ctor public ReadMedicalResourcesInitialRequest(int medicalResourceType, java.util.Set<java.lang.String> medicalDataSourceIds, optional int pageSize);
-    method public java.util.Set<java.lang.String> getMedicalDataSourceIds();
-    method public int getMedicalResourceType();
-    property public java.util.Set<java.lang.String> medicalDataSourceIds;
-    property public int medicalResourceType;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class ReadMedicalResourcesPageRequest extends androidx.health.connect.client.request.ReadMedicalResourcesRequest {
-    ctor public ReadMedicalResourcesPageRequest(String pageToken, optional int pageSize);
-    method public String getPageToken();
-    property public String pageToken;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public abstract class ReadMedicalResourcesRequest {
-    method public final int getPageSize();
-    property public final int pageSize;
-    field public static final androidx.health.connect.client.request.ReadMedicalResourcesRequest.Companion Companion;
-    field public static final int DEFAULT_PAGE_SIZE = 1000; // 0x3e8
-  }
-
-  public static final class ReadMedicalResourcesRequest.Companion {
-    property public static int DEFAULT_PAGE_SIZE;
-  }
-
   public final class ReadRecordsRequest<T extends androidx.health.connect.client.records.Record> {
     ctor public ReadRecordsRequest(kotlin.reflect.KClass<T> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
@@ -2252,16 +2023,6 @@
     method public static inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.request.ReadRecordsRequest<T> ReadRecordsRequest(androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class UpsertMedicalResourceRequest {
-    ctor public UpsertMedicalResourceRequest(String dataSourceId, androidx.health.connect.client.records.FhirVersion fhirVersion, String data);
-    method public String getData();
-    method public String getDataSourceId();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    property public String data;
-    property public String dataSourceId;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-  }
-
 }
 
 package androidx.health.connect.client.response {
@@ -2282,16 +2043,6 @@
     property public java.util.List<java.lang.String> recordIdsList;
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class ReadMedicalResourcesResponse {
-    ctor public ReadMedicalResourcesResponse(java.util.List<androidx.health.connect.client.records.MedicalResource> medicalResources, String? nextPageToken, int remainingCount);
-    method public java.util.List<androidx.health.connect.client.records.MedicalResource> getMedicalResources();
-    method public String? getNextPageToken();
-    method public int getRemainingCount();
-    property public java.util.List<androidx.health.connect.client.records.MedicalResource> medicalResources;
-    property public String? nextPageToken;
-    property public int remainingCount;
-  }
-
   public final class ReadRecordResponse<T extends androidx.health.connect.client.records.Record> {
     method public T getRecord();
     property public T record;
diff --git a/health/connect/connect-client/api/restricted_current.txt b/health/connect/connect-client/api/restricted_current.txt
index d160319..ebef835 100644
--- a/health/connect/connect-client/api/restricted_current.txt
+++ b/health/connect/connect-client/api/restricted_current.txt
@@ -5,10 +5,6 @@
     method public suspend Object? aggregate(androidx.health.connect.client.request.AggregateRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.aggregate.AggregationResult>);
     method public suspend Object? aggregateGroupByDuration(androidx.health.connect.client.request.AggregateGroupByDurationRequest request, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.aggregate.AggregationResultGroupedByDuration>>);
     method public suspend Object? aggregateGroupByPeriod(androidx.health.connect.client.request.AggregateGroupByPeriodRequest request, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod>>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? createMedicalDataSource(androidx.health.connect.client.request.CreateMedicalDataSourceRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.records.MedicalDataSource>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? deleteMedicalDataSourceWithData(String id, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? deleteMedicalResources(androidx.health.connect.client.request.DeleteMedicalResourcesRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? deleteMedicalResources(java.util.List<androidx.health.connect.client.records.MedicalResourceId> ids, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? deleteRecords(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType, java.util.List<java.lang.String> recordIdsList, java.util.List<java.lang.String> clientRecordIdsList, kotlin.coroutines.Continuation<? super kotlin.Unit>);
     method public suspend Object? getChanges(String changesToken, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ChangesResponse>);
@@ -17,20 +13,15 @@
     method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context);
     method public static android.content.Intent getHealthConnectManageDataIntent(android.content.Context context, optional String providerPackageName);
     method public static String getHealthConnectSettingsAction();
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? getMedicalDataSources(androidx.health.connect.client.request.GetMedicalDataSourcesRequest request, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalDataSource>>);
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? getMedicalDataSources(java.util.List<java.lang.String> ids, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalDataSource>>);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context);
     method public static androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, optional String providerPackageName);
     method public androidx.health.connect.client.PermissionController getPermissionController();
     method public static int getSdkStatus(android.content.Context context);
     method public static int getSdkStatus(android.content.Context context, optional String providerPackageName);
     method public suspend Object? insertRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.InsertRecordsResponse>);
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? readMedicalResources(androidx.health.connect.client.request.ReadMedicalResourcesRequest request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadMedicalResourcesResponse>);
-    method @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? readMedicalResources(java.util.List<androidx.health.connect.client.records.MedicalResourceId> ids, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalResource>>);
     method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecord(kotlin.reflect.KClass<T> recordType, String recordId, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordResponse<T>>);
     method public suspend <T extends androidx.health.connect.client.records.Record> Object? readRecords(androidx.health.connect.client.request.ReadRecordsRequest<T> request, kotlin.coroutines.Continuation<? super androidx.health.connect.client.response.ReadRecordsResponse<T>>);
     method public suspend Object? updateRecords(java.util.List<? extends androidx.health.connect.client.records.Record> records, kotlin.coroutines.Continuation<? super kotlin.Unit>);
-    method @SuppressCompatibility @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA") @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public default suspend Object? upsertMedicalResources(java.util.List<androidx.health.connect.client.request.UpsertMedicalResourceRequest> requests, kotlin.coroutines.Continuation<? super java.util.List<androidx.health.connect.client.records.MedicalResource>>);
     property public default androidx.health.connect.client.HealthConnectFeatures features;
     property public abstract androidx.health.connect.client.PermissionController permissionController;
     field public static final androidx.health.connect.client.HealthConnectClient.Companion Companion;
@@ -65,7 +56,6 @@
   public interface HealthConnectFeatures {
     method public int getFeatureStatus(int feature);
     field public static final androidx.health.connect.client.HealthConnectFeatures.Companion Companion;
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final int FEATURE_PERSONAL_HEALTH_RECORD = 6; // 0x6
     field public static final int FEATURE_PLANNED_EXERCISE = 3; // 0x3
     field public static final int FEATURE_READ_HEALTH_DATA_HISTORY = 4; // 0x4
     field public static final int FEATURE_READ_HEALTH_DATA_IN_BACKGROUND = 1; // 0x1
@@ -75,14 +65,12 @@
   }
 
   public static final class HealthConnectFeatures.Companion {
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static int FEATURE_PERSONAL_HEALTH_RECORD;
     property public static int FEATURE_PLANNED_EXERCISE;
     property public static int FEATURE_READ_HEALTH_DATA_HISTORY;
     property public static int FEATURE_READ_HEALTH_DATA_IN_BACKGROUND;
     property public static int FEATURE_SKIN_TEMPERATURE;
     property public static int FEATURE_STATUS_AVAILABLE;
     property public static int FEATURE_STATUS_UNAVAILABLE;
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final int FEATURE_PERSONAL_HEALTH_RECORD = 6; // 0x6
     field public static final int FEATURE_PLANNED_EXERCISE = 3; // 0x3
     field public static final int FEATURE_READ_HEALTH_DATA_HISTORY = 4; // 0x4
     field public static final int FEATURE_READ_HEALTH_DATA_IN_BACKGROUND = 1; // 0x1
@@ -174,13 +162,6 @@
 
 }
 
-package androidx.health.connect.client.feature {
-
-  @SuppressCompatibility @kotlin.RequiresOptIn(message="This is a part of the Personal Health Record experimental Health Connect APIs and could change in the future.") @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public @interface ExperimentalPersonalHealthRecordApi {
-  }
-
-}
-
 package androidx.health.connect.client.permission {
 
   public final class HealthPermission {
@@ -189,20 +170,7 @@
     field public static final androidx.health.connect.client.permission.HealthPermission.Companion Companion;
     field public static final String PERMISSION_READ_HEALTH_DATA_HISTORY = "android.permission.health.READ_HEALTH_DATA_HISTORY";
     field public static final String PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND = "android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES = "android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_CONDITIONS = "android.permission.health.READ_MEDICAL_DATA_CONDITIONS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS = "android.permission.health.READ_MEDICAL_DATA_LABORATORY_RESULTS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_MEDICATIONS = "android.permission.health.READ_MEDICAL_DATA_MEDICATIONS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS = "android.permission.health.READ_MEDICAL_DATA_PERSONAL_DETAILS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS = "android.permission.health.READ_MEDICAL_DATA_PRACTITIONER_DETAILS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PREGNANCY = "android.permission.health.READ_MEDICAL_DATA_PREGNANCY";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_PROCEDURES = "android.permission.health.READ_MEDICAL_DATA_PROCEDURES";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY = "android.permission.health.READ_MEDICAL_DATA_SOCIAL_HISTORY";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_VACCINES = "android.permission.health.READ_MEDICAL_DATA_VACCINES";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_VISITS = "android.permission.health.READ_MEDICAL_DATA_VISITS";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS = "android.permission.health.READ_MEDICAL_DATA_VITAL_SIGNS";
     field public static final String PERMISSION_WRITE_EXERCISE_ROUTE = "android.permission.health.WRITE_EXERCISE_ROUTE";
-    field @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static final String PERMISSION_WRITE_MEDICAL_DATA = "android.permission.health.WRITE_MEDICAL_DATA";
   }
 
   public static final class HealthPermission.Companion {
@@ -212,20 +180,7 @@
     method public String getWritePermission(kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record> recordType);
     property public static String PERMISSION_READ_HEALTH_DATA_HISTORY;
     property public static String PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_CONDITIONS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_MEDICATIONS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PREGNANCY;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_PROCEDURES;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_VACCINES;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_VISITS;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS;
     property public static String PERMISSION_WRITE_EXERCISE_ROUTE;
-    property @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public static String PERMISSION_WRITE_MEDICAL_DATA;
   }
 
 }
@@ -1057,66 +1012,6 @@
     property public static int EXERCISE_TYPE_YOGA;
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class FhirResource {
-    ctor public FhirResource(int type, String id, String data);
-    method public String getData();
-    method public String getId();
-    method public int getType();
-    property public String data;
-    property public String id;
-    property public int type;
-    field public static final androidx.health.connect.client.records.FhirResource.Companion Companion;
-    field public static final int FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE = 2; // 0x2
-    field public static final int FHIR_RESOURCE_TYPE_CONDITION = 4; // 0x4
-    field public static final int FHIR_RESOURCE_TYPE_ENCOUNTER = 12; // 0xc
-    field public static final int FHIR_RESOURCE_TYPE_IMMUNIZATION = 1; // 0x1
-    field public static final int FHIR_RESOURCE_TYPE_LOCATION = 13; // 0xd
-    field public static final int FHIR_RESOURCE_TYPE_MEDICATION = 6; // 0x6
-    field public static final int FHIR_RESOURCE_TYPE_MEDICATION_REQUEST = 7; // 0x7
-    field public static final int FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT = 8; // 0x8
-    field public static final int FHIR_RESOURCE_TYPE_OBSERVATION = 3; // 0x3
-    field public static final int FHIR_RESOURCE_TYPE_ORGANIZATION = 14; // 0xe
-    field public static final int FHIR_RESOURCE_TYPE_PATIENT = 9; // 0x9
-    field public static final int FHIR_RESOURCE_TYPE_PRACTITIONER = 10; // 0xa
-    field public static final int FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE = 11; // 0xb
-    field public static final int FHIR_RESOURCE_TYPE_PROCEDURE = 5; // 0x5
-  }
-
-  public static final class FhirResource.Companion {
-    property public static int FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE;
-    property public static int FHIR_RESOURCE_TYPE_CONDITION;
-    property public static int FHIR_RESOURCE_TYPE_ENCOUNTER;
-    property public static int FHIR_RESOURCE_TYPE_IMMUNIZATION;
-    property public static int FHIR_RESOURCE_TYPE_LOCATION;
-    property public static int FHIR_RESOURCE_TYPE_MEDICATION;
-    property public static int FHIR_RESOURCE_TYPE_MEDICATION_REQUEST;
-    property public static int FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT;
-    property public static int FHIR_RESOURCE_TYPE_OBSERVATION;
-    property public static int FHIR_RESOURCE_TYPE_ORGANIZATION;
-    property public static int FHIR_RESOURCE_TYPE_PATIENT;
-    property public static int FHIR_RESOURCE_TYPE_PRACTITIONER;
-    property public static int FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE;
-    property public static int FHIR_RESOURCE_TYPE_PROCEDURE;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class FhirVersion implements java.lang.Comparable<androidx.health.connect.client.records.FhirVersion> {
-    ctor public FhirVersion(int major, int minor, int patch);
-    method public int compareTo(androidx.health.connect.client.records.FhirVersion other);
-    method public int getMajor();
-    method public int getMinor();
-    method public int getPatch();
-    method public boolean isSupportedFhirVersion();
-    method public static androidx.health.connect.client.records.FhirVersion parseFhirVersion(String fhirVersionString);
-    property public int major;
-    property public int minor;
-    property public int patch;
-    field public static final androidx.health.connect.client.records.FhirVersion.Companion Companion;
-  }
-
-  public static final class FhirVersion.Companion {
-    method public androidx.health.connect.client.records.FhirVersion parseFhirVersion(String fhirVersionString);
-  }
-
   public final class FloorsClimbedRecord implements androidx.health.connect.client.records.IntervalRecord {
     ctor public FloorsClimbedRecord(java.time.Instant startTime, java.time.ZoneOffset? startZoneOffset, java.time.Instant endTime, java.time.ZoneOffset? endZoneOffset, double floors, androidx.health.connect.client.records.metadata.Metadata metadata);
     method public java.time.Instant getEndTime();
@@ -1285,80 +1180,6 @@
     field public static final int MEAL_TYPE_UNKNOWN = 0; // 0x0
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class MedicalDataSource {
-    ctor public MedicalDataSource(String id, String packageName, android.net.Uri fhirBaseUri, String displayName, androidx.health.connect.client.records.FhirVersion fhirVersion, java.time.Instant? lastDataUpdateTime);
-    method public String getDisplayName();
-    method public android.net.Uri getFhirBaseUri();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    method public String getId();
-    method public java.time.Instant? getLastDataUpdateTime();
-    method public String getPackageName();
-    property public String displayName;
-    property public android.net.Uri fhirBaseUri;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-    property public String id;
-    property public java.time.Instant? lastDataUpdateTime;
-    property public String packageName;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class MedicalResource {
-    ctor public MedicalResource(int type, androidx.health.connect.client.records.MedicalResourceId id, String dataSourceId, androidx.health.connect.client.records.FhirVersion fhirVersion, androidx.health.connect.client.records.FhirResource fhirResource);
-    method public String getDataSourceId();
-    method public androidx.health.connect.client.records.FhirResource getFhirResource();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    method public androidx.health.connect.client.records.MedicalResourceId getId();
-    method public int getType();
-    property public String dataSourceId;
-    property public androidx.health.connect.client.records.FhirResource fhirResource;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-    property public androidx.health.connect.client.records.MedicalResourceId id;
-    property public int type;
-    field public static final androidx.health.connect.client.records.MedicalResource.Companion Companion;
-    field public static final int MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES = 2; // 0x2
-    field public static final int MEDICAL_RESOURCE_TYPE_CONDITIONS = 7; // 0x7
-    field public static final int MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS = 6; // 0x6
-    field public static final int MEDICAL_RESOURCE_TYPE_MEDICATIONS = 9; // 0x9
-    field public static final int MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS = 10; // 0xa
-    field public static final int MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS = 11; // 0xb
-    field public static final int MEDICAL_RESOURCE_TYPE_PREGNANCY = 3; // 0x3
-    field public static final int MEDICAL_RESOURCE_TYPE_PROCEDURES = 8; // 0x8
-    field public static final int MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY = 4; // 0x4
-    field public static final int MEDICAL_RESOURCE_TYPE_VACCINES = 1; // 0x1
-    field public static final int MEDICAL_RESOURCE_TYPE_VISITS = 12; // 0xc
-    field public static final int MEDICAL_RESOURCE_TYPE_VITAL_SIGNS = 5; // 0x5
-  }
-
-  public static final class MedicalResource.Companion {
-    property public static int MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES;
-    property public static int MEDICAL_RESOURCE_TYPE_CONDITIONS;
-    property public static int MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS;
-    property public static int MEDICAL_RESOURCE_TYPE_MEDICATIONS;
-    property public static int MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS;
-    property public static int MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS;
-    property public static int MEDICAL_RESOURCE_TYPE_PREGNANCY;
-    property public static int MEDICAL_RESOURCE_TYPE_PROCEDURES;
-    property public static int MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY;
-    property public static int MEDICAL_RESOURCE_TYPE_VACCINES;
-    property public static int MEDICAL_RESOURCE_TYPE_VISITS;
-    property public static int MEDICAL_RESOURCE_TYPE_VITAL_SIGNS;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class MedicalResourceId {
-    ctor public MedicalResourceId(String dataSourceId, int fhirResourceType, String fhirResourceId);
-    method public static androidx.health.connect.client.records.MedicalResourceId fromFhirReference(String dataSourceId, String fhirReference);
-    method public String getDataSourceId();
-    method public String getFhirResourceId();
-    method public int getFhirResourceType();
-    property public String dataSourceId;
-    property public String fhirResourceId;
-    property public int fhirResourceType;
-    field public static final androidx.health.connect.client.records.MedicalResourceId.Companion Companion;
-  }
-
-  public static final class MedicalResourceId.Companion {
-    method public androidx.health.connect.client.records.MedicalResourceId fromFhirReference(String dataSourceId, String fhirReference);
-  }
-
   public final class MenstruationFlowRecord implements androidx.health.connect.client.records.InstantaneousRecord {
     ctor public MenstruationFlowRecord(java.time.Instant time, java.time.ZoneOffset? zoneOffset, androidx.health.connect.client.records.metadata.Metadata metadata, optional int flow);
     method public int getFlow();
@@ -2217,56 +2038,6 @@
     ctor public ChangesTokenRequest(java.util.Set<? extends kotlin.reflect.KClass<? extends androidx.health.connect.client.records.Record>> recordTypes, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilters);
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class CreateMedicalDataSourceRequest {
-    ctor public CreateMedicalDataSourceRequest(android.net.Uri fhirBaseUri, String displayName, androidx.health.connect.client.records.FhirVersion fhirVersion);
-    method public String getDisplayName();
-    method public android.net.Uri getFhirBaseUri();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    property public String displayName;
-    property public android.net.Uri fhirBaseUri;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class DeleteMedicalResourcesRequest {
-    ctor public DeleteMedicalResourcesRequest();
-    ctor public DeleteMedicalResourcesRequest(optional java.util.Set<java.lang.String> dataSourceIds, optional java.util.Set<java.lang.Integer> medicalResourceTypes);
-    method public java.util.Set<java.lang.String> getDataSourceIds();
-    method public java.util.Set<java.lang.Integer> getMedicalResourceTypes();
-    property public java.util.Set<java.lang.String> dataSourceIds;
-    property public java.util.Set<java.lang.Integer> medicalResourceTypes;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class GetMedicalDataSourcesRequest {
-    ctor public GetMedicalDataSourcesRequest(java.util.List<java.lang.String> packageNames);
-    method public java.util.List<java.lang.String> getPackageNames();
-    property public java.util.List<java.lang.String> packageNames;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class ReadMedicalResourcesInitialRequest extends androidx.health.connect.client.request.ReadMedicalResourcesRequest {
-    ctor public ReadMedicalResourcesInitialRequest(int medicalResourceType, java.util.Set<java.lang.String> medicalDataSourceIds, optional int pageSize);
-    method public java.util.Set<java.lang.String> getMedicalDataSourceIds();
-    method public int getMedicalResourceType();
-    property public java.util.Set<java.lang.String> medicalDataSourceIds;
-    property public int medicalResourceType;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class ReadMedicalResourcesPageRequest extends androidx.health.connect.client.request.ReadMedicalResourcesRequest {
-    ctor public ReadMedicalResourcesPageRequest(String pageToken, optional int pageSize);
-    method public String getPageToken();
-    property public String pageToken;
-  }
-
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public abstract class ReadMedicalResourcesRequest {
-    method public final int getPageSize();
-    property public final int pageSize;
-    field public static final androidx.health.connect.client.request.ReadMedicalResourcesRequest.Companion Companion;
-    field public static final int DEFAULT_PAGE_SIZE = 1000; // 0x3e8
-  }
-
-  public static final class ReadMedicalResourcesRequest.Companion {
-    property public static int DEFAULT_PAGE_SIZE;
-  }
-
   public final class ReadRecordsRequest<T extends androidx.health.connect.client.records.Record> {
     ctor public ReadRecordsRequest(kotlin.reflect.KClass<T> recordType, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
@@ -2275,16 +2046,6 @@
     method public static inline <reified T extends androidx.health.connect.client.records.Record> androidx.health.connect.client.request.ReadRecordsRequest<T> ReadRecordsRequest(androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, optional java.util.Set<androidx.health.connect.client.records.metadata.DataOrigin> dataOriginFilter, optional boolean ascendingOrder, optional int pageSize, optional String? pageToken);
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class UpsertMedicalResourceRequest {
-    ctor public UpsertMedicalResourceRequest(String dataSourceId, androidx.health.connect.client.records.FhirVersion fhirVersion, String data);
-    method public String getData();
-    method public String getDataSourceId();
-    method public androidx.health.connect.client.records.FhirVersion getFhirVersion();
-    property public String data;
-    property public String dataSourceId;
-    property public androidx.health.connect.client.records.FhirVersion fhirVersion;
-  }
-
 }
 
 package androidx.health.connect.client.response {
@@ -2305,16 +2066,6 @@
     property public java.util.List<java.lang.String> recordIdsList;
   }
 
-  @SuppressCompatibility @androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi public final class ReadMedicalResourcesResponse {
-    ctor public ReadMedicalResourcesResponse(java.util.List<androidx.health.connect.client.records.MedicalResource> medicalResources, String? nextPageToken, int remainingCount);
-    method public java.util.List<androidx.health.connect.client.records.MedicalResource> getMedicalResources();
-    method public String? getNextPageToken();
-    method public int getRemainingCount();
-    property public java.util.List<androidx.health.connect.client.records.MedicalResource> medicalResources;
-    property public String? nextPageToken;
-    property public int remainingCount;
-  }
-
   public final class ReadRecordResponse<T extends androidx.health.connect.client.records.Record> {
     method public T getRecord();
     property public T record;
diff --git a/health/connect/connect-client/build.gradle b/health/connect/connect-client/build.gradle
index 0259ff6..2fd2aa9 100644
--- a/health/connect/connect-client/build.gradle
+++ b/health/connect/connect-client/build.gradle
@@ -49,6 +49,7 @@
     testImplementation(libs.junit)
     testImplementation(libs.truth)
     testImplementation(libs.kotlinCoroutinesTest)
+    androidTestImplementation(libs.testRules)
     testImplementation(libs.mockitoCore4)
     testImplementation(libs.robolectric)
     testImplementation(libs.testExtJunit)
@@ -56,16 +57,14 @@
     testImplementation(libs.espressoCore)
     testImplementation(libs.espressoIntents)
     testImplementation(libs.kotlinReflect)
-    testImplementation(libs.guavaTestlib)
 
-    androidTestImplementation(libs.testRules)
     androidTestImplementation(libs.testExtJunit)
     androidTestImplementation(libs.kotlinCoroutinesTest)
     androidTestImplementation(libs.kotlinReflect)
     androidTestImplementation(libs.kotlinTest)
     androidTestImplementation(libs.junit)
     androidTestImplementation(libs.truth)
-    androidTestImplementation(libs.guavaTestlib)
+    testImplementation(libs.guavaTestlib)
 }
 
 android {
@@ -80,7 +79,7 @@
     }
     testOptions.unitTests.includeAndroidResources = true
     namespace = "androidx.health.connect.client"
-    compileSdk = 36
+    compileSdk = 35
 }
 
 androidx {
diff --git a/health/connect/connect-client/samples/build.gradle b/health/connect/connect-client/samples/build.gradle
index a2ce898..50f0df9 100644
--- a/health/connect/connect-client/samples/build.gradle
+++ b/health/connect/connect-client/samples/build.gradle
@@ -50,5 +50,5 @@
     defaultConfig {
         minSdk = 26
     }
-    compileSdk = 36
+    compileSdk = 35
 }
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/MedicalDataSourceSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/MedicalDataSourceSamples.kt
deleted file mode 100644
index b742ece..0000000
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/MedicalDataSourceSamples.kt
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@file:Suppress("UNUSED_VARIABLE")
-
-package androidx.health.connect.client.samples
-
-import android.net.Uri
-import androidx.annotation.Sampled
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_STATUS_AVAILABLE
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.request.CreateMedicalDataSourceRequest
-import androidx.health.connect.client.request.GetMedicalDataSourcesRequest
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun CreateMedicalDataSourceSample(healthConnectClient: HealthConnectClient) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Create a `MedicalDataSource`
-    // Note that `displayName` must be unique across `MedicalDataSource`s
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-}
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun DeleteMedicalDataSourceWithDataSample(healthConnectClient: HealthConnectClient) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or creates a `MedicalDataSource`
-    // Each `MedicalDataSource` is assigned an `id` by the system on creation
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Delete the `MedicalDataSource` that has the specified `id`
-    healthConnectClient.deleteMedicalDataSourceWithData(medicalDataSource.id)
-}
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun GetMedicalDataSourcesByRequestSample(
-    healthConnectClient: HealthConnectClient,
-    anotherPackageName: String
-) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or create a `MedicalDataSource`
-    // Each `MedicalDataSource` contains the `packageName` which created it
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Retrieve all `MedicalDataSource`s created by any of the specified package names
-    // Package names may be found in other `MedicalDataSource`s or from arbitrary input
-    val medicalDataSources: List<MedicalDataSource> =
-        healthConnectClient.getMedicalDataSources(
-            GetMedicalDataSourcesRequest(listOf(medicalDataSource.packageName, anotherPackageName))
-        )
-}
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun GetMedicalDataSourcesByIdsSample(
-    healthConnectClient: HealthConnectClient,
-    anotherId: String,
-) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or create a `MedicalDataSource`
-    // Each `MedicalDataSource` is assigned an `id` by the system on creation
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Retrieve all `MedicalDataSource` with `id` matching any of the given ids
-    val medicalDataSources: List<MedicalDataSource> =
-        healthConnectClient.getMedicalDataSources(listOf(medicalDataSource.id, anotherId))
-}
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/MedicalResourceSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/MedicalResourceSamples.kt
deleted file mode 100644
index e141e9c..0000000
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/MedicalResourceSamples.kt
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@file:Suppress("UNUSED_VARIABLE")
-
-package androidx.health.connect.client.samples
-
-import android.net.Uri
-import androidx.annotation.Sampled
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_STATUS_AVAILABLE
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_MEDICATIONS
-import androidx.health.connect.client.records.MedicalResourceId
-import androidx.health.connect.client.request.CreateMedicalDataSourceRequest
-import androidx.health.connect.client.request.DeleteMedicalResourcesRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesInitialRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesPageRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesRequest
-import androidx.health.connect.client.request.UpsertMedicalResourceRequest
-import androidx.health.connect.client.response.ReadMedicalResourcesResponse
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun UpsertMedicalResourcesSample(
-    healthConnectClient: HealthConnectClient,
-    medicationJsonToInsert: String,
-    updatedMedicationJsonToInsert: String,
-) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or create a `MedicalDataSource`
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Insert `MedicalResource`s into the `MedicalDataSource`
-    val medicalResources: List<MedicalResource> =
-        healthConnectClient.upsertMedicalResources(
-            listOf(
-                UpsertMedicalResourceRequest(
-                    medicalDataSource.id,
-                    medicalDataSource.fhirVersion,
-                    medicationJsonToInsert // a valid FHIR json string
-                )
-            )
-        )
-
-    // Update `MedicalResource`s in the `MedicalDataSource`
-    val updatedMedicalResources: List<MedicalResource> =
-        healthConnectClient.upsertMedicalResources(
-            listOf(
-                UpsertMedicalResourceRequest(
-                    medicalDataSource.id,
-                    medicalDataSource.fhirVersion,
-                    // a valid FHIR json string
-                    // if this resource has the same type and ID as in `medicationJsonToInsert`,
-                    // this `upsertMedicalResources()` call will update the previously inserted
-                    // `MedicalResource`
-                    updatedMedicationJsonToInsert
-                )
-            )
-        )
-}
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun ReadMedicalResourcesByRequestSample(
-    healthConnectClient: HealthConnectClient,
-    exampleLabResults: List<UpsertMedicalResourceRequest>
-) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or create a `MedicalDataSource`
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Insert `MedicalResource`s into the `MedicalDataSource`
-    healthConnectClient.upsertMedicalResources(exampleLabResults)
-
-    // Read `MedicalResource`s back from the `MedicalDataSource`
-    // Read 100 resources / page. See `pageSize` doc for defaults and limits.
-    val pageSize = 100
-    // Prepare the initial read request.
-    // All `MedicalResource`s in the given `MedicalDataSource`s and of given `medicalResourceType`
-    // will be retrieved.
-    val initialRequest: ReadMedicalResourcesRequest =
-        ReadMedicalResourcesInitialRequest(
-            MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS,
-            setOf(medicalDataSource.id),
-            pageSize = pageSize,
-        )
-    // Continue reading pages until all `MedicalResource`s are read
-    var pageToken: String? = null
-    do {
-        // Prepare paged request if needed
-        val request: ReadMedicalResourcesRequest =
-            if (pageToken == null) initialRequest
-            else ReadMedicalResourcesPageRequest(pageToken, pageSize = pageSize)
-        // Read `MedicalResource`s
-        val response: ReadMedicalResourcesResponse =
-            healthConnectClient.readMedicalResources(request)
-        // Process `MedicalResource`s as desired
-        val resources: List<MedicalResource> = response.medicalResources
-        // Advance to next page
-        pageToken = response.nextPageToken
-    } while (pageToken != null)
-}
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun ReadMedicalResourcesByIdsSample(
-    healthConnectClient: HealthConnectClient,
-    medicationJsonToInsert: String
-) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or create a `MedicalDataSource`
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Insert `MedicalResource`s into the `MedicalDataSource`
-    val medicalResources: List<MedicalResource> =
-        healthConnectClient.upsertMedicalResources(
-            listOf(
-                UpsertMedicalResourceRequest(
-                    medicalDataSource.id,
-                    medicalDataSource.fhirVersion,
-                    medicationJsonToInsert // a valid FHIR json string
-                )
-            )
-        )
-
-    // Retrieve `fhirResourceType` type `MedicalResource`s with the specified `id`s from the
-    // provided `MedicalDataSource`
-    val retrievedMedicalResources: List<MedicalResource> =
-        healthConnectClient.readMedicalResources(
-            medicalResources.map { medicalResource: MedicalResource ->
-                MedicalResourceId(
-                    dataSourceId = medicalDataSource.id,
-                    fhirResourceType = medicalResource.id.fhirResourceType,
-                    fhirResourceId = medicalResource.id.fhirResourceId
-                )
-            }
-        )
-}
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun DeleteMedicalResourcesSample(
-    healthConnectClient: HealthConnectClient,
-    medicationJsonToInsert: String
-) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or create a `MedicalDataSource`
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Insert `MedicalResource`s into the `MedicalDataSource`
-    val medicalResources: List<MedicalResource> =
-        healthConnectClient.upsertMedicalResources(
-            listOf(
-                UpsertMedicalResourceRequest(
-                    medicalDataSource.id,
-                    medicalDataSource.fhirVersion,
-                    medicationJsonToInsert // a valid FHIR json string
-                )
-            )
-        )
-
-    // Delete `MedicalResource`s matching the specified `dataSourceId`, `type` and `fhirResourceId`
-    healthConnectClient.deleteMedicalResources(
-        medicalResources.map { medicalResource: MedicalResource ->
-            MedicalResourceId(
-                dataSourceId = medicalDataSource.id,
-                fhirResourceType = medicalResource.id.fhirResourceType,
-                fhirResourceId = medicalResource.id.fhirResourceId
-            )
-        }
-    )
-}
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-suspend fun DeleteMedicalResourcesByRequestSample(
-    healthConnectClient: HealthConnectClient,
-    medicationJsonToInsert: String
-) {
-    // Ensure `FEATURE_PERSONAL_HEALTH_RECORD` is available before calling PHR apis
-    if (
-        healthConnectClient.features.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) !=
-            FEATURE_STATUS_AVAILABLE
-    ) {
-        return
-    }
-
-    // Get or create a `MedicalDataSource`
-    val medicalDataSource: MedicalDataSource =
-        healthConnectClient.createMedicalDataSource(
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/"),
-                displayName = "Test Data Source",
-                fhirVersion = FhirVersion(4, 0, 1)
-            )
-        )
-
-    // Insert `MedicalResource`s into the `MedicalDataSource`
-    val medicalResources: List<MedicalResource> =
-        healthConnectClient.upsertMedicalResources(
-            listOf(
-                UpsertMedicalResourceRequest(
-                    medicalDataSource.id,
-                    medicalDataSource.fhirVersion,
-                    medicationJsonToInsert // a valid FHIR json string
-                )
-            )
-        )
-
-    // Delete all `MedicalResource`s that are in any pair of provided `dataSourceIds` and
-    // `medicalResourceTypes`
-    healthConnectClient.deleteMedicalResources(
-        DeleteMedicalResourcesRequest(
-            dataSourceIds = setOf(medicalDataSource.id),
-            medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_MEDICATIONS)
-        )
-    )
-}
diff --git a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
index 77844c3..1319296 100644
--- a/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
+++ b/health/connect/connect-client/samples/src/main/java/androidx/health/connect/client/samples/PermissionSamples.kt
@@ -22,12 +22,9 @@
 import androidx.annotation.Sampled
 import androidx.health.connect.client.HealthConnectFeatures
 import androidx.health.connect.client.PermissionController
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
 import androidx.health.connect.client.permission.HealthPermission
 import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_HISTORY
 import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
-import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VACCINES
-import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_WRITE_MEDICAL_DATA
 import androidx.health.connect.client.records.StepsRecord
 
 @Sampled
@@ -104,29 +101,3 @@
         // user denied permission
     }
 }
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@Sampled
-fun RequestMedicalPermissions(features: HealthConnectFeatures, activity: ActivityResultCaller) {
-    // The set of medical permissions to be requested (add additional read permissions as required)
-    val medicalPermissions =
-        setOf(PERMISSION_WRITE_MEDICAL_DATA, PERMISSION_READ_MEDICAL_DATA_VACCINES)
-    val requestPermission =
-        activity.registerForActivityResult(
-            PermissionController.createRequestPermissionResultContract()
-        ) { grantedPermissions: Set<String> ->
-            if (grantedPermissions.containsAll(medicalPermissions)) {
-                // Permissions granted to write health data and read immunizations
-            } else {
-                // User denied permission to write health data and/or read immunizations
-            }
-        }
-
-    if (
-        features.getFeatureStatus(HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD) ==
-            HealthConnectFeatures.FEATURE_STATUS_AVAILABLE
-    ) {
-        // The feature is available, request medical permissions
-        requestPermission.launch(medicalPermissions)
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/AndroidManifest.xml b/health/connect/connect-client/src/androidTest/AndroidManifest.xml
index d8877e8..47aac45 100644
--- a/health/connect/connect-client/src/androidTest/AndroidManifest.xml
+++ b/health/connect/connect-client/src/androidTest/AndroidManifest.xml
@@ -75,23 +75,6 @@
     <uses-permission android:name="android.permission.health.READ_RESTING_HEART_RATE"/>
     <uses-permission android:name="android.permission.health.READ_SKIN_TEMPERATURE"/>
 
-    <!-- Read permissions for PERSONAL HEALTH RECORD. -->
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_CONDITIONS"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_LABORATORY_RESULTS"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_MEDICATIONS"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_PERSONAL_DETAILS"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_PRACTITIONER_DETAILS"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_PREGNANCY"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_PROCEDURES"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_SOCIAL_HISTORY"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_VACCINES"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_VISITS"/>
-    <uses-permission android:name="android.permission.health.READ_MEDICAL_DATA_VITAL_SIGNS"/>
-
-    <!-- Write permissions for PERSONAL HEALTH RECORD. -->
-    <uses-permission android:name="android.permission.health.WRITE_MEDICAL_DATA"/>
-
     <!-- Write permissions for ACTIVITY. -->
     <uses-permission android:name="android.permission.health.WRITE_ACTIVE_CALORIES_BURNED"/>
     <uses-permission android:name="android.permission.health.WRITE_DISTANCE"/>
@@ -140,5 +123,4 @@
     <uses-permission android:name="android.permission.health.WRITE_RESPIRATORY_RATE"/>
     <uses-permission android:name="android.permission.health.WRITE_RESTING_HEART_RATE"/>
     <uses-permission android:name="android.permission.health.WRITE_SKIN_TEMPERATURE"/>
-
 </manifest>
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
index 7cc4aba..c810318 100644
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
+++ b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImplTest.kt
@@ -17,7 +17,6 @@
 package androidx.health.connect.client.impl
 
 import android.content.Context
-import android.net.Uri
 import android.os.Build
 import android.os.ext.SdkExtensions
 import androidx.health.connect.client.HealthConnectClient
@@ -26,20 +25,11 @@
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByDuration
 import androidx.health.connect.client.changes.DeletionChange
 import androidx.health.connect.client.changes.UpsertionChange
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.impl.platform.phr.VaccinesMedicalResourceFactory.CompleteStatus.COMPLETE
-import androidx.health.connect.client.impl.platform.phr.VaccinesMedicalResourceFactory.CompleteStatus.INCOMPLETE
-import androidx.health.connect.client.impl.platform.phr.VaccinesMedicalResourceFactory.createVaccinesUpsertMedicalResourceRequest
 import androidx.health.connect.client.impl.platform.records.SDK_TO_PLATFORM_RECORD_CLASS
 import androidx.health.connect.client.impl.platform.records.SDK_TO_PLATFORM_RECORD_CLASS_EXT_13
 import androidx.health.connect.client.permission.HealthPermission
 import androidx.health.connect.client.readRecord
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_IMMUNIZATION
-import androidx.health.connect.client.records.FhirVersion
 import androidx.health.connect.client.records.HeartRateRecord
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_VACCINES
-import androidx.health.connect.client.records.MedicalResourceId
 import androidx.health.connect.client.records.NutritionRecord
 import androidx.health.connect.client.records.StepsRecord
 import androidx.health.connect.client.records.WeightRecord
@@ -51,11 +41,6 @@
 import androidx.health.connect.client.request.AggregateGroupByPeriodRequest
 import androidx.health.connect.client.request.AggregateRequest
 import androidx.health.connect.client.request.ChangesTokenRequest
-import androidx.health.connect.client.request.CreateMedicalDataSourceRequest
-import androidx.health.connect.client.request.DeleteMedicalResourcesRequest
-import androidx.health.connect.client.request.GetMedicalDataSourcesRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesInitialRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesPageRequest
 import androidx.health.connect.client.request.ReadRecordsRequest
 import androidx.health.connect.client.time.TimeRangeFilter
 import androidx.health.connect.client.units.Energy
@@ -83,7 +68,6 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
 @RunWith(AndroidJUnit4::class)
 @MediumTest
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake")
@@ -97,12 +81,6 @@
         private val ZONE_OFFSET = ZoneOffset.UTC
         private val ZONE_ID = ZoneId.of(ZONE_OFFSET.id)
 
-        private const val MEDICAL_DATA_SOURCE_DISPLAY_NAME = "Data source test app"
-        private val FHIR_BASE_URI = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/")
-        // lazy is needed, otherwise the object would be constructed without a check for PHR feature
-        // availability, which would lead to a crash.
-        private val FHIR_VERSION_4_0_1 by lazy { FhirVersion(4, 0, 1) }
-
         fun getAllRecordPermissions(): Array<String> {
             val permissions: HashSet<String> = HashSet()
 
@@ -118,10 +96,6 @@
                 }
             }
 
-            if (isPersonalHealthRecordFeatureAvailableInPlatform()) {
-                permissions.addAll(HealthPermission.ALL_PERSONAL_HEALTH_RECORD_PERMISSIONS)
-            }
-
             return permissions.toTypedArray()
         }
     }
@@ -144,16 +118,12 @@
         for (recordType in SDK_TO_PLATFORM_RECORD_CLASS.keys) {
             healthConnectClient.deleteRecords(recordType, TimeRangeFilter.after(Instant.EPOCH))
         }
+
         if (SdkExtensions.getExtensionVersion(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) >= 13) {
             for (recordType in SDK_TO_PLATFORM_RECORD_CLASS_EXT_13.keys) {
                 healthConnectClient.deleteRecords(recordType, TimeRangeFilter.after(Instant.EPOCH))
             }
         }
-        if (isPersonalHealthRecordFeatureAvailableInPlatform()) {
-            healthConnectClient
-                .getMedicalDataSources(GetMedicalDataSourcesRequest(listOf(context.packageName)))
-                .forEach { healthConnectClient.deleteMedicalDataSourceWithData(it.id) }
-        }
     }
 
     @Test
@@ -827,10 +797,6 @@
 
     @Test
     fun getGrantedPermissions() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
         assertThat(healthConnectClient.permissionController.getGrantedPermissions())
             .containsExactlyElementsIn(getAllRecordPermissions())
     }
@@ -953,321 +919,6 @@
             .containsExactly(DataOrigin(packageName = context.packageName))
     }
 
-    @Test
-    fun createMedicalDataSource_thenGetByRequest_expectSuccess() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-
-        // Create a MedicalDataSource
-        val createMedicalDataSourceResponse =
-            healthConnectClient.createMedicalDataSource(
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION_4_0_1
-                )
-            )
-        assertThat(createMedicalDataSourceResponse.id).isNotEmpty()
-
-        // Retrieve newly created data source by request and verify retrieved == created response
-        val getMedicalDataSourcesByRequestResponse =
-            healthConnectClient.getMedicalDataSources(
-                GetMedicalDataSourcesRequest(listOf(createMedicalDataSourceResponse.packageName))
-            )
-        assertThat(getMedicalDataSourcesByRequestResponse)
-            .containsExactly(createMedicalDataSourceResponse)
-    }
-
-    @Test
-    fun createMedicalDataSource_thenGetByIds_expectSuccess() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-
-        // Create a MedicalDataSource
-        val createMedicalDataSourceResponse =
-            healthConnectClient.createMedicalDataSource(
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION_4_0_1
-                )
-            )
-        assertThat(createMedicalDataSourceResponse.id).isNotEmpty()
-
-        // Retrieve newly created data source by ID and verify retrieved == created response
-        val getMedicalDataSourcesByIdsResponse =
-            healthConnectClient.getMedicalDataSources(listOf(createMedicalDataSourceResponse.id))
-        assertThat(getMedicalDataSourcesByIdsResponse).hasSize(1)
-        assertThat(getMedicalDataSourcesByIdsResponse)
-            .containsExactly(createMedicalDataSourceResponse)
-    }
-
-    @Test
-    fun createMedicalDataSource_thenDelete_expectSuccess() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-
-        // Create a MedicalDataSource
-        val createMedicalDataSourceResponse =
-            healthConnectClient.createMedicalDataSource(
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION_4_0_1
-                )
-            )
-        assertThat(createMedicalDataSourceResponse.id).isNotEmpty()
-
-        // Delete the newly created data source
-        healthConnectClient.deleteMedicalDataSourceWithData(createMedicalDataSourceResponse.id)
-
-        // Verify newly created data source does not exist
-        val getMedicalDataSourcesByIdsResponse =
-            healthConnectClient.getMedicalDataSources(listOf(createMedicalDataSourceResponse.id))
-        assertThat(getMedicalDataSourcesByIdsResponse).hasSize(0)
-    }
-
-    @Test
-    fun upsertNewMedicalResourcesThenReadByRequest_expectCorrectResponse() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-        val dataSourceId =
-            healthConnectClient
-                .createMedicalDataSource(
-                    CreateMedicalDataSourceRequest(
-                        fhirBaseUri = FHIR_BASE_URI,
-                        displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                        fhirVersion = FHIR_VERSION_4_0_1
-                    )
-                )
-                .id
-        val requests =
-            listOf(
-                createVaccinesUpsertMedicalResourceRequest(
-                    dataSourceId = dataSourceId,
-                    fhirResourceId = "immunization-101"
-                ),
-                createVaccinesUpsertMedicalResourceRequest(
-                    dataSourceId = dataSourceId,
-                    fhirResourceId = "immunization-102"
-                )
-            )
-
-        // insert a new MedicalResource
-        val upsertResponse = healthConnectClient.upsertMedicalResources(requests)
-
-        assertThat(upsertResponse).hasSize(2)
-        assertThat(upsertResponse.map { it.fhirResource.data }).isEqualTo(requests.map { it.data })
-
-        // read the first MedicalResource with ReadMedicalResourcesInitialRequest
-        val firstPageResponse =
-            healthConnectClient.readMedicalResources(
-                ReadMedicalResourcesInitialRequest(
-                    MEDICAL_RESOURCE_TYPE_VACCINES,
-                    setOf(dataSourceId),
-                    pageSize = 1
-                )
-            )
-
-        assertThat(firstPageResponse.medicalResources).containsExactly(upsertResponse[0])
-        assertThat(firstPageResponse.remainingCount).isEqualTo(1)
-        assertThat(firstPageResponse.nextPageToken).isNotNull()
-
-        // read the second MedicalResource with ReadMedicalResourcesPageRequest
-        val secondPageResponse =
-            healthConnectClient.readMedicalResources(
-                ReadMedicalResourcesPageRequest(firstPageResponse.nextPageToken!!)
-            )
-
-        assertThat(secondPageResponse.medicalResources).containsExactly(upsertResponse[1])
-        assertThat(secondPageResponse.remainingCount).isEqualTo(0)
-        assertThat(secondPageResponse.nextPageToken).isNull()
-    }
-
-    @Test
-    fun upsertNewMedicalResourcesThenReadByIds_expectCorrectResponse() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-        val dataSourceId =
-            healthConnectClient
-                .createMedicalDataSource(
-                    CreateMedicalDataSourceRequest(
-                        fhirBaseUri = FHIR_BASE_URI,
-                        displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                        fhirVersion = FHIR_VERSION_4_0_1
-                    )
-                )
-                .id
-        val fhirResourceId = "immunization-101"
-        val requests =
-            listOf(
-                createVaccinesUpsertMedicalResourceRequest(
-                    dataSourceId = dataSourceId,
-                    fhirResourceId = fhirResourceId
-                )
-            )
-
-        // insert a new MedicalResource
-        val upsertResponse = healthConnectClient.upsertMedicalResources(requests)
-
-        assertThat(upsertResponse).hasSize(1)
-        assertThat(upsertResponse[0].fhirResource.data).isEqualTo(requests[0].data)
-
-        // read back the MedicalResource
-        val medicalResources =
-            healthConnectClient.readMedicalResources(
-                listOf(
-                    MedicalResourceId(
-                        dataSourceId = dataSourceId,
-                        fhirResourceType = FHIR_RESOURCE_TYPE_IMMUNIZATION,
-                        fhirResourceId = fhirResourceId
-                    )
-                )
-            )
-
-        assertThat(medicalResources).isEqualTo(upsertResponse)
-    }
-
-    @Test
-    fun upsertExistingMedicalResourcesThenReadByIds_expectCorrectResponse() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-        val dataSourceId =
-            healthConnectClient
-                .createMedicalDataSource(
-                    CreateMedicalDataSourceRequest(
-                        fhirBaseUri = FHIR_BASE_URI,
-                        displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                        fhirVersion = FHIR_VERSION_4_0_1
-                    )
-                )
-                .id
-        val fhirResourceId = "immunization-101"
-        val insertRequests =
-            listOf(
-                createVaccinesUpsertMedicalResourceRequest(
-                    dataSourceId = dataSourceId,
-                    fhirResourceId = fhirResourceId,
-                    completeStatus = COMPLETE
-                )
-            )
-
-        // insert a new MedicalResource
-        val insertResponse = healthConnectClient.upsertMedicalResources(insertRequests)
-
-        assertThat(insertResponse).hasSize(1)
-        assertThat(insertResponse[0].fhirResource.data).isEqualTo(insertRequests[0].data)
-
-        // update the inserted MedicalResource
-        val updateRequests =
-            listOf(
-                createVaccinesUpsertMedicalResourceRequest(
-                    dataSourceId = dataSourceId,
-                    fhirResourceId = fhirResourceId,
-                    completeStatus = INCOMPLETE // change this from COMPLETE => INCOMPLETE
-                )
-            )
-
-        val updateResponse = healthConnectClient.upsertMedicalResources(updateRequests)
-        assertThat(updateResponse).hasSize(1)
-        assertThat(updateResponse[0].fhirResource.data).isEqualTo(updateRequests[0].data)
-        assertThat(insertResponse[0].id).isEqualTo(updateResponse[0].id)
-
-        // read back the MedicalResource
-        val medicalResources =
-            healthConnectClient.readMedicalResources(
-                listOf(
-                    MedicalResourceId(
-                        dataSourceId = dataSourceId,
-                        fhirResourceType = FHIR_RESOURCE_TYPE_IMMUNIZATION,
-                        fhirResourceId = fhirResourceId
-                    )
-                )
-            )
-
-        assertThat(medicalResources).isEqualTo(updateResponse)
-    }
-
-    @Test
-    fun insertMedicalResourcesThenDeleteByIds_expectSuccessfulDeletion() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-        val dataSourceId =
-            healthConnectClient
-                .createMedicalDataSource(
-                    CreateMedicalDataSourceRequest(
-                        fhirBaseUri = FHIR_BASE_URI,
-                        displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                        fhirVersion = FHIR_VERSION_4_0_1
-                    )
-                )
-                .id
-        val fhirResourceId = "immunization-101"
-        val requests =
-            listOf(
-                createVaccinesUpsertMedicalResourceRequest(
-                    dataSourceId = dataSourceId,
-                    fhirResourceId = fhirResourceId
-                )
-            )
-        val insertResponse = healthConnectClient.upsertMedicalResources(requests)
-
-        healthConnectClient.deleteMedicalResources(insertResponse.map { it.id })
-
-        val medicalResources =
-            healthConnectClient.readMedicalResources(insertResponse.map { it.id })
-        assertThat(medicalResources).isEmpty()
-    }
-
-    @Test
-    fun insertMedicalResourcesThenDeleteByRequest_expectSuccessfulDeletion() = runTest {
-        assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-        val dataSourceId =
-            healthConnectClient
-                .createMedicalDataSource(
-                    CreateMedicalDataSourceRequest(
-                        fhirBaseUri = FHIR_BASE_URI,
-                        displayName = MEDICAL_DATA_SOURCE_DISPLAY_NAME,
-                        fhirVersion = FHIR_VERSION_4_0_1
-                    )
-                )
-                .id
-        val fhirResourceId = "immunization-101"
-        val requests =
-            listOf(
-                createVaccinesUpsertMedicalResourceRequest(
-                    dataSourceId = dataSourceId,
-                    fhirResourceId = fhirResourceId
-                )
-            )
-        val insertResponse = healthConnectClient.upsertMedicalResources(requests)
-
-        healthConnectClient.deleteMedicalResources(
-            DeleteMedicalResourcesRequest(setOf(dataSourceId))
-        )
-
-        val medicalResources =
-            healthConnectClient.readMedicalResources(insertResponse.map { it.id })
-        assertThat(medicalResources).isEmpty()
-    }
-
     private val Int.seconds: Duration
         get() = Duration.ofSeconds(this.toLong())
 
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/phr/PhrConstants.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/phr/PhrConstants.kt
deleted file mode 100644
index 7844310..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/phr/PhrConstants.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.phr
-
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.records.FhirVersion
-
-// Note: lazy must be used to avoid crashes when tests are run on a device where PHR is not
-// available. In tests where these constants are used, assumeTrue() is used to make sure PHR is
-// available.
-internal object PhrConstants {
-    @OptIn(ExperimentalPersonalHealthRecordApi::class)
-    val FHIR_VERSION_4_0_1 by lazy { FhirVersion.Companion.parseFhirVersion("4.0.1") }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/phr/VaccinesMedicalResourceFactory.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/phr/VaccinesMedicalResourceFactory.kt
deleted file mode 100644
index 60caded..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/phr/VaccinesMedicalResourceFactory.kt
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.phr
-
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.impl.platform.phr.PhrConstants.FHIR_VERSION_4_0_1
-import androidx.health.connect.client.impl.platform.phr.VaccinesMedicalResourceFactory.CompleteStatus.COMPLETE
-import androidx.health.connect.client.request.UpsertMedicalResourceRequest
-import org.json.JSONObject
-
-internal object VaccinesMedicalResourceFactory {
-    private val FHIR_RESOURCE_JSON_DATA_IMMUNIZATIONS =
-        JSONObject(
-            """
-            {
-              "resourceType": "Immunization",
-              "id": "immunization-1",
-              "status": "completed",
-              "vaccineCode": {
-                "coding": [
-                  {
-                    "system": "http://hl7.org/fhir/sid/cvx",
-                    "code": "115"
-                  },
-                  {
-                    "system": "http://hl7.org/fhir/sid/ndc",
-                    "code": "58160-842-11"
-                  }
-                ],
-                "text": "Tdap"
-              },
-              "patient": {
-                "reference": "Patient/patient_1",
-                "display": "Example, Anne"
-              },
-              "encounter": {
-                "reference": "Encounter/encounter_unk",
-                "display": "GP Visit"
-              },
-              "occurrenceDateTime": "2018-05-21",
-              "primarySource": true,
-              "manufacturer": {
-                "display": "Sanofi Pasteur"
-              },
-              "lotNumber": "1",
-              "site": {
-                "coding": [
-                  {
-                    "system": "http://terminology.hl7.org/CodeSystem/v3-ActSite",
-                    "code": "LA",
-                    "display": "Left Arm"
-                  }
-                ],
-                "text": "Left Arm"
-              },
-              "route": {
-                "coding": [
-                  {
-                    "system": "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration",
-                    "code": "IM",
-                    "display": "Injection, intramuscular"
-                  }
-                ],
-                "text": "Injection, intramuscular"
-              },
-              "doseQuantity": {
-                "value": 0.5,
-                "unit": "mL"
-              },
-              "performer": [
-                {
-                  "function": {
-                    "coding": [
-                      {
-                        "system": "http://terminology.hl7.org/CodeSystem/v2-0443",
-                        "code": "AP",
-                        "display": "Administering Provider"
-                      }
-                    ],
-                    "text": "Administering Provider"
-                  },
-                  "actor": {
-                    "reference": "Practitioner/practitioner_1",
-                    "type": "Practitioner",
-                    "display": "Dr Maria Hernandez"
-                  }
-                }
-              ]
-            }"""
-                .trimIndent()
-        )
-
-    @OptIn(ExperimentalPersonalHealthRecordApi::class)
-    fun createVaccinesUpsertMedicalResourceRequest(
-        dataSourceId: String,
-        fhirResourceId: String? = null,
-        completeStatus: CompleteStatus = COMPLETE
-    ): UpsertMedicalResourceRequest {
-        val data =
-            FHIR_RESOURCE_JSON_DATA_IMMUNIZATIONS.apply {
-                    putOpt("id", fhirResourceId)
-                    put("status", completeStatus.stringValue)
-                }
-                .toString()
-        return UpsertMedicalResourceRequest(dataSourceId, FHIR_VERSION_4_0_1, data)
-    }
-
-    enum class CompleteStatus(internal val stringValue: String) {
-        COMPLETE("complete"),
-        INCOMPLETE("incomplete")
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/FhirResourceTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/FhirResourceTest.kt
deleted file mode 100644
index 0f0c663..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/FhirResourceTest.kt
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.records
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.records.FhirResource
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_PATIENT
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class FhirResourceTest {
-
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun validFhirResource_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                FhirResource(type = FHIR_RESOURCE_TYPE_PATIENT, id = "id1", data = "{}"),
-                FhirResource(type = FHIR_RESOURCE_TYPE_PATIENT, id = "id1", data = "{}")
-            )
-            .addEqualityGroup(
-                FhirResource(type = FHIR_RESOURCE_TYPE_PATIENT, id = "id2", data = "{}")
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val fhirResource = FhirResource(type = FHIR_RESOURCE_TYPE_PATIENT, id = "id1", data = "{}")
-
-        val toString = fhirResource.toString()
-
-        assertThat(toString).contains("(type=9, id=id1, data={})")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformFhirResource_expectCorrectConversion() {
-        val sdk = FhirResource(type = FHIR_RESOURCE_TYPE_PATIENT, id = "id1", data = "{}")
-
-        assertThat(sdk.platformFhirResource)
-            .isEqualTo(
-                PlatformFhirResourceBuilder(
-                        PlatformFhirResource.FHIR_RESOURCE_TYPE_PATIENT,
-                        "id1",
-                        "{}"
-                    )
-                    .build()
-            )
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/FhirVersionTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/FhirVersionTest.kt
deleted file mode 100644
index 3a8ada6..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/FhirVersionTest.kt
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.records
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.records.FhirVersion
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.assertThrows
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@ExperimentalPersonalHealthRecordApi
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class FhirVersionTest {
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun compareTo_sameVersion_returnsZero() {
-        val version1 = FhirVersion(1, 0, 0)
-        val version2 = FhirVersion(1, 0, 0)
-
-        assertThat(version1.compareTo(version2)).isEqualTo(0)
-        assertThat(version2.compareTo(version1)).isEqualTo(0)
-    }
-
-    @Test
-    fun compareTo_differentMajor_returnsCorrectValue() {
-        val version1 = FhirVersion(2, 0, 0)
-        val version2 = FhirVersion(1, 0, 0)
-
-        assertThat(version1.compareTo(version2)).isGreaterThan(0)
-        assertThat(version2.compareTo(version1)).isLessThan(0)
-    }
-
-    @Test
-    fun compareTo_differentMinor_returnsCorrectValue() {
-        val version1 = FhirVersion(1, 1, 0)
-        val version2 = FhirVersion(1, 0, 0)
-
-        assertThat(version1.compareTo(version2)).isGreaterThan(0)
-        assertThat(version2.compareTo(version1)).isLessThan(0)
-    }
-
-    @Test
-    fun compareTo_differentPatch_returnsCorrectValue() {
-        val version1 = FhirVersion(1, 0, 1)
-        val version2 = FhirVersion(1, 0, 0)
-
-        assertThat(version1.compareTo(version2)).isGreaterThan(0)
-        assertThat(version2.compareTo(version1)).isLessThan(0)
-    }
-
-    @Test
-    fun validFhirVersion_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                FhirVersion(major = 1, minor = 2, patch = 3),
-                FhirVersion(major = 1, minor = 2, patch = 3)
-            )
-            .addEqualityGroup(FhirVersion(major = 1, minor = 2, patch = 5))
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val fhirVersion = FhirVersion(major = 1, minor = 2, patch = 3)
-
-        val fhirVersionString = fhirVersion.toString()
-
-        assertThat(fhirVersionString).contains("(1.2.3)")
-    }
-
-    @Test
-    fun parseFhirVersionString_invalidInput_expectError() {
-        val input = "1.1.a"
-
-        assertThrows(IllegalArgumentException::class.java) { FhirVersion.parseFhirVersion(input) }
-    }
-
-    @Test
-    fun parseFhirVersionString_validInput_expectCorrectFhirVersion() {
-        val input = "1.1.10"
-
-        val fhirVersion = FhirVersion.parseFhirVersion(input)
-
-        assertThat(fhirVersion).isEqualTo(FhirVersion(major = 1, minor = 1, patch = 10))
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformFhirVersion_expectCorrectConversion() {
-        val sdk = FhirVersion(major = 1, minor = 2, patch = 3)
-
-        assertThat(sdk.platformFhirVersion).isEqualTo(PlatformFhirVersion.parseFhirVersion("1.2.3"))
-    }
-
-    @Test
-    fun isSupportedVersion_notSupportedVersion_expectFalse() {
-        val fhirVersion = FhirVersion(major = 1, minor = 2, patch = 3)
-
-        assertThat(fhirVersion.isSupportedFhirVersion()).isFalse()
-    }
-
-    @Test
-    fun isSupportedVersion_supportedVersion_expectTrue() {
-        val fhirVersion = FhirVersion(major = 4, minor = 0, patch = 1)
-
-        assertThat(fhirVersion.isSupportedFhirVersion()).isTrue()
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalDataSourceTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalDataSourceTest.kt
deleted file mode 100644
index d23a407..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalDataSourceTest.kt
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.records
-
-import android.annotation.SuppressLint
-import android.net.Uri
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import java.time.Instant
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@ExperimentalPersonalHealthRecordApi
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class MedicalDataSourceTest {
-
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun validMedicalDataSource_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                MedicalDataSource(
-                    id = ID,
-                    packageName = PACKAGE_NAME,
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                    lastDataUpdateTime = LAST_UPDATED_TIME
-                ),
-                MedicalDataSource(
-                    id = ID,
-                    packageName = PACKAGE_NAME,
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                    lastDataUpdateTime = LAST_UPDATED_TIME
-                )
-            )
-            .addEqualityGroup(
-                MedicalDataSource(
-                    id = ID + "2",
-                    packageName = PACKAGE_NAME,
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                    lastDataUpdateTime = LAST_UPDATED_TIME
-                )
-            )
-            .addEqualityGroup(
-                MedicalDataSource(
-                    id = ID,
-                    packageName = PACKAGE_NAME + "two",
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                    lastDataUpdateTime = LAST_UPDATED_TIME
-                )
-            )
-            .addEqualityGroup(
-                MedicalDataSource(
-                    id = ID,
-                    packageName = PACKAGE_NAME,
-                    fhirBaseUri = FHIR_BASE_URI.buildUpon().appendPath("2/").build(),
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                    lastDataUpdateTime = LAST_UPDATED_TIME
-                )
-            )
-            .testEquals()
-            .addEqualityGroup(
-                MedicalDataSource(
-                    id = ID,
-                    packageName = PACKAGE_NAME,
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = "$DISPLAY_NAME Two",
-                    fhirVersion = FHIR_VERSION,
-                    lastDataUpdateTime = LAST_UPDATED_TIME
-                )
-            )
-            .testEquals()
-            .addEqualityGroup(
-                MedicalDataSource(
-                    id = ID,
-                    packageName = PACKAGE_NAME,
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FhirVersion(4, 3, 0),
-                    lastDataUpdateTime = LAST_UPDATED_TIME
-                )
-            )
-            .testEquals()
-            .addEqualityGroup(
-                MedicalDataSource(
-                    id = ID,
-                    packageName = PACKAGE_NAME,
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                    lastDataUpdateTime =
-                        Instant.parse(
-                            LAST_DATA_UPDATE_TIMESTAMP.replace("2025-01-27", "2025-01-28")
-                        )
-                )
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val medicalDataSource =
-            MedicalDataSource(
-                id = ID,
-                packageName = PACKAGE_NAME,
-                fhirBaseUri = FHIR_BASE_URI,
-                displayName = DISPLAY_NAME,
-                fhirVersion = FHIR_VERSION,
-                lastDataUpdateTime = LAST_UPDATED_TIME
-            )
-
-        val toString = medicalDataSource.toString()
-
-        assertThat(toString).contains("id=testid")
-        assertThat(toString).contains("packageName=androidx.health.connect.client")
-        assertThat(toString).contains("fhirBaseUri=https://fhir.com/oauth/api/FHIR/R4/")
-        assertThat(toString).contains("displayName=Test Data Source")
-        assertThat(toString).contains("fhirVersion=FhirVersion")
-        assertThat(toString).contains("(4.0.1)")
-        assertThat(toString).contains("lastDataUpdateTime=$LAST_DATA_UPDATE_TIMESTAMP")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformMedicalDataSource_expectCorrectConversion() {
-        val medicalDataSource =
-            MedicalDataSource(
-                id = ID,
-                packageName = PACKAGE_NAME,
-                fhirBaseUri = FHIR_BASE_URI,
-                displayName = DISPLAY_NAME,
-                fhirVersion = FHIR_VERSION,
-                lastDataUpdateTime = LAST_UPDATED_TIME
-            )
-
-        val platformMedicalDataSource = medicalDataSource.platformMedicalDataSource
-
-        assertThat(platformMedicalDataSource)
-            .isEqualTo(
-                PlatformMedicalDataSourceBuilder(
-                        ID,
-                        PACKAGE_NAME,
-                        FHIR_BASE_URI,
-                        DISPLAY_NAME,
-                        FHIR_VERSION.platformFhirVersion
-                    )
-                    .setLastDataUpdateTime(LAST_UPDATED_TIME)
-                    .build()
-            )
-    }
-
-    companion object {
-        private const val ID = "testid"
-        private const val PACKAGE_NAME = "androidx.health.connect.client"
-        private const val DISPLAY_NAME = "Test Data Source"
-        private const val LAST_DATA_UPDATE_TIMESTAMP = "2025-01-27T08:55:29.550677Z"
-        private val FHIR_BASE_URI = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/")
-        private val LAST_UPDATED_TIME = Instant.parse(LAST_DATA_UPDATE_TIMESTAMP)
-        private val FHIR_VERSION: FhirVersion by lazy { FhirVersion(4, 0, 1) }
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalResourceIdTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalResourceIdTest.kt
deleted file mode 100644
index 8cd022c..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalResourceIdTest.kt
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.records
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_IMMUNIZATION
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_PATIENT
-import androidx.health.connect.client.records.MedicalResourceId
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class MedicalResourceIdTest {
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun validMedicalResourceId_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                MedicalResourceId(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_RESOURCE_TYPE_PATIENT,
-                    "fhir_rs_id_1"
-                ),
-                MedicalResourceId(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_RESOURCE_TYPE_PATIENT,
-                    "fhir_rs_id_1"
-                )
-            )
-            .addEqualityGroup(
-                MedicalResourceId(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_RESOURCE_TYPE_PATIENT,
-                    "fhir_rs_id_2"
-                )
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val medicalResourceId =
-            MedicalResourceId(
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_RESOURCE_TYPE_PATIENT,
-                "fhir_rs_id_1"
-            )
-
-        val toString = medicalResourceId.toString()
-
-        assertThat(toString)
-            .contains(
-                "(dataSourceId=3008de9d-8c24-4591-b58c-43eaf30fa168, fhirResourceType=9, fhirResourceId=fhir_rs_id_1)"
-            )
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformMedicalResourceId_expectCorrectConversion() {
-        val sdk =
-            MedicalResourceId(
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_RESOURCE_TYPE_PATIENT,
-                "fhir_rs_id_1"
-            )
-
-        assertThat(sdk.platformMedicalResourceId)
-            .isEqualTo(
-                PlatformMedicalResourceId(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_RESOURCE_TYPE_PATIENT,
-                    "fhir_rs_id_1"
-                )
-            )
-    }
-
-    @Test
-    fun fromFhirReference_validReference() {
-        val medicalResourceId =
-            MedicalResourceId.fromFhirReference(
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                "Immunization/034-AB16.0"
-            )
-
-        assertThat(medicalResourceId)
-            .isEqualTo(
-                MedicalResourceId(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_RESOURCE_TYPE_IMMUNIZATION,
-                    "034-AB16.0"
-                )
-            )
-    }
-
-    companion object {
-        private const val MEDICAL_DATA_SOURCE_ID_STRING = "3008de9d-8c24-4591-b58c-43eaf30fa168"
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalResourceTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalResourceTest.kt
deleted file mode 100644
index 079afb4..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/records/MedicalResourceTest.kt
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.records
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.records.FhirResource
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_PATIENT
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_MEDICATIONS
-import androidx.health.connect.client.records.MedicalResourceId
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@ExperimentalPersonalHealthRecordApi
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class MedicalResourceTest {
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun validMedicalResource_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                MedicalResource(
-                    MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-                    MEDICAL_RESOURCE_ID,
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_VERSION_4_0_1,
-                    FHIR_RESOURCE_EMPTY
-                ),
-                MedicalResource(
-                    MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-                    MEDICAL_RESOURCE_ID,
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_VERSION_4_0_1,
-                    FHIR_RESOURCE_EMPTY
-                )
-            )
-            .addEqualityGroup(
-                MedicalResource(
-                    MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-                    MEDICAL_RESOURCE_ID,
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FhirVersion.parseFhirVersion("4.3.0"),
-                    FHIR_RESOURCE_EMPTY
-                )
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val medicalResource =
-            MedicalResource(
-                MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-                MEDICAL_RESOURCE_ID,
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_VERSION_4_0_1,
-                FHIR_RESOURCE_EMPTY
-            )
-
-        val toString = medicalResource.toString()
-
-        assertThat(toString).contains("type=9")
-        assertThat(toString).contains("dataSourceId=3008de9d-8c24-4591-b58c-43eaf30fa168")
-        assertThat(toString).contains("fhirVersion=FhirVersion")
-        assertThat(toString).contains("(4.0.1)")
-        assertThat(toString).contains("fhirResource=FhirResource")
-        assertThat(toString).contains("(type=9, id=id1, data={})")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformMedicalResource_expectCorrectConversion() {
-        val sdk =
-            MedicalResource(
-                MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-                MEDICAL_RESOURCE_ID,
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_VERSION_4_0_1,
-                FHIR_RESOURCE_EMPTY
-            )
-
-        val platform = sdk.platformMedicalResource
-
-        assertThat(platform)
-            .isEqualTo(
-                PlatformMedicalResourceBuilder(
-                        PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-                        MEDICAL_DATA_SOURCE_ID_STRING,
-                        FHIR_VERSION_4_0_1.platformFhirVersion,
-                        FHIR_RESOURCE_EMPTY.platformFhirResource
-                    )
-                    .build()
-            )
-    }
-
-    companion object {
-        private const val MEDICAL_DATA_SOURCE_ID_STRING = "3008de9d-8c24-4591-b58c-43eaf30fa168"
-        private val MEDICAL_RESOURCE_ID by lazy {
-            // lazy is needed, otherwise a MedicalResourceId would be constructed before the
-            // assumeTrue in setUp() is called. Same goes for other fields in this companion object.
-            MedicalResourceId(
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_RESOURCE_TYPE_PATIENT,
-                "fhir_rs_id"
-            )
-        }
-        private val FHIR_VERSION_4_0_1 by lazy { FhirVersion.Companion.parseFhirVersion("4.0.1") }
-        private val FHIR_RESOURCE_EMPTY by lazy {
-            FhirResource(FHIR_RESOURCE_TYPE_PATIENT, "id1", "{}")
-        }
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/CreateMedicalDataSourceRequestTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/CreateMedicalDataSourceRequestTest.kt
deleted file mode 100644
index 65a8f8e..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/CreateMedicalDataSourceRequestTest.kt
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.requests
-
-import android.annotation.SuppressLint
-import android.net.Uri
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.impl.platform.request.PlatformCreateMedicalDataSourceRequestBuilder
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.request.CreateMedicalDataSourceRequest
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@ExperimentalPersonalHealthRecordApi
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class CreateMedicalDataSourceRequestTest {
-
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun validCreateMedicalDataSourceRequest_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                ),
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                )
-            )
-            .addEqualityGroup(
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI.buildUpon().appendPath("2/").build(),
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FHIR_VERSION,
-                )
-            )
-            .addEqualityGroup(
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = "$DISPLAY_NAME Two",
-                    fhirVersion = FHIR_VERSION,
-                )
-            )
-            .addEqualityGroup(
-                CreateMedicalDataSourceRequest(
-                    fhirBaseUri = FHIR_BASE_URI,
-                    displayName = DISPLAY_NAME,
-                    fhirVersion = FhirVersion(4, 3, 0),
-                )
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val createMedicalDataSourceRequest =
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = FHIR_BASE_URI,
-                displayName = DISPLAY_NAME,
-                fhirVersion = FHIR_VERSION,
-            )
-
-        val toString = createMedicalDataSourceRequest.toString()
-
-        assertThat(toString).contains("fhirBaseUri=https://fhir.com/oauth/api/FHIR/R4/")
-        assertThat(toString).contains("displayName=Test Data Source")
-        assertThat(toString).contains("fhirVersion=FhirVersion")
-        assertThat(toString).contains("(4.0.1)")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformCreateMedicalDataSourceRequest_expectCorrectConversion() {
-        val createMedicalDataSourceRequest =
-            CreateMedicalDataSourceRequest(
-                fhirBaseUri = FHIR_BASE_URI,
-                displayName = DISPLAY_NAME,
-                fhirVersion = FHIR_VERSION,
-            )
-
-        val platformCreateMedicalDataSourceRequest =
-            createMedicalDataSourceRequest.platformCreateMedicalDataSourceRequest
-
-        assertThat(platformCreateMedicalDataSourceRequest)
-            .isEqualTo(
-                PlatformCreateMedicalDataSourceRequestBuilder(
-                        FHIR_BASE_URI,
-                        DISPLAY_NAME,
-                        FHIR_VERSION.platformFhirVersion,
-                    )
-                    .build()
-            )
-    }
-
-    companion object {
-        private const val DISPLAY_NAME = "Test Data Source"
-        private val FHIR_BASE_URI = Uri.parse("https://fhir.com/oauth/api/FHIR/R4/")
-        private val FHIR_VERSION: FhirVersion by lazy { FhirVersion(4, 0, 1) }
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/DeleteMedicalResourcesRequestTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/DeleteMedicalResourcesRequestTest.kt
deleted file mode 100644
index 88058be..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/DeleteMedicalResourcesRequestTest.kt
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.health.connect.client.impl.platform.requests
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.impl.platform.request.PlatformDeleteMedicalResourcesRequestBuilder
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_CONDITIONS
-import androidx.health.connect.client.request.DeleteMedicalResourcesRequest
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.assertThrows
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class DeleteMedicalResourcesRequestTest {
-
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun validDeleteMedicalResourcesRequest_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                DeleteMedicalResourcesRequest(
-                    dataSourceIds = TEST_DATA_SOURCE_IDS,
-                    medicalResourceTypes = TEST_MEDICAL_RESOURCE_TYPES
-                ),
-                DeleteMedicalResourcesRequest(
-                    dataSourceIds = TEST_DATA_SOURCE_IDS,
-                    medicalResourceTypes = TEST_MEDICAL_RESOURCE_TYPES
-                )
-            )
-            .addEqualityGroup(DeleteMedicalResourcesRequest(dataSourceIds = TEST_DATA_SOURCE_IDS_2))
-            .addEqualityGroup(
-                DeleteMedicalResourcesRequest(
-                    medicalResourceTypes =
-                        TEST_MEDICAL_RESOURCE_TYPES + MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES
-                )
-            )
-            .addEqualityGroup(
-                DeleteMedicalResourcesRequest(
-                    medicalResourceTypes = setOf(MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES)
-                )
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val deleteMedicalResourcesRequest =
-            DeleteMedicalResourcesRequest(
-                dataSourceIds = TEST_DATA_SOURCE_IDS,
-                medicalResourceTypes = TEST_MEDICAL_RESOURCE_TYPES
-            )
-
-        val toString = deleteMedicalResourcesRequest.toString()
-
-        assertThat(toString).contains("dataSourceIds=$TEST_DATA_SOURCE_IDS")
-        assertThat(toString).contains("medicalResourceTypes=$TEST_MEDICAL_RESOURCE_TYPES")
-    }
-
-    @Test
-    fun invalidRequest_throwsException() {
-        assertThrows(IllegalArgumentException::class.java) {
-            DeleteMedicalResourcesRequest(emptySet(), emptySet())
-        }
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformDeleteMedicalResourcesRequest_expectCorrectConversion() {
-        val deleteMedicalResourcesRequest =
-            DeleteMedicalResourcesRequest(
-                dataSourceIds = TEST_DATA_SOURCE_IDS,
-                medicalResourceTypes = TEST_MEDICAL_RESOURCE_TYPES
-            )
-
-        val platformDeleteMedicalResourcesRequest =
-            deleteMedicalResourcesRequest.platformReadMedicalResourcesRequest
-
-        assertThat(platformDeleteMedicalResourcesRequest)
-            .isEqualTo(
-                PlatformDeleteMedicalResourcesRequestBuilder()
-                    .apply { TEST_DATA_SOURCE_IDS.forEach { addDataSourceId(it) } }
-                    .apply { TEST_MEDICAL_RESOURCE_TYPES.forEach { addMedicalResourceType(it) } }
-                    .build()
-            )
-    }
-
-    companion object {
-        private val TEST_DATA_SOURCE_IDS = setOf("3008de9d-8c24-4591-b58c-43eaf30fa168")
-        private val TEST_DATA_SOURCE_IDS_2 = setOf("ca761232-ed42-11ce-bacd-00aa0057b223")
-        private val TEST_MEDICAL_RESOURCE_TYPES = setOf(MEDICAL_RESOURCE_TYPE_CONDITIONS)
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/GetMedicalDataSourcesRequestTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/GetMedicalDataSourcesRequestTest.kt
deleted file mode 100644
index d8f4545..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/GetMedicalDataSourcesRequestTest.kt
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.requests
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.impl.platform.request.PlatformGetMedicalDataSourcesRequestBuilder
-import androidx.health.connect.client.request.GetMedicalDataSourcesRequest
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@ExperimentalPersonalHealthRecordApi
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class GetMedicalDataSourcesRequestTest {
-
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun validGetMedicalDataSourcesRequest_equals() {
-        EqualsTester()
-            .addEqualityGroup(
-                GetMedicalDataSourcesRequest(
-                    packageNames = TEST_PACKAGE_NAMES,
-                ),
-                GetMedicalDataSourcesRequest(
-                    packageNames = TEST_PACKAGE_NAMES,
-                )
-            )
-            .addEqualityGroup(
-                GetMedicalDataSourcesRequest(
-                    packageNames = TEST_PACKAGE_NAMES + (TEST_PACKAGE_NAMES.first() + "two"),
-                )
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val getMedicalDataSourcesRequest =
-            GetMedicalDataSourcesRequest(
-                packageNames = TEST_PACKAGE_NAMES,
-            )
-
-        val toString = getMedicalDataSourcesRequest.toString()
-
-        assertThat(toString).contains("packageNames=[androidx.health.connect]")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformGetMedicalDataSourcesRequest_expectCorrectConversion() {
-        val getMedicalDataSourcesRequest =
-            GetMedicalDataSourcesRequest(packageNames = TEST_PACKAGE_NAMES)
-
-        val platformGetMedicalDataSourcesRequest =
-            getMedicalDataSourcesRequest.platformGetMedicalDataSourcesRequest
-
-        assertThat(platformGetMedicalDataSourcesRequest)
-            .isEqualTo(
-                PlatformGetMedicalDataSourcesRequestBuilder()
-                    .apply { TEST_PACKAGE_NAMES.forEach { addPackageName(it) } }
-                    .build()
-            )
-    }
-
-    companion object {
-        private val TEST_PACKAGE_NAMES = listOf("androidx.health.connect")
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/ReadMedicalResourcesInitialRequestTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/ReadMedicalResourcesInitialRequestTest.kt
deleted file mode 100644
index 1ede59f..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/ReadMedicalResourcesInitialRequestTest.kt
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.requests
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.impl.platform.request.PlatformReadMedicalResourcesInitialRequestBuilder
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_CONDITIONS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_VITAL_SIGNS
-import androidx.health.connect.client.request.ReadMedicalResourcesInitialRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesRequest.Companion.DEFAULT_PAGE_SIZE
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.assertThrows
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class ReadMedicalResourcesInitialRequestTest {
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun equalsTests() {
-        EqualsTester()
-            .addEqualityGroup(
-                ReadMedicalResourcesInitialRequest(
-                    MEDICAL_RESOURCE_TYPE_CONDITIONS,
-                    MEDICAL_DATA_SOURCE_IDS_1,
-                    DEFAULT_PAGE_SIZE
-                ),
-                ReadMedicalResourcesInitialRequest(
-                    MEDICAL_RESOURCE_TYPE_CONDITIONS,
-                    MEDICAL_DATA_SOURCE_IDS_1,
-                    DEFAULT_PAGE_SIZE
-                ),
-                ReadMedicalResourcesInitialRequest(
-                    MEDICAL_RESOURCE_TYPE_CONDITIONS,
-                    MEDICAL_DATA_SOURCE_IDS_1
-                    // page size is not specified, DEFAULT_PAGE_SIZE should be used, hence it should
-                    // be equal to others in this group
-                )
-            )
-            .addEqualityGroup(
-                ReadMedicalResourcesInitialRequest(
-                    MEDICAL_RESOURCE_TYPE_VITAL_SIGNS, // different type
-                    MEDICAL_DATA_SOURCE_IDS_1,
-                    DEFAULT_PAGE_SIZE
-                )
-            )
-            .addEqualityGroup(
-                ReadMedicalResourcesInitialRequest(
-                    MEDICAL_RESOURCE_TYPE_CONDITIONS,
-                    MEDICAL_DATA_SOURCE_IDS_2, // different data source
-                    DEFAULT_PAGE_SIZE
-                )
-            )
-            .addEqualityGroup(
-                ReadMedicalResourcesInitialRequest(
-                    MEDICAL_RESOURCE_TYPE_CONDITIONS,
-                    MEDICAL_DATA_SOURCE_IDS_1,
-                    DEFAULT_PAGE_SIZE + 1 // different page size
-                )
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun invalidMedicalResourceType_throwsException() {
-        assertThrows(IllegalArgumentException::class.java) {
-            ReadMedicalResourcesInitialRequest(
-                -1, // Invalid medical resource type
-                MEDICAL_DATA_SOURCE_IDS_1,
-                DEFAULT_PAGE_SIZE
-            )
-        }
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val request =
-            ReadMedicalResourcesInitialRequest(
-                MEDICAL_RESOURCE_TYPE_CONDITIONS,
-                MEDICAL_DATA_SOURCE_IDS_1,
-                DEFAULT_PAGE_SIZE
-            )
-
-        val toString = request.toString()
-
-        assertThat(toString).contains("medicalResourceType=$MEDICAL_RESOURCE_TYPE_CONDITIONS")
-        assertThat(toString).contains("medicalDataSourceIds=$MEDICAL_DATA_SOURCE_IDS_1")
-        assertThat(toString).contains("pageSize=$DEFAULT_PAGE_SIZE")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformRequest_expectCorrectConversion() {
-        val sdkRequest =
-            ReadMedicalResourcesInitialRequest(
-                MEDICAL_RESOURCE_TYPE_CONDITIONS,
-                MEDICAL_DATA_SOURCE_IDS_1,
-                DEFAULT_PAGE_SIZE
-            )
-
-        assertThat(sdkRequest.platformReadMedicalResourcesRequest)
-            .isEqualTo(
-                PlatformReadMedicalResourcesInitialRequestBuilder(
-                        android.health.connect.datatypes.MedicalResource
-                            .MEDICAL_RESOURCE_TYPE_CONDITIONS
-                    )
-                    .addDataSourceIds(MEDICAL_DATA_SOURCE_IDS_1)
-                    .setPageSize(DEFAULT_PAGE_SIZE)
-                    .build()
-            )
-    }
-
-    companion object {
-        private val MEDICAL_DATA_SOURCE_IDS_1 = setOf("3008de9d-8c24-4591-b58c-43eaf30fa168")
-        private val MEDICAL_DATA_SOURCE_IDS_2 = setOf("ca761232-ed42-11ce-bacd-00aa0057b223")
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/ReadMedicalResourcesPageRequestTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/ReadMedicalResourcesPageRequestTest.kt
deleted file mode 100644
index e0101e1..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/ReadMedicalResourcesPageRequestTest.kt
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.requests
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.impl.platform.request.PlatformReadMedicalResourcesPageRequestBuilder
-import androidx.health.connect.client.request.ReadMedicalResourcesPageRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesRequest.Companion.DEFAULT_PAGE_SIZE
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class ReadMedicalResourcesPageRequestTest {
-
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun equalsTests() {
-        EqualsTester()
-            .addEqualityGroup(
-                ReadMedicalResourcesPageRequest(PAGE_TOKEN, DEFAULT_PAGE_SIZE),
-                ReadMedicalResourcesPageRequest(PAGE_TOKEN, DEFAULT_PAGE_SIZE),
-                // page size is not specified, DEFAULT_PAGE_SIZE should be used, hence it should
-                // be equal to others in this group
-                ReadMedicalResourcesPageRequest(PAGE_TOKEN)
-            )
-            .addEqualityGroup(
-                ReadMedicalResourcesPageRequest("$PAGE_TOKEN-diff", DEFAULT_PAGE_SIZE)
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val request = ReadMedicalResourcesPageRequest(PAGE_TOKEN, DEFAULT_PAGE_SIZE)
-
-        val toString = request.toString()
-
-        assertThat(toString).contains("pageToken=$PAGE_TOKEN")
-        assertThat(toString).contains("pageSize=$DEFAULT_PAGE_SIZE")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformRequest_expectCorrectConversion() {
-        val sdkRequest = ReadMedicalResourcesPageRequest(PAGE_TOKEN, DEFAULT_PAGE_SIZE)
-
-        assertThat(sdkRequest.platformReadMedicalResourcesRequest)
-            .isEqualTo(
-                PlatformReadMedicalResourcesPageRequestBuilder(PAGE_TOKEN)
-                    .setPageSize(DEFAULT_PAGE_SIZE)
-                    .build()
-            )
-    }
-
-    companion object {
-        private const val PAGE_TOKEN = "pageToken"
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/UpsertMedicalResourceRequestTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/UpsertMedicalResourceRequestTest.kt
deleted file mode 100644
index 892a209..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/requests/UpsertMedicalResourceRequestTest.kt
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.impl.platform.requests
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.impl.platform.request.PlatformUpsertMedicalResourceRequestBuilder
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.request.UpsertMedicalResourceRequest
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@ExperimentalPersonalHealthRecordApi
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class UpsertMedicalResourceRequestTest {
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun equalsTests() {
-        EqualsTester()
-            .addEqualityGroup(
-                UpsertMedicalResourceRequest(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_VERSION_4_0_1,
-                    DATA_JSON
-                ),
-                UpsertMedicalResourceRequest(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_VERSION_4_0_1,
-                    DATA_JSON
-                ),
-            )
-            .addEqualityGroup(
-                UpsertMedicalResourceRequest(
-                    MEDICAL_DATA_SOURCE_ID_STRING,
-                    FHIR_VERSION_4_3_0,
-                    DATA_JSON
-                ),
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val upsertMedicalResourceRequest =
-            UpsertMedicalResourceRequest(
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_VERSION_4_0_1,
-                DATA_JSON
-            )
-
-        val toString = upsertMedicalResourceRequest.toString()
-
-        assertThat(toString).contains("dataSourceId=3008de9d-8c24-4591-b58c-43eaf30fa168")
-        assertThat(toString).contains("data={}")
-        assertThat(toString).contains("fhirVersion=FhirVersion")
-        assertThat(toString).contains("(4.0.1)")
-    }
-
-    @SuppressLint("NewApi") // checked with feature availability check
-    @Test
-    fun toPlatformUpsertMedicalResourceRequest_expectCorrectConversion() {
-        val sdk =
-            UpsertMedicalResourceRequest(
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_VERSION_4_0_1,
-                DATA_JSON
-            )
-
-        assertThat(sdk.platformUpsertMedicalResourceRequest)
-            .isEqualTo(
-                PlatformUpsertMedicalResourceRequestBuilder(
-                        MEDICAL_DATA_SOURCE_ID_STRING,
-                        FHIR_VERSION_4_0_1.platformFhirVersion,
-                        DATA_JSON
-                    )
-                    .build()
-            )
-    }
-
-    companion object {
-        private const val MEDICAL_DATA_SOURCE_ID_STRING = "3008de9d-8c24-4591-b58c-43eaf30fa168"
-        private val FHIR_VERSION_4_0_1 by lazy { FhirVersion.Companion.parseFhirVersion("4.0.1") }
-        private val FHIR_VERSION_4_3_0 by lazy { FhirVersion.Companion.parseFhirVersion("4.3.0") }
-        private const val DATA_JSON = "{}"
-    }
-}
diff --git a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/response/ReadMedicalResourcesResponseTest.kt b/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/response/ReadMedicalResourcesResponseTest.kt
deleted file mode 100644
index 6181fd0..0000000
--- a/health/connect/connect-client/src/androidTest/java/androidx/health/connect/client/impl/platform/response/ReadMedicalResourcesResponseTest.kt
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-@file:OptIn(ExperimentalPersonalHealthRecordApi::class)
-
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.isPersonalHealthRecordFeatureAvailableInPlatform
-import androidx.health.connect.client.records.FhirResource
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_IMMUNIZATION
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_VACCINES
-import androidx.health.connect.client.records.MedicalResourceId
-import androidx.health.connect.client.response.ReadMedicalResourcesResponse
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
-import com.google.common.testing.EqualsTester
-import com.google.common.truth.Truth.assertThat
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@SmallTest
-class ReadMedicalResourcesResponseTest {
-    @Before
-    fun setup() {
-        Assume.assumeTrue(
-            "FEATURE_PERSONAL_HEALTH_RECORD is not available on this device!",
-            isPersonalHealthRecordFeatureAvailableInPlatform()
-        )
-    }
-
-    @Test
-    fun equalsTests() {
-        val medicalResources = listOf(MEDICAL_RESOURCE)
-        EqualsTester()
-            .addEqualityGroup(
-                ReadMedicalResourcesResponse(
-                    listOf(MEDICAL_RESOURCE),
-                    NEXT_PAGE_TOKEN,
-                    REMAINING_COUNT
-                ),
-                ReadMedicalResourcesResponse(
-                    listOf(MEDICAL_RESOURCE),
-                    NEXT_PAGE_TOKEN,
-                    REMAINING_COUNT
-                ),
-            )
-            .addEqualityGroup(
-                // different MedicalResource list
-                ReadMedicalResourcesResponse(
-                    listOf(MEDICAL_RESOURCE, MEDICAL_RESOURCE),
-                    NEXT_PAGE_TOKEN,
-                    REMAINING_COUNT
-                ),
-            )
-            .addEqualityGroup(
-                // different next page token
-                ReadMedicalResourcesResponse(
-                    listOf(MEDICAL_RESOURCE),
-                    NEXT_PAGE_TOKEN + "diff",
-                    REMAINING_COUNT
-                )
-            )
-            .addEqualityGroup(
-                // different remainingCount
-                ReadMedicalResourcesResponse(medicalResources, NEXT_PAGE_TOKEN, REMAINING_COUNT + 1)
-            )
-            .testEquals()
-    }
-
-    @Test
-    fun toString_expectCorrectString() {
-        val medicalResources = listOf(MEDICAL_RESOURCE)
-        val response =
-            ReadMedicalResourcesResponse(medicalResources, NEXT_PAGE_TOKEN, REMAINING_COUNT)
-
-        val toString = response.toString()
-
-        assertThat(toString).contains("ReadMedicalResourcesResponse")
-        assertThat(toString).contains("medicalResources=$medicalResources")
-        assertThat(toString).contains("nextPageToken=$NEXT_PAGE_TOKEN")
-        assertThat(toString).contains("remainingCount=$REMAINING_COUNT")
-    }
-
-    companion object {
-        private const val MEDICAL_DATA_SOURCE_ID_STRING = "3008de9d-8c24-4591-b58c-43eaf30fa168"
-        private val MEDICAL_RESOURCE_ID by lazy {
-            // lazy is needed, otherwise a MedicalResourceId would be constructed before the
-            // assumeTrue in setUp() is called. Same goes for other fields in this companion object.
-            MedicalResourceId(
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_RESOURCE_TYPE_IMMUNIZATION,
-                "fhir_rs_id"
-            )
-        }
-        private val FHIR_VERSION_4_0_1 by lazy { FhirVersion.Companion.parseFhirVersion("4.0.1") }
-        private val FHIR_RESOURCE_EMPTY by lazy {
-            FhirResource(FHIR_RESOURCE_TYPE_IMMUNIZATION, MEDICAL_RESOURCE_ID.fhirResourceId, "{}")
-        }
-        private val MEDICAL_RESOURCE by lazy {
-            MedicalResource(
-                MEDICAL_RESOURCE_TYPE_VACCINES,
-                MEDICAL_RESOURCE_ID,
-                MEDICAL_DATA_SOURCE_ID_STRING,
-                FHIR_VERSION_4_0_1,
-                FHIR_RESOURCE_EMPTY
-            )
-        }
-        private const val NEXT_PAGE_TOKEN = "nextPageToken"
-        private const val REMAINING_COUNT = 1000
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
index a34bdda4..5bf5495 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectClient.kt
@@ -23,49 +23,24 @@
 import android.os.UserManager
 import androidx.annotation.IntDef
 import androidx.annotation.RequiresApi
-import androidx.annotation.RequiresPermission
 import androidx.annotation.RestrictTo
 import androidx.core.content.pm.PackageInfoCompat
-import androidx.health.connect.client.HealthConnectClient.Companion.SDK_AVAILABLE
-import androidx.health.connect.client.HealthConnectClient.Companion.SDK_UNAVAILABLE
-import androidx.health.connect.client.HealthConnectClient.Companion.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED
-import androidx.health.connect.client.HealthConnectClient.Companion.getOrCreate
-import androidx.health.connect.client.HealthConnectClient.Companion.getSdkStatus
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
 import androidx.health.connect.client.aggregate.AggregateMetric
 import androidx.health.connect.client.aggregate.AggregationResult
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByDuration
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.FEATURE_CONSTANT_NAME_PHR
 import androidx.health.connect.client.feature.HealthConnectFeaturesUnavailableImpl
-import androidx.health.connect.client.feature.createExceptionDueToFeatureUnavailable
 import androidx.health.connect.client.impl.HealthConnectClientImpl
 import androidx.health.connect.client.impl.HealthConnectClientUpsideDownImpl
-import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND
-import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VACCINES
-import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_WRITE_MEDICAL_DATA
-import androidx.health.connect.client.records.FhirResource
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResourceId
 import androidx.health.connect.client.records.Record
 import androidx.health.connect.client.records.metadata.DataOrigin
 import androidx.health.connect.client.request.AggregateGroupByDurationRequest
 import androidx.health.connect.client.request.AggregateGroupByPeriodRequest
 import androidx.health.connect.client.request.AggregateRequest
 import androidx.health.connect.client.request.ChangesTokenRequest
-import androidx.health.connect.client.request.CreateMedicalDataSourceRequest
-import androidx.health.connect.client.request.DeleteMedicalResourcesRequest
-import androidx.health.connect.client.request.GetMedicalDataSourcesRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesInitialRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesPageRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesRequest
 import androidx.health.connect.client.request.ReadRecordsRequest
-import androidx.health.connect.client.request.UpsertMedicalResourceRequest
 import androidx.health.connect.client.response.ChangesResponse
 import androidx.health.connect.client.response.InsertRecordsResponse
-import androidx.health.connect.client.response.ReadMedicalResourcesResponse
 import androidx.health.connect.client.response.ReadRecordResponse
 import androidx.health.connect.client.response.ReadRecordsResponse
 import androidx.health.connect.client.time.TimeRangeFilter
@@ -297,12 +272,12 @@
     suspend fun getChangesToken(request: ChangesTokenRequest): String
 
     /**
-     * Retrieves changes in Health Connect, from a specific point in time represented by provided
-     * [changesToken].
+     * Retrieves changes in Android Health Platform, from a specific point in time represented by
+     * provided [changesToken].
      *
      * The response returned may not provide all the changes due to IPC or memory limits, see
-     * [ChangesResponse.hasMore]. Clients can make more api calls to fetch more changes from Health
-     * Connect with updated [ChangesResponse.nextChangesToken].
+     * [ChangesResponse.hasMore]. Clients can make more api calls to fetch more changes from the
+     * Android Health Platform with updated [ChangesResponse.nextChangesToken].
      *
      * Provided [changesToken] may have expired if clients have not synced for extended period of
      * time (such as a month). In this case [ChangesResponse.changesTokenExpired] will be set, and
@@ -326,399 +301,6 @@
      */
     suspend fun getChanges(changesToken: String): ChangesResponse
 
-    /**
-     * Inserts or updates a list of [MedicalResource]s using [UpsertMedicalResourceRequest]s.
-     *
-     * In each request, from [UpsertMedicalResourceRequest.dataSourceId], fhir resource type and
-     * fhir resource ID extracted from [UpsertMedicalResourceRequest.data], a [MedicalResourceId]
-     * will be constructed. If there already exists a [MedicalResource] with that ID in Health
-     * Connect, then it will be updated, otherwise a new [MedicalResource] will be inserted.
-     *
-     * For each [UpsertMedicalResourceRequest], one [MedicalResource] will be returned, regardless
-     * whether it's updated or inserted. The order of the [MedicalResource]s in the returned list
-     * will be the same as their corresponding [UpsertMedicalResourceRequest]s in the input list.
-     *
-     * Note that a [MedicalDataSource] needs to be created using [createMedicalDataSource] before
-     * any [MedicalResource]s can be upserted for this source.
-     *
-     * Regarding permissions:
-     * - Caller must hold [PERMISSION_WRITE_MEDICAL_DATA] in order to call this API, otherwise a
-     *   [SecurityException] will be thrown.
-     * - With [PERMISSION_WRITE_MEDICAL_DATA] granted, caller is permitted to call this API in
-     *   either foreground or background.
-     *
-     * Medical data is represented using the
-     * [Fast Healthcare Interoperability Resources (FHIR)]("https://hl7.org/fhir/") standard. The
-     * FHIR resource provided in [UpsertMedicalResourceRequest.data] is expected to be valid for the
-     * specified [FHIR version][UpsertMedicalResourceRequest.fhirVersion] according to the
-     * [FHIR spec](https://hl7.org/fhir/resourcelist.html). Structural validation checks such as
-     * resource structure, field types and presence of required fields will be performed, however
-     * these checks may not cover all FHIR spec requirements and are dependant on the backing
-     * implementation of Health Connect.
-     *
-     * Data written to Health Connect should be for a single individual only. However, the API
-     * allows for multiple Patient resources to be written to account for the possibility of
-     * multiple Patient resources being present in one individual's medical record.
-     *
-     * Each [UpsertMedicalResourceRequest] also has to meet the following requirements:
-     * - [UpsertMedicalResourceRequest.data] must contain an "id" field and a "resourceType" field.
-     *   The "resource type" must be one of the items in the accepted list of resource types in
-     *   [FhirResource].
-     * - The FHIR resource does not have a "contained" field (holds
-     *   [contained resources](https://build.fhir.org/references.html#contained)).
-     * - [FHIR version][UpsertMedicalResourceRequest.fhirVersion] of each request must match
-     *   [MedicalDataSource.fhirVersion] of [UpsertMedicalResourceRequest.dataSourceId]'s
-     *   corresponding [MedicalDataSource].
-     *
-     * If any request is failed to be processed for any reason, none of the requests will be
-     * inserted or updated in one transaction.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @param requests List of upsert requests.
-     * @throws IllegalArgumentException if any request is failed to be processed for any reason such
-     *   as invalid [UpsertMedicalResourceRequest.dataSourceId]
-     * @throws SecurityException if caller does not hold [PERMISSION_WRITE_MEDICAL_DATA].
-     * @sample androidx.health.connect.client.samples.UpsertMedicalResourcesSample
-     */
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @ExperimentalPersonalHealthRecordApi
-    suspend fun upsertMedicalResources(
-        requests: List<UpsertMedicalResourceRequest>
-    ): List<MedicalResource> =
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#upsetMedicalResources()"
-        )
-
-    /**
-     * Reads [MedicalResource]s by request, either [ReadMedicalResourcesInitialRequest] or
-     * [ReadMedicalResourcesPageRequest].
-     *
-     * A typical flow to read all [MedicalResource]s that satisfy a certain criteria would be:
-     * 1. Create a [ReadMedicalResourcesInitialRequest] with desired criteria, and make a request.
-     *    If successful, a [ReadMedicalResourcesResponse] should be returned.
-     * 2. Use returned [ReadMedicalResourcesResponse.nextPageToken] to create a
-     *    [ReadMedicalResourcesPageRequest] and make another request. Again, if successful, a
-     *    [ReadMedicalResourcesResponse] should be returned.
-     * 3. Repeat step 2 until [ReadMedicalResourcesResponse.nextPageToken] is null.
-     *
-     * Regarding permissions, only permitted [MedicalResource]s are returned. Specifically:
-     * - A caller without any read medical permissions such as
-     *   [PERMISSION_READ_MEDICAL_DATA_VACCINES], or the write medical permission
-     *   [PERMISSION_WRITE_MEDICAL_DATA] is not permitted to read any [MedicalResource], including
-     *   ones that it created.
-     * - A caller with the write permission is permitted to read its own [MedicalResource]s of any
-     *   type regardless whether it's in foreground or background.
-     * - A caller with only a read permission, when in background, is only permitted to read its own
-     *   [MedicalResource]s of the corresponding type. For example, if a caller only holds
-     *   [PERMISSION_READ_MEDICAL_DATA_VACCINES], then when in background it is only permitted to
-     *   read its own [MedicalResource]s with [MedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES].
-     *   However, when it is in foreground or if it holds
-     *   [PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND], it is permitted to read all vaccines
-     *   [MedicalResource]s, including ones that were written by other apps.
-     *
-     * Each returned [MedicalResource] is not guaranteed to meet all requirements of the <a
-     * href="https://hl7.org/fhir/resourcelist.html">Fast Healthcare Interoperability Resources
-     * (FHIR) spec</a>. If required, clients should perform their own validations.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @sample androidx.health.connect.client.samples.ReadMedicalResourcesByRequestSample
-     */
-    @ExperimentalPersonalHealthRecordApi
-    suspend fun readMedicalResources(
-        request: ReadMedicalResourcesRequest
-    ): ReadMedicalResourcesResponse =
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#readMedicalResources(request: ReadMedicalResourcesRequest)"
-        )
-
-    /**
-     * Reads a collection of [MedicalResource]s given a list of [MedicalResourceId]s.
-     *
-     * The number and order of medical resources returned by this API is not guaranteed, depending
-     * on a number of factors:
-     * - If an empty list of IDs is provided, an empty list will be returned.
-     * - If any ID does not exist, no medical resource will be returned for that ID.
-     * - Only permitted [MedicalResource]s are returned. Specifically:
-     *     - A caller without any read medical permissions such as
-     *       [PERMISSION_READ_MEDICAL_DATA_VACCINES], or the write medical permission
-     *       [PERMISSION_WRITE_MEDICAL_DATA] is not permitted to read any [MedicalResource],
-     *       including ones that it created.
-     *     - A caller with the write permission is permitted to read its own [MedicalResource]s of
-     *       any type regardless whether it's in foreground or background.
-     *     - A caller with only a read permission, when in background, is only permitted to read its
-     *       own [MedicalResource]s of the corresponding type. For example, if a caller only holds
-     *       [PERMISSION_READ_MEDICAL_DATA_VACCINES], then when in background it is only permitted
-     *       to read its own [MedicalResource]s with
-     *       [MedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES]. However, when it is in foreground or
-     *       if it holds [PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND], it is permitted to read all
-     *       vaccines [MedicalResource]s, including ones that were written by other apps.
-     *
-     * Each returned [MedicalResource] is not guaranteed to meet all requirements of the <a
-     * href="https://hl7.org/fhir/resourcelist.html">Fast Healthcare Interoperability Resources
-     * (FHIR) spec</a>. If required, clients should perform their own validations.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @throws IllegalArgumentException if the size of [ids] is too large or any ID is deemed as
-     *   invalid.
-     * @sample androidx.health.connect.client.samples.ReadMedicalResourcesByIdsSample
-     */
-    @ExperimentalPersonalHealthRecordApi
-    suspend fun readMedicalResources(ids: List<MedicalResourceId>): List<MedicalResource> =
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#readMedicalResources(ids: List<MedicalResourceId>)"
-        )
-
-    /**
-     * Deletes a list of [MedicalResource]s by the provided list of [MedicalResourceId]s.
-     * - If any ID in [ids] is invalid, the API will throw an [IllegalArgumentException], and
-     *   nothing will be deleted.
-     * - If any ID in [ids] does not exist, that ID will be ignored, while deletion on other IDs
-     *   will be performed.
-     *
-     * Regarding permissions:
-     * - Caller must hold [PERMISSION_WRITE_MEDICAL_DATA] in order to call this API, even then, it
-     *   can only delete its own data. If any of the items in [ids] belongs to another app, they
-     *   will be ignored.
-     * - Deletes are permitted in the foreground or background.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @param ids The ids to delete.
-     * @throws SecurityException if caller does not hold [PERMISSION_WRITE_MEDICAL_DATA].
-     * @sample androidx.health.connect.client.samples.DeleteMedicalResourcesSample
-     */
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @ExperimentalPersonalHealthRecordApi
-    suspend fun deleteMedicalResources(ids: List<MedicalResourceId>): Unit =
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#deleteMedicalResources(ids: List<MedicalResourceId>)"
-        )
-
-    /**
-     * Deletes [MedicalResource]s based on given filters in
-     * [request][DeleteMedicalResourcesRequest].
-     *
-     * Only [MedicalResource]s inserted by the calling app will be deleted. If the [request] matches
-     * any other [MedicalResource]s, these will be ignored.
-     *
-     * Regarding permissions:
-     * - Caller must hold [PERMISSION_WRITE_MEDICAL_DATA] in order to call this API.
-     * - Deletes are permitted in the foreground or background.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @param request The request that contains the filters to delete.
-     * @throws SecurityException if caller does not hold [PERMISSION_WRITE_MEDICAL_DATA].
-     * @sample androidx.health.connect.client.samples.DeleteMedicalResourcesByRequestSample
-     */
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @ExperimentalPersonalHealthRecordApi
-    suspend fun deleteMedicalResources(request: DeleteMedicalResourcesRequest): Unit =
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#deleteMedicalResources(request: DeleteMedicalResourcesRequest)"
-        )
-
-    /**
-     * Creates a [MedicalDataSource] using a [CreateMedicalDataSourceRequest].
-     *
-     * Regarding permissions:
-     * - Caller must hold [PERMISSION_WRITE_MEDICAL_DATA] in order to call this API, otherwise a
-     *   [SecurityException] will be thrown.
-     * - With [PERMISSION_WRITE_MEDICAL_DATA] granted, caller is permitted to call this API in
-     *   either foreground or background.
-     *
-     * Medical data is represented using the
-     * [Fast Healthcare Interoperability Resources (FHIR)](https://hl7.org/fhir/) standard.
-     *
-     * A [MedicalDataSource] needs to be created before any [MedicalResource]s for that source can
-     * be inserted. Separate [MedicalDataSource]s should be created for medical records coming from
-     * different sources (e.g. different FHIR endpoints, different healthcare systems), unless the
-     * data has been reconciled and all records have a unique combination of resource type and
-     * resource id.
-     *
-     * The [CreateMedicalDataSourceRequest.displayName] must be unique across all medical data
-     * sources created by an app, otherwise an [IllegalArgumentException] will be thrown. See
-     * [CreateMedicalDataSourceRequest.fhirBaseUri] for more details on the FHIR base URI. The data
-     * source can not be updated after creation.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @param request request containing details of the [MedicalDataSource] to be created
-     * @return the created [MedicalDataSource]
-     * @throws [SecurityException] if caller does not hold [PERMISSION_WRITE_MEDICAL_DATA].
-     * @sample androidx.health.connect.client.samples.CreateMedicalDataSourceSample
-     */
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    suspend fun createMedicalDataSource(
-        request: CreateMedicalDataSourceRequest
-    ): MedicalDataSource {
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#createMedicalDataSource()"
-        )
-    }
-
-    /**
-     * Deletes a [MedicalDataSource] and all data contained within it.
-     *
-     * Regarding permissions:
-     * - Caller must hold [PERMISSION_WRITE_MEDICAL_DATA] in order to call this API, otherwise a
-     *   [SecurityException] will be thrown.
-     * - With [PERMISSION_WRITE_MEDICAL_DATA] granted, caller is permitted to call this API in
-     *   either foreground or background.
-     * - Caller may only delete data sources it created.
-     *
-     * Medical data is represented using the
-     * [Fast Healthcare Interoperability Resources (FHIR)](https://hl7.org/fhir/) standard.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @param id The id of the data source to delete.
-     * @throws IllegalArgumentException if [id] is invalid, does not exist, or owned by another app.
-     * @sample androidx.health.connect.client.samples.DeleteMedicalDataSourceWithDataSample
-     */
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    suspend fun deleteMedicalDataSourceWithData(id: String) {
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#deleteMedicalDataSourceWithData()"
-        )
-    }
-
-    /**
-     * Gets the requested [MedicalDataSource]s using [GetMedicalDataSourcesRequest]. Number of data
-     * sources returned by this API will depend based on below factors:
-     * - If an empty [GetMedicalDataSourcesRequest] is passed, all data sources for all apps are
-     *   requested, and all which the caller is permitted to get will be returned. See below.
-     * - If [GetMedicalDataSourcesRequest.packageNames] is not empty, then only the data sources
-     *   created by those packages is being requested. All data sources created by those packages
-     *   which the caller is permitted to get will be returned. See below.
-     *
-     * There is no specific read permission for getting data sources. Instead, permission to read
-     * data sources is based on whether the caller has permission to read the data currently
-     * contained in that data source. Specifically:
-     * - A caller without any read medical permissions such as
-     *   [PERMISSION_READ_MEDICAL_DATA_VACCINES] or the write permission
-     *   [PERMISSION_WRITE_MEDICAL_DATA] is not permitted get any [MedicalDataSource]s, including
-     *   ones that it created.
-     * - A caller with the write permission is permitted to read its own [MedicalDataSource]s
-     *   regardless whether it's in foreground or background.
-     * - A caller with only a read permission, when in background, is only permitted to read its own
-     *   [MedicalDataSource]s that contains at least one [MedicalResource] with the type that the
-     *   read permission covers. However, when the caller is in foreground or if it holds
-     *   [PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND], it can also read other apps'
-     *   [MedicalDataSource]s as long as each of those [MedicalDataSource] contains at least one
-     *   [MedicalResource] with the corresponding type.
-     *     - For example, a client `A` created a [MedicalDataSource] `DS1`, then used `DS1` to
-     *       insert a [MedicalResource] `MR1` with type
-     *       [MedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES]. Similarly another client `B` created
-     *       `DS2`, then used `DS2` to insert another [MedicalResource] `MR2` with the same
-     *       [MedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES]. If `A` holds
-     *       [PERMISSION_READ_MEDICAL_DATA_VACCINES] and it is in background, it can only read
-     *       `DS1`. However, if `A` is in foreground or holds
-     *       [PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND], it can read both `DS1` and `DS2`.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @param request containing details of the [MedicalDataSource]s to retrieve
-     * @return [MedicalDataSource]s matching the provided request
-     * @sample androidx.health.connect.client.samples.GetMedicalDataSourcesByRequestSample
-     */
-    @ExperimentalPersonalHealthRecordApi
-    suspend fun getMedicalDataSources(
-        request: GetMedicalDataSourcesRequest
-    ): List<MedicalDataSource> {
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#getMedicalDataSources()"
-        )
-    }
-
-    /**
-     * Gets [MedicalDataSource]s for the provided list of [ids][MedicalDataSource.id].
-     *
-     * The returned list of data sources will be in the same order as the [ids].
-     *
-     * Number of data sources returned by this API will depend based on below factors:
-     * - If an empty list of [ids] is provided, no data sources will be returned.
-     * - If an id is invalid or non-existent, no data source will be returned for that id, this
-     *   means the returned list might have fewer elements than [ids].
-     * - Callers will only get data sources they are permitted to get. See below.
-     *
-     * There is no specific read permission for getting data sources. Instead, permission to read
-     * data sources is based on whether the caller has permission to read the data currently
-     * contained in that data source. Being permitted to get data sources is dependent on the
-     * following logic, in priority order, earlier statements take precedence.
-     * - A caller without any read medical permissions such as
-     *   [PERMISSION_READ_MEDICAL_DATA_VACCINES] or the write permission
-     *   [PERMISSION_WRITE_MEDICAL_DATA] is not permitted get any [MedicalDataSource]s, including
-     *   ones that it created.
-     * - A caller with the write permission is permitted to read its own [MedicalDataSource]s
-     *   regardless whether it's in foreground or background.
-     * - A caller with only a read permission, when in background, is only permitted to read its own
-     *   [MedicalDataSource]s that contains at least one [MedicalResource] with the type that the
-     *   read permission covers. However, when the caller is in foreground or if it holds
-     *   [PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND], it can also read other apps'
-     *   [MedicalDataSource]s as long as each of those [MedicalDataSource] contains at least one
-     *   [MedicalResource] with the corresponding type.
-     *     - For example, if a caller `A` created a [MedicalDataSource] `DS1`, then used `DS1` to
-     *       insert a [MedicalResource] `MR1` with type
-     *       [MedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES], and another caller `B` created `DS2`.
-     *       If `A` holds [PERMISSION_READ_MEDICAL_DATA_VACCINES], it can only read `DS1` in
-     *       background. However, if it is in foreground or holds
-     *       [PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND], it can read both `DS1` and `DS2`.
-     *
-     * This feature is dependent on the version of HealthConnect installed on the device. To check
-     * if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
-     * thrown if the feature is not available.
-     *
-     * @param ids ids of the [MedicalDataSource]s to retrieve
-     * @return [MedicalDataSource]s matching the provided [ids]
-     * @sample androidx.health.connect.client.samples.GetMedicalDataSourcesByIdsSample
-     */
-    @ExperimentalPersonalHealthRecordApi
-    suspend fun getMedicalDataSources(ids: List<String>): List<MedicalDataSource> {
-        throw createExceptionDueToFeatureUnavailable(
-            FEATURE_CONSTANT_NAME_PHR,
-            "HealthConnectClient#getMedicalDataSources()"
-        )
-    }
-
     companion object {
         @RestrictTo(RestrictTo.Scope.LIBRARY)
         internal const val DEFAULT_PROVIDER_PACKAGE_NAME = "com.google.android.apps.healthdata"
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectFeatures.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectFeatures.kt
index aa9e756..c85b948 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectFeatures.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/HealthConnectFeatures.kt
@@ -18,7 +18,6 @@
 
 import androidx.annotation.IntDef
 import androidx.annotation.RestrictTo
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
 import androidx.health.connect.client.feature.HealthConnectPlatformVersion
 import androidx.health.connect.client.feature.HealthConnectVersionInfo
 
@@ -51,10 +50,6 @@
         /** Feature constant for mindfulness session. */
         @RestrictTo(RestrictTo.Scope.LIBRARY) const val FEATURE_MINDFULNESS_SESSION = 5
 
-        /** Feature constant for Personal Health Records APIs. */
-        @ExperimentalPersonalHealthRecordApi const val FEATURE_PERSONAL_HEALTH_RECORD = 6
-
-        @OptIn(ExperimentalPersonalHealthRecordApi::class)
         @Retention(AnnotationRetention.SOURCE)
         @IntDef(
             value =
@@ -63,7 +58,6 @@
                     FEATURE_SKIN_TEMPERATURE,
                     FEATURE_PLANNED_EXERCISE,
                     FEATURE_READ_HEALTH_DATA_HISTORY,
-                    FEATURE_PERSONAL_HEALTH_RECORD,
                     FEATURE_MINDFULNESS_SESSION
                 ]
         )
@@ -89,10 +83,6 @@
         private val SDK_EXT_13_PLATFORM_VERSION: HealthConnectPlatformVersion =
             HealthConnectPlatformVersion(buildVersionCode = 34, sdkExtensionVersion = 13)
 
-        private val SDK_EXT_16_PLATFORM_VERSION: HealthConnectPlatformVersion =
-            HealthConnectPlatformVersion(buildVersionCode = 34, sdkExtensionVersion = 16)
-
-        @OptIn(ExperimentalPersonalHealthRecordApi::class)
         internal val FEATURE_TO_VERSION_INFO_MAP: Map<Int, HealthConnectVersionInfo> =
             mapOf(
                 FEATURE_READ_HEALTH_DATA_IN_BACKGROUND to
@@ -108,9 +98,7 @@
                         platformVersion = SDK_EXT_13_PLATFORM_VERSION
                     ),
                 FEATURE_PLANNED_EXERCISE to
-                    HealthConnectVersionInfo(platformVersion = SDK_EXT_13_PLATFORM_VERSION),
-                FEATURE_PERSONAL_HEALTH_RECORD to
-                    HealthConnectVersionInfo(platformVersion = SDK_EXT_16_PLATFORM_VERSION),
+                    HealthConnectVersionInfo(platformVersion = SDK_EXT_13_PLATFORM_VERSION)
             )
     }
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/Change.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/Change.kt
index 381d95d..c5e0f6f 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/Change.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/changes/Change.kt
@@ -16,7 +16,7 @@
 package androidx.health.connect.client.changes
 
 /**
- * Abstraction to represent a change in Health Connect.
+ * Abstraction to represent a change to Android Health Platform.
  *
  * @see androidx.health.data.client.response.ChangesResponse
  * @see UpsertionChange
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/ExperimentalPersonalHealthRecordApi.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/ExperimentalPersonalHealthRecordApi.kt
deleted file mode 100644
index 0067633..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/ExperimentalPersonalHealthRecordApi.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.feature
-
-@RequiresOptIn(
-    message =
-        "This is a part of the Personal Health Record experimental Health Connect APIs and could change in the future."
-)
-@Retention(AnnotationRetention.BINARY)
-annotation class ExperimentalPersonalHealthRecordApi
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/FeatureUtils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/FeatureUtils.kt
deleted file mode 100644
index edc4d63..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/FeatureUtils.kt
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2025 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.
- */
-// To prevent an empty UtilsKt class from being exposed in APi files
-@file:RestrictTo(RestrictTo.Scope.LIBRARY)
-
-package androidx.health.connect.client.feature
-
-import android.os.Build
-import androidx.annotation.RestrictTo
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_STATUS_AVAILABLE
-import kotlin.reflect.KClass
-
-internal const val FEATURE_CONSTANT_NAME_PHR = "FEATURE_PERSONAL_HEALTH_RECORD"
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-internal fun isPersonalHealthRecordFeatureAvailableInPlatform(): Boolean {
-    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
-        return false
-    }
-    return HealthConnectFeaturesPlatformImpl.getFeatureStatus(FEATURE_PERSONAL_HEALTH_RECORD) ==
-        FEATURE_STATUS_AVAILABLE
-}
-
-/** Create an [UnsupportedOperationException] with given [featureConstantName] and [apiName]. */
-internal fun createExceptionDueToFeatureUnavailable(featureConstantName: String, apiName: String) =
-    UnsupportedOperationException(
-        "\"$apiName\" must only be called if \"$featureConstantName\" feature is available. To check whether the feature is available, use `HealthConnectFeatures.getFeatureStatus(HealthConnectFeatures.$featureConstantName) == FEATURE_STATUS_AVAILABLE`."
-    )
-
-/**
- * Similar to [with], this method executes `block` if PHR feature is available, otherwise throwing
- * an [UnsupportedOperationException] pointing to `apiName`.
- */
-internal fun <T> withPhrFeatureCheck(kClass: KClass<*>, block: () -> T): T =
-    withPhrFeatureCheck("${kClass.simpleName}", block)
-
-/**
- * Similar to [with], this method executes `block` if PHR feature is available, otherwise throwing
- * an [UnsupportedOperationException] pointing to `apiName`.
- */
-internal fun <T> withPhrFeatureCheck(kClass: KClass<*>, methodName: String, block: () -> T): T =
-    withPhrFeatureCheck("${kClass.simpleName}#$methodName", block)
-
-/**
- * Similar to [with], this method executes `block` if PHR feature is available, otherwise throwing
- * an [UnsupportedOperationException] pointing to `apiName`.
- */
-internal fun <T> withPhrFeatureCheck(apiName: String, block: () -> T): T {
-    if (isPersonalHealthRecordFeatureAvailableInPlatform()) {
-        return block()
-    } else {
-        throw createExceptionDueToFeatureUnavailable(FEATURE_CONSTANT_NAME_PHR, apiName)
-    }
-}
-
-/**
- * Similar to [with], this method executes `block` if PHR feature is available, otherwise throwing
- * an [UnsupportedOperationException] pointing to `apiName`.
- */
-internal suspend fun <T> withPhrFeatureCheckSuspend(
-    kClass: KClass<*>,
-    methodName: String,
-    block: suspend () -> T
-): T {
-    return withPhrFeatureCheckSuspend("${kClass.simpleName}#$methodName", block)
-}
-
-/**
- * Similar to [with], this method executes `block` if PHR feature is available, otherwise throwing
- * an [UnsupportedOperationException] pointing to `apiName`.
- */
-internal suspend fun <T> withPhrFeatureCheckSuspend(apiName: String, block: suspend () -> T): T {
-    if (isPersonalHealthRecordFeatureAvailableInPlatform()) {
-        return block()
-    } else {
-        throw createExceptionDueToFeatureUnavailable(FEATURE_CONSTANT_NAME_PHR, apiName)
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImpl.kt
index 899c2b9..d6888ed 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImpl.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-@file:RequiresApi(api = Build.VERSION_CODES.R)
+@file:RequiresApi(api = 34)
 
 package androidx.health.connect.client.feature
 
@@ -23,8 +23,6 @@
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
 import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_STATUS_AVAILABLE
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_STATUS_UNAVAILABLE
 import androidx.health.connect.client.HealthConnectFeatures.Companion.Feature
 import androidx.health.connect.client.HealthConnectFeatures.Companion.FeatureStatus
 
@@ -35,44 +33,38 @@
 internal class HealthConnectFeaturesPlatformImpl : HealthConnectFeatures {
 
     @FeatureStatus
-    override fun getFeatureStatus(@Feature feature: Int): Int = Companion.getFeatureStatus(feature)
+    override fun getFeatureStatus(@Feature feature: Int): Int {
+        return HealthConnectFeatures.FEATURE_TO_VERSION_INFO_MAP.getFeatureStatus(feature)
+    }
 
+    @VisibleForTesting
     internal companion object {
-        /**
-         * Checks whether the given feature is available.
-         *
-         * @param feature the feature to be checked. One of the "FEATURE_" constants in this class.
-         * @return one of [FEATURE_STATUS_UNAVAILABLE] or [FEATURE_STATUS_AVAILABLE]
-         */
-        fun getFeatureStatus(@Feature feature: Int): Int {
-            return HealthConnectFeatures.FEATURE_TO_VERSION_INFO_MAP.getFeatureStatus(feature)
-        }
-
         @VisibleForTesting
         internal fun Map<Int, HealthConnectVersionInfo>.getFeatureStatus(
             @Feature feature: Int
         ): Int {
             val minimumRequiredVersion =
-                this[feature]?.platformVersion ?: return FEATURE_STATUS_UNAVAILABLE
+                this[feature]?.platformVersion
+                    ?: return HealthConnectFeatures.FEATURE_STATUS_UNAVAILABLE
 
             if (minimumRequiredVersion.buildVersionCode > Build.VERSION.SDK_INT) {
-                return FEATURE_STATUS_UNAVAILABLE
+                return HealthConnectFeatures.FEATURE_STATUS_UNAVAILABLE
             }
 
             // If there is no sdkExtension for the feature, then it is supported across all
             // extension versions of the platform build version.
             if (minimumRequiredVersion.sdkExtensionVersion == null) {
-                return FEATURE_STATUS_AVAILABLE
+                return HealthConnectFeatures.FEATURE_STATUS_AVAILABLE
             }
 
             if (
                 minimumRequiredVersion.sdkExtensionVersion <=
                     SdkExtensions.getExtensionVersion(minimumRequiredVersion.buildVersionCode)
             ) {
-                return FEATURE_STATUS_AVAILABLE
+                return HealthConnectFeatures.FEATURE_STATUS_AVAILABLE
             }
 
-            return FEATURE_STATUS_UNAVAILABLE
+            return HealthConnectFeatures.FEATURE_STATUS_UNAVAILABLE
         }
     }
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
index 810f8e4..b2793eb 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/HealthConnectClientUpsideDownImpl.kt
@@ -29,8 +29,6 @@
 import android.os.RemoteException
 import android.os.ext.SdkExtensions
 import androidx.annotation.RequiresApi
-import androidx.annotation.RequiresExtension
-import androidx.annotation.RequiresPermission
 import androidx.annotation.VisibleForTesting
 import androidx.core.os.asOutcomeReceiver
 import androidx.health.connect.client.ExperimentalDeduplicationApi
@@ -43,15 +41,11 @@
 import androidx.health.connect.client.aggregate.AggregationResultGroupedByPeriod
 import androidx.health.connect.client.changes.DeletionChange
 import androidx.health.connect.client.changes.UpsertionChange
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
 import androidx.health.connect.client.feature.HealthConnectFeaturesPlatformImpl
-import androidx.health.connect.client.feature.withPhrFeatureCheckSuspend
 import androidx.health.connect.client.impl.platform.aggregate.aggregateFallback
 import androidx.health.connect.client.impl.platform.aggregate.isPlatformSupportedMetric
 import androidx.health.connect.client.impl.platform.records.toPlatformRecord
 import androidx.health.connect.client.impl.platform.records.toPlatformRecordClass
-import androidx.health.connect.client.impl.platform.records.toSdkMedicalDataSource
-import androidx.health.connect.client.impl.platform.records.toSdkMedicalResource
 import androidx.health.connect.client.impl.platform.records.toSdkRecord
 import androidx.health.connect.client.impl.platform.request.toPlatformLocalTimeRangeFilter
 import androidx.health.connect.client.impl.platform.request.toPlatformRequest
@@ -60,24 +54,15 @@
 import androidx.health.connect.client.impl.platform.response.toSdkResponse
 import androidx.health.connect.client.impl.platform.toKtException
 import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_PREFIX
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResourceId
 import androidx.health.connect.client.records.Record
 import androidx.health.connect.client.request.AggregateGroupByDurationRequest
 import androidx.health.connect.client.request.AggregateGroupByPeriodRequest
 import androidx.health.connect.client.request.AggregateRequest
 import androidx.health.connect.client.request.ChangesTokenRequest
-import androidx.health.connect.client.request.CreateMedicalDataSourceRequest
-import androidx.health.connect.client.request.DeleteMedicalResourcesRequest
-import androidx.health.connect.client.request.GetMedicalDataSourcesRequest
-import androidx.health.connect.client.request.ReadMedicalResourcesRequest
 import androidx.health.connect.client.request.ReadRecordsRequest
 import androidx.health.connect.client.request.ReadRecordsRequest.Companion.DEDUPLICATION_STRATEGY_DISABLED
-import androidx.health.connect.client.request.UpsertMedicalResourceRequest
 import androidx.health.connect.client.response.ChangesResponse
 import androidx.health.connect.client.response.InsertRecordsResponse
-import androidx.health.connect.client.response.ReadMedicalResourcesResponse
 import androidx.health.connect.client.response.ReadRecordResponse
 import androidx.health.connect.client.response.ReadRecordsResponse
 import androidx.health.connect.client.time.TimeRangeFilter
@@ -441,187 +426,6 @@
         }
     }
 
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @RequiresExtension(extension = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, version = 16)
-    override suspend fun createMedicalDataSource(
-        request: CreateMedicalDataSourceRequest
-    ): MedicalDataSource =
-        withPhrFeatureCheckSuspend(
-            this::class,
-            "createMedicalDataSource(request: CreateMedicalDataSourceRequest)"
-        ) {
-            wrapPlatformException {
-                    suspendCancellableCoroutine { continuation ->
-                        healthConnectManager.createMedicalDataSource(
-                            request.platformCreateMedicalDataSourceRequest,
-                            executor,
-                            continuation.asOutcomeReceiver()
-                        )
-                    }
-                }
-                .toSdkMedicalDataSource()
-        }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @RequiresExtension(extension = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, version = 16)
-    override suspend fun deleteMedicalDataSourceWithData(id: String) {
-        withPhrFeatureCheckSuspend(this::class, "deleteMedicalDataSourceWithData(id: String)") {
-            wrapPlatformException {
-                suspendCancellableCoroutine { continuation ->
-                    healthConnectManager.deleteMedicalDataSourceWithData(
-                        id,
-                        executor,
-                        continuation.asOutcomeReceiver()
-                    )
-                }
-            }
-        }
-    }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresExtension(extension = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, version = 16)
-    override suspend fun getMedicalDataSources(
-        request: GetMedicalDataSourcesRequest
-    ): List<MedicalDataSource> =
-        withPhrFeatureCheckSuspend(
-            this::class,
-            "getMedicalDataSources(request: GetMedicalDataSourcesRequest)"
-        ) {
-            wrapPlatformException {
-                    suspendCancellableCoroutine { continuation ->
-                        healthConnectManager.getMedicalDataSources(
-                            request.platformGetMedicalDataSourcesRequest,
-                            executor,
-                            continuation.asOutcomeReceiver()
-                        )
-                    }
-                }
-                .map { it.toSdkMedicalDataSource() }
-        }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresExtension(extension = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, version = 16)
-    override suspend fun getMedicalDataSources(ids: List<String>): List<MedicalDataSource> =
-        withPhrFeatureCheckSuspend(this::class, "getMedicalDataSources(ids: List<String>)") {
-            wrapPlatformException {
-                    suspendCancellableCoroutine { continuation ->
-                        healthConnectManager.getMedicalDataSources(
-                            ids,
-                            executor,
-                            continuation.asOutcomeReceiver()
-                        )
-                    }
-                }
-                .map { it.toSdkMedicalDataSource() }
-        }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @RequiresExtension(Build.VERSION_CODES.UPSIDE_DOWN_CAKE, 16)
-    override suspend fun upsertMedicalResources(
-        requests: List<UpsertMedicalResourceRequest>
-    ): List<MedicalResource> =
-        withPhrFeatureCheckSuspend(this::class, "upsertMedicalResources()") {
-            wrapPlatformException {
-                    suspendCancellableCoroutine { continuation ->
-                        healthConnectManager.upsertMedicalResources(
-                            requests.map { it.platformUpsertMedicalResourceRequest },
-                            executor,
-                            continuation.asOutcomeReceiver()
-                        )
-                    }
-                }
-                .map { it.toSdkMedicalResource() }
-        }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresExtension(Build.VERSION_CODES.UPSIDE_DOWN_CAKE, 16)
-    override suspend fun readMedicalResources(
-        request: ReadMedicalResourcesRequest
-    ): ReadMedicalResourcesResponse =
-        withPhrFeatureCheckSuspend(
-            this::class,
-            "readMedicalResources(request: ReadMedicalResourcesRequest)"
-        ) {
-            wrapPlatformException {
-                    suspendCancellableCoroutine { continuation ->
-                        healthConnectManager.readMedicalResources(
-                            request.platformReadMedicalResourcesRequest,
-                            executor,
-                            continuation.asOutcomeReceiver()
-                        )
-                    }
-                }
-                .let { platformResponse ->
-                    ReadMedicalResourcesResponse(
-                        platformResponse.medicalResources.map { it.toSdkMedicalResource() },
-                        platformResponse.nextPageToken,
-                        platformResponse.remainingCount
-                    )
-                }
-        }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresExtension(Build.VERSION_CODES.UPSIDE_DOWN_CAKE, 16)
-    override suspend fun readMedicalResources(ids: List<MedicalResourceId>): List<MedicalResource> =
-        withPhrFeatureCheckSuspend(
-            this::class,
-            "readMedicalResources(ids: List<MedicalResourceId>)"
-        ) {
-            wrapPlatformException {
-                    suspendCancellableCoroutine { continuation ->
-                        healthConnectManager.readMedicalResources(
-                            ids.map { it.platformMedicalResourceId },
-                            executor,
-                            continuation.asOutcomeReceiver()
-                        )
-                    }
-                }
-                .map { it.toSdkMedicalResource() }
-        }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @RequiresExtension(Build.VERSION_CODES.UPSIDE_DOWN_CAKE, 16)
-    override suspend fun deleteMedicalResources(ids: List<MedicalResourceId>) {
-        withPhrFeatureCheckSuspend(
-            HealthConnectClientUpsideDownImpl::class,
-            "deleteMedicalResources(ids: List<MedicalResourceId>)"
-        ) {
-            wrapPlatformException {
-                suspendCancellableCoroutine { continuation ->
-                    healthConnectManager.deleteMedicalResources(
-                        ids.map { it.platformMedicalResourceId },
-                        executor,
-                        continuation.asOutcomeReceiver()
-                    )
-                }
-            }
-        }
-    }
-
-    @ExperimentalPersonalHealthRecordApi
-    @RequiresPermission("android.permission.health.WRITE_MEDICAL_DATA")
-    @RequiresExtension(Build.VERSION_CODES.UPSIDE_DOWN_CAKE, 16)
-    override suspend fun deleteMedicalResources(request: DeleteMedicalResourcesRequest) {
-        withPhrFeatureCheckSuspend(
-            HealthConnectClientUpsideDownImpl::class,
-            "deleteMedicalResources(request: DeleteMedicalResourcesRequest)"
-        ) {
-            wrapPlatformException {
-                suspendCancellableCoroutine { continuation ->
-                    healthConnectManager.deleteMedicalResources(
-                        request.platformReadMedicalResourcesRequest,
-                        executor,
-                        continuation.asOutcomeReceiver()
-                    )
-                }
-            }
-        }
-    }
-
     private suspend fun <T> wrapPlatformException(function: suspend () -> T): T {
         return try {
             function()
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/IntDefMappings.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/IntDefMappings.kt
index 70068ea..ee069f3 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/IntDefMappings.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/IntDefMappings.kt
@@ -21,40 +21,13 @@
 
 import androidx.annotation.RequiresApi
 import androidx.annotation.RestrictTo
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
 import androidx.health.connect.client.records.BloodGlucoseRecord
 import androidx.health.connect.client.records.BloodPressureRecord
 import androidx.health.connect.client.records.BodyTemperatureMeasurementLocation
 import androidx.health.connect.client.records.CervicalMucusRecord
 import androidx.health.connect.client.records.ExerciseSegment
 import androidx.health.connect.client.records.ExerciseSessionRecord
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_CONDITION
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_ENCOUNTER
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_IMMUNIZATION
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_LOCATION
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_MEDICATION
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_MEDICATION_REQUEST
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_OBSERVATION
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_ORGANIZATION
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_PATIENT
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_PRACTITIONER
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE
-import androidx.health.connect.client.records.FhirResource.Companion.FHIR_RESOURCE_TYPE_PROCEDURE
 import androidx.health.connect.client.records.MealType
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_CONDITIONS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_MEDICATIONS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_PREGNANCY
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_PROCEDURES
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_VACCINES
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_VISITS
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_VITAL_SIGNS
 import androidx.health.connect.client.records.MenstruationFlowRecord
 import androidx.health.connect.client.records.OvulationTestRecord
 import androidx.health.connect.client.records.PlannedExerciseStep
@@ -133,7 +106,6 @@
         ExerciseSessionRecord.EXERCISE_TYPE_GOLF to
             PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_GOLF,
         ExerciseSessionRecord.EXERCISE_TYPE_GUIDED_BREATHING to
-            @Suppress("DEPRECATION")
             PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_GUIDED_BREATHING,
         ExerciseSessionRecord.EXERCISE_TYPE_GYMNASTICS to
             PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_GYMNASTICS,
@@ -567,61 +539,6 @@
         Metadata.RECORDING_METHOD_MANUAL_ENTRY to PlatformMetadata.RECORDING_METHOD_MANUAL_ENTRY
     )
 
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-internal val SDK_TO_PLATFORM_FHIR_RESOURCE_TYPE: Map<Int, Int> =
-    mapOf(
-        FHIR_RESOURCE_TYPE_IMMUNIZATION to PlatformFhirResource.FHIR_RESOURCE_TYPE_IMMUNIZATION,
-        FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE to
-            PlatformFhirResource.FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE,
-        FHIR_RESOURCE_TYPE_OBSERVATION to PlatformFhirResource.FHIR_RESOURCE_TYPE_OBSERVATION,
-        FHIR_RESOURCE_TYPE_CONDITION to PlatformFhirResource.FHIR_RESOURCE_TYPE_CONDITION,
-        FHIR_RESOURCE_TYPE_PROCEDURE to PlatformFhirResource.FHIR_RESOURCE_TYPE_PROCEDURE,
-        FHIR_RESOURCE_TYPE_MEDICATION to PlatformFhirResource.FHIR_RESOURCE_TYPE_MEDICATION,
-        FHIR_RESOURCE_TYPE_MEDICATION_REQUEST to
-            PlatformFhirResource.FHIR_RESOURCE_TYPE_MEDICATION_REQUEST,
-        FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT to
-            PlatformFhirResource.FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT,
-        FHIR_RESOURCE_TYPE_PATIENT to PlatformFhirResource.FHIR_RESOURCE_TYPE_PATIENT,
-        FHIR_RESOURCE_TYPE_PRACTITIONER to PlatformFhirResource.FHIR_RESOURCE_TYPE_PRACTITIONER,
-        FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE to
-            PlatformFhirResource.FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE,
-        FHIR_RESOURCE_TYPE_ENCOUNTER to PlatformFhirResource.FHIR_RESOURCE_TYPE_ENCOUNTER,
-        FHIR_RESOURCE_TYPE_LOCATION to PlatformFhirResource.FHIR_RESOURCE_TYPE_LOCATION,
-        FHIR_RESOURCE_TYPE_ORGANIZATION to PlatformFhirResource.FHIR_RESOURCE_TYPE_ORGANIZATION
-    )
-
-internal val PLATFORM_TO_SDK_FHIR_RESOURCE_TYPE: Map<Int, Int> =
-    SDK_TO_PLATFORM_FHIR_RESOURCE_TYPE.reversed()
-
-@OptIn(ExperimentalPersonalHealthRecordApi::class)
-internal val SDK_TO_PLATFORM_MEDICAL_RESOURCE_TYPE: Map<Int, Int> =
-    mapOf(
-        MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES,
-        MEDICAL_RESOURCE_TYPE_CONDITIONS to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_CONDITIONS,
-        MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS,
-        MEDICAL_RESOURCE_TYPE_MEDICATIONS to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-        MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS,
-        MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS,
-        MEDICAL_RESOURCE_TYPE_PREGNANCY to PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_PREGNANCY,
-        MEDICAL_RESOURCE_TYPE_PROCEDURES to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_PROCEDURES,
-        MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY,
-        MEDICAL_RESOURCE_TYPE_VACCINES to PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES,
-        MEDICAL_RESOURCE_TYPE_VISITS to PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_VISITS,
-        MEDICAL_RESOURCE_TYPE_VITAL_SIGNS to
-            PlatformMedicalResource.MEDICAL_RESOURCE_TYPE_VITAL_SIGNS
-    )
-
-internal val PLATFORM_TO_SDK_MEDICAL_RESOURCE_TYPE: Map<Int, Int> =
-    SDK_TO_PLATFORM_MEDICAL_RESOURCE_TYPE.reversed()
-
 internal fun Int.toPlatformExerciseCategory(): Int {
     return SDK_TO_PLATFORM_BLOOD_GLUCOSE_SPECIMEN_SOURCE[this]
         ?: PlatformPlannedExerciseStep.EXERCISE_CATEGORY_UNKNOWN
@@ -711,18 +628,6 @@
     return SDK_TO_PLATFORM_RECORDING_METHOD[this] ?: PlatformMetadata.RECORDING_METHOD_UNKNOWN
 }
 
-internal fun Int.toPlatformFhirResourceType(): Int {
-    // PHR does not support FHIR UNKNOWN type, see ag/29700288
-    return SDK_TO_PLATFORM_FHIR_RESOURCE_TYPE[this]
-        ?: throw IllegalArgumentException("SDK => Platform: Invalid FHIR resource type.")
-}
-
-internal fun Int.toPlatformMedicalResourceType(): Int {
-    // PHR does not support UNKNOWN type for medical resource, see ag/29703206
-    return SDK_TO_PLATFORM_MEDICAL_RESOURCE_TYPE[this]
-        ?: throw IllegalArgumentException("SDK => Platform: Invalid medical resource type.")
-}
-
 internal fun Int.toSdkBloodPressureBodyPosition(): Int {
     return PLATFORM_TO_SDK_BLOOD_PRESSURE_BODY_POSITION[this]
         ?: BloodPressureRecord.BODY_POSITION_UNKNOWN
@@ -807,13 +712,3 @@
 private fun Map<Int, Int>.reversed(): Map<Int, Int> {
     return entries.associate { (k, v) -> v to k }
 }
-
-internal fun Int.toSdkFhirResourceType(): Int {
-    return PLATFORM_TO_SDK_FHIR_RESOURCE_TYPE[this]
-        ?: throw IllegalArgumentException("Platform => SDK: Invalid FHIR resource type.")
-}
-
-internal fun Int.toSdkMedicalResourceType(): Int {
-    return PLATFORM_TO_SDK_MEDICAL_RESOURCE_TYPE[this]
-        ?: throw IllegalArgumentException("Platform => SDK: Invalid medical resource type.")
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/PlatformRecordAliases.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/PlatformRecordAliases.kt
index 2c8adc6..78e1e43 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/PlatformRecordAliases.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/PlatformRecordAliases.kt
@@ -438,22 +438,3 @@
 internal typealias PlatformVelocity = android.health.connect.datatypes.units.Velocity
 
 internal typealias PlatformVolume = android.health.connect.datatypes.units.Volume
-
-internal typealias PlatformFhirVersion = android.health.connect.datatypes.FhirVersion
-
-internal typealias PlatformFhirResource = android.health.connect.datatypes.FhirResource
-
-internal typealias PlatformFhirResourceBuilder =
-    android.health.connect.datatypes.FhirResource.Builder
-
-internal typealias PlatformMedicalDataSource = android.health.connect.datatypes.MedicalDataSource
-
-internal typealias PlatformMedicalDataSourceBuilder =
-    android.health.connect.datatypes.MedicalDataSource.Builder
-
-internal typealias PlatformMedicalResourceId = android.health.connect.MedicalResourceId
-
-internal typealias PlatformMedicalResource = android.health.connect.datatypes.MedicalResource
-
-internal typealias PlatformMedicalResourceBuilder =
-    android.health.connect.datatypes.MedicalResource.Builder
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
index 3d41095..15c100a 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/records/RecordConverters.kt
@@ -16,7 +16,6 @@
 
 @file:RestrictTo(RestrictTo.Scope.LIBRARY)
 @file:RequiresApi(api = 34)
-@file:OptIn(ExperimentalPersonalHealthRecordApi::class)
 
 package androidx.health.connect.client.impl.platform.records
 
@@ -25,7 +24,6 @@
 import androidx.annotation.RequiresApi
 import androidx.annotation.RequiresExtension
 import androidx.annotation.RestrictTo
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
 import androidx.health.connect.client.records.ActiveCaloriesBurnedRecord
 import androidx.health.connect.client.records.BasalBodyTemperatureRecord
 import androidx.health.connect.client.records.BasalMetabolicRateRecord
@@ -46,8 +44,6 @@
 import androidx.health.connect.client.records.ExerciseRouteResult
 import androidx.health.connect.client.records.ExerciseSegment
 import androidx.health.connect.client.records.ExerciseSessionRecord
-import androidx.health.connect.client.records.FhirResource
-import androidx.health.connect.client.records.FhirVersion
 import androidx.health.connect.client.records.FloorsClimbedRecord
 import androidx.health.connect.client.records.HeartRateRecord
 import androidx.health.connect.client.records.HeartRateVariabilityRmssdRecord
@@ -55,9 +51,6 @@
 import androidx.health.connect.client.records.HydrationRecord
 import androidx.health.connect.client.records.IntermenstrualBleedingRecord
 import androidx.health.connect.client.records.LeanBodyMassRecord
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResourceId
 import androidx.health.connect.client.records.MenstruationFlowRecord
 import androidx.health.connect.client.records.MenstruationPeriodRecord
 import androidx.health.connect.client.records.NutritionRecord
@@ -1319,35 +1312,3 @@
 
 internal fun PlatformExerciseSegment.toSdkExerciseSegment() =
     ExerciseSegment(startTime, endTime, segmentType.toSdkExerciseSegmentType(), repetitionsCount)
-
-@SuppressLint("NewApi") // Guarded by sdk extension check
-internal fun PlatformMedicalResourceId.toSdkMedicalResourceId() =
-    MedicalResourceId(dataSourceId, fhirResourceType.toSdkFhirResourceType(), fhirResourceId)
-
-@SuppressLint("NewApi") // Guarded by sdk extension check
-internal fun PlatformFhirVersion.toSdkFhirVersion() = FhirVersion(major, minor, patch)
-
-@SuppressLint("NewApi") // Guarded by sdk extension check
-internal fun PlatformMedicalDataSource.toSdkMedicalDataSource() =
-    MedicalDataSource(
-        id = id,
-        packageName = packageName,
-        fhirBaseUri = fhirBaseUri,
-        displayName = displayName,
-        fhirVersion = FhirVersion(fhirVersion.major, fhirVersion.minor, fhirVersion.patch),
-        lastDataUpdateTime = lastDataUpdateTime
-    )
-
-@SuppressLint("NewApi") // Guarded by sdk extension check
-internal fun PlatformFhirResource.toSdkFhirResource() =
-    FhirResource(type.toSdkFhirResourceType(), id, data)
-
-@SuppressLint("NewApi") // Guarded by sdk extension check
-internal fun PlatformMedicalResource.toSdkMedicalResource() =
-    MedicalResource(
-        type.toSdkMedicalResourceType(),
-        id.toSdkMedicalResourceId(),
-        dataSourceId,
-        fhirVersion.toSdkFhirVersion(),
-        fhirResource.toSdkFhirResource()
-    )
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/request/PlatformRequestAliases.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/request/PlatformRequestAliases.kt
deleted file mode 100644
index be90ec1..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/impl/platform/request/PlatformRequestAliases.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-@file:RestrictTo(RestrictTo.Scope.LIBRARY)
-@file:RequiresApi(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-
-package androidx.health.connect.client.impl.platform.request
-
-import android.os.Build
-import androidx.annotation.RequiresApi
-import androidx.annotation.RestrictTo
-
-internal typealias PlatformCreateMedicalDataSourceRequest =
-    android.health.connect.CreateMedicalDataSourceRequest
-
-internal typealias PlatformCreateMedicalDataSourceRequestBuilder =
-    android.health.connect.CreateMedicalDataSourceRequest.Builder
-
-internal typealias PlatformGetMedicalDataSourcesRequest =
-    android.health.connect.GetMedicalDataSourcesRequest
-
-internal typealias PlatformGetMedicalDataSourcesRequestBuilder =
-    android.health.connect.GetMedicalDataSourcesRequest.Builder
-
-internal typealias PlatformUpsertMedicalResourceRequest =
-    android.health.connect.UpsertMedicalResourceRequest
-
-internal typealias PlatformUpsertMedicalResourceRequestBuilder =
-    android.health.connect.UpsertMedicalResourceRequest.Builder
-
-internal typealias PlatformReadMedicalResourcesRequest =
-    android.health.connect.ReadMedicalResourcesRequest
-
-internal typealias PlatformReadMedicalResourcesInitialRequest =
-    android.health.connect.ReadMedicalResourcesInitialRequest
-
-internal typealias PlatformReadMedicalResourcesInitialRequestBuilder =
-    android.health.connect.ReadMedicalResourcesInitialRequest.Builder
-
-internal typealias PlatformReadMedicalResourcesPageRequest =
-    android.health.connect.ReadMedicalResourcesPageRequest
-
-internal typealias PlatformReadMedicalResourcesPageRequestBuilder =
-    android.health.connect.ReadMedicalResourcesPageRequest.Builder
-
-internal typealias PlatformDeleteMedicalResourcesRequest =
-    android.health.connect.DeleteMedicalResourcesRequest
-
-internal typealias PlatformDeleteMedicalResourcesRequestBuilder =
-    android.health.connect.DeleteMedicalResourcesRequest.Builder
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
index 04c1312..ffef8f3 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/permission/HealthPermission.kt
@@ -18,7 +18,6 @@
 import androidx.annotation.RestrictTo
 import androidx.health.connect.client.HealthConnectClient
 import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
 import androidx.health.connect.client.records.ActiveCaloriesBurnedRecord
 import androidx.health.connect.client.records.BasalBodyTemperatureRecord
 import androidx.health.connect.client.records.BasalMetabolicRateRecord
@@ -186,198 +185,6 @@
         const val PERMISSION_READ_HEALTH_DATA_HISTORY =
             PERMISSION_PREFIX + "READ_HEALTH_DATA_HISTORY"
 
-        /**
-         * Permission to write medical data records. This permission allows for the write of medical
-         * data of any type. Note that read permissions are specified per-type.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_WRITE_MEDICAL_DATA = PERMISSION_PREFIX + "WRITE_MEDICAL_DATA"
-
-        /**
-         * Allows an application to read the user's data about allergies and intolerances.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES"
-
-        /**
-         * Allows an application to read the user's data about medical conditions.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_CONDITIONS =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_CONDITIONS"
-
-        /**
-         * Allows an application to read the user's laboratory result data.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_LABORATORY_RESULTS"
-
-        /**
-         * Allows an application to read the user's medication data.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_MEDICATIONS =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_MEDICATIONS"
-
-        /**
-         * Allows an application to read the user's personal details.
-         *
-         * This is demographic information such as name, date of birth, contact details like address
-         * or telephone number and so on. For more examples see the FHIR Patient resource at
-         * https://www.hl7.org/fhir/patient.html.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_PERSONAL_DETAILS"
-
-        /**
-         * Allows an application to read the user's data about the practitioners who have interacted
-         * with them in their medical record. This is the information about the clinicians (doctors,
-         * nurses, etc) but also other practitioners (masseurs, physiotherapists, etc) who have been
-         * involved with the patient.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_PRACTITIONER_DETAILS"
-
-        /**
-         * Allows an application to read the user's pregnancy data.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_PREGNANCY =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_PREGNANCY"
-
-        /**
-         * Allows an application to read the user's data about medical procedures.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_PROCEDURES =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_PROCEDURES"
-
-        /**
-         * Allows an application to read the user's social history data.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_SOCIAL_HISTORY"
-
-        /**
-         * Allows an application to read the user's data about immunizations and vaccinations.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_VACCINES =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_VACCINES"
-
-        /**
-         * Allows an application to read the user's information about their encounters with health
-         * care practitioners, including things like location, time of appointment, and name of
-         * organization the visit was with. Despite the name visit it covers remote encounters such
-         * as telephone or videoconference appointments.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_VISITS =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_VISITS"
-
-        /**
-         * Allows an application to read the user's vital signs data.
-         *
-         * This feature is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. If not available,
-         * this permission will not be granted if requested.
-         *
-         * @sample androidx.health.connect.client.samples.RequestMedicalPermissions
-         */
-        @ExperimentalPersonalHealthRecordApi
-        const val PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS =
-            PERMISSION_PREFIX + "READ_MEDICAL_DATA_VITAL_SIGNS"
-
         // Read permissions for ACTIVITY.
         internal const val READ_ACTIVE_CALORIES_BURNED =
             PERMISSION_PREFIX + "READ_ACTIVE_CALORIES_BURNED"
@@ -575,30 +382,6 @@
             )
 
         /**
-         * Exposes all PHR write and read permissions.
-         *
-         * @return A list of permissions as Strings
-         */
-        @OptIn(ExperimentalPersonalHealthRecordApi::class)
-        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-        @JvmField
-        public val ALL_PERSONAL_HEALTH_RECORD_PERMISSIONS: List<String> = buildList {
-            add(PERMISSION_WRITE_MEDICAL_DATA)
-            add(PERMISSION_READ_MEDICAL_DATA_ALLERGIES_INTOLERANCES)
-            add(PERMISSION_READ_MEDICAL_DATA_CONDITIONS)
-            add(PERMISSION_READ_MEDICAL_DATA_LABORATORY_RESULTS)
-            add(PERMISSION_READ_MEDICAL_DATA_MEDICATIONS)
-            add(PERMISSION_READ_MEDICAL_DATA_PERSONAL_DETAILS)
-            add(PERMISSION_READ_MEDICAL_DATA_PRACTITIONER_DETAILS)
-            add(PERMISSION_READ_MEDICAL_DATA_PREGNANCY)
-            add(PERMISSION_READ_MEDICAL_DATA_PROCEDURES)
-            add(PERMISSION_READ_MEDICAL_DATA_SOCIAL_HISTORY)
-            add(PERMISSION_READ_MEDICAL_DATA_VACCINES)
-            add(PERMISSION_READ_MEDICAL_DATA_VISITS)
-            add(PERMISSION_READ_MEDICAL_DATA_VITAL_SIGNS)
-        }
-
-        /**
          * Exposes all write and read permissions.
          *
          * @return A list of permissions as Strings
@@ -611,10 +394,8 @@
                     listOf(WRITE_PERMISSION_PREFIX + it.value, READ_PERMISSION_PREFIX + it.value)
                 }
             )
-            addAll(ALL_PERSONAL_HEALTH_RECORD_PERMISSIONS)
             add(PERMISSION_WRITE_EXERCISE_ROUTE)
             add(PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND)
-            add(PERMISSION_READ_HEALTH_DATA_HISTORY)
         }
     }
 }
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FhirResource.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FhirResource.kt
deleted file mode 100644
index 9ee125b..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FhirResource.kt
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.health.connect.client.records
-
-import android.annotation.SuppressLint
-import androidx.annotation.IntDef
-import androidx.annotation.RestrictTo
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.records.PlatformFhirResource
-import androidx.health.connect.client.impl.platform.records.PlatformFhirResourceBuilder
-import androidx.health.connect.client.impl.platform.records.toPlatformFhirResourceType
-
-/**
- * A class to capture the FHIR resource data. This is the class used for all supported FHIR resource
- * types, which is a subset of the resource list on
- * [the official FHIR website](https://build.fhir.org/resourcelist.html) and might expand in the
- * future.
- *
- * FHIR stands for the [Fast Healthcare Interoperability Resources](https://hl7.org/fhir/).
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An
- * [UnsupportedOperationException] would be thrown if the feature is not available.
- *
- * @property type The type of this FHIR resource. This is extracted from the `resourceType` field in
- *   [data]. The list of supported types is a subset of the resource list on
- *   [the official FHIR website](https://build.fhir.org/resourcelist.html) and might expand in the
- *   future.
- * @property id The FHIR resource ID. This is extracted from the `id` field in [data]. More about
- *   FHIR resource ID in
- *   [https://www.hl7.org/fhir/resource.html#id](https://www.hl7.org/fhir/resource.html#id).
- * @property data The FHIR resource data in JSON representation.
- */
-@ExperimentalPersonalHealthRecordApi
-class FhirResource(@FhirResourceType val type: Int, val id: String, val data: String) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformFhirResource: PlatformFhirResource =
-        withPhrFeatureCheck(this::class) {
-            PlatformFhirResourceBuilder(type.toPlatformFhirResourceType(), id, data).build()
-        }
-
-    override fun toString() = toString(this, mapOf("type" to type, "id" to id, "data" to data))
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is FhirResource) return false
-
-        if (type != other.type) return false
-        if (id != other.id) return false
-        if (data != other.data) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = type
-        result = 31 * result + id.hashCode()
-        result = 31 * result + data.hashCode()
-        return result
-    }
-
-    companion object {
-        /** FHIR resource type for [Immunization](https://www.hl7.org/fhir/immunization.html). */
-        const val FHIR_RESOURCE_TYPE_IMMUNIZATION = 1
-
-        /**
-         * FHIR resource type for
-         * [AllergyIntolerance](https://www.hl7.org/fhir/allergyintolerance.html).
-         */
-        const val FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE = 2
-
-        /**
-         * FHIR resource type for a [FHIR Observation](https://www.hl7.org/fhir/observation.html).
-         */
-        const val FHIR_RESOURCE_TYPE_OBSERVATION = 3
-
-        /** FHIR resource type for a [FHIR Condition](https://www.hl7.org/fhir/condition.html). */
-        const val FHIR_RESOURCE_TYPE_CONDITION = 4
-
-        /** FHIR resource type for a [FHIR Procedure](https://www.hl7.org/fhir/procedure.html). */
-        const val FHIR_RESOURCE_TYPE_PROCEDURE = 5
-
-        /** FHIR resource type for a [FHIR Medication](https://www.hl7.org/fhir/medication.html). */
-        const val FHIR_RESOURCE_TYPE_MEDICATION = 6
-
-        /**
-         * FHIR resource type for a
-         * [FHIR MedicationRequest](https://www.hl7.org/fhir/medicationrequest.html).
-         */
-        const val FHIR_RESOURCE_TYPE_MEDICATION_REQUEST = 7
-
-        /**
-         * FHIR resource type for a
-         * [FHIR MedicationStatement](https://www.hl7.org/fhir/medicationstatement.html).
-         */
-        const val FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT = 8
-
-        /** FHIR resource type for a [FHIR Patient](https://www.hl7.org/fhir/patient.html). */
-        const val FHIR_RESOURCE_TYPE_PATIENT = 9
-
-        /**
-         * FHIR resource type for a [FHIR Practitioner](https://www.hl7.org/fhir/practitioner.html).
-         */
-        const val FHIR_RESOURCE_TYPE_PRACTITIONER = 10
-
-        /**
-         * FHIR resource type for a
-         * [FHIR PractitionerRole](https://www.hl7.org/fhir/practitionerrole.html).
-         */
-        const val FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE = 11
-
-        /** FHIR resource type for a [FHIR Encounter](https://www.hl7.org/fhir/encounter.html). */
-        const val FHIR_RESOURCE_TYPE_ENCOUNTER = 12
-
-        /** FHIR resource type for a [FHIR Location](https://www.hl7.org/fhir/location.html). */
-        const val FHIR_RESOURCE_TYPE_LOCATION = 13
-
-        /**
-         * FHIR resource type for a [FHIR Organization](https://www.hl7.org/fhir/organization.html).
-         */
-        const val FHIR_RESOURCE_TYPE_ORGANIZATION = 14
-
-        /** List of possible FHIR resource types. */
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        @IntDef(
-            FHIR_RESOURCE_TYPE_IMMUNIZATION,
-            FHIR_RESOURCE_TYPE_ALLERGY_INTOLERANCE,
-            FHIR_RESOURCE_TYPE_OBSERVATION,
-            FHIR_RESOURCE_TYPE_CONDITION,
-            FHIR_RESOURCE_TYPE_PROCEDURE,
-            FHIR_RESOURCE_TYPE_MEDICATION,
-            FHIR_RESOURCE_TYPE_MEDICATION_REQUEST,
-            FHIR_RESOURCE_TYPE_MEDICATION_STATEMENT,
-            FHIR_RESOURCE_TYPE_PATIENT,
-            FHIR_RESOURCE_TYPE_PRACTITIONER,
-            FHIR_RESOURCE_TYPE_PRACTITIONER_ROLE,
-            FHIR_RESOURCE_TYPE_ENCOUNTER,
-            FHIR_RESOURCE_TYPE_LOCATION,
-            FHIR_RESOURCE_TYPE_ORGANIZATION
-        )
-        @Retention(AnnotationRetention.SOURCE)
-        annotation class FhirResourceType
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FhirVersion.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FhirVersion.kt
deleted file mode 100644
index 3896052..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/FhirVersion.kt
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.health.connect.client.records
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.records.PlatformFhirVersion
-
-/**
- * Represents the FHIR version. This is designed according to
- * [the official FHIR versions](https://build.fhir.org/versions.html#versions) of the Fast
- * Healthcare Interoperability Resources (FHIR) standard. "label", which represents a 'working'
- * version, is not supported for now.
- *
- * The versions R4 (4.0.1) and R4B (4.3.0) are supported in Health Connect. Use
- * [isSupportedFhirVersion] to check whether a FHIR version is supported.
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An
- * [UnsupportedOperationException] would be thrown if the feature is not available.
- */
-@ExperimentalPersonalHealthRecordApi
-class FhirVersion(val major: Int, val minor: Int, val patch: Int) : Comparable<FhirVersion> {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformFhirVersion: PlatformFhirVersion =
-        withPhrFeatureCheck(this::class) {
-            PlatformFhirVersion.parseFhirVersion("$major.$minor.$patch")
-        }
-
-    override fun compareTo(other: FhirVersion): Int {
-        if (major != other.major) {
-            return if (major > other.major) 1 else -1
-        }
-        if (minor != other.minor) {
-            return if (minor > other.minor) 1 else -1
-        }
-        if (patch != other.patch) {
-            return if (patch > other.patch) 1 else -1
-        }
-        return 0
-    }
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is FhirVersion) return false
-
-        if (major != other.major) return false
-        if (minor != other.minor) return false
-        if (patch != other.patch) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = major
-        result = 31 * result + minor
-        result = 31 * result + patch
-        return result
-    }
-
-    override fun toString(): String {
-        return "${this::class.java.simpleName}@${Integer.toHexString(System.identityHashCode(this))}($major.$minor.$patch)"
-    }
-
-    /**
-     * Returns `true` if this [FhirVersion] is supported, `false` otherwise.
-     *
-     * This method is dependent on the version of HealthConnect installed on the device. To check if
-     * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-     * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument.
-     */
-    @SuppressLint("NewApi") // checked by `getFeatureStatus()`
-    fun isSupportedFhirVersion(): Boolean =
-        withPhrFeatureCheck(this::class, "isSupportedFhirVersion") {
-            platformFhirVersion.isSupportedFhirVersion
-        }
-
-    companion object {
-        private val VERSION_REGEX = Regex("(\\d+)\\.(\\d+)\\.(\\d+)")
-
-        /**
-         * Creates a [FhirVersion] object with the version of string format.
-         *
-         * The format should look like "4.0.1" which contains 3 numbers - major, minor and patch,
-         * separated by ".". This aligns with
-         * [the official FHIR versions](https://build.fhir.org/versions.html#versions). Note that
-         * the "label" is not supported for now, which represents a 'working' version.
-         */
-        @JvmStatic
-        fun parseFhirVersion(fhirVersionString: String): FhirVersion {
-            val result = VERSION_REGEX.find(fhirVersionString)
-            require(result != null) { "Invalid FHIR version string: $fhirVersionString" }
-            return FhirVersion(
-                result.groupValues[1].toInt(),
-                result.groupValues[2].toInt(),
-                result.groupValues[3].toInt()
-            )
-        }
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalDataSource.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalDataSource.kt
deleted file mode 100644
index 3a1d593..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalDataSource.kt
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.records
-
-import android.annotation.SuppressLint
-import android.net.Uri
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.records.PlatformMedicalDataSource
-import androidx.health.connect.client.impl.platform.records.PlatformMedicalDataSourceBuilder
-import java.time.Instant
-
-/**
- * A class to hold the data source information of medical data. Each [MedicalResource] is associated
- * with a `MedicalDataSource`.
- *
- * The medical data is represented using the Fast Healthcare Interoperability Resources
- * ([FHIR](https://hl7.org/fhir/)) standard.
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An
- * [UnsupportedOperationException] would be thrown if the feature is not available.
- *
- * @property id The unique identifier of this `MedicalDataSource`, generated by HealthConnect at
- *   creation time.
- * @property packageName The package name of the app that created this `MedicalDataSource`.
- * @property fhirBaseUri The FHIR base URI of this `MedicalDataSource`.
- * @property displayName The display name that describes this `MedicalDataSource`. This must be be
- *   unique per app.
- * @property fhirVersion The FHIR version of this `MedicalDataSource`. All [MedicalResource]s
- *   inserted under this `MedicalDataSource` must have the same FHIR version.
- * @property lastDataUpdateTime An [Instant] indicating a point in time when this
- *   `MedicalDataSource` was **last** used to update or insert any [MedicalResource]. `null` if that
- *   has never happened or no data is linked to this `MedicalDataSource`.
- */
-@ExperimentalPersonalHealthRecordApi
-class MedicalDataSource(
-    val id: String,
-    val packageName: String,
-    val fhirBaseUri: Uri,
-    val displayName: String,
-    val fhirVersion: FhirVersion,
-    val lastDataUpdateTime: Instant?
-) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformMedicalDataSource: PlatformMedicalDataSource =
-        withPhrFeatureCheck(this::class) {
-            PlatformMedicalDataSourceBuilder(
-                    id,
-                    packageName,
-                    fhirBaseUri,
-                    displayName,
-                    fhirVersion.platformFhirVersion
-                )
-                .setLastDataUpdateTime(lastDataUpdateTime)
-                .build()
-        }
-
-    override fun toString() =
-        toString(
-            this,
-            mapOf(
-                "id" to id,
-                "packageName" to packageName,
-                "fhirBaseUri" to fhirBaseUri,
-                "displayName" to displayName,
-                "fhirVersion" to fhirVersion,
-                "lastDataUpdateTime" to lastDataUpdateTime,
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (javaClass != other?.javaClass) return false
-
-        other as MedicalDataSource
-
-        if (id != other.id) return false
-        if (packageName != other.packageName) return false
-        if (fhirBaseUri != other.fhirBaseUri) return false
-        if (displayName != other.displayName) return false
-        if (fhirVersion != other.fhirVersion) return false
-        if (lastDataUpdateTime != other.lastDataUpdateTime) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = id.hashCode()
-        result = 31 * result + packageName.hashCode()
-        result = 31 * result + fhirBaseUri.hashCode()
-        result = 31 * result + displayName.hashCode()
-        result = 31 * result + fhirVersion.hashCode()
-        result = 31 * result + (lastDataUpdateTime?.hashCode() ?: 0)
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalResource.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalResource.kt
deleted file mode 100644
index b542697..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalResource.kt
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.health.connect.client.records
-
-import android.annotation.SuppressLint
-import androidx.annotation.IntDef
-import androidx.annotation.RestrictTo
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.records.PlatformMedicalResource
-import androidx.health.connect.client.impl.platform.records.PlatformMedicalResourceBuilder
-import androidx.health.connect.client.impl.platform.records.toPlatformMedicalResourceType
-import androidx.health.connect.client.permission.HealthPermission.Companion.PERMISSION_READ_MEDICAL_DATA_VACCINES
-import androidx.health.connect.client.records.MedicalResource.Companion.MEDICAL_RESOURCE_TYPE_VACCINES
-
-/**
- * A class to hold medical resource data.
- *
- * Unlike FHIR resource which is represented in Health Connect with [FhirResource],
- * `MedicalResource` is a Health Connect specific concept. A `MedicalResource` contains more than
- * just a [FhirResource], notably, it also contains:
- * - A [dataSourceId] representing ID of a [MedicalDataSource] where data of this `MedicalResource`
- *   come from.
- * - A [MedicalResourceType] indicating how HealthConnect categorizes the [FhirResource]. Each
- *   [MedicalResourceType] is tied to a read permission. For example, a client can only read
- *   `MedicalResource`s with [MEDICAL_RESOURCE_TYPE_VACCINES] if it holds
- *   [PERMISSION_READ_MEDICAL_DATA_VACCINES].
- *
- * The data representation follows the
- * [Fast Healthcare Interoperability Resources (FHIR)](https://hl7.org/fhir/) standard.
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An
- * [UnsupportedOperationException] would be thrown if the feature is not available.
- *
- * @property type The [MedicalResourceType] of this `MedicalResource`, this is assigned by Health
- *   Connect at insertion time. Clients should be aware that this list is non exhaustive and may
- *   increase in future releases when additional types will need to be handled.
- * @property id The unique ID of this `MedicalResource` represented by a [MedicalResourceId].
- * @property dataSourceId The ID of the [MedicalDataSource] where this `MedicalResource` comes from.
- * @property fhirVersion The FHIR version of [fhirResource].
- * @property fhirResource The [FhirResource] that this `MedicalResource` represents.
- */
-@ExperimentalPersonalHealthRecordApi
-class MedicalResource(
-    @MedicalResourceType val type: Int,
-    val id: MedicalResourceId,
-    val dataSourceId: String,
-    val fhirVersion: FhirVersion,
-    val fhirResource: FhirResource,
-) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformMedicalResource: PlatformMedicalResource =
-        withPhrFeatureCheck(this::class) {
-            PlatformMedicalResourceBuilder(
-                    type.toPlatformMedicalResourceType(),
-                    dataSourceId,
-                    fhirVersion.platformFhirVersion,
-                    fhirResource.platformFhirResource
-                )
-                .build()
-        }
-
-    override fun toString(): String =
-        toString(
-            this,
-            mapOf(
-                "type" to type,
-                "dataSourceId" to dataSourceId,
-                "fhirVersion" to fhirVersion,
-                "fhirResource" to fhirResource,
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is MedicalResource) return false
-
-        if (type != other.type) return false
-        if (id != other.id) return false
-        if (dataSourceId != other.dataSourceId) return false
-        if (fhirVersion != other.fhirVersion) return false
-        if (fhirResource != other.fhirResource) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = type
-        result = 31 * result + id.hashCode()
-        result = 31 * result + dataSourceId.hashCode()
-        result = 31 * result + fhirVersion.hashCode()
-        result = 31 * result + fhirResource.hashCode()
-        return result
-    }
-
-    companion object {
-        /** Medical resource type that labels data as vaccines. */
-        const val MEDICAL_RESOURCE_TYPE_VACCINES = 1
-
-        /** Medical resource type that labels data as allergies or intolerances. */
-        const val MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES = 2
-
-        /** Medical resource type that labels data as to do with pregnancy. */
-        const val MEDICAL_RESOURCE_TYPE_PREGNANCY = 3
-
-        /** Medical resource type that labels data as social history. */
-        const val MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY = 4
-
-        /** Medical resource type that labels data as vital signs. */
-        const val MEDICAL_RESOURCE_TYPE_VITAL_SIGNS = 5
-
-        /** Medical resource type that labels data as results (Laboratory or pathology). */
-        const val MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS = 6
-
-        /**
-         * Medical resource type that labels data as medical conditions (clinical condition,
-         * problem, diagnosis etc).
-         */
-        const val MEDICAL_RESOURCE_TYPE_CONDITIONS = 7
-
-        /**
-         * Medical resource type that labels data as procedures (actions taken on or for a patient).
-         */
-        const val MEDICAL_RESOURCE_TYPE_PROCEDURES = 8
-
-        /** Medical resource type that labels data as medication related. */
-        const val MEDICAL_RESOURCE_TYPE_MEDICATIONS = 9
-
-        /**
-         * Medical resource type that labels data as related to personal details, including
-         * demographic information such as name, date of birth, and contact details such as address
-         * or telephone numbers.
-         */
-        const val MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS = 10
-
-        /**
-         * Medical resource type that labels data as related to practitioners. This is information
-         * about the doctors, nurses, masseurs, physios, etc who have been involved with the user.
-         */
-        const val MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS = 11
-
-        /**
-         * Medical resource type that labels data as related to an encounter with a practitioner.
-         * This includes visits to healthcare providers and remote encounters such as telephone and
-         * videoconference appointments, and information about the time, location and organization
-         * who is being met.
-         */
-        const val MEDICAL_RESOURCE_TYPE_VISITS = 12
-
-        @RestrictTo(RestrictTo.Scope.LIBRARY)
-        @IntDef(
-            MEDICAL_RESOURCE_TYPE_ALLERGIES_INTOLERANCES,
-            MEDICAL_RESOURCE_TYPE_CONDITIONS,
-            MEDICAL_RESOURCE_TYPE_LABORATORY_RESULTS,
-            MEDICAL_RESOURCE_TYPE_MEDICATIONS,
-            MEDICAL_RESOURCE_TYPE_PERSONAL_DETAILS,
-            MEDICAL_RESOURCE_TYPE_PRACTITIONER_DETAILS,
-            MEDICAL_RESOURCE_TYPE_PREGNANCY,
-            MEDICAL_RESOURCE_TYPE_PROCEDURES,
-            MEDICAL_RESOURCE_TYPE_SOCIAL_HISTORY,
-            MEDICAL_RESOURCE_TYPE_VACCINES,
-            MEDICAL_RESOURCE_TYPE_VISITS,
-            MEDICAL_RESOURCE_TYPE_VITAL_SIGNS
-        )
-        @Retention(AnnotationRetention.SOURCE)
-        annotation class MedicalResourceType
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalResourceId.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalResourceId.kt
deleted file mode 100644
index baa357d..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/MedicalResourceId.kt
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.health.connect.client.records
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.records.PlatformMedicalResourceId
-import androidx.health.connect.client.impl.platform.records.toPlatformFhirResourceType
-import androidx.health.connect.client.impl.platform.records.toSdkMedicalResourceId
-import androidx.health.connect.client.records.FhirResource.Companion.FhirResourceType
-
-/**
- * A class to represent a unique identifier of a medical resource.
- *
- * This class contains a set of properties that together represent a unique identifier of a
- * [MedicalResource].
- *
- * The medical resource data representation follows the
- * [Fast Healthcare Interoperability Resources (FHIR)](https://hl7.org/fhir/) standard.
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An
- * [UnsupportedOperationException] would be thrown if the feature is not available.
- *
- * @property dataSourceId The ID of the [MedicalDataSource] where the data comes from.
- * @property fhirResourceType The type of the FHIR resource. It should be one of the values in
- *   [FhirResourceType].
- * @property fhirResourceId The ID of the FHIR resource. This must be unique per
- *   [MedicalDataSource].
- */
-@ExperimentalPersonalHealthRecordApi
-class MedicalResourceId(
-    val dataSourceId: String,
-    @FhirResourceType val fhirResourceType: Int,
-    val fhirResourceId: String
-) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformMedicalResourceId: PlatformMedicalResourceId =
-        withPhrFeatureCheck(this::class) {
-            PlatformMedicalResourceId(
-                dataSourceId,
-                fhirResourceType.toPlatformFhirResourceType(),
-                fhirResourceId
-            )
-        }
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is MedicalResourceId) return false
-
-        if (fhirResourceType != other.fhirResourceType) return false
-        if (dataSourceId != other.dataSourceId) return false
-        if (fhirResourceId != other.fhirResourceId) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = fhirResourceType
-        result = 31 * result + dataSourceId.hashCode()
-        result = 31 * result + fhirResourceId.hashCode()
-        return result
-    }
-
-    override fun toString() =
-        toString(
-            this,
-            mapOf(
-                "dataSourceId" to dataSourceId,
-                "fhirResourceType" to fhirResourceType,
-                "fhirResourceId" to fhirResourceId
-            )
-        )
-
-    companion object {
-        /**
-         * Creates a [MedicalResourceId] instance from `dataSourceId` and `fhirReference`.
-         *
-         * This method is dependent on the version of HealthConnect installed on the device. To
-         * check if it's available call [HealthConnectFeatures.getFeatureStatus] and pass
-         * [HealthConnectFeatures.FEATURE_PERSONAL_HEALTH_RECORD] as an argument.
-         *
-         * @param dataSourceId Represents ID of a [MedicalDataSource] where the data comes from.
-         * @param fhirReference The FHIR reference string typically extracted from the "reference"
-         *   field in one FHIR resource (source), pointing to another FHIR resource (target) within
-         *   the same data source, for example "Patient/034AB16".
-         * @throws IllegalArgumentException if the provided `dataSourceId` is not a valid ID, the
-         *   referenced resource type is not a valid [FhirResource] type supported by Health
-         *   Connect, or `fhirReference` does not match with the pattern of
-         *   `$fhir_resource_type/$fhir_resource_id`, where the FHIR resource type should align with
-         *   the resource list in
-         *   [the official FHIR website](https://build.fhir.org/resourcelist.html), and the FHIR
-         *   resource ID should also follow the pattern described in
-         *   [the official FHIR datatypes](https://build.fhir.org/datatypes.html#id).
-         */
-        @SuppressLint("NewApi") // checked with feature availability
-        @JvmStatic
-        fun fromFhirReference(dataSourceId: String, fhirReference: String): MedicalResourceId =
-            withPhrFeatureCheck(this::class, "fromFhirReference") {
-                PlatformMedicalResourceId.fromFhirReference(dataSourceId, fhirReference)
-                    .toSdkMedicalResourceId()
-            }
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt
index b17eb15..402e1ab 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/Utils.kt
@@ -52,11 +52,3 @@
     requireNotLess(min, name)
     requireNotMore(max, name)
 }
-
-internal fun toString(obj: Any, fieldMap: Map<String, Any?>): String {
-    val content =
-        fieldMap.entries.joinToString(separator = ", ", prefix = "(", postfix = ")") {
-            "${it.key}=${it.value}"
-        }
-    return "${obj.javaClass.simpleName}@${Integer.toHexString(System.identityHashCode(obj))}: $content"
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt
index 2bc628b..72fd060 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/records/metadata/Metadata.kt
@@ -34,8 +34,9 @@
     @param:RecordingMethod @property:RecordingMethod @get:RecordingMethod val recordingMethod: Int,
 
     /**
-     * Unique identifier of this data, assigned by Health Connect at insertion time. When [Record]
-     * is created before insertion, this takes a sentinel value, any assigned value will be ignored.
+     * Unique identifier of this data, assigned by the Android Health Platform at insertion time.
+     * When [Record] is created before insertion, this takes a sentinel value, any assigned value
+     * will be ignored.
      */
     public val id: String = EMPTY_ID,
 
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt
index bba3fed..25cab19 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/AggregateRequest.kt
@@ -21,7 +21,7 @@
 import androidx.health.connect.client.time.TimeRangeFilter
 
 /**
- * Request object to read aggregations for given [AggregateMetric]s in Health Connect.
+ * Request object to read aggregations for given [AggregateMetric]s in Android Health Platform.
  *
  * @param metrics Set of [AggregateMetric]s to aggregate.
  * @param timeRangeFilter The [TimeRangeFilter] to read from.
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ChangesTokenRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ChangesTokenRequest.kt
index 21d8b20..0a42c02c 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ChangesTokenRequest.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ChangesTokenRequest.kt
@@ -21,7 +21,7 @@
 import kotlin.reflect.KClass
 
 /**
- * Request object to fetch Changes-Token for given [recordTypes] in Health Connect.
+ * Request object to fetch Changes-Token for given [recordTypes] in Android Health Platform.
  *
  * @param recordTypes Set of [Record] types the token will observe change for.
  * @param dataOriginFilters Optional set of [DataOrigin] filters, default is empty set for no
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/CreateMedicalDataSourceRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/CreateMedicalDataSourceRequest.kt
deleted file mode 100644
index 088a6f0..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/CreateMedicalDataSourceRequest.kt
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.request
-
-import android.annotation.SuppressLint
-import android.net.Uri
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.request.PlatformCreateMedicalDataSourceRequest
-import androidx.health.connect.client.impl.platform.request.PlatformCreateMedicalDataSourceRequestBuilder
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.records.toString
-import kotlin.String
-
-/**
- * A create request for
- * [androidx.health.connect.client.HealthConnectClient.createMedicalDataSource].
- *
- * The medical data is represented using the Fast Healthcare Interoperability Resources
- * ([FHIR](https://hl7.org/fhir/)) standard.
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
- * thrown if the feature is not available.
- *
- * @property fhirBaseUri The FHIR base URI of the data source. For data coming from a FHIR server
- *   this should be the [FHIR base URL](https://hl7.org/fhir/R4/http.html#root) (e.g.
- *   `https://example.com/fhir/`). If the data is generated by an app without a FHIR URL,
- *   `fhirBaseUri` should be a unique and understandable URI defined by the app (e.g. `myapp://..`)
- *   that points to the source of the data. As an example, if a client app supports an
- *   [app deep linking](https://developer.android.com/training/app-links/deep-linking), this
- *   deeplink could be used as [fhirBaseUri]. The maximum length for the URI is 2000 characters.
- * @property displayName The display name that describes the data source. The maximum length for the
- *   display name is 90 characters. This must be unique per app.
- * @property fhirVersion The FHIR version of the medical data that will be linked to this data
- *   source. This has to be a version supported by Health Connect, as documented on the
- *   [FhirVersion].
- */
-@ExperimentalPersonalHealthRecordApi
-class CreateMedicalDataSourceRequest(
-    val fhirBaseUri: Uri,
-    val displayName: String,
-    val fhirVersion: FhirVersion
-) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformCreateMedicalDataSourceRequest: PlatformCreateMedicalDataSourceRequest =
-        withPhrFeatureCheck(this::class) {
-            PlatformCreateMedicalDataSourceRequestBuilder(
-                    fhirBaseUri,
-                    displayName,
-                    fhirVersion.platformFhirVersion
-                )
-                .build()
-        }
-
-    override fun toString() =
-        toString(
-            this,
-            mapOf(
-                "fhirBaseUri" to fhirBaseUri,
-                "displayName" to displayName,
-                "fhirVersion" to fhirVersion
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (javaClass != other?.javaClass) return false
-
-        other as CreateMedicalDataSourceRequest
-
-        if (fhirBaseUri != other.fhirBaseUri) return false
-        if (displayName != other.displayName) return false
-        if (fhirVersion != other.fhirVersion) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = fhirBaseUri.hashCode()
-        result = 31 * result + displayName.hashCode()
-        result = 31 * result + fhirVersion.hashCode()
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/DeleteMedicalResourcesRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/DeleteMedicalResourcesRequest.kt
deleted file mode 100644
index bf79764..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/DeleteMedicalResourcesRequest.kt
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.request
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.request.PlatformDeleteMedicalResourcesRequest
-import androidx.health.connect.client.impl.platform.request.PlatformDeleteMedicalResourcesRequestBuilder
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResource.Companion.MedicalResourceType
-import androidx.health.connect.client.records.toString
-
-/**
- * A class to delete [MedicalResource]s with [HealthConnectClient.deleteMedicalResources].
- *
- * At least one of [dataSourceIds] and [medicalResourceTypes] must be non-empty.
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
- * thrown if the feature is not available.
- *
- * @property dataSourceIds IDs of [MedicalDataSource]s to delete [MedicalResource]s from. This being
- *   empty is equivalent as if all [MedicalDataSource]s are set.
- * @property medicalResourceTypes [MedicalResourceType]s of [MedicalResource]s to delete. This being
- *   empty is equivalent as if all [MedicalResourceType]s are set.
- * @throws IllegalArgumentException if both of [dataSourceIds] and [medicalResourceTypes] are empty.
- * @see [HealthConnectClient.deleteMedicalResources]
- */
-@ExperimentalPersonalHealthRecordApi
-class DeleteMedicalResourcesRequest(
-    val dataSourceIds: Set<String> = emptySet<String>(),
-    val medicalResourceTypes: Set<Int> = emptySet<Int>()
-) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformReadMedicalResourcesRequest: PlatformDeleteMedicalResourcesRequest =
-        withPhrFeatureCheck(this::class) {
-            PlatformDeleteMedicalResourcesRequestBuilder()
-                .also { builder -> dataSourceIds.forEach { builder.addDataSourceId(it) } }
-                .also { builder ->
-                    medicalResourceTypes.forEach { builder.addMedicalResourceType(it) }
-                }
-                .build()
-        }
-
-    override fun toString() =
-        toString(
-            this,
-            mapOf("dataSourceIds" to dataSourceIds, "medicalResourceTypes" to medicalResourceTypes)
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is DeleteMedicalResourcesRequest) return false
-
-        if (dataSourceIds != other.dataSourceIds) return false
-        if (medicalResourceTypes != other.medicalResourceTypes) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = dataSourceIds.hashCode()
-        result = 31 * result + medicalResourceTypes.hashCode()
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/GetMedicalDataSourcesRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/GetMedicalDataSourcesRequest.kt
deleted file mode 100644
index 884def7..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/GetMedicalDataSourcesRequest.kt
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.request
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.request.PlatformGetMedicalDataSourcesRequest
-import androidx.health.connect.client.impl.platform.request.PlatformGetMedicalDataSourcesRequestBuilder
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.toString
-
-/**
- * Request to read medical data sources using [HealthConnectManager#getMedicalDataSources]
- *
- * If no package names are set in a request, all data sources from all packages will be returned.
- * Otherwise the response is limited to the requested package names per permission enforced in
- * [HealthConnectClient.getMedicalDataSources]
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
- * thrown if the feature is not available.
- *
- * @property packageNames Only [MedicalDataSource]s created by the apps with these package names
- *   will be returned.
- */
-@ExperimentalPersonalHealthRecordApi
-class GetMedicalDataSourcesRequest(val packageNames: List<String>) {
-
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformGetMedicalDataSourcesRequest: PlatformGetMedicalDataSourcesRequest =
-        withPhrFeatureCheck(this::class) {
-            PlatformGetMedicalDataSourcesRequestBuilder()
-                .apply { packageNames.forEach { addPackageName(it) } }
-                .build()
-        }
-
-    override fun toString() =
-        toString(
-            this,
-            mapOf(
-                "packageNames" to packageNames,
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (javaClass != other?.javaClass) return false
-
-        other as GetMedicalDataSourcesRequest
-
-        if (packageNames != other.packageNames) return false
-        if (platformGetMedicalDataSourcesRequest != other.platformGetMedicalDataSourcesRequest)
-            return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = packageNames.hashCode()
-        result = 31 * result + platformGetMedicalDataSourcesRequest.hashCode()
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesInitialRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesInitialRequest.kt
deleted file mode 100644
index a76493a..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesInitialRequest.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.request
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.records.toPlatformMedicalResourceType
-import androidx.health.connect.client.impl.platform.request.PlatformReadMedicalResourcesInitialRequestBuilder
-import androidx.health.connect.client.impl.platform.request.PlatformReadMedicalResourcesRequest
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResource.Companion.MedicalResourceType
-import androidx.health.connect.client.records.toString
-import androidx.health.connect.client.request.ReadMedicalResourcesRequest.Companion.DEFAULT_PAGE_SIZE
-
-/**
- * A class to make **initial** requests when reading [MedicalResource]s with
- * [HealthConnectClient.readMedicalResources].
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
- * thrown if the feature is not available.
- *
- * @property pageSize The maximum number of [MedicalResource]s to be read. Default value is
- *   [DEFAULT_PAGE_SIZE]. An [IllegalArgumentException] might be thrown if [pageSize] is deemed as
- *   invalid, such as too large.
- * @property medicalResourceType Only [MedicalResource]s with this [MedicalResourceType] will be
- *   returned. An [IllegalArgumentException] might be thrown if an invalid type is used, see
- *   [MedicalResourceType] for valid values.
- * @property medicalDataSourceIds Only [MedicalResource]s belong to one of the [MedicalDataSource]s
- *   represented by these IDs will be returned. An empty set is permitted, it means
- *   [MedicalResource]s from all available apps will be included in the response. An
- *   [IllegalArgumentException] might be thrown if any ID is deemed as invalid.
- * @see [HealthConnectClient.readMedicalResources]
- */
-@ExperimentalPersonalHealthRecordApi
-class ReadMedicalResourcesInitialRequest(
-    @MedicalResourceType val medicalResourceType: Int,
-    val medicalDataSourceIds: Set<String>,
-    pageSize: Int = DEFAULT_PAGE_SIZE
-) : ReadMedicalResourcesRequest(pageSize) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    override val platformReadMedicalResourcesRequest: PlatformReadMedicalResourcesRequest =
-        withPhrFeatureCheck(this::class) {
-            PlatformReadMedicalResourcesInitialRequestBuilder(
-                    medicalResourceType.toPlatformMedicalResourceType()
-                )
-                .addDataSourceIds(medicalDataSourceIds)
-                .setPageSize(pageSize)
-                .build()
-        }
-
-    override fun toString(): String =
-        toString(
-            this,
-            mapOf(
-                "medicalResourceType" to medicalResourceType,
-                "medicalDataSourceIds" to medicalDataSourceIds,
-                "pageSize" to pageSize,
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is ReadMedicalResourcesInitialRequest) return false
-        if (!super.equals(other)) return false
-
-        if (medicalResourceType != other.medicalResourceType) return false
-        if (medicalDataSourceIds != other.medicalDataSourceIds) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = super.hashCode()
-        result = 31 * result + medicalResourceType
-        result = 31 * result + medicalDataSourceIds.hashCode()
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesPageRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesPageRequest.kt
deleted file mode 100644
index f1dc250..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesPageRequest.kt
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.request
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.request.PlatformReadMedicalResourcesPageRequestBuilder
-import androidx.health.connect.client.impl.platform.request.PlatformReadMedicalResourcesRequest
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.toString
-import androidx.health.connect.client.request.ReadMedicalResourcesRequest.Companion.DEFAULT_PAGE_SIZE
-import androidx.health.connect.client.response.ReadMedicalResourcesResponse
-
-/**
- * A class to make **subsequent** requests when reading [MedicalResource]s with
- * [HealthConnectClient.readMedicalResources].
- *
- * This class should only be used after a successful initial request has been made with
- * [ReadMedicalResourcesInitialRequest].
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
- * thrown if the feature is not available.
- *
- * @property pageSize The maximum number of [MedicalResource]s to be read. Default value is
- *   [DEFAULT_PAGE_SIZE]. An [IllegalArgumentException] might be thrown if [pageSize] is deemed as
- *   invalid, such as too large.
- * @property pageToken The token to read the next page, this should be obtained from
- *   [ReadMedicalResourcesResponse.nextPageToken].
- * @see [HealthConnectClient.readMedicalResources]
- */
-@ExperimentalPersonalHealthRecordApi
-class ReadMedicalResourcesPageRequest(val pageToken: String, pageSize: Int = DEFAULT_PAGE_SIZE) :
-    ReadMedicalResourcesRequest(pageSize) {
-
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    override val platformReadMedicalResourcesRequest: PlatformReadMedicalResourcesRequest =
-        withPhrFeatureCheck(this::class) {
-            PlatformReadMedicalResourcesPageRequestBuilder(pageToken).setPageSize(pageSize).build()
-        }
-
-    override fun toString(): String =
-        toString(
-            this,
-            mapOf(
-                "pageToken" to pageToken,
-                "pageSize" to pageSize,
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is ReadMedicalResourcesPageRequest) return false
-        if (!super.equals(other)) return false
-
-        if (pageToken != other.pageToken) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = super.hashCode()
-        result = 31 * result + pageToken.hashCode()
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesRequest.kt
deleted file mode 100644
index cbfb4be..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadMedicalResourcesRequest.kt
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.request
-
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.impl.platform.request.PlatformReadMedicalResourcesRequest
-import androidx.health.connect.client.records.MedicalResource
-
-/**
- * A base class for reading [MedicalResource]s with [HealthConnectClient.readMedicalResources].
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
- * thrown if the feature is not available.
- *
- * @property pageSize The maximum number of [MedicalResource]s to be read.
- * @see [HealthConnectClient.readMedicalResources]
- */
-@ExperimentalPersonalHealthRecordApi
-abstract class ReadMedicalResourcesRequest internal constructor(val pageSize: Int) {
-    internal abstract val platformReadMedicalResourcesRequest: PlatformReadMedicalResourcesRequest
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is ReadMedicalResourcesRequest) return false
-
-        if (pageSize != other.pageSize) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        return pageSize
-    }
-
-    companion object {
-        /** Default value for [ReadMedicalResourcesRequest.pageSize]. */
-        const val DEFAULT_PAGE_SIZE = 1000
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
index c3c69f3..f0120f9 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/ReadRecordsRequest.kt
@@ -45,7 +45,8 @@
     )
 
 /**
- * Request object to read [Record]s in Health Connect determined by time range and other filters.
+ * Request object to read [Record]s in Android Health Platform determined by time range and other
+ * filters.
  *
  * Returned collection will contain a
  * [androidx.health.connect.client.response.ReadRecordsResponse.pageToken] if number of records
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/UpsertMedicalResourceRequest.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/UpsertMedicalResourceRequest.kt
deleted file mode 100644
index ffe3931..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/request/UpsertMedicalResourceRequest.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.request
-
-import android.annotation.SuppressLint
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.feature.withPhrFeatureCheck
-import androidx.health.connect.client.impl.platform.request.PlatformUpsertMedicalResourceRequest
-import androidx.health.connect.client.impl.platform.request.PlatformUpsertMedicalResourceRequestBuilder
-import androidx.health.connect.client.records.FhirVersion
-import androidx.health.connect.client.records.MedicalDataSource
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.MedicalResourceId
-import androidx.health.connect.client.records.toString
-
-/**
- * A request class for both inserting and updating [MedicalResource]s.
- *
- * From [dataSourceId], fhir resource type and fhir resource ID extracted from [data], a
- * [MedicalResourceId] will be constructed. If there already exists a [MedicalResource] with that
- * [MedicalResourceId] in Health Connect, then that [MedicalResource] will be updated, otherwise a
- * new [MedicalResource] will be inserted.
- *
- * The data representation follows the
- * [Fast Healthcare Interoperability Resources (FHIR)](https://hl7.org/fhir/) standard.
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD] as an argument.
- *
- * @property dataSourceId The ID of an **existing** [MedicalDataSource] where the data being
- *   inserted comes from.
- * @property fhirVersion The FHIR version being used for [data]. This must match [dataSourceId]'s
- *   [MedicalDataSource.fhirVersion].
- * @property data The FHIR resource data in JSON representation.
- */
-@ExperimentalPersonalHealthRecordApi
-class UpsertMedicalResourceRequest(
-    val dataSourceId: String,
-    val fhirVersion: FhirVersion,
-    val data: String
-) {
-    @SuppressLint("NewApi") // already checked with a feature availability check
-    internal val platformUpsertMedicalResourceRequest: PlatformUpsertMedicalResourceRequest =
-        withPhrFeatureCheck(UpsertMedicalResourceRequest::class.java.simpleName) {
-            PlatformUpsertMedicalResourceRequestBuilder(
-                    dataSourceId,
-                    fhirVersion.platformFhirVersion,
-                    data
-                )
-                .build()
-        }
-
-    override fun toString(): String =
-        toString(
-            this,
-            mapOf(
-                "dataSourceId" to dataSourceId,
-                "fhirVersion" to fhirVersion,
-                "data" to data,
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is UpsertMedicalResourceRequest) return false
-
-        if (dataSourceId != other.dataSourceId) return false
-        if (fhirVersion != other.fhirVersion) return false
-        if (data != other.data) return false
-        if (platformUpsertMedicalResourceRequest != other.platformUpsertMedicalResourceRequest)
-            return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = dataSourceId.hashCode()
-        result = 31 * result + fhirVersion.hashCode()
-        result = 31 * result + data.hashCode()
-        result = 31 * result + platformUpsertMedicalResourceRequest.hashCode()
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/response/ChangesResponse.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/response/ChangesResponse.kt
index 0bfdf52..b2d38ab 100644
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/response/ChangesResponse.kt
+++ b/health/connect/connect-client/src/main/java/androidx/health/connect/client/response/ChangesResponse.kt
@@ -24,7 +24,7 @@
  * If [changesTokenExpired] is true, clients need to generate a new one. This typically happens when
  * clients have not synced changelog for extended period of time.
  *
- * @property changes List of observed changes from Health Connect.
+ * @property changes List of observed changes from Android Health Platform.
  * @property nextChangesToken Changes-token to keep for future calls.
  * @property hasMore Whether there are more changes available to be fetched again.
  * @property changesTokenExpired Whether requested Changes-Token has expired.
diff --git a/health/connect/connect-client/src/main/java/androidx/health/connect/client/response/ReadMedicalResourcesResponse.kt b/health/connect/connect-client/src/main/java/androidx/health/connect/client/response/ReadMedicalResourcesResponse.kt
deleted file mode 100644
index 6c69b86..0000000
--- a/health/connect/connect-client/src/main/java/androidx/health/connect/client/response/ReadMedicalResourcesResponse.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.health.connect.client.response
-
-import androidx.health.connect.client.HealthConnectClient
-import androidx.health.connect.client.HealthConnectFeatures
-import androidx.health.connect.client.HealthConnectFeatures.Companion.FEATURE_PERSONAL_HEALTH_RECORD
-import androidx.health.connect.client.feature.ExperimentalPersonalHealthRecordApi
-import androidx.health.connect.client.records.MedicalResource
-import androidx.health.connect.client.records.toString
-import androidx.health.connect.client.request.ReadMedicalResourcesPageRequest
-
-/**
- * A class to hold responses for requests made with [HealthConnectClient.readMedicalResources].
- *
- * This feature is dependent on the version of HealthConnect installed on the device. To check if
- * it's available call [HealthConnectFeatures.getFeatureStatus] and pass
- * [FEATURE_PERSONAL_HEALTH_RECORD] as an argument. An [UnsupportedOperationException] would be
- * thrown if the feature is not available.
- *
- * @property medicalResources A list of [MedicalResource]s.
- * @property nextPageToken A token which can be used with [ReadMedicalResourcesPageRequest] to read
- *   the next page. `null` if there are no more pages available.
- * @property remainingCount The total number of [MedicalResource]s remaining, excluding the ones in
- *   this response.
- * @see [HealthConnectClient.readMedicalResources]
- */
-@ExperimentalPersonalHealthRecordApi
-class ReadMedicalResourcesResponse(
-    val medicalResources: List<MedicalResource>,
-    val nextPageToken: String?,
-    val remainingCount: Int
-) {
-    override fun toString(): String =
-        toString(
-            this,
-            mapOf(
-                "medicalResources" to medicalResources,
-                "nextPageToken" to nextPageToken,
-                "remainingCount" to remainingCount
-            )
-        )
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is ReadMedicalResourcesResponse) return false
-
-        if (remainingCount != other.remainingCount) return false
-        if (medicalResources != other.medicalResources) return false
-        if (nextPageToken != other.nextPageToken) return false
-
-        return true
-    }
-
-    override fun hashCode(): Int {
-        var result = remainingCount
-        result = 31 * result + medicalResources.hashCode()
-        result = 31 * result + (nextPageToken?.hashCode() ?: 0)
-        return result
-    }
-}
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImplTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImplTest.kt
index cf4c11a..9d9e453 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImplTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/feature/HealthConnectFeaturesPlatformImplTest.kt
@@ -22,6 +22,7 @@
 import androidx.health.connect.client.feature.HealthConnectFeaturesPlatformImpl.Companion.getFeatureStatus
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import com.google.common.truth.Truth.assertThat
+import org.junit.Ignore
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.robolectric.annotation.Config
@@ -33,8 +34,8 @@
 private const val FEATURE_ADDED_IN_CURRENT_U_EXT = 4
 private const val FEATURE_ADDED_IN_V = 5
 
-private const val PREVIOUS_U_EXT = 11
-private const val CURRENT_U_EXT = 12
+private const val PREVIOUS_U_EXT = 12
+private const val CURRENT_U_EXT = 13
 private val FEATURE_TO_VERSION_INFO_MAP: Map<Int, HealthConnectVersionInfo> =
     mapOf(
         FEATURE_ADDED_IN_U to
@@ -68,12 +69,10 @@
 
 // TODO(b/271840604): Added test case for Android V once this library compiles against SDK 35.
 @RunWith(AndroidJUnit4::class)
-@Config(
-    minSdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE,
-    maxSdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE
-)
+@Config(minSdk = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
 class HealthConnectFeaturesPlatformImplTest {
 
+    @Ignore // b/376314864
     @Test
     fun getFeatureStatus_currentUExtension() {
         setUExtensionLevel(CURRENT_U_EXT)
@@ -86,6 +85,7 @@
         assertUnavailable(FEATURE_ADDED_IN_V, FEATURE_NON_EXISTENT)
     }
 
+    @Ignore // b/376314864
     @Test
     fun getFeatureStatus_previousUExtension() {
         setUExtensionLevel(PREVIOUS_U_EXT)
diff --git a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
index b197c38..0484e26 100644
--- a/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
+++ b/health/connect/connect-client/src/test/java/androidx/health/connect/client/impl/HealthConnectClientImplTest.kt
@@ -137,9 +137,7 @@
 
 @Suppress("GoodTime") // Safe to use in test setup
 @RunWith(AndroidJUnit4::class)
-@OptIn(
-    kotlinx.coroutines.ExperimentalCoroutinesApi::class,
-)
+@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)
 class HealthConnectClientImplTest {
 
     private lateinit var healthConnectClient: HealthConnectClientImpl
diff --git a/health/connect/connect-testing/build.gradle b/health/connect/connect-testing/build.gradle
index 4ea267e..8d7085f 100644
--- a/health/connect/connect-testing/build.gradle
+++ b/health/connect/connect-testing/build.gradle
@@ -47,7 +47,7 @@
     }
     namespace = "androidx.health.connect.testing"
     testOptions.unitTests.includeAndroidResources = true
-    compileSdk = 36
+    compileSdk = 35
 }
 
 androidx {
diff --git a/health/connect/connect-testing/samples/build.gradle b/health/connect/connect-testing/samples/build.gradle
index c79f293..6cc75d9 100644
--- a/health/connect/connect-testing/samples/build.gradle
+++ b/health/connect/connect-testing/samples/build.gradle
@@ -51,5 +51,5 @@
     defaultConfig {
         minSdk = 26
     }
-    compileSdk = 36
+    compileSdk = 35
 }
diff --git a/hilt/integration-tests/viewmodelapp/build.gradle b/hilt/integration-tests/viewmodelapp/build.gradle
index e3dbeec..6e7d83b 100644
--- a/hilt/integration-tests/viewmodelapp/build.gradle
+++ b/hilt/integration-tests/viewmodelapp/build.gradle
@@ -37,13 +37,13 @@
 }
 
 dependencies {
-    implementation("androidx.activity:activity:1.10.1")
+    implementation(project(":activity:activity-ktx"))
     implementation(project(":fragment:fragment-ktx"))
     implementation(libs.kotlinStdlib)
     implementation(libs.hiltAndroid)
     ksp(libs.hiltCompiler)
 
-    androidTestImplementation("androidx.activity:activity:1.10.1")
+    androidTestImplementation(project(":activity:activity-ktx"))
     androidTestImplementation(project(":fragment:fragment-ktx"))
     androidTestImplementation(libs.truth)
     androidTestImplementation(libs.testCore)
diff --git a/hilt/integration-tests/workerapp/build.gradle b/hilt/integration-tests/workerapp/build.gradle
index 3a116fb..cab8619 100644
--- a/hilt/integration-tests/workerapp/build.gradle
+++ b/hilt/integration-tests/workerapp/build.gradle
@@ -37,7 +37,7 @@
 }
 
 dependencies {
-    implementation("androidx.activity:activity:1.10.1")
+    implementation(project(":activity:activity"))
     implementation(project(":work:work-runtime-ktx"))
     implementation(project(":hilt:hilt-work"))
     ksp(project(":hilt:hilt-compiler"))
@@ -45,7 +45,7 @@
     implementation(libs.hiltAndroid)
     ksp(libs.hiltCompiler)
 
-    androidTestImplementation("androidx.activity:activity:1.10.1")
+    androidTestImplementation(project(":activity:activity"))
     androidTestImplementation(libs.truth)
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testExtJunit)
diff --git a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
index 2315800..250957c 100644
--- a/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
+++ b/javascriptengine/javascriptengine/src/androidTest/java/androidx/javascriptengine/WebViewJavaScriptSandboxTest.java
@@ -34,7 +34,6 @@
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -849,7 +848,6 @@
 
     @Test
     @LargeTest
-    @Ignore("b/401528686")
     public void testHeapSizeEnforced() throws Throwable {
         final long maxHeapSize = REASONABLE_HEAP_SIZE;
         // We need to beat the v8 optimizer to ensure it really allocates the required memory. Note
@@ -954,7 +952,6 @@
 
     @Test
     @LargeTest
-    @Ignore("b/401528686")
     public void testIsolateCreationAfterOom() throws Throwable {
         final long maxHeapSize = REASONABLE_HEAP_SIZE;
         // We need to beat the v8 optimizer to ensure it really allocates the required memory. Note
@@ -1501,7 +1498,6 @@
 
     @Test
     @LargeTest
-    @Ignore("b/401528686")
     public void testOomOutsideOfEvaluation() throws Throwable {
         final Context context = ApplicationProvider.getApplicationContext();
         final ListenableFuture<JavaScriptSandbox> jsSandboxFuture =
diff --git a/libraryversions.toml b/libraryversions.toml
index 91dda80..e59cca5 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -4,9 +4,9 @@
 ANNOTATION_EXPERIMENTAL = "1.5.0-alpha01"
 APPCOMPAT = "1.8.0-alpha01"
 APPFUNCTIONS = "1.0.0-alpha01"
-APPSEARCH = "1.1.0"
+APPSEARCH = "1.1.0-rc01"
 ARCH_CORE = "2.3.0-alpha01"
-ASYNCLAYOUTINFLATER = "1.1.0"
+ASYNCLAYOUTINFLATER = "1.1.0-rc01"
 AUTOFILL = "1.3.0-rc01"
 BENCHMARK = "1.4.0-alpha10"
 BIOMETRIC = "1.4.0-alpha03"
@@ -22,16 +22,16 @@
 CAR_APP = "1.8.0-alpha01"
 COLLECTION = "1.5.0"
 COMPOSE = "1.9.0-alpha01"
-COMPOSE_MATERIAL3 = "1.4.0-alpha11"
-COMPOSE_MATERIAL3_ADAPTIVE = "1.2.0-alpha02"
+COMPOSE_MATERIAL3 = "1.4.0-alpha10"
+COMPOSE_MATERIAL3_ADAPTIVE = "1.2.0-alpha01"
 COMPOSE_MATERIAL3_COMMON = "1.0.0-alpha01"
-COMPOSE_MATERIAL3_XR = "1.0.0-alpha06"
+COMPOSE_MATERIAL3_XR = "1.0.0-alpha05"
 COMPOSE_RUNTIME = "1.9.0-alpha01"
 CONSTRAINTLAYOUT = "2.3.0-alpha01"
 CONSTRAINTLAYOUT_COMPOSE = "1.2.0-alpha01"
 CONSTRAINTLAYOUT_CORE = "1.2.0-alpha01"
 COORDINATORLAYOUT = "1.3.0-rc01"
-CORE = "1.16.0-rc01"
+CORE = "1.16.0-beta01"
 CORE_ANIMATION = "1.0.0"
 CORE_ANIMATION_TESTING = "1.0.0"
 CORE_APPDIGEST = "1.0.0-alpha01"
@@ -59,7 +59,7 @@
 DOCUMENTFILE = "1.1.0-alpha02"
 DRAGANDDROP = "1.1.0-alpha01"
 DRAWERLAYOUT = "1.3.0-alpha01"
-DYNAMICANIMATION = "1.1.0"
+DYNAMICANIMATION = "1.1.0-rc01"
 EMOJI = "1.2.0-alpha03"
 EMOJI2 = "1.5.0-rc01"
 ENTERPRISE = "1.1.0-rc01"
@@ -74,7 +74,7 @@
 GRAPHICS_PATH = "1.0.0-rc01"
 GRAPHICS_SHAPES = "1.1.0-alpha01"
 GRIDLAYOUT = "1.1.0-beta02"
-HEALTH_CONNECT = "1.3.0-alpha01"
+HEALTH_CONNECT = "1.1.0-beta01"
 HEALTH_CONNECT_TESTING_QUARANTINE = "1.0.0-alpha03"
 HEALTH_SERVICES_CLIENT = "1.1.0-alpha05"
 HEIFWRITER = "1.1.0-alpha05"
@@ -110,13 +110,12 @@
 PERFORMANCE = "1.0.0-alpha01"
 PREFERENCE = "1.3.0-alpha01"
 PRINT = "1.1.0-beta01"
-PRIVACYSANDBOX_ACTIVITY = "1.0.0-alpha02"
+PRIVACYSANDBOX_ACTIVITY = "1.0.0-alpha01"
 PRIVACYSANDBOX_ADS = "1.1.0-beta12"
-PRIVACYSANDBOX_ONDEVICEPERSONALIZATION = "1.0.0-alpha01"
 PRIVACYSANDBOX_PLUGINS = "1.0.0-alpha03"
 PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha17"
 PRIVACYSANDBOX_TOOLS = "1.0.0-alpha13"
-PRIVACYSANDBOX_UI = "1.0.0-alpha15"
+PRIVACYSANDBOX_UI = "1.0.0-alpha14"
 PROFILEINSTALLER = "1.5.0-alpha01"
 RECOMMENDATION = "1.1.0-alpha01"
 RECYCLERVIEW = "1.5.0-alpha01"
@@ -152,7 +151,7 @@
 TRACING = "1.3.0-beta01"
 TRACING_DRIVER = "1.0.0-alpha01"
 TRACING_PERFETTO = "1.0.0"
-TRANSITION = "1.6.0-rc01"
+TRANSITION = "1.6.0-beta01"
 TV = "1.0.0-alpha12"
 TVPROVIDER = "1.1.0-alpha02"
 TV_MATERIAL = "1.1.0-alpha01"
@@ -163,21 +162,21 @@
 VIEWPAGER = "1.1.0-rc01"
 VIEWPAGER2 = "1.2.0-alpha01"
 WEAR = "1.4.0-alpha01"
-WEAR_COMPOSE = "1.5.0-alpha12"
-WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha35"
+WEAR_COMPOSE = "1.5.0-alpha11"
+WEAR_COMPOSE_MATERIAL3 = "1.0.0-alpha34"
 WEAR_CORE = "1.0.0-alpha01"
 WEAR_INPUT = "1.2.0-alpha03"
 WEAR_INPUT_TESTING = "1.2.0-alpha03"
 WEAR_ONGOING = "1.1.0-alpha02"
 WEAR_PHONE_INTERACTIONS = "1.1.0-rc01"
-WEAR_PROTOLAYOUT = "1.3.0-beta01"
+WEAR_PROTOLAYOUT = "1.3.0-alpha10"
 WEAR_REMOTE_INTERACTIONS = "1.1.0-rc01"
-WEAR_TILES = "1.5.0-beta01"
+WEAR_TILES = "1.5.0-alpha10"
 WEAR_TOOLING_PREVIEW = "1.0.0-rc01"
 WEAR_WATCHFACE = "1.3.0-alpha06"
 WEBKIT = "1.14.0-alpha01"
 # Adding a comment to prevent merge conflicts for Window artifact
-WINDOW = "1.7.0-alpha01"
+WINDOW = "1.5.0-alpha01"
 WINDOW_EXTENSIONS = "1.5.0-alpha01"
 WINDOW_EXTENSIONS_CORE = "1.1.0-alpha01"
 WINDOW_SIDECAR = "1.0.0-rc01"
@@ -277,7 +276,6 @@
 PRINT = { group = "androidx.print", atomicGroupVersion = "versions.PRINT" }
 PRIVACYSANDBOX_ACTIVITY = { group = "androidx.privacysandbox.activity", atomicGroupVersion = "versions.PRIVACYSANDBOX_ACTIVITY" }
 PRIVACYSANDBOX_ADS = { group = "androidx.privacysandbox.ads", atomicGroupVersion = "versions.PRIVACYSANDBOX_ADS" }
-PRIVACYSANDBOX_ONDEVICEPERSONALIZATION = { group = "androidx.privacysandbox.ondevicepersonalization", atomicGroupVersion = "versions.PRIVACYSANDBOX_ONDEVICEPERSONALIZATION" }
 PRIVACYSANDBOX_PLUGINS = { group = "androidx.privacysandbox.plugins", atomicGroupVersion = "versions.PRIVACYSANDBOX_PLUGINS" }
 PRIVACYSANDBOX_SDKRUNTIME = { group = "androidx.privacysandbox.sdkruntime", atomicGroupVersion = "versions.PRIVACYSANDBOX_SDKRUNTIME" }
 PRIVACYSANDBOX_TOOLS = { group = "androidx.privacysandbox.tools", atomicGroupVersion = "versions.PRIVACYSANDBOX_TOOLS" }
diff --git a/lifecycle/lifecycle-viewmodel-compose/build.gradle b/lifecycle/lifecycle-viewmodel-compose/build.gradle
index c3ceac6..9e950e2 100644
--- a/lifecycle/lifecycle-viewmodel-compose/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-compose/build.gradle
@@ -89,7 +89,7 @@
                 // but it doesn't work in androidx.
                 // See aosp/1804059
                 implementation(project(":lifecycle:lifecycle-common-java8"))
-                implementation("androidx.activity:activity-compose:1.10.1")
+                implementation(project(":activity:activity-compose"))
             }
         }
     }
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/commonMain/kotlin/androidx/lifecycle/serialization/SavedStateHandleDelegate.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/commonMain/kotlin/androidx/lifecycle/serialization/SavedStateHandleDelegate.kt
index 5823da04..ca977e4 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/commonMain/kotlin/androidx/lifecycle/serialization/SavedStateHandleDelegate.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/commonMain/kotlin/androidx/lifecycle/serialization/SavedStateHandleDelegate.kt
@@ -33,8 +33,7 @@
  * @sample androidx.lifecycle.delegateExplicitKey
  * @param key An optional [String] key to use for storing the value in the [SavedStateHandle]. A
  *   default key will be generated if it's omitted or when 'null' is passed.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @param init The function to provide the initial value of the property.
  * @return A property delegate that manages the saving and restoring of the value.
  */
@@ -52,8 +51,7 @@
  * @param serializer The [KSerializer] to use for serializing and deserializing the value.
  * @param key An optional [String] key to use for storing the value in the [SavedStateHandle]. A
  *   default key will be generated if it's omitted or when 'null' is passed.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @param init The function to provide the initial value of the property.
  * @return A property delegate that manages the saving and restoring of the value.
  */
diff --git a/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavType.android.kt b/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavType.android.kt
index 910b068..774685d 100644
--- a/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavType.android.kt
+++ b/navigation/navigation-common/src/androidMain/kotlin/androidx/navigation/NavType.android.kt
@@ -35,8 +35,11 @@
     public actual open fun parseValue(value: String, previousValue: T): T = parseValue(value)
 
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public actual fun parseAndPut(bundle: SavedState, key: String, value: String): T =
-        navTypeParseAndPut(bundle, key, value)
+    public actual fun parseAndPut(bundle: SavedState, key: String, value: String): T {
+        val parsedValue = parseValue(value)
+        put(bundle, key, parsedValue)
+        return parsedValue
+    }
 
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public actual fun parseAndPut(
@@ -44,47 +47,73 @@
         key: String,
         value: String?,
         previousValue: T
-    ): T = navTypeParseAndPut(bundle, key, value, previousValue)
+    ): T {
+        if (!bundle.read { contains(key) }) {
+            throw IllegalArgumentException("There is no previous value in this savedState.")
+        }
+        if (value != null) {
+            val parsedCombinedValue = parseValue(value, previousValue)
+            put(bundle, key, parsedCombinedValue)
+            return parsedCombinedValue
+        }
+        return previousValue
+    }
 
-    public actual open fun serializeAsValue(value: T): String = value.toString()
+    public actual open fun serializeAsValue(value: T): String {
+        return value.toString()
+    }
 
     public actual open val name: String = "nav_type"
 
     public actual open fun valueEquals(value: T, other: T): Boolean = value == other
 
-    override fun toString(): String = name
+    override fun toString(): String {
+        return name
+    }
 
     public actual companion object {
         @Suppress("NON_FINAL_MEMBER_IN_OBJECT", "UNCHECKED_CAST") // this needs to be open to
         // maintain api compatibility and type cast are unchecked
         @JvmStatic
         public actual open fun fromArgType(type: String?, packageName: String?): NavType<*> {
-            return navTypeFromArgType(type)
-                ?: when {
-                    ReferenceType.name == type -> return ReferenceType
-                    !type.isNullOrEmpty() -> {
-                        try {
-                            var className: String
-                            className =
-                                if (type.startsWith(".") && packageName != null) {
-                                    packageName + type
-                                } else {
-                                    type
-                                }
-                            val isArray = type.endsWith("[]")
-                            if (isArray) className = className.substring(0, className.length - 2)
-                            val clazz = Class.forName(className)
-                            return requireNotNull(
-                                parseSerializableOrParcelableType(clazz, isArray)
-                            ) {
-                                "$className is not Serializable or Parcelable."
+            when {
+                IntType.name == type -> return IntType
+                IntArrayType.name == type -> return IntArrayType
+                IntListType.name == type -> return IntListType
+                LongType.name == type -> return LongType
+                LongArrayType.name == type -> return LongArrayType
+                LongListType.name == type -> return LongListType
+                BoolType.name == type -> return BoolType
+                BoolArrayType.name == type -> return BoolArrayType
+                BoolListType.name == type -> return BoolListType
+                StringType.name == type -> return StringType
+                StringArrayType.name == type -> return StringArrayType
+                StringListType.name == type -> return StringListType
+                FloatType.name == type -> return FloatType
+                FloatArrayType.name == type -> return FloatArrayType
+                FloatListType.name == type -> return FloatListType
+                ReferenceType.name == type -> return ReferenceType
+                !type.isNullOrEmpty() -> {
+                    try {
+                        var className: String
+                        className =
+                            if (type.startsWith(".") && packageName != null) {
+                                packageName + type
+                            } else {
+                                type
                             }
-                        } catch (e: ClassNotFoundException) {
-                            throw RuntimeException(e)
+                        val isArray = type.endsWith("[]")
+                        if (isArray) className = className.substring(0, className.length - 2)
+                        val clazz = Class.forName(className)
+                        return requireNotNull(parseSerializableOrParcelableType(clazz, isArray)) {
+                            "$className is not Serializable or Parcelable."
                         }
+                    } catch (e: ClassNotFoundException) {
+                        throw RuntimeException(e)
                     }
-                    else -> StringType
                 }
+            }
+            return StringType
         }
 
         @Suppress("UNCHECKED_CAST")
@@ -112,42 +141,74 @@
                 else -> null
             }
 
+        @Suppress("UNCHECKED_CAST") // needed for cast to NavType<Any>
         @JvmStatic
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-        public actual fun inferFromValue(value: String): NavType<Any> = navTypeInferFromValue(value)
+        public actual fun inferFromValue(value: String): NavType<Any> {
+            // because we allow Long literals without the L suffix at runtime,
+            // the order of IntType and LongType parsing has to be reversed compared to Safe Args
+            try {
+                IntType.parseValue(value)
+                return IntType as NavType<Any>
+            } catch (e: IllegalArgumentException) {
+                // ignored, proceed to check next type
+            }
+            try {
+                LongType.parseValue(value)
+                return LongType as NavType<Any>
+            } catch (e: IllegalArgumentException) {
+                // ignored, proceed to check next type
+            }
+            try {
+                FloatType.parseValue(value)
+                return FloatType as NavType<Any>
+            } catch (e: IllegalArgumentException) {
+                // ignored, proceed to check next type
+            }
+            try {
+                BoolType.parseValue(value)
+                return BoolType as NavType<Any>
+            } catch (e: IllegalArgumentException) {
+                // ignored, proceed to check next type
+            }
+            return StringType as NavType<Any>
+        }
 
         @Suppress("UNCHECKED_CAST") // needed for cast to NavType<Any>
         @JvmStatic
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         public actual fun inferFromValueType(value: Any?): NavType<Any> {
-            return navTypeInferFromValueType(value)
-                ?: when {
-                    value is Array<*> && value.isArrayOf<String>() ->
-                        StringArrayType as NavType<Any>
-                    value!!.javaClass.isArray &&
-                        Parcelable::class
-                            .java
-                            .isAssignableFrom(value.javaClass.componentType!!) -> {
-                        ParcelableArrayType(value.javaClass.componentType as Class<Parcelable>)
-                            as NavType<Any>
-                    }
-                    value.javaClass.isArray &&
-                        Serializable::class
-                            .java
-                            .isAssignableFrom(value.javaClass.componentType!!) -> {
-                        SerializableArrayType(value.javaClass.componentType as Class<Serializable>)
-                            as NavType<Any>
-                    }
-                    value is Parcelable -> ParcelableType(value.javaClass) as NavType<Any>
-                    value is Enum<*> -> EnumType(value.javaClass) as NavType<Any>
-                    value is Serializable -> SerializableType(value.javaClass) as NavType<Any>
-                    else -> {
-                        throw IllegalArgumentException(
-                            "Object of type ${value.javaClass.name} is not supported for navigation " +
-                                "arguments."
-                        )
-                    }
+            return when {
+                value is Int -> IntType as NavType<Any>
+                value is IntArray -> IntArrayType as NavType<Any>
+                value is Long -> LongType as NavType<Any>
+                value is LongArray -> LongArrayType as NavType<Any>
+                value is Float -> FloatType as NavType<Any>
+                value is FloatArray -> FloatArrayType as NavType<Any>
+                value is Boolean -> BoolType as NavType<Any>
+                value is BooleanArray -> BoolArrayType as NavType<Any>
+                value is String || value == null -> StringType as NavType<Any>
+                value is Array<*> && value.isArrayOf<String>() -> StringArrayType as NavType<Any>
+                value.javaClass.isArray &&
+                    Parcelable::class.java.isAssignableFrom(value.javaClass.componentType!!) -> {
+                    ParcelableArrayType(value.javaClass.componentType as Class<Parcelable>)
+                        as NavType<Any>
                 }
+                value.javaClass.isArray &&
+                    Serializable::class.java.isAssignableFrom(value.javaClass.componentType!!) -> {
+                    SerializableArrayType(value.javaClass.componentType as Class<Serializable>)
+                        as NavType<Any>
+                }
+                value is Parcelable -> ParcelableType(value.javaClass) as NavType<Any>
+                value is Enum<*> -> EnumType(value.javaClass) as NavType<Any>
+                value is Serializable -> SerializableType(value.javaClass) as NavType<Any>
+                else -> {
+                    throw IllegalArgumentException(
+                        "Object of type ${value.javaClass.name} is not supported for navigation " +
+                            "arguments."
+                    )
+                }
+            }
         }
 
         @JvmField public actual val IntType: NavType<Int> = IntNavType()
diff --git a/navigation/navigation-common/src/commonMain/kotlin/androidx/navigation/NavType.kt b/navigation/navigation-common/src/commonMain/kotlin/androidx/navigation/NavType.kt
index 4ef5c3c..9a17a96 100644
--- a/navigation/navigation-common/src/commonMain/kotlin/androidx/navigation/NavType.kt
+++ b/navigation/navigation-common/src/commonMain/kotlin/androidx/navigation/NavType.kt
@@ -16,21 +16,6 @@
 package androidx.navigation
 
 import androidx.annotation.RestrictTo
-import androidx.navigation.NavType.Companion.BoolArrayType
-import androidx.navigation.NavType.Companion.BoolListType
-import androidx.navigation.NavType.Companion.BoolType
-import androidx.navigation.NavType.Companion.FloatArrayType
-import androidx.navigation.NavType.Companion.FloatListType
-import androidx.navigation.NavType.Companion.FloatType
-import androidx.navigation.NavType.Companion.IntArrayType
-import androidx.navigation.NavType.Companion.IntListType
-import androidx.navigation.NavType.Companion.IntType
-import androidx.navigation.NavType.Companion.LongArrayType
-import androidx.navigation.NavType.Companion.LongListType
-import androidx.navigation.NavType.Companion.LongType
-import androidx.navigation.NavType.Companion.StringArrayType
-import androidx.navigation.NavType.Companion.StringListType
-import androidx.navigation.NavType.Companion.StringType
 import androidx.savedstate.SavedState
 import androidx.savedstate.read
 import androidx.savedstate.write
@@ -301,98 +286,6 @@
     }
 }
 
-internal fun <T> NavType<T>.navTypeParseAndPut(bundle: SavedState, key: String, value: String): T {
-    val parsedValue = parseValue(value)
-    put(bundle, key, parsedValue)
-    return parsedValue
-}
-
-internal fun <T> NavType<T>.navTypeParseAndPut(
-    bundle: SavedState,
-    key: String,
-    value: String?,
-    previousValue: T
-): T {
-    if (!bundle.read { contains(key) }) {
-        throw IllegalArgumentException("There is no previous value in this savedState.")
-    }
-    if (value != null) {
-        val parsedCombinedValue = parseValue(value, previousValue)
-        put(bundle, key, parsedCombinedValue)
-        return parsedCombinedValue
-    }
-    return previousValue
-}
-
-internal fun navTypeFromArgType(type: String?): NavType<*>? {
-    when {
-        IntType.name == type -> return IntType
-        IntArrayType.name == type -> return IntArrayType
-        IntListType.name == type -> return IntListType
-        LongType.name == type -> return LongType
-        LongArrayType.name == type -> return LongArrayType
-        LongListType.name == type -> return LongListType
-        BoolType.name == type -> return BoolType
-        BoolArrayType.name == type -> return BoolArrayType
-        BoolListType.name == type -> return BoolListType
-        StringType.name == type -> return StringType
-        StringArrayType.name == type -> return StringArrayType
-        StringListType.name == type -> return StringListType
-        FloatType.name == type -> return FloatType
-        FloatArrayType.name == type -> return FloatArrayType
-        FloatListType.name == type -> return FloatListType
-    }
-    return null
-}
-
-@Suppress("UNCHECKED_CAST") // needed for cast to NavType<Any>
-internal fun navTypeInferFromValue(value: String): NavType<Any> {
-    // because we allow Long literals without the L suffix at runtime,
-    // the order of IntType and LongType parsing has to be reversed compared to Safe Args
-    try {
-        IntType.parseValue(value)
-        return IntType as NavType<Any>
-    } catch (_: IllegalArgumentException) {
-        // ignored, proceed to check next type
-    }
-    try {
-        LongType.parseValue(value)
-        return LongType as NavType<Any>
-    } catch (_: IllegalArgumentException) {
-        // ignored, proceed to check next type
-    }
-    try {
-        FloatType.parseValue(value)
-        return FloatType as NavType<Any>
-    } catch (_: IllegalArgumentException) {
-        // ignored, proceed to check next type
-    }
-    try {
-        BoolType.parseValue(value)
-        return BoolType as NavType<Any>
-    } catch (_: IllegalArgumentException) {
-        // ignored, proceed to check next type
-    }
-    return StringType as NavType<Any>
-}
-
-@Suppress("UNCHECKED_CAST") // needed for cast to NavType<Any>
-internal fun navTypeInferFromValueType(value: Any?): NavType<Any>? {
-    return when (value) {
-        is Int -> IntType as NavType<Any>
-        is IntArray -> IntArrayType as NavType<Any>
-        is Long -> LongType as NavType<Any>
-        is LongArray -> LongArrayType as NavType<Any>
-        is Float -> FloatType as NavType<Any>
-        is FloatArray -> FloatArrayType as NavType<Any>
-        is Boolean -> BoolType as NavType<Any>
-        is BooleanArray -> BoolArrayType as NavType<Any>
-        is String,
-        null -> StringType as NavType<Any>
-        else -> null
-    }
-}
-
 internal class IntNavType : NavType<Int>(false) {
     override val name: String
         get() = "integer"
diff --git a/navigation/navigation-common/src/nonAndroidMain/kotlin/androidx/navigation/NavType.nonAndroid.kt b/navigation/navigation-common/src/nonAndroidMain/kotlin/androidx/navigation/NavType.nonAndroid.kt
index 842306b..9c18841 100644
--- a/navigation/navigation-common/src/nonAndroidMain/kotlin/androidx/navigation/NavType.nonAndroid.kt
+++ b/navigation/navigation-common/src/nonAndroidMain/kotlin/androidx/navigation/NavType.nonAndroid.kt
@@ -28,11 +28,14 @@
 
     public actual abstract fun parseValue(value: String): T
 
-    public actual open fun parseValue(value: String, previousValue: T): T = parseValue(value)
+    public actual open fun parseValue(value: String, previousValue: T): T {
+        implementedInJetBrainsFork()
+    }
 
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-    public actual fun parseAndPut(bundle: SavedState, key: String, value: String): T =
-        navTypeParseAndPut(bundle, key, value)
+    public actual fun parseAndPut(bundle: SavedState, key: String, value: String): T {
+        implementedInJetBrainsFork()
+    }
 
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
     public actual fun parseAndPut(
@@ -40,58 +43,83 @@
         key: String,
         value: String?,
         previousValue: T
-    ): T = navTypeParseAndPut(bundle, key, value, previousValue)
+    ): T {
+        implementedInJetBrainsFork()
+    }
 
-    public actual open fun serializeAsValue(value: T): String = value.toString()
+    public actual open fun serializeAsValue(value: T): String {
+        implementedInJetBrainsFork()
+    }
 
-    public actual open val name: String = "nav_type"
+    public actual open val name: String
+        get() = implementedInJetBrainsFork()
 
-    public actual open fun valueEquals(value: T, other: T): Boolean = value == other
+    public actual open fun valueEquals(value: T, other: T): Boolean {
+        implementedInJetBrainsFork()
+    }
 
     public actual companion object {
         @JvmStatic
         @Suppress("NON_FINAL_MEMBER_IN_OBJECT")
-        public actual open fun fromArgType(type: String?, packageName: String?): NavType<*> =
-            navTypeFromArgType(type)
-                ?: if (!type.isNullOrEmpty()) {
-                    throw IllegalArgumentException(
-                        "Object of type $type is not supported for navigation arguments."
-                    )
-                } else {
-                    StringType
-                }
+        public actual open fun fromArgType(type: String?, packageName: String?): NavType<*> {
+            implementedInJetBrainsFork()
+        }
 
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         @JvmStatic
-        public actual fun inferFromValue(value: String): NavType<Any> = navTypeInferFromValue(value)
+        public actual fun inferFromValue(value: String): NavType<Any> {
+            implementedInJetBrainsFork()
+        }
 
-        @Suppress("UNCHECKED_CAST") // needed for cast to NavType<Any>
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
         @JvmStatic
-        public actual fun inferFromValueType(value: Any?): NavType<Any> =
-            navTypeInferFromValueType(value)
-                ?: if (value is Array<*>) {
-                    StringArrayType as NavType<Any>
-                } else {
-                    throw IllegalArgumentException(
-                        "$value is not supported for navigation arguments."
-                    )
-                }
+        public actual fun inferFromValueType(value: Any?): NavType<Any> {
+            implementedInJetBrainsFork()
+        }
 
-        public actual val IntType: NavType<Int> = IntNavType()
-        public actual val IntArrayType: NavType<IntArray?> = IntArrayNavType()
-        public actual val IntListType: NavType<List<Int>?> = IntListNavType()
-        public actual val LongType: NavType<Long> = LongNavType()
-        public actual val LongArrayType: NavType<LongArray?> = LongArrayNavType()
-        public actual val LongListType: NavType<List<Long>?> = LongListNavType()
-        public actual val FloatType: NavType<Float> = FloatNavType()
-        public actual val FloatArrayType: NavType<FloatArray?> = FloatArrayNavType()
-        public actual val FloatListType: NavType<List<Float>?> = FloatListNavType()
-        public actual val BoolType: NavType<Boolean> = BoolNavType()
-        public actual val BoolArrayType: NavType<BooleanArray?> = BoolArrayNavType()
-        public actual val BoolListType: NavType<List<Boolean>?> = BoolListNavType()
-        public actual val StringType: NavType<String?> = StringNavType()
-        public actual val StringArrayType: NavType<Array<String>?> = StringArrayNavType()
-        public actual val StringListType: NavType<List<String>?> = StringListNavType()
+        public actual val IntType: NavType<Int>
+            get() = implementedInJetBrainsFork()
+
+        public actual val IntArrayType: NavType<IntArray?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val IntListType: NavType<List<Int>?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val LongType: NavType<Long>
+            get() = implementedInJetBrainsFork()
+
+        public actual val LongArrayType: NavType<LongArray?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val LongListType: NavType<List<Long>?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val FloatType: NavType<Float>
+            get() = implementedInJetBrainsFork()
+
+        public actual val FloatArrayType: NavType<FloatArray?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val FloatListType: NavType<List<Float>?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val BoolType: NavType<Boolean>
+            get() = implementedInJetBrainsFork()
+
+        public actual val BoolArrayType: NavType<BooleanArray?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val BoolListType: NavType<List<Boolean>?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val StringType: NavType<String?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val StringArrayType: NavType<Array<String>?>
+            get() = implementedInJetBrainsFork()
+
+        public actual val StringListType: NavType<List<String>?>
+            get() = implementedInJetBrainsFork()
     }
 }
diff --git a/navigation/navigation-testing/build.gradle b/navigation/navigation-testing/build.gradle
index 15f15a0..9a3f4d9 100644
--- a/navigation/navigation-testing/build.gradle
+++ b/navigation/navigation-testing/build.gradle
@@ -91,10 +91,6 @@
 
         jvmCommonTest {
             dependsOn(commonTest)
-            dependencies {
-                runtimeOnly(libs.kotlinTestJunit)
-                implementation(libs.junit)
-            }
         }
 
         desktopMain {
diff --git a/navigation/navigation-testing/src/jvmCommonTest/kotlin/androidx/navigation/testing/TestSavedStateHandleFactory.kt b/navigation/navigation-testing/src/jvmCommonTest/kotlin/androidx/navigation/testing/TestSavedStateHandleFactory.kt
deleted file mode 100644
index b87204c..0000000
--- a/navigation/navigation-testing/src/jvmCommonTest/kotlin/androidx/navigation/testing/TestSavedStateHandleFactory.kt
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright 2025 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.navigation.testing
-
-import androidx.kruth.assertThat
-import androidx.lifecycle.SavedStateHandle
-import androidx.navigation.CollectionNavType
-import androidx.navigation.NavType
-import androidx.navigation.toRoute
-import androidx.savedstate.SavedState
-import androidx.savedstate.read
-import androidx.savedstate.write
-import kotlin.reflect.typeOf
-import kotlinx.serialization.Serializable
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@RunWith(JUnit4::class)
-class TestSavedStateHandleBuilder {
-
-    @Test
-    fun primitiveArgument() {
-        @Serializable class TestClass(val arg: Int)
-
-        val handle = SavedStateHandle(TestClass(12))
-        assertThat(handle.contains("arg")).isTrue()
-        val arg = handle.get<Int>("arg")
-        assertThat(arg).isEqualTo(12)
-    }
-
-    @Test
-    fun complexPathArgument() {
-        @Serializable class TestClass(val arg: TestType)
-
-        val typeMap = mapOf(typeOf<TestType>() to testNavType)
-        val handle = SavedStateHandle(TestClass(TestType("test", 1)), typeMap)
-        assertThat(handle.contains("arg")).isTrue()
-        val arg = handle.get<String>("arg")
-        assertThat(arg).isEqualTo("1.test")
-    }
-
-    @Test
-    fun complexQueryArgument() {
-        @Serializable class TestClass(val arg: List<TestType>)
-
-        val arg = listOf(TestType("test", 1), TestType("test2", 2))
-        val typeMap = mapOf(typeOf<List<TestType>>() to testCollectionNavType)
-        val handle = SavedStateHandle(TestClass(arg), typeMap)
-        assertThat(handle.contains("arg")).isTrue()
-        val retrievedArg = handle.get<Array<String>>("arg")
-        assertThat(retrievedArg.contentEquals(arrayOf("1.test", "2.test2"))).isTrue()
-    }
-
-    @Test
-    fun multipleArgument() {
-        @Serializable class TestClass(val arg: Boolean, val arg2: Float)
-
-        val handle = SavedStateHandle(TestClass(true, 1.0F))
-        assertThat(handle.contains("arg")).isTrue()
-        assertThat(handle.contains("arg2")).isTrue()
-
-        val arg = handle.get<Boolean>("arg")
-        assertThat(arg).isEqualTo(true)
-
-        val arg2 = handle.get<Float>("arg2")
-        assertThat(arg2).isEqualTo(1.0F)
-    }
-
-    @Test
-    fun nullArgument() {
-        @Serializable class TestClass(val arg: String?)
-
-        val handle = SavedStateHandle(TestClass(null))
-        assertThat(handle.contains("arg")).isTrue()
-        val arg = handle.get<TestType>("arg")
-        assertThat(arg).isNull()
-    }
-
-    @Test(expected = NotImplementedError::class)
-    fun nullLiteralArgument() {
-        @Serializable class TestClass(val arg: String)
-
-        val handle = SavedStateHandle(TestClass("null"))
-        assertThat(handle.contains("arg")).isTrue()
-        val arg = handle.get<String>("arg")
-        assertThat(arg).isEqualTo("null")
-    }
-
-    @Test(expected = NotImplementedError::class)
-    fun emptyStringArgument() {
-        @Serializable class TestClass(val arg: String)
-
-        val handle = SavedStateHandle(TestClass(""))
-        assertThat(handle.contains("arg")).isTrue()
-        val arg = handle.get<String>("arg")
-        assertThat(arg).isEqualTo("")
-    }
-
-    @Test
-    fun emptyStringListArgument() {
-        @Serializable class TestClass(val arg: List<String>)
-
-        val handle = SavedStateHandle(TestClass(emptyList()))
-        assertThat(handle.contains("arg")).isTrue()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).isEmpty()
-    }
-
-    @Test
-    fun nullStringListArgumentEmptyList() {
-        @Serializable class TestClass(val arg: List<String>?)
-
-        val handle = SavedStateHandle(TestClass(null))
-        // on null list, we default to an empty list if there is not defaultValue
-        assertThat(handle.contains("arg")).isTrue()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).isEmpty()
-    }
-
-    @Test
-    fun nullStringListArgumentUseDefault() {
-        @Serializable class TestClass(val arg: List<String>? = null)
-
-        val handle = SavedStateHandle(TestClass())
-        // on null list, we default to the default value since it is present, so the handle
-        // here will not contain the arg. The arg will be auto-populated during decoding.
-        assertThat(handle.contains("arg")).isFalse()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).isNull()
-    }
-
-    @Test
-    fun emptyStringListArgumentUseDefault() {
-        @Serializable class TestClass(val arg: List<String> = listOf("one", "two"))
-
-        val handle = SavedStateHandle(TestClass(emptyList()))
-        // on empty list, we default to the default value since it is present, so the handle
-        // here will not contain the arg. The arg will be auto-populated during decoding.
-        assertThat(handle.contains("arg")).isFalse()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).containsExactly("one", "two")
-    }
-
-    @Test
-    fun emptyIntListArgument() {
-        @Serializable class TestClass(val arg: List<Int>)
-
-        val handle = SavedStateHandle(TestClass(emptyList()))
-        assertThat(handle.contains("arg")).isTrue()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).isEmpty()
-    }
-
-    @Test
-    fun emptyIntListArgumentUseDefault() {
-        @Serializable class TestClass(val arg: List<Int> = listOf(1, 2))
-
-        val handle = SavedStateHandle(TestClass(emptyList()))
-        // on empty list, we default to the default value since it is present, so the handle
-        // here will not contain the arg. The arg will be auto-populated during decoding.
-        assertThat(handle.contains("arg")).isFalse()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).containsExactly(1, 2)
-    }
-
-    @Test
-    fun nullIntListArgumentEmptyList() {
-        @Serializable class TestClass(val arg: List<String>?)
-
-        val handle = SavedStateHandle(TestClass(null))
-        // on null list, we default to an empty list if there is not defaultValue
-        assertThat(handle.contains("arg")).isTrue()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).isEmpty()
-    }
-
-    @Test
-    fun nullIntListArgumentUseDefault() {
-        @Serializable class TestClass(val arg: List<String>? = null)
-
-        val handle = SavedStateHandle(TestClass())
-        // on null list, we default to the default value since it is present, so the handle
-        // here will not contain the arg. The arg will be auto-populated during decoding.
-        assertThat(handle.contains("arg")).isFalse()
-        val route = handle.toRoute<TestClass>()
-        assertThat(route.arg).isNull()
-    }
-
-    @Test
-    fun defaultPrimitiveArgument() {
-        @Serializable class TestClass(val arg: Int = 1)
-
-        val handle = SavedStateHandle(TestClass())
-        assertThat(handle.contains("arg")).isTrue()
-        val arg = handle.get<Int>("arg")
-        assertThat(arg).isEqualTo(1)
-    }
-
-    @Test
-    fun defaultComplexArgument() {
-        @Serializable class TestClass(val arg: TestType = TestType("test", 1))
-
-        val typeMap = mapOf(typeOf<TestType>() to testNavType)
-        val handle = SavedStateHandle(TestClass(), typeMap)
-        assertThat(handle.contains("arg")).isTrue()
-        val arg = handle.get<String>("arg")
-        assertThat(arg).isEqualTo("1.test")
-    }
-
-    @Test
-    fun handleToRoutePathArg() {
-        @Serializable class TestClass(val arg: TestType)
-
-        val typeMap = mapOf(typeOf<TestType>() to testNavType)
-        val handle = SavedStateHandle(TestClass(TestType("test", 1)), typeMap)
-
-        val route = handle.toRoute<TestClass>(typeMap)
-        assertThat(route.arg.name).isEqualTo("test")
-        assertThat(route.arg.id).isEqualTo(1)
-    }
-
-    @Test
-    fun handleToRouteQueryArg() {
-        @Serializable class TestClass(val arg: List<TestType>)
-
-        val arg = listOf(TestType("test", 1), TestType("test2", 2))
-        val typeMap = mapOf(typeOf<List<TestType>>() to testCollectionNavType)
-        val handle = SavedStateHandle(TestClass(arg), typeMap)
-        val route = handle.toRoute<TestClass>(typeMap)
-        assertThat(route.arg).containsExactlyElementsIn(arg).inOrder()
-    }
-}
-
-@Serializable private data class TestType(val name: String, val id: Int)
-
-private val testNavType =
-    object : NavType<TestType>(false) {
-        override fun put(bundle: SavedState, key: String, value: TestType) {
-            bundle.write { putString(key, serializeAsValue(value)) }
-        }
-
-        override fun get(bundle: SavedState, key: String): TestType =
-            parseValue(bundle.read { getString(key) })
-
-        override fun parseValue(value: String): TestType {
-            val args = value.split(".")
-            return TestType(id = args.first().toInt(), name = args.last())
-        }
-
-        override fun serializeAsValue(value: TestType) = "${value.id}.${value.name}"
-    }
-
-private val testCollectionNavType: NavType<List<TestType>> =
-    object : CollectionNavType<List<TestType>>(false) {
-        override fun serializeAsValues(value: List<TestType>): List<String> =
-            value.map { "${it.id}.${it.name}" }
-
-        override fun put(bundle: SavedState, key: String, value: List<TestType>) {
-            bundle.write { putStringArray(key, serializeAsValues(value).toTypedArray()) }
-        }
-
-        override fun emptyCollection(): List<TestType> = emptyList()
-
-        override fun get(bundle: SavedState, key: String): List<TestType> {
-            return bundle
-                .read { getStringArray(key) }
-                .map {
-                    val args = it.split(".")
-                    TestType(id = args.first().toInt(), name = args.last())
-                }
-        }
-
-        override fun parseValue(value: String) = listOf(testNavType.parseValue(value))
-
-        override fun parseValue(value: String, previousValue: List<TestType>): List<TestType> =
-            previousValue.plus(testNavType.parseValue(value))
-    }
diff --git a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavBackStackProviderTest.kt b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavBackStackProviderTest.kt
index 342815b..6d199e3 100644
--- a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavBackStackProviderTest.kt
+++ b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/NavBackStackProviderTest.kt
@@ -17,9 +17,6 @@
 package androidx.navigation3
 
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.DisposableEffect
-import androidx.compose.runtime.mutableStateListOf
-import androidx.compose.runtime.remember
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.kruth.assertThat
 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -102,223 +99,4 @@
         assertThat(calledWrapBackStackCount).isEqualTo(1)
         assertThat(calledWrapContentCount).isEqualTo(1)
     }
-
-    @Test
-    fun wrapperFunctionsCallOrder() {
-        var callOrder = -1
-        var backStackProvider: Int = -1
-        var entryProvider: Int = -1
-        val provider =
-            object : NavLocalProvider {
-                @Composable
-                override fun ProvideToBackStack(
-                    backStack: List<Any>,
-                    content: @Composable (() -> Unit)
-                ) {
-                    backStackProvider = ++callOrder
-                    content.invoke()
-                }
-
-                @Composable
-                override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
-                    entryProvider = ++callOrder
-                    entry.content.invoke(entry.key)
-                }
-            }
-        lateinit var backStack: MutableList<Any>
-
-        composeTestRule.setContent {
-            backStack = remember { mutableStateListOf("something") }
-            NavBackStackProvider(
-                backStack = backStack,
-                localProviders = listOf(provider),
-                entryProvider = { NavEntry("something") {} }
-            ) { entries ->
-                entries.lastOrNull()?.content?.invoke("something")
-            }
-        }
-
-        composeTestRule.waitForIdle()
-
-        assertThat(backStackProvider).isEqualTo(0)
-        assertThat(entryProvider).isEqualTo(1)
-    }
-
-    @Test
-    fun nestedWrapperFunctionsCallOrder() {
-        var callOrder = -1
-        var outerBackStackProvider: Int = -1
-        var outerEntryProvider: Int = -1
-        var innerBackStackProvider: Int = -1
-        var innerEntryProvider: Int = -1
-        val innerProvider =
-            object : NavLocalProvider {
-                @Composable
-                override fun ProvideToBackStack(
-                    backStack: List<Any>,
-                    content: @Composable (() -> Unit)
-                ) {
-                    innerBackStackProvider = ++callOrder
-                    content.invoke()
-                }
-
-                @Composable
-                override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
-                    innerEntryProvider = ++callOrder
-                    entry.content.invoke(entry.key)
-                }
-            }
-
-        val outerProvider =
-            object : NavLocalProvider {
-                @Composable
-                override fun ProvideToBackStack(
-                    backStack: List<Any>,
-                    content: @Composable (() -> Unit)
-                ) {
-                    outerBackStackProvider = ++callOrder
-                    content.invoke()
-                }
-
-                @Composable
-                override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
-                    outerEntryProvider = ++callOrder
-                    entry.content.invoke(entry.key)
-                }
-            }
-        lateinit var backStack: MutableList<Any>
-
-        composeTestRule.setContent {
-            backStack = remember { mutableStateListOf("something") }
-            NavBackStackProvider(
-                backStack = backStack,
-                localProviders = listOf(outerProvider, innerProvider),
-                entryProvider = { NavEntry("something") {} }
-            ) { entries ->
-                entries.lastOrNull()?.content?.invoke("something")
-            }
-        }
-
-        composeTestRule.waitForIdle()
-
-        assertThat(outerBackStackProvider).isEqualTo(0)
-        assertThat(innerBackStackProvider).isEqualTo(1)
-        assertThat(outerEntryProvider).isEqualTo(2)
-        assertThat(innerEntryProvider).isEqualTo(3)
-    }
-
-    @Test
-    fun wrapperFunctionsDisposeOrder() {
-        var callOrder = -1
-        var backStackProvider: Int = -1
-        var entryProvider: Int = -1
-        val provider =
-            object : NavLocalProvider {
-                @Composable
-                override fun ProvideToBackStack(
-                    backStack: List<Any>,
-                    content: @Composable (() -> Unit)
-                ) {
-                    DisposableEffect(backStack.lastOrNull()) {
-                        onDispose { backStackProvider = ++callOrder }
-                    }
-                    content.invoke()
-                }
-
-                @Composable
-                override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
-                    DisposableEffect(entry.key) { onDispose { entryProvider = ++callOrder } }
-                    entry.content.invoke(entry.key)
-                }
-            }
-        lateinit var backStack: MutableList<Any>
-        composeTestRule.setContent {
-            backStack = remember { mutableStateListOf("something") }
-            NavBackStackProvider(
-                backStack = backStack,
-                localProviders =
-                    listOf(
-                        provider,
-                    ),
-                entryProvider = { NavEntry("something") {} }
-            ) { entries ->
-                entries.lastOrNull()?.content?.invoke("something")
-            }
-        }
-
-        composeTestRule.runOnIdle { backStack.clear() }
-        composeTestRule.waitForIdle()
-
-        assertThat(entryProvider).isEqualTo(0)
-        assertThat(backStackProvider).isEqualTo(1)
-    }
-
-    @Test
-    fun nestedWrapperFunctionsDisposeOrder() {
-        var callOrder = -1
-        var outerBackStackProvider: Int = -1
-        var outerEntryProvider: Int = -1
-        var innerBackStackProvider: Int = -1
-        var innerEntryProvider: Int = -1
-        val innerProvider =
-            object : NavLocalProvider {
-                @Composable
-                override fun ProvideToBackStack(
-                    backStack: List<Any>,
-                    content: @Composable (() -> Unit)
-                ) {
-                    DisposableEffect(backStack.lastOrNull()) {
-                        onDispose { innerBackStackProvider = ++callOrder }
-                    }
-                    content.invoke()
-                }
-
-                @Composable
-                override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
-                    DisposableEffect(entry.key) { onDispose { innerEntryProvider = ++callOrder } }
-                    entry.content.invoke(entry.key)
-                }
-            }
-
-        val outerProvider =
-            object : NavLocalProvider {
-                @Composable
-                override fun ProvideToBackStack(
-                    backStack: List<Any>,
-                    content: @Composable (() -> Unit)
-                ) {
-                    DisposableEffect(backStack.lastOrNull()) {
-                        onDispose { outerBackStackProvider = ++callOrder }
-                    }
-                    content.invoke()
-                }
-
-                @Composable
-                override fun <T : Any> ProvideToEntry(entry: NavEntry<T>) {
-                    DisposableEffect(entry.key) { onDispose { outerEntryProvider = ++callOrder } }
-                    entry.content.invoke(entry.key)
-                }
-            }
-        lateinit var backStack: MutableList<Any>
-
-        composeTestRule.setContent {
-            backStack = remember { mutableStateListOf("something") }
-            NavBackStackProvider(
-                backStack = backStack,
-                localProviders = listOf(outerProvider, innerProvider),
-                entryProvider = { NavEntry("something") {} }
-            ) { entries ->
-                entries.lastOrNull()?.content?.invoke("something")
-            }
-        }
-
-        composeTestRule.waitForIdle()
-        backStack.clear()
-        composeTestRule.waitForIdle()
-
-        assertThat(innerEntryProvider).isEqualTo(0)
-        assertThat(outerEntryProvider).isEqualTo(1)
-        assertThat(innerBackStackProvider).isEqualTo(2)
-        assertThat(outerBackStackProvider).isEqualTo(3)
-    }
 }
diff --git a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/SinglePaneNavDisplayTest.kt b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/SinglePaneNavDisplayTest.kt
index f563856..5b483773 100644
--- a/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/SinglePaneNavDisplayTest.kt
+++ b/navigation3/navigation3/src/androidInstrumentedTest/kotlin/androidx/navigation3/SinglePaneNavDisplayTest.kt
@@ -140,14 +140,14 @@
 
     @Test
     fun testStateOfInactiveContentIsRestoredWhenWeGoBackToIt() {
-        lateinit var numberOnScreen1: MutableState<Int>
+        var increment = 0
+        var numberOnScreen1 = -1
         lateinit var backStack: MutableList<Any>
         composeTestRule.setContent {
             backStack = remember { mutableStateListOf(first) }
             SinglePaneNavDisplay(backStack = backStack) {
                 when (it) {
-                    first ->
-                        NavEntry(first) { numberOnScreen1 = rememberSaveable { mutableStateOf(0) } }
+                    first -> NavEntry(first) { numberOnScreen1 = rememberSaveable { increment++ } }
                     second -> NavEntry(second) {}
                     else -> error("Invalid key passed")
                 }
@@ -155,18 +155,16 @@
         }
 
         composeTestRule.runOnIdle {
-            assertWithMessage("Initial number should be 0").that(numberOnScreen1.value).isEqualTo(0)
-            numberOnScreen1.value++
-            assertWithMessage("The number should be 1").that(numberOnScreen1.value).isEqualTo(1)
+            assertWithMessage("Initial number should be 0").that(numberOnScreen1).isEqualTo(0)
+            numberOnScreen1 = -1
+            assertWithMessage("The number should be -1").that(numberOnScreen1).isEqualTo(-1)
             backStack.add(second)
         }
 
         composeTestRule.runOnIdle { backStack.removeAt(backStack.size - 1) }
 
         composeTestRule.runOnIdle {
-            assertWithMessage("The number should be restored")
-                .that(numberOnScreen1.value)
-                .isEqualTo(1)
+            assertWithMessage("The number should be restored").that(numberOnScreen1).isEqualTo(0)
         }
     }
 
diff --git a/pdf/pdf-compose/api/restricted_current.txt b/pdf/pdf-compose/api/restricted_current.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/pdf/pdf-compose/api/restricted_current.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/pdf/pdf-compose/build.gradle b/pdf/pdf-compose/build.gradle
deleted file mode 100644
index 5540878..0000000
--- a/pdf/pdf-compose/build.gradle
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2025 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.
- */
-
-/**
- * This file was created using the `create_project.py` script located in the
- * `<AndroidX root>/development/project-creator` directory.
- *
- * Please use that script when creating a new project, rather than copying an existing project and
- * modifying its settings.
- */
-import androidx.build.SoftwareType
-
-plugins {
-    id("AndroidXPlugin")
-    id("com.android.library")
-    id("AndroidXComposePlugin")
-    id("org.jetbrains.kotlin.android")
-}
-
-dependencies {
-    api(libs.kotlinStdlib)
-    api("androidx.compose.foundation:foundation:1.7.8")
-    api("androidx.compose.ui:ui:1.7.8")
-    api("androidx.compose.runtime:runtime-saveable:1.7.8")
-    api(project(":pdf:pdf-viewer"))
-
-    implementation("androidx.compose.runtime:runtime:1.7.8")
-
-    androidTestImplementation(project(":compose:ui:ui-test"))
-    androidTestImplementation(project(":compose:ui:ui-test-junit4"))
-    androidTestImplementation(libs.testRules)
-    androidTestImplementation(libs.testRunner)
-    androidTestImplementation(libs.junit)
-    androidTestImplementation(libs.truth)
-}
-
-android {
-    namespace = "androidx.pdf.compose"
-
-    defaultConfig {
-        // TODO(b/403022712) Remove minSdk once pdf-viewer and pdf-document-service drop their
-        //   minSdk requirements
-        minSdk = 31
-        compileSdk = 35
-    }
-}
-
-androidx {
-    name = "androidx.pdf:pdf-compose"
-    type = SoftwareType.PUBLISHED_LIBRARY
-    inceptionYear = "2025"
-    description = "Present PDF content using Jetpack Compose"
-}
diff --git a/pdf/pdf-compose/src/main/java/androidx/pdf/androidx-pdf-pdf-compose-documentation.md b/pdf/pdf-compose/src/main/java/androidx/pdf/androidx-pdf-pdf-compose-documentation.md
deleted file mode 100644
index 4e76f3c..0000000
--- a/pdf/pdf-compose/src/main/java/androidx/pdf/androidx-pdf-pdf-compose-documentation.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Module root
-
-androidx.pdf pdf-compose
-
-# Package androidx.pdf.compose
-
-Provides @Composables for presenting PDF content
diff --git a/pdf/pdf-document-service/src/androidTest/kotlin/androidx/pdf/service/connect/FakePdfServiceConnection.kt b/pdf/pdf-document-service/src/androidTest/kotlin/androidx/pdf/service/connect/FakePdfServiceConnection.kt
index 9cf03af..5c54d7a 100644
--- a/pdf/pdf-document-service/src/androidTest/kotlin/androidx/pdf/service/connect/FakePdfServiceConnection.kt
+++ b/pdf/pdf-document-service/src/androidTest/kotlin/androidx/pdf/service/connect/FakePdfServiceConnection.kt
@@ -23,9 +23,6 @@
 import androidx.pdf.PdfDocumentRemote
 import androidx.pdf.adapter.PdfDocumentRendererFactoryImpl
 import androidx.pdf.service.PdfDocumentRemoteImpl
-import java.util.Queue
-import java.util.concurrent.ConcurrentLinkedQueue
-import kotlinx.coroutines.Job
 
 class FakePdfServiceConnection(
     override val context: Context,
@@ -34,14 +31,13 @@
     override var needsToReopenDocument: Boolean = false,
     private val onServiceConnected: () -> Unit = {}
 ) : PdfServiceConnection {
-
-    override val pendingJobs: Queue<Job> = ConcurrentLinkedQueue()
-
     override suspend fun connect(uri: Uri) {
         documentBinder = PdfDocumentRemoteImpl(PdfDocumentRendererFactoryImpl())
         onServiceConnected(null, null)
     }
 
+    override suspend fun blockUntilConnected() {}
+
     override fun disconnect() {
         documentBinder?.closePdfDocument()
     }
diff --git a/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/SandboxedPdfDocument.kt b/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/SandboxedPdfDocument.kt
index 6fccd85..bb7b346 100644
--- a/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/SandboxedPdfDocument.kt
+++ b/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/SandboxedPdfDocument.kt
@@ -37,13 +37,9 @@
 import androidx.pdf.service.connect.PdfServiceConnection
 import androidx.pdf.utils.toAndroidClass
 import androidx.pdf.utils.toContentClass
-import java.util.concurrent.TimeoutException
-import kotlin.coroutines.coroutineContext
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Job
 import kotlinx.coroutines.SupervisorJob
-import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
 
@@ -166,7 +162,8 @@
 
     @WorkerThread
     override fun close() {
-        connection.disconnect()
+        // TODO(b/380191925): Remove this when service is closed from SandboxedPdfLoader
+        //        connection.disconnect()
 
         // TODO(b/377920470): Remove this when PdfRenderer closes the file descriptor
         fileDescriptor.close()
@@ -223,67 +220,22 @@
     }
 
     private suspend fun <T> withDocument(block: (PdfDocumentRemote) -> T): T {
-        var trial = 1
-        while (true) {
-            try {
-                return withDocumentWithoutRetry(block)
-            } catch (e: Exception) {
-                // We retry a max of 3 times if it is one of retry-able exceptions.
-                if (
-                    trial > MAX_RETRIES || ((e !is DeadObjectException) && (e !is TimeoutException))
-                ) {
-                    throw e
-                }
-                trial++
-                // We sleep for some duration to give the service some time to recover.
-                // The loop then retries it.
-                delay(MIN_RETRY_DURATION * trial)
-            }
+        connection.blockUntilConnected()
+
+        val binder =
+            connection.documentBinder
+                ?: throw DeadObjectException("Binder object to the service must not be null!")
+
+        if (connection.needsToReopenDocument) {
+            binder.openPdfDocument(fileDescriptor, password)
+            connection.needsToReopenDocument = false
         }
-    }
 
-    private suspend fun <T> withDocumentWithoutRetry(block: (PdfDocumentRemote) -> T): T {
-        // Create a new job in parent's context. Since with document can be called from any scope,
-        // we need a handle to check coroutines actively working with document. Linking to parent's
-        // job helps in cancellation.
-        val taskJob =
-            Job(parent = coroutineContext[Job]).also { job ->
-                connection.pendingJobs.add(job)
-
-                // clean up on completion
-                job.invokeOnCompletion { connection.pendingJobs.remove(job) }
-            }
-
-        return withContext(dispatcher + taskJob) {
-            // Binder object will be null if the service is disconnected. Let's try reconnecting
-            // explicitly
-            if (connection.documentBinder == null) {
-                connection.connect(uri)
-            }
-
-            val binder = connection.documentBinder!!
-            if (connection.needsToReopenDocument) {
-                binder.openPdfDocument(fileDescriptor, password)
-                connection.needsToReopenDocument = false
-            }
-
-            val result = block(binder)
-
-            // Manually completing taskJob because a Job created using Job() does not complete on
-            // its own. Unlike coroutines launched with launch or async, a standalone Job() remains
-            // active indefinitely unless explicitly completed or canceled.
-            taskJob.complete()
-
-            return@withContext result
-        }
+        return withContext(dispatcher) { block(binder) }
     }
 
     private companion object {
         private const val DEFAULT_PAGE = 400
-        // Max number of retries to make on exceptions like DeadObjectExceptions on service.
-        private const val MAX_RETRIES = 3
-        // Min retry duration in milliseconds to start with.
-        private const val MIN_RETRY_DURATION = 400L
 
         /**
          * Converts a list of items into a SparseArray, using the item's index as the key.
diff --git a/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnection.kt b/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnection.kt
index f691e31..97a22cd 100644
--- a/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnection.kt
+++ b/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnection.kt
@@ -21,8 +21,6 @@
 import android.net.Uri
 import androidx.annotation.RestrictTo
 import androidx.pdf.PdfDocumentRemote
-import java.util.Queue
-import kotlinx.coroutines.Job
 
 @RestrictTo(RestrictTo.Scope.LIBRARY)
 public interface PdfServiceConnection : ServiceConnection {
@@ -44,16 +42,12 @@
     /** The [PdfDocumentRemote] instance, if the service is actively bound */
     public val documentBinder: PdfDocumentRemote?
 
-    /**
-     * Queue for all the job that are working with document. This does not enforce FIFO executing of
-     * the task, but rather works as a list with safe concurrent modifications. see
-     * [java.util.concurrent.ConcurrentLinkedQueue]
-     */
-    public val pendingJobs: Queue<Job>
-
     /** Initiates binding to the service, and suspends until the service is bound */
     public suspend fun connect(uri: Uri)
 
+    /** Blocks the current thread of execution until the connection is established */
+    public suspend fun blockUntilConnected()
+
     /** Immediately unbinds the service */
     public fun disconnect()
 }
diff --git a/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnectionImpl.kt b/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnectionImpl.kt
index fc9f404..114d334 100644
--- a/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnectionImpl.kt
+++ b/pdf/pdf-document-service/src/main/kotlin/androidx/pdf/service/connect/PdfServiceConnectionImpl.kt
@@ -24,9 +24,6 @@
 import androidx.annotation.RestrictTo
 import androidx.pdf.PdfDocumentRemote
 import androidx.pdf.service.PdfDocumentServiceImpl
-import java.util.Queue
-import java.util.concurrent.ConcurrentLinkedQueue
-import kotlinx.coroutines.Job
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.flow.update
@@ -35,11 +32,6 @@
 internal class PdfServiceConnectionImpl(override val context: Context) : PdfServiceConnection {
     private val _eventStateFlow: MutableStateFlow<ConnectionState> = MutableStateFlow(Disconnected)
 
-    override val pendingJobs: Queue<Job> = ConcurrentLinkedQueue()
-
-    private val isProcessing: Boolean
-        get() = pendingJobs.any { it.isActive }
-
     override var needsToReopenDocument: Boolean = false
 
     override val isConnected: Boolean
@@ -56,12 +48,6 @@
     override fun onServiceDisconnected(name: ComponentName?) {
         needsToReopenDocument = true
         _eventStateFlow.update { Disconnected }
-
-        // By this time, the system has disconnected the service. If we do not call unbind, then
-        // it will try to restart the service immediately. If no processing is active, we can unbind
-        // to save resources. Android system, otherwise, penalizes service-restarts by delaying
-        // them.
-        if (!isProcessing) disconnect()
     }
 
     override suspend fun connect(uri: Uri) {
@@ -76,12 +62,14 @@
         _eventStateFlow.first { it is Connected }
     }
 
-    override fun disconnect() {
-        // Update connection state earlier to prevent any operations (e.g., page releases) on the
-        // closed document until the service unbinds.
-        _eventStateFlow.update { Disconnected }
+    override suspend fun blockUntilConnected() {
+        _eventStateFlow.first { it is Connected }
+    }
 
-        documentBinder?.closePdfDocument()
-        context.unbindService(this)
+    override fun disconnect() {
+        if (isConnected) {
+            documentBinder?.closePdfDocument()
+            context.unbindService(this)
+        }
     }
 }
diff --git a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/search/SearchRepository.kt b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/search/SearchRepository.kt
index 8601754..a97f097 100644
--- a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/search/SearchRepository.kt
+++ b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/search/SearchRepository.kt
@@ -16,7 +16,6 @@
 
 package androidx.pdf.search
 
-import android.os.DeadObjectException
 import androidx.annotation.RestrictTo
 import androidx.core.util.isNotEmpty
 import androidx.pdf.PdfDocument
@@ -89,20 +88,9 @@
         // to make [searchDocument] main-safe
         val searchResults =
             withContext(dispatcher) {
-                try {
-                    pdfDocument.searchDocument(query = query, pageRange = searchPageRange)
-                } catch (e: DeadObjectException) {
-                    // Ignore exception due to service disconnection. User will try again.
-                    return@withContext null
-                }
+                pdfDocument.searchDocument(query = query, pageRange = searchPageRange)
             }
 
-        if (searchResults == null) {
-            // An exception happened above because of service disconnection.
-            // Reset search so that user may try again.
-            _queryResults.update { NoQuery }
-            return
-        }
         val queryResults =
             if (searchResults.isNotEmpty()) {
                 /*
diff --git a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/BitmapFetcher.kt b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/BitmapFetcher.kt
index fb1aa98..35d1591 100644
--- a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/BitmapFetcher.kt
+++ b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/BitmapFetcher.kt
@@ -20,7 +20,6 @@
 import android.graphics.Point
 import android.graphics.PointF
 import android.graphics.Rect
-import android.os.DeadObjectException
 import android.util.Size
 import androidx.annotation.AnyThread
 import androidx.annotation.GuardedBy
@@ -32,7 +31,6 @@
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.ensureActive
-import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.launch
 
 /**
@@ -64,8 +62,6 @@
      */
     private val maxBitmapSizePx: Point,
     private val onPageUpdate: () -> Unit,
-    /** Error flow for propagating error occurred while processing to [PdfView]. */
-    private val errorFlow: MutableSharedFlow<Throwable>
 ) : AutoCloseable {
 
     /**
@@ -244,13 +240,9 @@
     private fun fetchFullPageBitmap(size: Size, onReady: (Bitmap) -> Unit): Job {
         return backgroundScope.launch {
             ensureActive()
-            try {
-                val bitmap = bitmapSource.getBitmap(size)
-                ensureActive()
-                onReady(bitmap)
-            } catch (e: DeadObjectException) {
-                errorFlow.emit(e)
-            }
+            val bitmap = bitmapSource.getBitmap(size)
+            ensureActive()
+            onReady(bitmap)
         }
     }
 
@@ -267,22 +259,13 @@
             backgroundScope.launch {
                 prevJob?.join()
                 ensureActive()
-                try {
-                    val bitmap =
-                        bitmapSource.getBitmap(
-                            Size(
-                                (pageSize.x * scale).roundToInt(),
-                                (pageSize.y * scale).roundToInt()
-                            ),
-                            tile.rectPx
-                        )
-                    ensureActive()
-                    tile.bitmap = bitmap
-                } catch (e: DeadObjectException) {
-                    // Service was disconnected.
-                    errorFlow.emit(e)
-                    return@launch
-                }
+                val bitmap =
+                    bitmapSource.getBitmap(
+                        Size((pageSize.x * scale).roundToInt(), (pageSize.y * scale).roundToInt()),
+                        tile.rectPx
+                    )
+                ensureActive()
+                tile.bitmap = bitmap
                 onPageUpdate()
             }
         return job
diff --git a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/Page.kt b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/Page.kt
index 1a72896..60dd4cd 100644
--- a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/Page.kt
+++ b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/Page.kt
@@ -25,7 +25,6 @@
 import android.graphics.PorterDuffXfermode
 import android.graphics.Rect
 import android.graphics.RectF
-import android.os.DeadObjectException
 import androidx.annotation.MainThread
 import androidx.annotation.RestrictTo
 import androidx.annotation.VisibleForTesting
@@ -33,7 +32,6 @@
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.ensureActive
-import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.launch
 
 /** A single PDF page that knows how to render and draw itself */
@@ -58,9 +56,7 @@
     /** A function to call when the [PdfView] hosting this [Page] ought to invalidate itself */
     private val onPageUpdate: () -> Unit,
     /** A function to call when page text is ready (invoked with page number). */
-    private val onPageTextReady: ((Int) -> Unit),
-    /** Error flow for propagating error occurred while processing to [PdfView]. */
-    private val errorFlow: MutableSharedFlow<Throwable>
+    private val onPageTextReady: ((Int) -> Unit)
 ) {
     init {
         require(pageNum >= 0) { "Invalid negative page" }
@@ -106,8 +102,7 @@
                     pdfDocument,
                     backgroundScope,
                     maxBitmapSizePx,
-                    onPageUpdate,
-                    errorFlow
+                    onPageUpdate
                 )
         }
         bitmapFetcher?.maybeFetchNewBitmaps(zoom, viewArea)
@@ -146,15 +141,9 @@
             backgroundScope
                 .launch {
                     ensureActive()
-                    try {
-                        pageText =
-                            pdfDocument.getPageContent(pageNum)?.textContents?.joinToString {
-                                it.text
-                            }
-                        onPageTextReady.invoke(pageNum)
-                    } catch (e: DeadObjectException) {
-                        errorFlow.emit(e)
-                    }
+                    pageText =
+                        pdfDocument.getPageContent(pageNum)?.textContents?.joinToString { it.text }
+                    onPageTextReady.invoke(pageNum)
                 }
                 .also { it.invokeOnCompletion { fetchPageTextJob = null } }
     }
@@ -185,11 +174,7 @@
             backgroundScope
                 .launch {
                     ensureActive()
-                    try {
-                        links = pdfDocument.getPageLinks(pageNum)
-                    } catch (e: DeadObjectException) {
-                        errorFlow.emit(e)
-                    }
+                    links = pdfDocument.getPageLinks(pageNum)
                 }
                 .also { it.invokeOnCompletion { fetchLinksJob = null } }
     }
diff --git a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageLayoutManager.kt b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageLayoutManager.kt
index adda263..45b7838 100644
--- a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageLayoutManager.kt
+++ b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageLayoutManager.kt
@@ -20,7 +20,6 @@
 import android.graphics.PointF
 import android.graphics.Rect
 import android.graphics.RectF
-import android.os.DeadObjectException
 import android.util.Range
 import android.util.SparseArray
 import androidx.pdf.PdfDocument
@@ -49,8 +48,7 @@
     topPageMarginPx: Int = 0,
     pageSpacingPx: Int = DEFAULT_PAGE_SPACING_PX,
     internal val paginationModel: PaginationModel =
-        PaginationModel(pageSpacingPx, pdfDocument.pageCount, topPageMarginPx),
-    private val errorFlow: MutableSharedFlow<Throwable>
+        PaginationModel(pageSpacingPx, pdfDocument.pageCount, topPageMarginPx)
 ) {
     /** The 0-indexed maximum page number whose dimensions are known to this model */
     val reach
@@ -233,17 +231,11 @@
         currentDimensionsJob =
             backgroundScope.launch {
                 previousDimensionsJob?.join()
-                try {
-                    val pageMetadata = pdfDocument.getPageInfo(pageNum)
-                    val size = Point(pageMetadata.width, pageMetadata.height)
-                    // Add the value to the model before emitting, and on the main thread
-                    withContext(Dispatchers.Main) { paginationModel.addPage(pageNum, size) }
-                    _dimensions.emit(pageNum to Point(pageMetadata.width, pageMetadata.height))
-                } catch (e: DeadObjectException) {
-                    // An exception happened above because of service disconnection. Propagate
-                    // error event to UI to take appropriate action.
-                    errorFlow.emit(e)
-                }
+                val pageMetadata = pdfDocument.getPageInfo(pageNum)
+                val size = Point(pageMetadata.width, pageMetadata.height)
+                // Add the value to the model before emitting, and on the main thread
+                withContext(Dispatchers.Main) { paginationModel.addPage(pageNum, size) }
+                _dimensions.emit(pageNum to Point(pageMetadata.width, pageMetadata.height))
             }
     }
 
diff --git a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageManager.kt b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageManager.kt
index 500e7ca..c24b8c9 100644
--- a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageManager.kt
+++ b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PageManager.kt
@@ -44,9 +44,7 @@
      * threshold for tiled rendering
      */
     private val maxBitmapSizePx: Point,
-    private val isTouchExplorationEnabled: Boolean,
-    /** Error flow for propagating error occurred while processing to [PdfView]. */
-    private val errorFlow: MutableSharedFlow<Throwable>
+    private val isTouchExplorationEnabled: Boolean
 ) {
     /**
      * Replay at least 1 value in case of an invalidation signal issued while [PdfView] is not
@@ -139,8 +137,7 @@
                     maxBitmapSizePx,
                     isTouchExplorationEnabled,
                     onPageUpdate = { _invalidationSignalFlow.tryEmit(Unit) },
-                    onPageTextReady = { pageNumber -> _pageTextReadyFlow.tryEmit(pageNumber) },
-                    errorFlow = errorFlow
+                    onPageTextReady = { pageNumber -> _pageTextReadyFlow.tryEmit(pageNumber) }
                 )
                 .apply {
                     // If the page is visible, let it know
diff --git a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PdfView.kt b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PdfView.kt
index a190831..7e49e33 100644
--- a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PdfView.kt
+++ b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/PdfView.kt
@@ -28,7 +28,6 @@
 import android.graphics.RectF
 import android.graphics.drawable.Drawable
 import android.net.Uri
-import android.os.DeadObjectException
 import android.os.Looper
 import android.os.Parcelable
 import android.util.AttributeSet
@@ -58,7 +57,6 @@
 import androidx.pdf.view.fastscroll.FastScrollGestureDetector
 import androidx.pdf.view.fastscroll.FastScroller
 import androidx.pdf.view.fastscroll.getDimensions
-import com.google.android.material.snackbar.Snackbar
 import java.util.LinkedList
 import java.util.Queue
 import java.util.concurrent.Executors
@@ -73,7 +71,6 @@
 import kotlinx.coroutines.android.asCoroutineDispatcher
 import kotlinx.coroutines.asCoroutineDispatcher
 import kotlinx.coroutines.cancelChildren
-import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.launch
 
 /**
@@ -224,7 +221,6 @@
     private var layoutInfoCollector: Job? = null
     private var pageSignalCollector: Job? = null
     private var selectionStateCollector: Job? = null
-    private var errorStateCollector: Job? = null
 
     private var deferredScrollPage: Int? = null
     private var deferredScrollPosition: PdfPoint? = null
@@ -234,7 +230,6 @@
     private var awaitingFirstLayout: Boolean = true
     private var scrollPositionToRestore: PointF? = null
     private var zoomToRestore: Float? = null
-    private val errorFlow = MutableSharedFlow<Throwable>()
 
     /**
      * Indicates whether the fast scroller's visibility is managed externally.
@@ -753,8 +748,7 @@
                     backgroundScope,
                     topPageMarginPx = context.getDimensions(R.dimen.top_page_margin).toInt(),
                     pageSpacingPx = context.getDimensions(R.dimen.page_spacing).toInt(),
-                    paginationModel = requireNotNull(localStateToRestore.paginationModel),
-                    errorFlow = errorFlow
+                    paginationModel = requireNotNull(localStateToRestore.paginationModel)
                 )
                 .apply { onViewportChanged(scrollY, height, zoom) }
         selectionStateManager =
@@ -849,23 +843,12 @@
                     }
                 }
         }
-
-        val errorsToJoin = errorStateCollector?.apply { cancel() }
-        errorStateCollector =
-            mainScope.launch(start = CoroutineStart.UNDISPATCHED) {
-                // Prevent 2 copies from running concurrently
-                errorsToJoin?.join()
-                // Add debounce to prevents multiple, rapid error indicators from being displayed
-                // to the user in quick succession.
-                errorFlow.collect { handleError(it) }
-            }
     }
 
     private fun stopCollectingData() {
         layoutInfoCollector?.cancel()
         pageSignalCollector?.cancel()
         selectionStateCollector?.cancel()
-        errorStateCollector?.cancel()
     }
 
     private fun onSelectionUiSignal(signal: SelectionUiSignal) {
@@ -887,16 +870,6 @@
         }
     }
 
-    private fun handleError(error: Throwable) {
-        val errorMsg =
-            when (error) {
-                is DeadObjectException ->
-                    context.getString(R.string.service_disconnect_error_message)
-                else -> context.getString(R.string.pdf_view_error_message)
-            }
-        Snackbar.make(this, errorMsg, Snackbar.LENGTH_SHORT).show()
-    }
-
     /** Start using the [PdfDocument] to present PDF content */
     // Display.width and height are deprecated in favor of WindowMetrics, but in this case we
     // actually want to use the size of the display and not the size of the window.
@@ -914,8 +887,7 @@
                 localPdfDocument,
                 backgroundScope,
                 Point(maxBitmapDimensionPx, maxBitmapDimensionPx),
-                isTouchExplorationEnabled,
-                errorFlow
+                isTouchExplorationEnabled
             )
 
         if (
@@ -959,8 +931,7 @@
                         localPdfDocument,
                         backgroundScope,
                         topPageMarginPx = context.getDimensions(R.dimen.top_page_margin).toInt(),
-                        pageSpacingPx = context.getDimensions(R.dimen.page_spacing).toInt(),
-                        errorFlow = errorFlow
+                        pageSpacingPx = context.getDimensions(R.dimen.page_spacing).toInt()
                     )
                     .apply { onViewportChanged(scrollY, height, zoom) }
             selectionStateManager =
diff --git a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/SelectionStateManager.kt b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/SelectionStateManager.kt
index d540e38..b840db5 100644
--- a/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/SelectionStateManager.kt
+++ b/pdf/pdf-viewer/src/main/kotlin/androidx/pdf/view/SelectionStateManager.kt
@@ -18,7 +18,6 @@
 
 import android.graphics.PointF
 import android.graphics.RectF
-import android.os.DeadObjectException
 import android.view.HapticFeedbackConstants
 import android.view.MotionEvent
 import androidx.annotation.VisibleForTesting
@@ -238,23 +237,18 @@
                     // TODO(b/386398335) Adapt this logic to support selections that span multiple
                     // pages
 
-                    try {
-                        val newSelection = getNewSelection()
-                        if (newSelection != null && newSelection.hasBounds) {
-                            _selectionModel.update {
-                                SelectionModel.fromSinglePageSelection(newSelection)
-                            }
-                            _selectionUiSignalBus.tryEmit(SelectionUiSignal.Invalidate)
-                            // Show the action mode if the user is not actively dragging the handles
-                            if (draggingState == null) {
-                                _selectionUiSignalBus.emit(
-                                    SelectionUiSignal.ToggleActionMode(show = true)
-                                )
-                            }
+                    val newSelection = getNewSelection()
+                    if (newSelection != null && newSelection.hasBounds) {
+                        _selectionModel.update {
+                            SelectionModel.fromSinglePageSelection(newSelection)
                         }
-                    } catch (e: DeadObjectException) {
-                        // Ignoring a dead object exception because the service died.
-                        // User can retry the operation.
+                        _selectionUiSignalBus.tryEmit(SelectionUiSignal.Invalidate)
+                        // Show the action mode if the user is not actively dragging the handles
+                        if (draggingState == null) {
+                            _selectionUiSignalBus.emit(
+                                SelectionUiSignal.ToggleActionMode(show = true)
+                            )
+                        }
                     }
                 }
                 .also { it.invokeOnCompletion { setSelectionJob = null } }
diff --git a/pdf/pdf-viewer/src/main/res/values/strings.xml b/pdf/pdf-viewer/src/main/res/values/strings.xml
index d57927e..b65d761 100644
--- a/pdf/pdf-viewer/src/main/res/values/strings.xml
+++ b/pdf/pdf-viewer/src/main/res/values/strings.xml
@@ -167,8 +167,4 @@
 
     <!-- Content description of the fast scroller thumb -->
     <string name="fast_scroller_thumb">Scroll Bar</string>
-    <!-- error message when the service is disconnected -->
-    <string name="service_disconnect_error_message">Service disconnected. Please try again.</string>
-    <!-- error message when an unknown issue occurred in pdf view -->
-    <string name="pdf_view_error_message">Unknown error. Please try again.</string>
 </resources>
diff --git a/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/BitmapFetcherTest.kt b/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/BitmapFetcherTest.kt
index 0cc2ab2..5c78b85 100644
--- a/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/BitmapFetcherTest.kt
+++ b/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/BitmapFetcherTest.kt
@@ -23,7 +23,6 @@
 import com.google.common.truth.Truth.assertThat
 import kotlin.math.roundToInt
 import kotlinx.coroutines.cancelChildren
-import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.test.StandardTestDispatcher
 import kotlinx.coroutines.test.TestScope
 import org.junit.Before
@@ -55,7 +54,6 @@
 
     private lateinit var bitmapFetcher: BitmapFetcher
     private lateinit var tileSizePx: Point
-    private val errorFlow = MutableSharedFlow<Throwable>()
 
     @Before
     fun setup() {
@@ -70,7 +68,6 @@
                 testScope,
                 maxBitmapSizePx,
                 invalidationTracker,
-                errorFlow
             )
         tileSizePx = BitmapFetcher.tileSizePx
     }
diff --git a/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageLayoutManagerTest.kt b/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageLayoutManagerTest.kt
index 7ce3a5a..2421b2e 100644
--- a/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageLayoutManagerTest.kt
+++ b/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageLayoutManagerTest.kt
@@ -22,7 +22,6 @@
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
-import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.flow.toList
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.test.TestScope
@@ -59,13 +58,12 @@
     private val testDispatcher = UnconfinedTestDispatcher()
     private val testScope = TestScope(testDispatcher)
     private lateinit var paginationManager: PageLayoutManager
-    private val errorFlow = MutableSharedFlow<Throwable>()
 
     @Before
     fun setup() {
         // Required because loadPageDimensions jumps to the main thread to update PaginationModel
         Dispatchers.setMain(testDispatcher)
-        paginationManager = PageLayoutManager(pdfDocument, testScope, errorFlow = errorFlow)
+        paginationManager = PageLayoutManager(pdfDocument, testScope)
     }
 
     @Test
diff --git a/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageTest.kt b/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageTest.kt
index 3dacdff..ad18636 100644
--- a/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageTest.kt
+++ b/pdf/pdf-viewer/src/test/kotlin/androidx/pdf/view/PageTest.kt
@@ -25,7 +25,6 @@
 import androidx.pdf.content.PdfPageTextContent
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.cancelChildren
-import kotlinx.coroutines.flow.MutableSharedFlow
 import kotlinx.coroutines.test.StandardTestDispatcher
 import kotlinx.coroutines.test.TestScope
 import org.junit.Before
@@ -71,8 +70,6 @@
 
     private lateinit var page: Page
 
-    private val errorFlow = MutableSharedFlow<Throwable>()
-
     private fun createPage(isTouchExplorationEnabled: Boolean): Page {
         return Page(
             0,
@@ -82,8 +79,7 @@
             MAX_BITMAP_SIZE,
             isTouchExplorationEnabled = isTouchExplorationEnabled,
             invalidationTracker,
-            onPageTextReady,
-            errorFlow
+            onPageTextReady
         )
     }
 
diff --git a/preference/preference/src/main/res/values-af/strings.xml b/preference/preference/src/main/res/values-af/strings.xml
index 84780a0..0e34cd7 100644
--- a/preference/preference/src/main/res/values-af/strings.xml
+++ b/preference/preference/src/main/res/values-af/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AAN"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"AF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Gevorderd"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopieer"</string>
-    <string name="preference_copied" msgid="811987176883013580">"“<xliff:g id="SUMMARY">%1$s</xliff:g>” is na knipbord gekopieer."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nie gestel nie"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AAN"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"AF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Gevorderd"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopieer"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" is na knipbord gekopieer."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nie gestel nie"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-am/strings.xml b/preference/preference/src/main/res/values-am/strings.xml
index 56f015b..817891c 100644
--- a/preference/preference/src/main/res/values-am/strings.xml
+++ b/preference/preference/src/main/res/values-am/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"በርቷል"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ጠፍቷል"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"የላቀ"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>፣ <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"ቅዳ"</string>
-    <string name="preference_copied" msgid="811987176883013580">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» ወደ የቅንጥብ ሰሌዳ ተቀድቷል።"</string>
-    <string name="not_set" msgid="5322289270060224450">"አልተቀናበረም"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"በርቷል"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ጠፍቷል"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"የላቀ"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>፣ <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"ቅዳ"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» ወደ የቅንጥብ ሰሌዳ ተቀድቷል።"</string>
+    <string name="not_set" msgid="6573031135582639649">"አልተዘጋጀም"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ar/strings.xml b/preference/preference/src/main/res/values-ar/strings.xml
index 63ce5eb..1641096 100644
--- a/preference/preference/src/main/res/values-ar/strings.xml
+++ b/preference/preference/src/main/res/values-ar/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"مفعَّل"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"غير مفعَّل"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"الإعدادات المتقدّمة"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"\"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>\" و\"<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>\""</string>
-    <string name="copy" msgid="8016979983985242980">"نسخ"</string>
-    <string name="preference_copied" msgid="811987176883013580">"تم نسخ \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" إلى الحافظة."</string>
-    <string name="not_set" msgid="5322289270060224450">"لم يتم ضبط أي إعداد مفضّل"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"مفعّلة"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"غير مفعّل"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"إعدادات متقدمة"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>، <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"نسخ"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"تم نسخ \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" إلى الحافظة."</string>
+    <string name="not_set" msgid="6573031135582639649">"لم يتم الضبط"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-as/strings.xml b/preference/preference/src/main/res/values-as/strings.xml
index 59942bf..4f68af3 100644
--- a/preference/preference/src/main/res/values-as/strings.xml
+++ b/preference/preference/src/main/res/values-as/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"অন কৰা আছে"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"অফ কৰা আছে"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"উচ্চখাপৰ"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"প্ৰতিলিপি কৰক"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ক্লিপব’ৰ্ডলৈ প্ৰতিলিপি কৰা হ’ল।"</string>
-    <string name="not_set" msgid="5322289270060224450">"ছেট কৰা হোৱা নাই"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"অন কৰক"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"অফ অৱস্থাত আছে"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"উন্নত"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"প্ৰতিলিপি কৰক"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ক্লিপব’ৰ্ডত প্ৰতিলিপি কৰা হ’ল"</string>
+    <string name="not_set" msgid="6573031135582639649">"ছেট কৰা হোৱা নাই"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-az/strings.xml b/preference/preference/src/main/res/values-az/strings.xml
index 21422f1..1f938dc 100644
--- a/preference/preference/src/main/res/values-az/strings.xml
+++ b/preference/preference/src/main/res/values-az/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AKTİV"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DEAKTİV"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Təkmil"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiyalayın"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" mübadilə buferinə kopiyalandı."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ayarlanmayıb"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AKTİV"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DEAKTİV"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Əlavə"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopyalayın"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" buferə kopyalandı."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ayarlanmayıb"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-b+sr+Latn/strings.xml b/preference/preference/src/main/res/values-b+sr+Latn/strings.xml
index e5fea3f..e9995aa 100644
--- a/preference/preference/src/main/res/values-b+sr+Latn/strings.xml
+++ b/preference/preference/src/main/res/values-b+sr+Latn/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"UKLJUČENO"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ISKLJUČENO"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Napredno"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiraj"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Rezime „<xliff:g id="SUMMARY">%1$s</xliff:g>“ je kopiran u privremenu memoriju."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nije podešeno"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"UKLJUČENO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ISKLJUČENO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Napredno"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiraj"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Rezime „<xliff:g id="SUMMARY">%1$s</xliff:g>“ je kopiran u privremenu memoriju."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nije podešeno"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-be/strings.xml b/preference/preference/src/main/res/values-be/strings.xml
index d565a06..cd33eb7 100644
--- a/preference/preference/src/main/res/values-be/strings.xml
+++ b/preference/preference/src/main/res/values-be/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"УКЛЮЧАНА"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ВЫКЛЮЧАНА"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Пашыраныя налады"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Капіраваць"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\": скапіравана ў буфер абмену."</string>
-    <string name="not_set" msgid="5322289270060224450">"Не зададзена"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"УКЛ."</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ВЫКЛ."</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Пашыраныя налады"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Капіраваць"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\": скапіравана ў буфер абмену."</string>
+    <string name="not_set" msgid="6573031135582639649">"Не зададзена"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-bg/strings.xml b/preference/preference/src/main/res/values-bg/strings.xml
index 063c586..4949353 100644
--- a/preference/preference/src/main/res/values-bg/strings.xml
+++ b/preference/preference/src/main/res/values-bg/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ВКЛ."</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ИЗКЛ."</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Разширено"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Копиране"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Копирахте <xliff:g id="SUMMARY">%1$s</xliff:g> в буферната памет."</string>
-    <string name="not_set" msgid="5322289270060224450">"Не е зададено"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ВКЛ."</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ИЗКЛ."</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Разширени"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Копиране"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Копирахте „<xliff:g id="SUMMARY">%1$s</xliff:g>“ в буферната памет."</string>
+    <string name="not_set" msgid="6573031135582639649">"Не е зададено"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-bn/strings.xml b/preference/preference/src/main/res/values-bn/strings.xml
index e8c1bbe5..6b516ce 100644
--- a/preference/preference/src/main/res/values-bn/strings.xml
+++ b/preference/preference/src/main/res/values-bn/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"চালু আছে"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"বন্ধ করুন"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"উন্নত"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"কপি করুন"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ক্লিপবোর্ডে কপি করা হয়েছে।"</string>
-    <string name="not_set" msgid="5322289270060224450">"সেট করা নেই"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"চালু"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"বন্ধ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"উন্নত"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"কপি করুন"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ক্লিপবোর্ডে লিঙ্কটি কপি করা হয়েছে।"</string>
+    <string name="not_set" msgid="6573031135582639649">"সেট করা হয়নি"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-bs/strings.xml b/preference/preference/src/main/res/values-bs/strings.xml
index ffa7787..f03be77 100644
--- a/preference/preference/src/main/res/values-bs/strings.xml
+++ b/preference/preference/src/main/res/values-bs/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"UKLJUČENO"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ISKLJUČENO"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Napredno"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiraj"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Sažetak \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" je kopiran u međumemoriju."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nije postavljeno"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"UKLJUČENO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ISKLJUČENO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Napredno"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiraj"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" kopirano u međumemoriju."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nije postavljeno"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ca/strings.xml b/preference/preference/src/main/res/values-ca/strings.xml
index b0b93c8..560d486 100644
--- a/preference/preference/src/main/res/values-ca/strings.xml
+++ b/preference/preference/src/main/res/values-ca/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ACTIVAT"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DESACTIVAT"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Configuració avançada"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copia"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" s\'ha copiat al porta-retalls."</string>
-    <string name="not_set" msgid="5322289270060224450">"No definit"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ACTIVAT"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESACTIVAT"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Opcions avançades"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copia"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" s\'ha copiat al porta-retalls"</string>
+    <string name="not_set" msgid="6573031135582639649">"No definit"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-cs/strings.xml b/preference/preference/src/main/res/values-cs/strings.xml
index 3ef0269..a07bdd1 100644
--- a/preference/preference/src/main/res/values-cs/strings.xml
+++ b/preference/preference/src/main/res/values-cs/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ZAP"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"VYP"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Pokročilé"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopírovat"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Položka <xliff:g id="SUMMARY">%1$s</xliff:g> byla zkopírována do schránky."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nenastaveno"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"Zapnuto"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"Vypnuto"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Rozšířená nastavení"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopírovat"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Položka <xliff:g id="SUMMARY">%1$s</xliff:g> byla zkopírována do schránky."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nenastaveno"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-da/strings.xml b/preference/preference/src/main/res/values-da/strings.xml
index 16baced..4ac0b20 100644
--- a/preference/preference/src/main/res/values-da/strings.xml
+++ b/preference/preference/src/main/res/values-da/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"TIL"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"FRA"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avanceret"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiér"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" er kopieret til udklipsholderen."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ikke angivet"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"TIL"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"FRA"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avanceret"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiér"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" blev kopieret til udklipsholderen."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ikke angivet"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-de/strings.xml b/preference/preference/src/main/res/values-de/strings.xml
index 5b1b686..eaab979 100644
--- a/preference/preference/src/main/res/values-de/strings.xml
+++ b/preference/preference/src/main/res/values-de/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AN"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"AUS"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Erweitert"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopieren"</string>
-    <string name="preference_copied" msgid="811987176883013580">"„<xliff:g id="SUMMARY">%1$s</xliff:g>“ in Zwischenablage kopiert."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nicht festgelegt"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AN"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"AUS"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Erweitert"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopieren"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" in Zwischenablage kopiert."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nicht festgelegt"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-el/strings.xml b/preference/preference/src/main/res/values-el/strings.xml
index 2d7b722..55c2e54 100644
--- a/preference/preference/src/main/res/values-el/strings.xml
+++ b/preference/preference/src/main/res/values-el/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ΕΝΕΡΓΟ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ΑΝΕΝΕΡΓΟ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Σύνθετες"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Αντιγραφή"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Η σύνοψη \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" αντιγράφηκε στο πρόχειρο."</string>
-    <string name="not_set" msgid="5322289270060224450">"Δεν έχει οριστεί"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ΕΝΕΡΓΗ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ΑΝΕΝΕΡΓΗ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Σύνθετες"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Αντιγραφή"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Το \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" αντιγράφηκε στο πρόχειρο."</string>
+    <string name="not_set" msgid="6573031135582639649">"Δεν έχει οριστεί"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-en-rAU/strings.xml b/preference/preference/src/main/res/values-en-rAU/strings.xml
index fa1e33d..a16f7bf 100644
--- a/preference/preference/src/main/res/values-en-rAU/strings.xml
+++ b/preference/preference/src/main/res/values-en-rAU/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ON"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OFF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Advanced"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copy"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\' copied to clipboard."</string>
-    <string name="not_set" msgid="5322289270060224450">"Not set"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ON"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"OFF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Advanced"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copy"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\' copied to clipboard."</string>
+    <string name="not_set" msgid="6573031135582639649">"Not set"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-en-rCA/strings.xml b/preference/preference/src/main/res/values-en-rCA/strings.xml
index b0b34bd..7632aea 100644
--- a/preference/preference/src/main/res/values-en-rCA/strings.xml
+++ b/preference/preference/src/main/res/values-en-rCA/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ON"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OFF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Advanced"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copy"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copied to clipboard."</string>
-    <string name="not_set" msgid="5322289270060224450">"Not set"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ON"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"OFF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Advanced"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copy"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copied to clipboard."</string>
+    <string name="not_set" msgid="6573031135582639649">"Not set"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-en-rGB/strings.xml b/preference/preference/src/main/res/values-en-rGB/strings.xml
index fa1e33d..a16f7bf 100644
--- a/preference/preference/src/main/res/values-en-rGB/strings.xml
+++ b/preference/preference/src/main/res/values-en-rGB/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ON"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OFF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Advanced"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copy"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\' copied to clipboard."</string>
-    <string name="not_set" msgid="5322289270060224450">"Not set"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ON"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"OFF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Advanced"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copy"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\' copied to clipboard."</string>
+    <string name="not_set" msgid="6573031135582639649">"Not set"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-en-rIN/strings.xml b/preference/preference/src/main/res/values-en-rIN/strings.xml
index fa1e33d..a16f7bf 100644
--- a/preference/preference/src/main/res/values-en-rIN/strings.xml
+++ b/preference/preference/src/main/res/values-en-rIN/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ON"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OFF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Advanced"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copy"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\' copied to clipboard."</string>
-    <string name="not_set" msgid="5322289270060224450">"Not set"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ON"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"OFF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Advanced"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copy"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\' copied to clipboard."</string>
+    <string name="not_set" msgid="6573031135582639649">"Not set"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-es-rUS/strings.xml b/preference/preference/src/main/res/values-es-rUS/strings.xml
index 42f3c1e..06dfaf0 100644
--- a/preference/preference/src/main/res/values-es-rUS/strings.xml
+++ b/preference/preference/src/main/res/values-es-rUS/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ACTIVADO"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DESACTIVADO"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avanzado"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copiar"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Se copió \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" en el portapapeles."</string>
-    <string name="not_set" msgid="5322289270060224450">"Sin establecer"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ACTIVADO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESACTIVADO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Opciones avanzadas"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copiar"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Se copió \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" en el portapapeles."</string>
+    <string name="not_set" msgid="6573031135582639649">"Sin definir"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-es/strings.xml b/preference/preference/src/main/res/values-es/strings.xml
index 1be3e4d..1d0efba 100644
--- a/preference/preference/src/main/res/values-es/strings.xml
+++ b/preference/preference/src/main/res/values-es/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ACTIVADO"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DESACTIVADO"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avanzado"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copiar"</string>
-    <string name="preference_copied" msgid="811987176883013580">"<xliff:g id="SUMMARY">%1$s</xliff:g> se ha copiado en el portapapeles."</string>
-    <string name="not_set" msgid="5322289270060224450">"Sin definir"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ACTIVADO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESACTIVADA"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Ajustes avanzados"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copiar"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" se ha copiado en el portapapeles."</string>
+    <string name="not_set" msgid="6573031135582639649">"Sin establecer"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-et/strings.xml b/preference/preference/src/main/res/values-et/strings.xml
index 1f7dd54..e9b9176 100644
--- a/preference/preference/src/main/res/values-et/strings.xml
+++ b/preference/preference/src/main/res/values-et/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"SEES"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"VÄLJAS"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Täpsemad"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopeeri"</string>
-    <string name="preference_copied" msgid="811987176883013580">"„<xliff:g id="SUMMARY">%1$s</xliff:g>“ on lõikelauale kopeeritud."</string>
-    <string name="not_set" msgid="5322289270060224450">"Määramata"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"SEES"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"VÄLJAS"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Täpsemad"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopeerimine"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"„<xliff:g id="SUMMARY">%1$s</xliff:g>” on lõikelauale kopeeritud."</string>
+    <string name="not_set" msgid="6573031135582639649">"Määramata"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-eu/strings.xml b/preference/preference/src/main/res/values-eu/strings.xml
index 3b3cffa..73939c8 100644
--- a/preference/preference/src/main/res/values-eu/strings.xml
+++ b/preference/preference/src/main/res/values-eu/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AKTIBATUTA"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DESAKTIBATUTA"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Aurreratuak"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiatu"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Arbelean kopiatu da \"<xliff:g id="SUMMARY">%1$s</xliff:g>\"."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ezarri gabe"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AKTIBATUTA"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESAKTIBATUTA"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Hobespen aurreratuak"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiatu"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Arbelean kopiatu da \"<xliff:g id="SUMMARY">%1$s</xliff:g>\"."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ez da ezarri"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-fa/strings.xml b/preference/preference/src/main/res/values-fa/strings.xml
index 5bd3ae1..ca6e3b1 100644
--- a/preference/preference/src/main/res/values-fa/strings.xml
+++ b/preference/preference/src/main/res/values-fa/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"روشن"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"خاموش"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"پیشرفته"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"‫<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>،‏ <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"کپی کردن"</string>
-    <string name="preference_copied" msgid="811987176883013580">"‫«<xliff:g id="SUMMARY">%1$s</xliff:g>» در بریده‌دان کپی شد."</string>
-    <string name="not_set" msgid="5322289270060224450">"تنظیم نشده"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"روشن"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"خاموش"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"پیشرفته"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>، <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"کپی"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» در بریده‌دان کپی شد."</string>
+    <string name="not_set" msgid="6573031135582639649">"تنظیم نشده"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-fi/strings.xml b/preference/preference/src/main/res/values-fi/strings.xml
index c9616de..a925765 100644
--- a/preference/preference/src/main/res/values-fi/strings.xml
+++ b/preference/preference/src/main/res/values-fi/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"PÄÄLLÄ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"EI PÄÄLLÄ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Lisäasetukset"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopioi"</string>
-    <string name="preference_copied" msgid="811987176883013580">"<xliff:g id="SUMMARY">%1$s</xliff:g> kopioitiin leikepöydälle."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ei asetettu"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"KÄYTÖSSÄ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"POIS KÄYTÖSTÄ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Lisäasetukset"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopioi"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"<xliff:g id="SUMMARY">%1$s</xliff:g> kopioitiin leikepöydälle."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ei asetettu"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-fr-rCA/strings.xml b/preference/preference/src/main/res/values-fr-rCA/strings.xml
index daa8ef4..56f7a88 100644
--- a/preference/preference/src/main/res/values-fr-rCA/strings.xml
+++ b/preference/preference/src/main/res/values-fr-rCA/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ACTIVÉ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DÉSACTIVÉ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avancé"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copier"</string>
-    <string name="preference_copied" msgid="811987176883013580">"« <xliff:g id="SUMMARY">%1$s</xliff:g> » copié dans le presse-papiers."</string>
-    <string name="not_set" msgid="5322289270060224450">"Non défini"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ACTIVÉ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DÉSACTIVÉ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Paramètres avancés"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copier"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"« <xliff:g id="SUMMARY">%1$s</xliff:g> » copié dans le presse-papiers."</string>
+    <string name="not_set" msgid="6573031135582639649">"Non défini"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-fr/strings.xml b/preference/preference/src/main/res/values-fr/strings.xml
index 191e0b5..1348f8c 100644
--- a/preference/preference/src/main/res/values-fr/strings.xml
+++ b/preference/preference/src/main/res/values-fr/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ACTIVÉ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DÉSACTIVÉ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avancé"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copier"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copié dans le presse-papier."</string>
-    <string name="not_set" msgid="5322289270060224450">"Non défini"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ACTIVÉ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DÉSACTIVÉ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avancé"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copier"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copié dans le presse-papier."</string>
+    <string name="not_set" msgid="6573031135582639649">"Non définie"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-gl/strings.xml b/preference/preference/src/main/res/values-gl/strings.xml
index 5e9d1a7..5f3bdc3 100644
--- a/preference/preference/src/main/res/values-gl/strings.xml
+++ b/preference/preference/src/main/res/values-gl/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"OPCIÓN ACTIVADA"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OPCIÓN DESACTIVADA"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avanzada"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copiar"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Copiouse \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" no portapapeis."</string>
-    <string name="not_set" msgid="5322289270060224450">"Sen configurar"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ACTIVADO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESACTIVADO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Configuración avanzada"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copiar"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Copiouse \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" no portapapeis."</string>
+    <string name="not_set" msgid="6573031135582639649">"Sen configurar"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-gu/strings.xml b/preference/preference/src/main/res/values-gu/strings.xml
index 4b702ba..9f50201 100644
--- a/preference/preference/src/main/res/values-gu/strings.xml
+++ b/preference/preference/src/main/res/values-gu/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ચાલુ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"બંધ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"વિગતવાર"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"કૉપિ કરો"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\"ને ક્લિપબોર્ડ પર કૉપિ કર્યો."</string>
-    <string name="not_set" msgid="5322289270060224450">"સેટ નથી"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ચાલુ કરો"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"બંધ કરો"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"વિગતવાર"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"કૉપિ કરો"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\"ને ક્લિપ બોર્ડ પર કૉપિ કર્યો."</string>
+    <string name="not_set" msgid="6573031135582639649">"સેટ કર્યું નથી"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-hi/strings.xml b/preference/preference/src/main/res/values-hi/strings.xml
index 5b5db05..8576490 100644
--- a/preference/preference/src/main/res/values-hi/strings.xml
+++ b/preference/preference/src/main/res/values-hi/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"चालू है"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"बंद है"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"बेहतर बनाएं"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"कॉपी करें"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" क्लिपबोर्ड पर कॉपी किया गया."</string>
-    <string name="not_set" msgid="5322289270060224450">"सेट नहीं है"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"चालू"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"बंद"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"ऐडवांस सेटिंग"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"कॉपी करें"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" क्लिपबोर्ड पर कॉपी किया गया."</string>
+    <string name="not_set" msgid="6573031135582639649">"सेट नहीं है"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-hr/strings.xml b/preference/preference/src/main/res/values-hr/strings.xml
index 12af670..fd9e29c 100644
--- a/preference/preference/src/main/res/values-hr/strings.xml
+++ b/preference/preference/src/main/res/values-hr/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"UKLJUČENO"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ISKLJUČENO"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Napredno"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiraj"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Sažetak <xliff:g id="SUMMARY">%1$s</xliff:g> kopiran je u međuspremnik."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nije postavljeno"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"UKLJUČENO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ISKLJUČENO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Napredno"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiraj"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Sažetak \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" kopiran je u međuspremnik."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nije postavljeno"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-hu/strings.xml b/preference/preference/src/main/res/values-hu/strings.xml
index be84b13..86aa99b 100644
--- a/preference/preference/src/main/res/values-hu/strings.xml
+++ b/preference/preference/src/main/res/values-hu/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"BE"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"KI"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Speciális"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Másolás"</string>
-    <string name="preference_copied" msgid="811987176883013580">"A(z) „<xliff:g id="SUMMARY">%1$s</xliff:g>” a vágólapra lett másolva."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nincs beállítva"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"BE"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"KI"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Speciális"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Másolás"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"„<xliff:g id="SUMMARY">%1$s</xliff:g>” a vágólapra lett másolva."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nincs beállítva"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-hy/strings.xml b/preference/preference/src/main/res/values-hy/strings.xml
index 323e373..f5df86b 100644
--- a/preference/preference/src/main/res/values-hy/strings.xml
+++ b/preference/preference/src/main/res/values-hy/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ՄԻԱՑՆԵԼ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ԱՆՋԱՏԵԼ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Ծավալել"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Պատճենել"</string>
-    <string name="preference_copied" msgid="811987176883013580">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» կարգավորումը պատճենվեց սեղմատախտակին։"</string>
-    <string name="not_set" msgid="5322289270060224450">"Կարգավորված չէ"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ՄԻԱՑՎԱԾ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ԱՆՋԱՏԱԾ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Լրացուցիչ"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Պատճենել"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"«<xliff:g id="SUMMARY">%1$s</xliff:g>». պատճենվեց սեղմատախտակին:"</string>
+    <string name="not_set" msgid="6573031135582639649">"Կարգավորված չէ"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-in/strings.xml b/preference/preference/src/main/res/values-in/strings.xml
index 2fb6dbb..f9da4ed 100644
--- a/preference/preference/src/main/res/values-in/strings.xml
+++ b/preference/preference/src/main/res/values-in/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AKTIF"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"NONAKTIF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Lanjutan"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Salin"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" disalin ke papan klip."</string>
-    <string name="not_set" msgid="5322289270060224450">"Tidak disetel"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AKTIF"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"NONAKTIF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Lanjutan"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Salin"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" disalin ke papan klip."</string>
+    <string name="not_set" msgid="6573031135582639649">"Belum disetel"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-is/strings.xml b/preference/preference/src/main/res/values-is/strings.xml
index 889e642..6f18154 100644
--- a/preference/preference/src/main/res/values-is/strings.xml
+++ b/preference/preference/src/main/res/values-is/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"KVEIKT"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"SLÖKKT"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Ítarlegt"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Afrita"</string>
-    <string name="preference_copied" msgid="811987176883013580">"„<xliff:g id="SUMMARY">%1$s</xliff:g>“ afritað á klippiborðið."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ekki stillt"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"KVEIKT"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"SLÖKKT"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Ítarlegt"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Afrita"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"„<xliff:g id="SUMMARY">%1$s</xliff:g>“ afritað á klippiborðið."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ekki stillt"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-it/strings.xml b/preference/preference/src/main/res/values-it/strings.xml
index 6dfbe4a..70451a8 100644
--- a/preference/preference/src/main/res/values-it/strings.xml
+++ b/preference/preference/src/main/res/values-it/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ON"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OFF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avanzate"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copia"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copiato negli appunti."</string>
-    <string name="not_set" msgid="5322289270060224450">"Non impostata"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ON"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"OFF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avanzate"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copia"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\"copiato negli appunti."</string>
+    <string name="not_set" msgid="6573031135582639649">"Non impostato"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-iw/strings.xml b/preference/preference/src/main/res/values-iw/strings.xml
index 4d53db9..3cbf203 100644
--- a/preference/preference/src/main/res/values-iw/strings.xml
+++ b/preference/preference/src/main/res/values-iw/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"מצב פעיל"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"מצב מושבת"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"הגדרות מתקדמות"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"‫<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>,‏ <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"העתקה"</string>
-    <string name="preference_copied" msgid="811987176883013580">"הטקסט \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" הועתק ללוח."</string>
-    <string name="not_set" msgid="5322289270060224450">"לא הוגדרה"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"מופעל"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"כבוי"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"מתקדם"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"העתקה"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" הועתק ללוח."</string>
+    <string name="not_set" msgid="6573031135582639649">"לא מוגדרת"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ja/strings.xml b/preference/preference/src/main/res/values-ja/strings.xml
index d9b5116..80ec03a 100644
--- a/preference/preference/src/main/res/values-ja/strings.xml
+++ b/preference/preference/src/main/res/values-ja/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ON"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OFF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"詳細設定"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"コピー"</string>
-    <string name="preference_copied" msgid="811987176883013580">"「<xliff:g id="SUMMARY">%1$s</xliff:g>」をクリップボードにコピーしました。"</string>
-    <string name="not_set" msgid="5322289270060224450">"未設定"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ON"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"OFF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"詳細設定"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"コピー"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"「<xliff:g id="SUMMARY">%1$s</xliff:g>」をクリップボードにコピーしました。"</string>
+    <string name="not_set" msgid="6573031135582639649">"未設定"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ka/strings.xml b/preference/preference/src/main/res/values-ka/strings.xml
index 800a8c9..c232637 100644
--- a/preference/preference/src/main/res/values-ka/strings.xml
+++ b/preference/preference/src/main/res/values-ka/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ჩართული"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"გამორთული"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"გაფართოებული"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"კოპირება"</string>
-    <string name="preference_copied" msgid="811987176883013580">"„<xliff:g id="SUMMARY">%1$s</xliff:g>“ კოპირებულია გაცვლის ბუფერში."</string>
-    <string name="not_set" msgid="5322289270060224450">"არ არის დაყენებული"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ჩართული"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"გამორთული"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"დამატებით"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"კოპირება"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"„<xliff:g id="SUMMARY">%1$s</xliff:g>“ კოპირებულია გაცვლის ბუფერში."</string>
+    <string name="not_set" msgid="6573031135582639649">"არ არის დაყენებული"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-kk/strings.xml b/preference/preference/src/main/res/values-kk/strings.xml
index 9e0e753..6d96df9 100644
--- a/preference/preference/src/main/res/values-kk/strings.xml
+++ b/preference/preference/src/main/res/values-kk/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ҚОСУЛЫ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ӨШІРУЛІ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Қосымша"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Көшіру"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" қорытындысы буферге көшірілді."</string>
-    <string name="not_set" msgid="5322289270060224450">"Орнатылмаған"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ҚОСУЛЫ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ӨШІРУЛІ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Қосымша"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Көшіру"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" қорытындысы буферге көшірілді"</string>
+    <string name="not_set" msgid="6573031135582639649">"Орнатылмаған"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-km/strings.xml b/preference/preference/src/main/res/values-km/strings.xml
index 5ae15c6..2eba4b4 100644
--- a/preference/preference/src/main/res/values-km/strings.xml
+++ b/preference/preference/src/main/res/values-km/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"បើក"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"បិទ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"កម្រិតខ្ពស់"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"ចម្លង"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" បានចម្លងទៅ​ឃ្លីបបត។"</string>
-    <string name="not_set" msgid="5322289270060224450">"មិនបានកំណត់"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"បើក"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"បិទ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"កម្រិតខ្ពស់"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"ចម្លង"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" បានចម្លងទៅ​ឃ្លីបបត។"</string>
+    <string name="not_set" msgid="6573031135582639649">"មិនបានកំណត់"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-kn/strings.xml b/preference/preference/src/main/res/values-kn/strings.xml
index bf42405..129c3d3 100644
--- a/preference/preference/src/main/res/values-kn/strings.xml
+++ b/preference/preference/src/main/res/values-kn/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ಆನ್ ಆಗಿದೆ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ಆಫ್ ಆಗಿದೆ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"ಸುಧಾರಿತ"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"ಕಾಪಿ ಮಾಡಿ"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ಅನ್ನು ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ಕಾಪಿ ಮಾಡಲಾಗಿದೆ."</string>
-    <string name="not_set" msgid="5322289270060224450">"ಸೆಟ್ ಮಾಡಿಲ್ಲ"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ಆನ್"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ಆಫ್"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"ಸುಧಾರಿತ"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"ನಕಲಿಸಿ"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ಅನ್ನು ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಲಾಗಿದೆ."</string>
+    <string name="not_set" msgid="6573031135582639649">"ಹೊಂದಿಸಿಲ್ಲ"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ko/strings.xml b/preference/preference/src/main/res/values-ko/strings.xml
index ea4adea..0d0704a 100644
--- a/preference/preference/src/main/res/values-ko/strings.xml
+++ b/preference/preference/src/main/res/values-ko/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"사용"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"사용 안 함"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"고급"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"복사"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" 개요가 클립보드에 복사되었습니다."</string>
-    <string name="not_set" msgid="5322289270060224450">"설정되지 않음"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"사용"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"사용 안함"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"고급"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"복사"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\'이(가) 클립보드에 복사되었습니다."</string>
+    <string name="not_set" msgid="6573031135582639649">"설정되지 않음"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ky/strings.xml b/preference/preference/src/main/res/values-ky/strings.xml
index 398cad4..feccf10 100644
--- a/preference/preference/src/main/res/values-ky/strings.xml
+++ b/preference/preference/src/main/res/values-ky/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"КҮЙҮК"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ӨЧҮК"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Өркүндөтүлгөн"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Көчүрүү"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" алмашуу буферине көчүрүлдү."</string>
-    <string name="not_set" msgid="5322289270060224450">"Туураланган эмес"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"КҮЙҮК"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ӨЧҮК"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Өркүндөтүлгөн"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Көчүрүү"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" алмашуу буферине көчүрүлдү."</string>
+    <string name="not_set" msgid="6573031135582639649">"Коюлган эмес"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-lo/strings.xml b/preference/preference/src/main/res/values-lo/strings.xml
index a53a18e..4f20e98 100644
--- a/preference/preference/src/main/res/values-lo/strings.xml
+++ b/preference/preference/src/main/res/values-lo/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ເປີດ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ປິດ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"ຂັ້ນສູງ"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"ສຳເນົາ"</string>
-    <string name="preference_copied" msgid="811987176883013580">"ສຳເນົາ \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ໄປໃສ່ຄລິບບອດແລ້ວ."</string>
-    <string name="not_set" msgid="5322289270060224450">"ຍັງບໍ່ໄດ້ຕັ້ງ"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ເປີດ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ປິດ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"ຂັ້ນສູງ"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"ສຳເນົາ"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"ສຳເນົາ \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ໄປໃສ່ຄລິບບອດແລ້ວ."</string>
+    <string name="not_set" msgid="6573031135582639649">"ບໍ່ໄດ້ຕັ້ງຄ່າ"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-lt/strings.xml b/preference/preference/src/main/res/values-lt/strings.xml
index 4e8de62..cded560 100644
--- a/preference/preference/src/main/res/values-lt/strings.xml
+++ b/preference/preference/src/main/res/values-lt/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ĮJUNGTA"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"IŠJUNGTA"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Išplėstiniai"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopijuoti"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Suvestinė „<xliff:g id="SUMMARY">%1$s</xliff:g>“ nukopijuota į iškarpinę."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nenustatyta"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ĮJUNGTA"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"IŠJUNGTA"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Išplėstiniai"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopijuoti"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Suvestinė „<xliff:g id="SUMMARY">%1$s</xliff:g>“ nukopijuota į iškarpinę."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nenustatyta"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-lv/strings.xml b/preference/preference/src/main/res/values-lv/strings.xml
index b76513d..bf174e6 100644
--- a/preference/preference/src/main/res/values-lv/strings.xml
+++ b/preference/preference/src/main/res/values-lv/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"IESLĒGTS"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"IZSLĒGTS"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Papildu"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopēt"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Preferences kopsavilkums “<xliff:g id="SUMMARY">%1$s</xliff:g>” ir kopēts starpliktuvē."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nav iestatīts"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"IESLĒGTS"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"IZSLĒGTS"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Papildu iestatījumi"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopēt"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Preference “<xliff:g id="SUMMARY">%1$s</xliff:g>” ir kopēta starpliktuvē."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nav iestatīts"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-mk/strings.xml b/preference/preference/src/main/res/values-mk/strings.xml
index 8dce0302..091c39a 100644
--- a/preference/preference/src/main/res/values-mk/strings.xml
+++ b/preference/preference/src/main/res/values-mk/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ВКЛУЧЕНО"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ИСКЛУЧЕНО"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Напредно"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Копирај"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Резимето „<xliff:g id="SUMMARY">%1$s</xliff:g>“ е копирано во привремената меморија."</string>
-    <string name="not_set" msgid="5322289270060224450">"Не е поставено"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ВКЛУЧЕНО"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ИСКЛУЧЕНО"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Напредни"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Копирај"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"„<xliff:g id="SUMMARY">%1$s</xliff:g>“ копирано во привремена меморија."</string>
+    <string name="not_set" msgid="6573031135582639649">"Не е поставено"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ml/strings.xml b/preference/preference/src/main/res/values-ml/strings.xml
index c971c77..68852db 100644
--- a/preference/preference/src/main/res/values-ml/strings.xml
+++ b/preference/preference/src/main/res/values-ml/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ഓണാണ്"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ഓഫാണ്"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"വിപുലമായത്"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"പകർത്തുക"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ക്ലിപ്‌ബോർഡിലേക്ക് പകർത്തി."</string>
-    <string name="not_set" msgid="5322289270060224450">"സജ്ജീകരിച്ചിട്ടില്ല"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ഓൺ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ഓഫാണ്"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"വിപുലമായത്"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"പകർത്തുക"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ക്ലിപ്‌ബോർഡിലേക്ക് പകർത്തി."</string>
+    <string name="not_set" msgid="6573031135582639649">"സജ്ജീകരിച്ചിട്ടില്ല"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-mn/strings.xml b/preference/preference/src/main/res/values-mn/strings.xml
index 258ecee..dfde992 100644
--- a/preference/preference/src/main/res/values-mn/strings.xml
+++ b/preference/preference/src/main/res/values-mn/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"АСААЛТТАЙ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"УНТРААЛТТАЙ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Нарийвчилсан"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Хуулах"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\"-г түр санах ойд хуулсан."</string>
-    <string name="not_set" msgid="5322289270060224450">"Тохируулаагүй"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ИДЭВХТЭЙ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ИДЭВХГҮЙ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Дэлгэрэнгүй"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Хуулах"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\"-г түр санах ойд хуулсан."</string>
+    <string name="not_set" msgid="6573031135582639649">"Тохируулаагүй"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-mr/strings.xml b/preference/preference/src/main/res/values-mr/strings.xml
index 667d216..146c94b 100644
--- a/preference/preference/src/main/res/values-mr/strings.xml
+++ b/preference/preference/src/main/res/values-mr/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"सुरू आहे"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"बंद आहे"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"प्रगत"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"कॉपी करा"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" क्लिपबोर्डवर कॉपी केली."</string>
-    <string name="not_set" msgid="5322289270060224450">"सेट केलेले नाही"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"सुरू"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"बंद"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"प्रगत"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"कॉपी करा"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" क्लिपबोर्डवर कॉपी केली."</string>
+    <string name="not_set" msgid="6573031135582639649">"सेट केलेले नाही"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ms/strings.xml b/preference/preference/src/main/res/values-ms/strings.xml
index fa787a2..cca4566 100644
--- a/preference/preference/src/main/res/values-ms/strings.xml
+++ b/preference/preference/src/main/res/values-ms/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"HIDUP"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"MATI"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Lanjutan"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Salin"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" disalin kepada papan keratan."</string>
-    <string name="not_set" msgid="5322289270060224450">"Tidak ditetapkan"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"HIDUP"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"MATI"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Terperinci"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Salin"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" disalin ke papan keratan."</string>
+    <string name="not_set" msgid="6573031135582639649">"Tidak ditetapkan"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-my/strings.xml b/preference/preference/src/main/res/values-my/strings.xml
index 131a34f..270e79b 100644
--- a/preference/preference/src/main/res/values-my/strings.xml
+++ b/preference/preference/src/main/res/values-my/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ဖွင့်"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ပိတ်"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"အဆင့်မြင့်"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>၊ <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"မိတ္တူကူးရန်"</string>
-    <string name="preference_copied" msgid="811987176883013580">"“<xliff:g id="SUMMARY">%1$s</xliff:g>” ကို ကလစ်ဘုတ်သို့ မိတ္တူကူးပြီးပြီ။"</string>
-    <string name="not_set" msgid="5322289270060224450">"သတ်မှတ်မထားပါ"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ဖွင့်"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ပိတ်"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"အဆင့်မြင့်"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>၊ <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"မိတ္တူကူးရန်"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ကို ကလစ်ဘုတ်သို့ မိတ္တူကူးယူပြီးပါပြီ။"</string>
+    <string name="not_set" msgid="6573031135582639649">"သတ်မှတ်မထားပါ"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-nb/strings.xml b/preference/preference/src/main/res/values-nb/strings.xml
index c004e50..b7bab05 100644
--- a/preference/preference/src/main/res/values-nb/strings.xml
+++ b/preference/preference/src/main/res/values-nb/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"PÅ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"AV"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avansert"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiér"</string>
-    <string name="preference_copied" msgid="811987176883013580">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» er kopiert til utklippstavlen."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ikke angitt"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"PÅ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"AV"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avansert"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiér"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"«<xliff:g id="SUMMARY">%1$s</xliff:g>» er kopiert til utklippstavlen."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ikke angitt"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ne/strings.xml b/preference/preference/src/main/res/values-ne/strings.xml
index 49a31dd..07559cc 100644
--- a/preference/preference/src/main/res/values-ne/strings.xml
+++ b/preference/preference/src/main/res/values-ne/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"अन छ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"अफ छ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"उन्नत"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"कपी गर्नुहोस्"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" कपी गरी क्लिपबोर्डमा पेस्ट गरियो।"</string>
-    <string name="not_set" msgid="5322289270060224450">"सेट गरिएको छैन"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"सक्रिय"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"निष्क्रिय पार्नुहोस्‌"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"उन्नत"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"कपी गर्नुहोस्"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" लाई क्लिपबोर्डमा कपी गरियो।"</string>
+    <string name="not_set" msgid="6573031135582639649">"सेट गरिएको छैन"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-nl/strings.xml b/preference/preference/src/main/res/values-nl/strings.xml
index 2d24728..11c51c0 100644
--- a/preference/preference/src/main/res/values-nl/strings.xml
+++ b/preference/preference/src/main/res/values-nl/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AAN"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"UIT"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Geavanceerd"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiëren"</string>
-    <string name="preference_copied" msgid="811987176883013580">"<xliff:g id="SUMMARY">%1$s</xliff:g> is gekopieerd naar het klembord."</string>
-    <string name="not_set" msgid="5322289270060224450">"Niet ingesteld"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AAN"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"UIT"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Geavanceerd"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiëren"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\'<xliff:g id="SUMMARY">%1$s</xliff:g>\' is gekopieerd naar het klembord."</string>
+    <string name="not_set" msgid="6573031135582639649">"Niet ingesteld"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-or/strings.xml b/preference/preference/src/main/res/values-or/strings.xml
index ca18bb7..4282344 100644
--- a/preference/preference/src/main/res/values-or/strings.xml
+++ b/preference/preference/src/main/res/values-or/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ଚାଲୁ ଅଛି"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ବନ୍ଦ ଅଛି"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"ଉନ୍ନତ"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"କପି କରନ୍ତୁ"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\"କୁ କ୍ଲିପବୋର୍ଡକୁ କପି କରାଯାଇଛି।"</string>
-    <string name="not_set" msgid="5322289270060224450">"ସେଟ କରାଯାଇନାହିଁ"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ଚାଲୁ ଅଛି"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ବନ୍ଦ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"ଅଧିକ ଉନ୍ନତ"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"କପି କରନ୍ତୁ"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" କ୍ଲିପବୋର୍ଡକୁ କପି ହୋ‍ଇଗଲା।"</string>
+    <string name="not_set" msgid="6573031135582639649">"ସେଟ ହୋଇନାହିଁ"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-pa/strings.xml b/preference/preference/src/main/res/values-pa/strings.xml
index 41ac218..c693c54 100644
--- a/preference/preference/src/main/res/values-pa/strings.xml
+++ b/preference/preference/src/main/res/values-pa/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ਚਾਲੂ ਹੈ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ਬੰਦ ਹੈ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"ਅਡਵਾਂਸ"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"ਕਾਪੀ ਕਰੋ"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ਨੂੰ ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕੀਤਾ ਗਿਆ।"</string>
-    <string name="not_set" msgid="5322289270060224450">"ਸੈੱਟ ਨਹੀਂ ਹੈ"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ਚਾਲੂ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ਬੰਦ"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"ਅਡਵਾਂਸ"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"ਕਾਪੀ ਕਰੋ"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ਨੂੰ ਕਲਿੱਪਬੋਰਡ \'ਤੇ ਕਾਪੀ ਕੀਤਾ ਗਿਆ।"</string>
+    <string name="not_set" msgid="6573031135582639649">"ਸੈੱਟ ਨਹੀਂ ਹੈ"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-pl/strings.xml b/preference/preference/src/main/res/values-pl/strings.xml
index 35579e1..cbf698c 100644
--- a/preference/preference/src/main/res/values-pl/strings.xml
+++ b/preference/preference/src/main/res/values-pl/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"WŁ."</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"WYŁ."</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Zaawansowane"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiuj"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Skopiowano „<xliff:g id="SUMMARY">%1$s</xliff:g>” do schowka."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nie ustawiono"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"WŁ."</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"WYŁ."</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Zaawansowane"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiuj"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Skopiowano „<xliff:g id="SUMMARY">%1$s</xliff:g>” do schowka."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nie ustawiono"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-pt-rBR/strings.xml b/preference/preference/src/main/res/values-pt-rBR/strings.xml
index 30a456a..d79d582 100644
--- a/preference/preference/src/main/res/values-pt-rBR/strings.xml
+++ b/preference/preference/src/main/res/values-pt-rBR/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ATIVADAS"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DESATIVADAS"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avançadas"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copiar"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copiado para a área de transferência."</string>
-    <string name="not_set" msgid="5322289270060224450">"Não definido"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ATIVADO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESATIVADO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avançado"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copiar"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copiado para a área de transferência."</string>
+    <string name="not_set" msgid="6573031135582639649">"Não definido"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-pt-rPT/strings.xml b/preference/preference/src/main/res/values-pt-rPT/strings.xml
index 73e7bf3c..1761efc 100644
--- a/preference/preference/src/main/res/values-pt-rPT/strings.xml
+++ b/preference/preference/src/main/res/values-pt-rPT/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ATIVADO"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DESATIVADO"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avançadas"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copiar"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copiado para a área de transferência."</string>
-    <string name="not_set" msgid="5322289270060224450">"Não definido"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ATIVADO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESATIVADO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avançadas"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copiar"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copiado para a área de transferência."</string>
+    <string name="not_set" msgid="6573031135582639649">"Não definido"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-pt/strings.xml b/preference/preference/src/main/res/values-pt/strings.xml
index 30a456a..d79d582 100644
--- a/preference/preference/src/main/res/values-pt/strings.xml
+++ b/preference/preference/src/main/res/values-pt/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ATIVADAS"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DESATIVADAS"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avançadas"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copiar"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copiado para a área de transferência."</string>
-    <string name="not_set" msgid="5322289270060224450">"Não definido"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ATIVADO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DESATIVADO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avançado"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copiar"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" copiado para a área de transferência."</string>
+    <string name="not_set" msgid="6573031135582639649">"Não definido"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ro/strings.xml b/preference/preference/src/main/res/values-ro/strings.xml
index f83e1ba..a2b2996 100644
--- a/preference/preference/src/main/res/values-ro/strings.xml
+++ b/preference/preference/src/main/res/values-ro/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ACTIVAT"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"DEZACTIVAT"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Complexe"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Copiază"</string>
-    <string name="preference_copied" msgid="811987176883013580">"<xliff:g id="SUMMARY">%1$s</xliff:g> s-a copiat în clipboard."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nesetată"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ACTIVAT"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"DEZACTIVAT"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avansat"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Copiază"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"„<xliff:g id="SUMMARY">%1$s</xliff:g>” a fost copiat în clipboard."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nesetată"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ru/strings.xml b/preference/preference/src/main/res/values-ru/strings.xml
index a1bf7ea..ccef620 100644
--- a/preference/preference/src/main/res/values-ru/strings.xml
+++ b/preference/preference/src/main/res/values-ru/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ВКЛ."</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ОТКЛ."</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Дополнительно"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Копировать"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Текст \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" скопирован в буфер обмена."</string>
-    <string name="not_set" msgid="5322289270060224450">"Не задано"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ВКЛ."</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ВЫКЛ."</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Дополнительно"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Копировать"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Текст \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" скопирован в буфер обмена"</string>
+    <string name="not_set" msgid="6573031135582639649">"Не указано"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-si/strings.xml b/preference/preference/src/main/res/values-si/strings.xml
index 2f243da..6c169fa 100644
--- a/preference/preference/src/main/res/values-si/strings.xml
+++ b/preference/preference/src/main/res/values-si/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ක්‍රියාත්මකයි"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ක්‍රියාවිරහිතයි"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"උසස්"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"පිටපත් කරන්න"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" පසුරු පුවරුවට පිටපත් කරන ලදි."</string>
-    <string name="not_set" msgid="5322289270060224450">"සකසා නැත"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ක්‍රියාත්මකයි"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ක්‍රියාවිරහිතයි"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"උසස්"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"පිටපත් කරන්න"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" පසුරු පුවරුවට පිටපත් කරන ලදී."</string>
+    <string name="not_set" msgid="6573031135582639649">"සකසා නැත"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-sk/strings.xml b/preference/preference/src/main/res/values-sk/strings.xml
index 3ffbd3a..6c7dff3 100644
--- a/preference/preference/src/main/res/values-sk/strings.xml
+++ b/preference/preference/src/main/res/values-sk/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ZAPNUTÉ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"VYPNUTÉ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Pokročilé"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Skopírovať"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Položka <xliff:g id="SUMMARY">%1$s</xliff:g> bola skopírovaná do schránky."</string>
-    <string name="not_set" msgid="5322289270060224450">"Nenastavené"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"Zapnuté"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"Vypnuté"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Rozšírené"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Skopírovať"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Položka <xliff:g id="SUMMARY">%1$s</xliff:g> bola skopírovaná do schránky."</string>
+    <string name="not_set" msgid="6573031135582639649">"Nenastavené"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-sl/strings.xml b/preference/preference/src/main/res/values-sl/strings.xml
index 1834976..26b805f 100644
--- a/preference/preference/src/main/res/values-sl/strings.xml
+++ b/preference/preference/src/main/res/values-sl/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"VKLOPLJENO"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"IZKLOPLJENO"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Dodatno"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiraj"</string>
-    <string name="preference_copied" msgid="811987176883013580">"»<xliff:g id="SUMMARY">%1$s</xliff:g>« je bilo kopirano v odložišče."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ni nastavljeno"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"VKLOPLJENO"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"IZKLOPLJENO"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Dodatno"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiraj"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"»<xliff:g id="SUMMARY">%1$s</xliff:g>« je bilo kopirano v odložišče."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ni nastavljeno"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-sq/strings.xml b/preference/preference/src/main/res/values-sq/strings.xml
index 79997d0..6a2a42e 100644
--- a/preference/preference/src/main/res/values-sq/strings.xml
+++ b/preference/preference/src/main/res/values-sq/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AKTIVE"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"JOAKTIVE"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Të përparuara"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopjo"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" u kopjua në kujtesën e fragmenteve"</string>
-    <string name="not_set" msgid="5322289270060224450">"Nuk është caktuar"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AKTIV"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"JOAKTIV"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Të përparuara"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopjo"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" u kopjua në kujtesën e fragmenteve"</string>
+    <string name="not_set" msgid="6573031135582639649">"Nuk është caktuar"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-sr/strings.xml b/preference/preference/src/main/res/values-sr/strings.xml
index abd31f9..ee431b1 100644
--- a/preference/preference/src/main/res/values-sr/strings.xml
+++ b/preference/preference/src/main/res/values-sr/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"УКЉУЧЕНО"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ИСКЉУЧЕНО"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Напредно"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Копирај"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Резиме „<xliff:g id="SUMMARY">%1$s</xliff:g>“ је копиран у привремену меморију."</string>
-    <string name="not_set" msgid="5322289270060224450">"Није подешено"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"УКЉУЧЕНО"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ИСКЉУЧЕНО"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Напредно"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Копирај"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Резиме „<xliff:g id="SUMMARY">%1$s</xliff:g>“ је копиран у привремену меморију."</string>
+    <string name="not_set" msgid="6573031135582639649">"Није подешено"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-sv/strings.xml b/preference/preference/src/main/res/values-sv/strings.xml
index dfa9600..a7ef126 100644
--- a/preference/preference/src/main/res/values-sv/strings.xml
+++ b/preference/preference/src/main/res/values-sv/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"PÅ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"AV"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Avancerat"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopiera"</string>
-    <string name="preference_copied" msgid="811987176883013580">"<xliff:g id="SUMMARY">%1$s</xliff:g> har kopierats till urklipp."</string>
-    <string name="not_set" msgid="5322289270060224450">"Inte angivet"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"PÅ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"AV"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Avancerat"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopiera"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"<xliff:g id="SUMMARY">%1$s</xliff:g> har kopierats till Urklipp."</string>
+    <string name="not_set" msgid="6573031135582639649">"Inte angett"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-sw/strings.xml b/preference/preference/src/main/res/values-sw/strings.xml
index 6ddc9a6..4219f3a 100644
--- a/preference/preference/src/main/res/values-sw/strings.xml
+++ b/preference/preference/src/main/res/values-sw/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"IMEWASHWA"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"IMEZIMWA"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Ya kina"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Nakili"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" imenakiliwa kwenye ubao wa kunakili."</string>
-    <string name="not_set" msgid="5322289270060224450">"Haijawekwa"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"IMEWASHWA"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"IMEZIMWA"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Mipangilio ya Kina"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Nakili"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" imenakiliwa kwenye ubao wa kunakili."</string>
+    <string name="not_set" msgid="6573031135582639649">"Haijawekwa"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ta/strings.xml b/preference/preference/src/main/res/values-ta/strings.xml
index c3c0525..ead4d01 100644
--- a/preference/preference/src/main/res/values-ta/strings.xml
+++ b/preference/preference/src/main/res/values-ta/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ஆன்"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ஆஃப்"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"மேம்பட்டவை"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"நகலெடு"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது."</string>
-    <string name="not_set" msgid="5322289270060224450">"அமைக்கப்படவில்லை"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ஆன்"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ஆஃப்"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"மேம்பட்டவை"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"நகலெடு"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" கிளிப்போர்டுக்கு நகலெடுக்கப்பட்டது."</string>
+    <string name="not_set" msgid="6573031135582639649">"அமைக்கப்படவில்லை"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-te/strings.xml b/preference/preference/src/main/res/values-te/strings.xml
index 0de68f2..6281965 100644
--- a/preference/preference/src/main/res/values-te/strings.xml
+++ b/preference/preference/src/main/res/values-te/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ఆన్"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ఆఫ్"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"అధునాతనం"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"కాపీ చేయండి"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" క్లిప్‌బోర్డ్‌కు కాపీ చేయబడింది."</string>
-    <string name="not_set" msgid="5322289270060224450">"సెట్ చేసి లేదు"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"ఆన్ చేయండి"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ఆఫ్ చేయండి"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"అధునాతన సెట్టింగ్‌లు"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"కాపీ చేయండి"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" క్లిప్‌బోర్డ్‌కి కాపీ చేయబడింది."</string>
+    <string name="not_set" msgid="6573031135582639649">"సెట్ చేయలేదు"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-th/strings.xml b/preference/preference/src/main/res/values-th/strings.xml
index 9c32888..86362ad 100644
--- a/preference/preference/src/main/res/values-th/strings.xml
+++ b/preference/preference/src/main/res/values-th/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"เปิด"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ปิด"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"ขั้นสูง"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"คัดลอก"</string>
-    <string name="preference_copied" msgid="811987176883013580">"คัดลอก \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ไปยังคลิปบอร์ดแล้ว"</string>
-    <string name="not_set" msgid="5322289270060224450">"ไม่ได้ตั้งค่า"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"เปิด"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ปิด"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"ขั้นสูง"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g> <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"คัดลอก"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"คัดลอก \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" ไปยังคลิปบอร์ดแล้ว"</string>
+    <string name="not_set" msgid="6573031135582639649">"ไม่ได้ตั้งค่า"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-tl/strings.xml b/preference/preference/src/main/res/values-tl/strings.xml
index a3eb644..380426d 100644
--- a/preference/preference/src/main/res/values-tl/strings.xml
+++ b/preference/preference/src/main/res/values-tl/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"NAKA-ON"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"NAKA-OFF"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Advanced"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopyahin"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Nakopya sa clipboard ang \"<xliff:g id="SUMMARY">%1$s</xliff:g>.\""</string>
-    <string name="not_set" msgid="5322289270060224450">"Hindi nakatakda"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"NAKA-ON"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"NAKA-OFF"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Advanced"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopyahin"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Nakopya sa clipboard ang \"<xliff:g id="SUMMARY">%1$s</xliff:g>.\""</string>
+    <string name="not_set" msgid="6573031135582639649">"Hindi nakatakda"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-tr/strings.xml b/preference/preference/src/main/res/values-tr/strings.xml
index 6921e50..5def69c 100644
--- a/preference/preference/src/main/res/values-tr/strings.xml
+++ b/preference/preference/src/main/res/values-tr/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"AÇIK"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"KAPALI"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Gelişmiş"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopyala"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" panoya kopyalandı."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ayarlanmadı"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"AÇIK"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"KAPALI"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Gelişmiş"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopyala"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" panoya kopyalandı."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ayarlanmadı"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-uk/strings.xml b/preference/preference/src/main/res/values-uk/strings.xml
index 3c1dba2..e5cc4b3 100644
--- a/preference/preference/src/main/res/values-uk/strings.xml
+++ b/preference/preference/src/main/res/values-uk/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"УВІМКНЕНО"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ВИМКНЕНО"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Розширені"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Копіювати"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" скопійовано в буфер обміну."</string>
-    <string name="not_set" msgid="5322289270060224450">"Не вказано"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"УВІМКНЕНО"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"ВИМКНЕНО"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Додатково"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Скопіювати"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\": скопійовано в буфер обміну."</string>
+    <string name="not_set" msgid="6573031135582639649">"Не налаштовано"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-ur/strings.xml b/preference/preference/src/main/res/values-ur/strings.xml
index fb04e04..64136ef 100644
--- a/preference/preference/src/main/res/values-ur/strings.xml
+++ b/preference/preference/src/main/res/values-ur/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"آن ہے"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"آف ہے"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"جدید ترین"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>، <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"کاپی کریں"</string>
-    <string name="preference_copied" msgid="811987176883013580">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" کلپ بورڈ پر کاپی ہو گیا۔"</string>
-    <string name="not_set" msgid="5322289270060224450">"سیٹ نہیں ہے"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"آن"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"آف ہے"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"جدید ترین"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>، <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"کاپی کریں"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" کلپ بورڈ میں کاپی ہو گیا۔"</string>
+    <string name="not_set" msgid="6573031135582639649">"سیٹ نہیں ہے"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-uz/strings.xml b/preference/preference/src/main/res/values-uz/strings.xml
index 8ed7583..fe9bb5b 100644
--- a/preference/preference/src/main/res/values-uz/strings.xml
+++ b/preference/preference/src/main/res/values-uz/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"YONIQ"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"OʻCHIQ"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Kengaytirilgan"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Nusxa olish"</string>
-    <string name="preference_copied" msgid="811987176883013580">"“<xliff:g id="SUMMARY">%1$s</xliff:g>” vaqtinchalik xotiraga nusxalandi."</string>
-    <string name="not_set" msgid="5322289270060224450">"Sozlanmagan"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"YONIQ"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"YOQILMAGAN"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Kengaytirilgan"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Nusxa olish"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"“<xliff:g id="SUMMARY">%1$s</xliff:g>” vaqtinchalik xotiraga nusxalandi."</string>
+    <string name="not_set" msgid="6573031135582639649">"Tayinlanmagan"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-vi/strings.xml b/preference/preference/src/main/res/values-vi/strings.xml
index cd0b24c..e80e75c 100644
--- a/preference/preference/src/main/res/values-vi/strings.xml
+++ b/preference/preference/src/main/res/values-vi/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"ĐANG BẬT"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"ĐANG TẮT"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Nâng cao"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Sao chép"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Đã sao chép \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" vào bảng nhớ tạm."</string>
-    <string name="not_set" msgid="5322289270060224450">"Chưa đặt"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"BẬT"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"TẮT"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Nâng cao"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Sao chép"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"Đã sao chép \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" vào bảng nhớ tạm."</string>
+    <string name="not_set" msgid="6573031135582639649">"Chưa đặt"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-zh-rCN/strings.xml b/preference/preference/src/main/res/values-zh-rCN/strings.xml
index 81739af..3932368 100644
--- a/preference/preference/src/main/res/values-zh-rCN/strings.xml
+++ b/preference/preference/src/main/res/values-zh-rCN/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"开"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"关"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"高级"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"复制"</string>
-    <string name="preference_copied" msgid="811987176883013580">"已将“<xliff:g id="SUMMARY">%1$s</xliff:g>”复制到剪贴板。"</string>
-    <string name="not_set" msgid="5322289270060224450">"未设置"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"已开启"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"已关闭"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"高级"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"复制"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"已将“<xliff:g id="SUMMARY">%1$s</xliff:g>”复制到剪贴板。"</string>
+    <string name="not_set" msgid="6573031135582639649">"未设置"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-zh-rHK/strings.xml b/preference/preference/src/main/res/values-zh-rHK/strings.xml
index 1db6e1b..ce0e7b8 100644
--- a/preference/preference/src/main/res/values-zh-rHK/strings.xml
+++ b/preference/preference/src/main/res/values-zh-rHK/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"開啟"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"關閉"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"進階"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>,<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"複製"</string>
-    <string name="preference_copied" msgid="811987176883013580">"「<xliff:g id="SUMMARY">%1$s</xliff:g>」已複製到剪貼簿。"</string>
-    <string name="not_set" msgid="5322289270060224450">"未設定"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"開啟"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"關閉"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"進階"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"複製"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"「<xliff:g id="SUMMARY">%1$s</xliff:g>」已複製到剪貼簿。"</string>
+    <string name="not_set" msgid="6573031135582639649">"未設定"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-zh-rTW/strings.xml b/preference/preference/src/main/res/values-zh-rTW/strings.xml
index 1637d96..1373bd7 100644
--- a/preference/preference/src/main/res/values-zh-rTW/strings.xml
+++ b/preference/preference/src/main/res/values-zh-rTW/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"開啟"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"關閉"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"進階"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"複製"</string>
-    <string name="preference_copied" msgid="811987176883013580">"已將「<xliff:g id="SUMMARY">%1$s</xliff:g>」複製到剪貼簿。"</string>
-    <string name="not_set" msgid="5322289270060224450">"未設定"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"開啟"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"關閉"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"進階"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>、<xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"複製"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"已將「<xliff:g id="SUMMARY">%1$s</xliff:g>」複製到剪貼簿。"</string>
+    <string name="not_set" msgid="6573031135582639649">"未設定"</string>
 </resources>
diff --git a/preference/preference/src/main/res/values-zu/strings.xml b/preference/preference/src/main/res/values-zu/strings.xml
index d447b70..a3b6c70 100644
--- a/preference/preference/src/main/res/values-zu/strings.xml
+++ b/preference/preference/src/main/res/values-zu/strings.xml
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="v7_preference_on" msgid="5048321755000716519">"KUVULIWE"</string>
-    <string name="v7_preference_off" msgid="3516781442212499478">"KUVALIWE"</string>
-    <string name="expand_button_title" msgid="4538737816656609903">"Okuthuthukisiwe"</string>
-    <string name="summary_collapsed_preference_list" msgid="4958113070631599540">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
-    <string name="copy" msgid="8016979983985242980">"Kopisha"</string>
-    <string name="preference_copied" msgid="811987176883013580">"Okuthi \"<xliff:g id="SUMMARY">%1$s</xliff:g>\" kukopishelwe ebhodini lokunamathisela."</string>
-    <string name="not_set" msgid="5322289270060224450">"Ayisethiwe"</string>
+    <string name="v7_preference_on" msgid="89551595707643515">"VULA"</string>
+    <string name="v7_preference_off" msgid="3140233346420563315">"VALA"</string>
+    <string name="expand_button_title" msgid="2427401033573778270">"Okuthuthukisiwe"</string>
+    <string name="summary_collapsed_preference_list" msgid="9167775378838880170">"<xliff:g id="CURRENT_ITEMS">%1$s</xliff:g>, <xliff:g id="ADDED_ITEMS">%2$s</xliff:g>"</string>
+    <string name="copy" msgid="6083905920877235314">"Kopisha"</string>
+    <string name="preference_copied" msgid="6685851473431805375">"\"<xliff:g id="SUMMARY">%1$s</xliff:g>\" kukopishelwe kuklibhodi."</string>
+    <string name="not_set" msgid="6573031135582639649">"Ayisethiwe"</string>
 </resources>
diff --git a/privacysandbox/activity/activity-client/api/current.txt b/privacysandbox/activity/activity-client/api/current.txt
index 6d9cf16..b744203 100644
--- a/privacysandbox/activity/activity-client/api/current.txt
+++ b/privacysandbox/activity/activity-client/api/current.txt
@@ -1,23 +1,12 @@
 // Signature format: 4.0
 package androidx.privacysandbox.activity.client {
 
-  public final class LocalManagedSdkActivityLauncher<T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> implements androidx.privacysandbox.activity.client.LocalSdkActivityLauncher {
+  public interface LocalSdkActivityLauncher<T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> extends androidx.privacysandbox.activity.core.SdkActivityLauncher {
     method public void dispose();
-    method public suspend Object? launchSdkActivity(android.os.IBinder sdkActivityHandlerToken, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
-  }
-
-  public interface LocalSdkActivityLauncher extends androidx.privacysandbox.activity.core.SdkActivityLauncher {
-    method public void dispose();
-  }
-
-  public final class LocalUnmanagedSdkActivityLauncher<T extends android.app.Activity> implements androidx.privacysandbox.activity.client.LocalSdkActivityLauncher {
-    method public void dispose();
-    method public suspend Object? launchSdkActivity(android.os.IBinder sdkActivityHandlerToken, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
   }
 
   public final class SdkActivityLaunchers {
-    method public static <T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> androidx.privacysandbox.activity.client.LocalManagedSdkActivityLauncher<T> createManagedSdkActivityLauncher(T, kotlin.jvm.functions.Function0<java.lang.Boolean> allowLaunch);
-    method public static <T extends android.app.Activity> androidx.privacysandbox.activity.client.LocalUnmanagedSdkActivityLauncher<T> createUnmanagedSdkActivityLauncher(T, kotlin.jvm.functions.Function0<java.lang.Boolean> allowLaunch);
+    method public static <T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> androidx.privacysandbox.activity.client.LocalSdkActivityLauncher<T> createSdkActivityLauncher(T, kotlin.jvm.functions.Function0<java.lang.Boolean> allowLaunch);
     method public static android.os.Bundle toLauncherInfo(androidx.privacysandbox.activity.core.SdkActivityLauncher);
   }
 
diff --git a/privacysandbox/activity/activity-client/api/restricted_current.txt b/privacysandbox/activity/activity-client/api/restricted_current.txt
index 6d9cf16..b744203 100644
--- a/privacysandbox/activity/activity-client/api/restricted_current.txt
+++ b/privacysandbox/activity/activity-client/api/restricted_current.txt
@@ -1,23 +1,12 @@
 // Signature format: 4.0
 package androidx.privacysandbox.activity.client {
 
-  public final class LocalManagedSdkActivityLauncher<T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> implements androidx.privacysandbox.activity.client.LocalSdkActivityLauncher {
+  public interface LocalSdkActivityLauncher<T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> extends androidx.privacysandbox.activity.core.SdkActivityLauncher {
     method public void dispose();
-    method public suspend Object? launchSdkActivity(android.os.IBinder sdkActivityHandlerToken, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
-  }
-
-  public interface LocalSdkActivityLauncher extends androidx.privacysandbox.activity.core.SdkActivityLauncher {
-    method public void dispose();
-  }
-
-  public final class LocalUnmanagedSdkActivityLauncher<T extends android.app.Activity> implements androidx.privacysandbox.activity.client.LocalSdkActivityLauncher {
-    method public void dispose();
-    method public suspend Object? launchSdkActivity(android.os.IBinder sdkActivityHandlerToken, kotlin.coroutines.Continuation<? super java.lang.Boolean>);
   }
 
   public final class SdkActivityLaunchers {
-    method public static <T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> androidx.privacysandbox.activity.client.LocalManagedSdkActivityLauncher<T> createManagedSdkActivityLauncher(T, kotlin.jvm.functions.Function0<java.lang.Boolean> allowLaunch);
-    method public static <T extends android.app.Activity> androidx.privacysandbox.activity.client.LocalUnmanagedSdkActivityLauncher<T> createUnmanagedSdkActivityLauncher(T, kotlin.jvm.functions.Function0<java.lang.Boolean> allowLaunch);
+    method public static <T extends android.app.Activity & androidx.lifecycle.LifecycleOwner> androidx.privacysandbox.activity.client.LocalSdkActivityLauncher<T> createSdkActivityLauncher(T, kotlin.jvm.functions.Function0<java.lang.Boolean> allowLaunch);
     method public static android.os.Bundle toLauncherInfo(androidx.privacysandbox.activity.core.SdkActivityLauncher);
   }
 
diff --git a/privacysandbox/activity/activity-client/src/androidTest/AndroidManifest.xml b/privacysandbox/activity/activity-client/src/androidTest/AndroidManifest.xml
index 09024b2..7cbcd44 100644
--- a/privacysandbox/activity/activity-client/src/androidTest/AndroidManifest.xml
+++ b/privacysandbox/activity/activity-client/src/androidTest/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
     <application>
         <activity
-            android:name="androidx.privacysandbox.activity.client.TestLifecycleAwareActivity"
+            android:name="androidx.privacysandbox.activity.client.TestActivity"
             android:theme="@style/Theme.AppCompat"
             android:exported="true"/>
     </application>
diff --git a/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/CreateSdkActivityLauncherTest.kt b/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/CreateSdkActivityLauncherTest.kt
index c0b16e7..81843c6 100644
--- a/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/CreateSdkActivityLauncherTest.kt
+++ b/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/CreateSdkActivityLauncherTest.kt
@@ -22,7 +22,6 @@
 import android.os.Binder
 import android.os.Build
 import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
 import androidx.test.espresso.intent.Intents.intended
 import androidx.test.espresso.intent.Intents.intending
 import androidx.test.espresso.intent.Intents.times
@@ -35,43 +34,24 @@
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.runBlocking
 import org.hamcrest.Matchers.`is`
-import org.junit.Assume.assumeTrue
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.Parameterized
 
-@RunWith(Parameterized::class)
 @SmallTest
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codeName = "UpsideDownCake")
-class CreateSdkActivityLauncherTest(private val useManagedSdkActivityLauncher: Boolean) {
-    // Lifecycle-aware activity is used in the tests as both types of LocalSdkActivityLauncher
-    // (managed/unmanaged) can be created for it.
-    @get:Rule
-    var lifecycleAwareActivityScenarioRule =
-        ActivityScenarioRule(TestLifecycleAwareActivity::class.java)
+class CreateSdkActivityLauncherTest {
+    @get:Rule var activityScenarioRule = ActivityScenarioRule(TestActivity::class.java)
 
     @get:Rule var intentsRule = IntentsRule()
 
-    companion object {
-        @JvmStatic
-        @Parameterized.Parameters(name = "useManagedSdkActivityLauncher={0}")
-        fun data(): Array<Any> =
-            arrayOf(
-                arrayOf(true),
-                arrayOf(false),
-            )
-    }
-
     private val sdkSandboxActivityMatcher =
         hasAction(`is`("android.app.sdksandbox.action.START_SANDBOXED_ACTIVITY"))
 
     @Before
     fun setUp() {
         // Intercepts intent to start sandboxed activity and immediately return a result.
-        // This allows us to avoid loading and setting up an SDK just for checking if activities
-        // are
+        // This allows us to avoid loading and setting up an SDK just for checking if activities are
         // launched.
         intending(sdkSandboxActivityMatcher)
             .respondWith(ActivityResult(Activity.RESULT_OK, Intent()))
@@ -79,10 +59,7 @@
 
     @Test
     fun returnedLauncher_launchesActivitiesWhenAllowed() = runBlocking {
-        val launcher =
-            lifecycleAwareActivityScenarioRule.withActivity {
-                this.createSdkActivityLauncher { true }
-            }
+        val launcher = activityScenarioRule.withActivity { this.createSdkActivityLauncher { true } }
 
         val result = launcher.launchSdkActivity(Binder())
 
@@ -93,9 +70,7 @@
     @Test
     fun returnedLauncher_rejectsActivityLaunchesAccordingToPredicate() = runBlocking {
         val launcher =
-            lifecycleAwareActivityScenarioRule.withActivity {
-                this.createSdkActivityLauncher { false }
-            }
+            activityScenarioRule.withActivity { this.createSdkActivityLauncher { false } }
 
         val result = launcher.launchSdkActivity(Binder())
 
@@ -105,10 +80,7 @@
 
     @Test
     fun returnedLauncher_rejectsActivityLaunchesWhenDisposed() = runBlocking {
-        val launcher =
-            lifecycleAwareActivityScenarioRule.withActivity {
-                this.createSdkActivityLauncher { true }
-            }
+        val launcher = activityScenarioRule.withActivity { this.createSdkActivityLauncher { true } }
         launcher.dispose()
 
         val result = launcher.launchSdkActivity(Binder())
@@ -118,11 +90,8 @@
     }
 
     @Test
-    fun returnedManagedLauncher_disposeCanBeCalledMultipleTimes() = runBlocking {
-        val launcher =
-            lifecycleAwareActivityScenarioRule.withActivity {
-                this.createSdkActivityLauncher { true }
-            }
+    fun returnedLauncher_disposeCanBeCalledMultipleTimes() = runBlocking {
+        val launcher = activityScenarioRule.withActivity { this.createSdkActivityLauncher { true } }
         launcher.dispose()
 
         val result = launcher.launchSdkActivity(Binder())
@@ -134,14 +103,9 @@
     }
 
     @Test
-    fun returnedManagedLauncher_rejectsActivityLaunchesWhenHostActivityIsDestroyed() = runBlocking {
-        assumeTrue(useManagedSdkActivityLauncher)
-
-        val launcher =
-            lifecycleAwareActivityScenarioRule.withActivity {
-                this.createManagedSdkActivityLauncher { true }
-            }
-        lifecycleAwareActivityScenarioRule.scenario.moveToState(Lifecycle.State.DESTROYED)
+    fun returnedLauncher_rejectsActivityLaunchesWhenHostActivityIsDestroyed() = runBlocking {
+        val launcher = activityScenarioRule.withActivity { this.createSdkActivityLauncher { true } }
+        activityScenarioRule.scenario.moveToState(Lifecycle.State.DESTROYED)
 
         val result = launcher.launchSdkActivity(Binder())
 
@@ -150,23 +114,15 @@
     }
 
     @Test
-    fun returnedManagedLauncher_rejectsActivityLaunchesWhenHostActivityWasAlreadyDestroyed() =
+    fun returnedLauncher_rejectsActivityLaunchesWhenHostActivityWasAlreadyDestroyed() =
         runBlocking {
-            assumeTrue(useManagedSdkActivityLauncher)
-
-            val activity = lifecycleAwareActivityScenarioRule.withActivity { this }
-            lifecycleAwareActivityScenarioRule.scenario.moveToState(Lifecycle.State.DESTROYED)
-            val launcher = activity.createManagedSdkActivityLauncher { true }
+            val activity = activityScenarioRule.withActivity { this }
+            activityScenarioRule.scenario.moveToState(Lifecycle.State.DESTROYED)
+            val launcher = activity.createSdkActivityLauncher { true }
 
             val result = launcher.launchSdkActivity(Binder())
 
             assertThat(result).isFalse()
             intended(sdkSandboxActivityMatcher, times(0))
         }
-
-    private fun <T> T.createSdkActivityLauncher(
-        allowLaunch: () -> Boolean
-    ): LocalSdkActivityLauncher where T : Activity, T : LifecycleOwner =
-        if (useManagedSdkActivityLauncher) this.createManagedSdkActivityLauncher(allowLaunch)
-        else this.createUnmanagedSdkActivityLauncher(allowLaunch)
 }
diff --git a/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/TestLifecycleAwareActivity.kt b/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/TestActivity.kt
similarity index 92%
rename from privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/TestLifecycleAwareActivity.kt
rename to privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/TestActivity.kt
index c8f8676..74ffb5d 100644
--- a/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/TestLifecycleAwareActivity.kt
+++ b/privacysandbox/activity/activity-client/src/androidTest/java/androidx/privacysandbox/activity/client/TestActivity.kt
@@ -18,4 +18,4 @@
 
 import androidx.appcompat.app.AppCompatActivity
 
-class TestLifecycleAwareActivity : AppCompatActivity()
+class TestActivity : AppCompatActivity()
diff --git a/privacysandbox/activity/activity-client/src/main/java/androidx/privacysandbox/activity/client/SdkActivityLaunchers.kt b/privacysandbox/activity/activity-client/src/main/java/androidx/privacysandbox/activity/client/SdkActivityLaunchers.kt
index b405f3e..6b0d6086 100644
--- a/privacysandbox/activity/activity-client/src/main/java/androidx/privacysandbox/activity/client/SdkActivityLaunchers.kt
+++ b/privacysandbox/activity/activity-client/src/main/java/androidx/privacysandbox/activity/client/SdkActivityLaunchers.kt
@@ -36,22 +36,20 @@
 import kotlinx.coroutines.withContext
 
 /**
- * Returns a lifecycle-aware SdkActivityLauncher that launches activities on behalf of an SDK by
- * using this activity as a starting context. The created launcher will be automatically disposed
- * when the current activity is destroyed, with no additional work required.
+ * Returns an SdkActivityLauncher that launches activities on behalf of an SDK by using this
+ * activity as a starting context.
  *
- * @param T the current [LifecycleOwner] activity from which new SDK activities will be launched. If
- *   this activity is destroyed, any further SDK activity launches will simply be ignored, and
- *   [LocalManagedSdkActivityLauncher.launchSdkActivity] will return 'false'.
+ * @param T the current activity from which new SDK activities will be launched. If this activity is
+ *   destroyed any further SDK activity launches will simply be ignored.
  * @param allowLaunch predicate called each time an activity is about to be launched by the SDK, the
  *   activity will only be launched if it returns true.
  */
-fun <T> T.createManagedSdkActivityLauncher(
-    allowLaunch: () -> Boolean
-): LocalManagedSdkActivityLauncher<T> where T : Activity, T : LifecycleOwner {
+fun <T> T.createSdkActivityLauncher(allowLaunch: () -> Boolean): LocalSdkActivityLauncher<T> where
+T : Activity,
+T : LifecycleOwner {
     val cancellationJob = Job(parent = lifecycleScope.coroutineContext[Job])
     val launcher =
-        LocalManagedSdkActivityLauncher(
+        LocalSdkActivityLauncherImpl(
             activity = this,
             allowLaunch = allowLaunch,
             onDispose = { cancellationJob.cancel() },
@@ -61,31 +59,6 @@
 }
 
 /**
- * Returns a lifecycle-unaware SdkActivityLauncher that launches activities on behalf of an SDK by
- * using this activity as a starting context. The created launcher will need to be manually disposed
- * explicitly by the caller.
- *
- * It is recommended to use a lifecycle-aware launcher created using
- * [createManagedSdkActivityLauncher] instead. It is automatically disposed when the current
- * activity is destroyed, making it less prone to memory leaks.
- *
- * @param T the current activity from which new SDK activities will be launched. If this activity is
- *   destroyed any further SDK activity launches will simply be ignored, and
- *   [LocalUnmanagedSdkActivityLauncher.launchSdkActivity] will return 'false'.
- * @param allowLaunch predicate called each time an activity is about to be launched by the SDK, the
- *   activity will only be launched if it returns true.
- * @see [createManagedSdkActivityLauncher]
- */
-fun <T> T.createUnmanagedSdkActivityLauncher(
-    allowLaunch: () -> Boolean
-): LocalUnmanagedSdkActivityLauncher<T> where T : Activity {
-    return LocalUnmanagedSdkActivityLauncher(
-        activity = this,
-        allowLaunch = allowLaunch,
-    )
-}
-
-/**
  * Returns a [Bundle] with the information necessary to recreate this launcher. Possibly in a
  * different process.
  */
@@ -97,96 +70,33 @@
 }
 
 /**
- * Local version of [SdkActivityLauncher] that allows callers in the app process to dispose the
- * launcher resources.
+ * Local implementation of an SDK Activity launcher.
  *
- * @see LocalManagedSdkActivityLauncher
- * @see LocalUnmanagedSdkActivityLauncher
+ * It allows callers in the app process to dispose resources used to launch SDK activities.
  */
-interface LocalSdkActivityLauncher : SdkActivityLauncher {
+interface LocalSdkActivityLauncher<T> : SdkActivityLauncher where T : Activity, T : LifecycleOwner {
     /**
      * Clears references used to launch activities.
      *
-     * After this method is called, all further attempts to launch activities wil be rejected, and
-     * [LocalSdkActivityLauncher.launchSdkActivity] will return 'false'.
-     *
+     * After this method is called all further attempts to launch activities wil be rejected.
      * Doesn't do anything if the launcher was already disposed of.
      */
     fun dispose()
 }
 
-/**
- * Local implementation of a lifecycle-aware SDK Activity launcher. Its resources will be
- * automatically disposed when its parent activity is destroyed. In this case, no additional work
- * will be required from the caller.
- *
- * It allows callers in the app process to dispose resources used to launch SDK activities.
- */
-class LocalManagedSdkActivityLauncher<T>
-internal constructor(activity: T, allowLaunch: () -> Boolean, onDispose: () -> Unit) :
-    LocalSdkActivityLauncher where T : Activity, T : LifecycleOwner {
-    private val launcherDelegate =
-        LocalSdkActivityLauncherDelegate(activity, allowLaunch, onDispose)
-
-    /** @see [SdkActivityLauncher.launchSdkActivity] */
-    override suspend fun launchSdkActivity(sdkActivityHandlerToken: IBinder): Boolean =
-        launcherDelegate.launchSdkActivity(sdkActivityHandlerToken)
-
-    /**
-     * Clears references used to launch activities. This method __doesn't need__ to be called as
-     * system will automatically dispose the launcher when the parent activity is destroyed.
-     * However, the user __can__ optionally call it the launcher is not needed anymore.
-     *
-     * After this method is called all further attempts to launch activities wil be rejected, and
-     * [LocalManagedSdkActivityLauncher.launchSdkActivity] will return 'false'.
-     *
-     * Doesn't do anything if the launcher was already disposed of.
-     */
-    override fun dispose() = launcherDelegate.dispose()
-}
-
-/**
- * Local implementation of an SDK Activity launcher. This launcher is not lifecycle-aware, meaning
- * its resources need to be released manually by the caller to avoid memory leaks.
- *
- * @see [LocalManagedSdkActivityLauncher]
- */
-class LocalUnmanagedSdkActivityLauncher<T>
-internal constructor(activity: T, allowLaunch: () -> Boolean) : LocalSdkActivityLauncher where
-T : Activity {
-
-    private val launcherDelegate = LocalSdkActivityLauncherDelegate(activity, allowLaunch)
-
-    /** @see [SdkActivityLauncher.launchSdkActivity] */
-    override suspend fun launchSdkActivity(sdkActivityHandlerToken: IBinder): Boolean =
-        launcherDelegate.launchSdkActivity(sdkActivityHandlerToken)
-
-    /**
-     * Clears references used to launch activities. This method __must__ be called once the launcher
-     * is not needed anymore to avoid memory leaks.
-     *
-     * After this method is called all further attempts to launch activities wil be rejected, and
-     * [LocalUnmanagedSdkActivityLauncher.launchSdkActivity] will return 'false'.
-     *
-     * Doesn't do anything if the launcher was already disposed of.
-     */
-    override fun dispose() = launcherDelegate.dispose()
-}
-
-private class LocalSdkActivityLauncherDelegate<T>(
+private class LocalSdkActivityLauncherImpl<T>(
     activity: T,
     allowLaunch: () -> Boolean,
-    onDispose: (() -> Unit)? = null
-) : LocalSdkActivityLauncher where T : Activity {
-    /**
-     * Internal state for [LocalManagedSdkActivityLauncher], cleared when the launcher is disposed.
-     */
+    onDispose: () -> Unit
+) : LocalSdkActivityLauncher<T> where T : Activity, T : LifecycleOwner {
+
+    /** Internal state for [LocalSdkActivityLauncher], cleared when the launcher is disposed. */
     private class LocalLauncherState<T>(
         val activity: T,
         val allowLaunch: () -> Boolean,
         val sdkSandboxManager: SdkSandboxManagerCompat,
-        val onDispose: (() -> Unit)?
-    ) where T : Activity
+        val onDispose: () -> Unit
+    ) where T : Activity, T : LifecycleOwner
 
     private val stateReference: AtomicReference<LocalLauncherState<T>?> =
         AtomicReference<LocalLauncherState<T>?>(
@@ -212,7 +122,7 @@
     }
 
     override fun dispose() {
-        stateReference.getAndSet(null)?.run { onDispose?.invoke() }
+        stateReference.getAndSet(null)?.run { onDispose() }
     }
 }
 
diff --git a/privacysandbox/activity/activity-core/src/main/java/androidx/privacysandbox/activity/core/SdkActivityLauncher.kt b/privacysandbox/activity/activity-core/src/main/java/androidx/privacysandbox/activity/core/SdkActivityLauncher.kt
index 7e34afc..99dddac 100644
--- a/privacysandbox/activity/activity-core/src/main/java/androidx/privacysandbox/activity/core/SdkActivityLauncher.kt
+++ b/privacysandbox/activity/activity-core/src/main/java/androidx/privacysandbox/activity/core/SdkActivityLauncher.kt
@@ -22,10 +22,8 @@
  * Interface that allows SDKs running in the Privacy Sandbox to launch activities.
  *
  * Apps can create launchers by calling
- * [createManagedSdkActivityLauncher][androidx.privacysandbox.activity.client.createManagedSdkActivityLauncher]
- * or
- * [createUnmanagedSdkActivityLauncher][androidx.privacysandbox.activity.client.createUnmanagedSdkActivityLauncher]
- * from one of their activities.
+ * [createActivityLauncher][androidx.privacysandbox.activity.client.createSdkActivityLauncher] from
+ * one of their activities.
  *
  * To send an [SdkActivityLauncher] to another process, they can call
  * [toLauncherInfo][androidx.privacysandbox.activity.client.toLauncherInfo] and send the resulting
diff --git a/privacysandbox/ondevicepersonalization/OWNERS b/privacysandbox/ondevicepersonalization/OWNERS
deleted file mode 100644
index be84bbd..0000000
--- a/privacysandbox/ondevicepersonalization/OWNERS
+++ /dev/null
@@ -1,13 +0,0 @@
-# Bug component: 1117807
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/current.txt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/current.txt
deleted file mode 100644
index e6ae350..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/current.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Signature format: 4.0
-package androidx.privacysandbox.ondevicepersonalization.client {
-
-  public final class ExecuteInIsolatedServiceRequest {
-    ctor public ExecuteInIsolatedServiceRequest(android.content.ComponentName service, optional android.os.PersistableBundle appParams);
-    method public android.content.ComponentName component1();
-    method public android.os.PersistableBundle component2();
-    method public androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceRequest copy(android.content.ComponentName service, android.os.PersistableBundle appParams);
-    method public android.os.PersistableBundle getAppParams();
-    method public android.content.ComponentName getService();
-    property public android.os.PersistableBundle appParams;
-    property public android.content.ComponentName service;
-  }
-
-  public final class ExecuteInIsolatedServiceResponse {
-    method public android.adservices.ondevicepersonalization.SurfacePackageToken? component1();
-    method public androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceResponse copy(android.adservices.ondevicepersonalization.SurfacePackageToken? surfacePackageToken);
-    method public android.adservices.ondevicepersonalization.SurfacePackageToken? getSurfacePackageToken();
-    property public android.adservices.ondevicepersonalization.SurfacePackageToken? surfacePackageToken;
-  }
-
-  public abstract class OnDevicePersonalizationManager {
-    method public abstract suspend Object? executeInIsolatedService(androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceRequest executeInIsolatedServiceRequest, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceResponse>);
-    method public static final androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager? obtain(android.content.Context context);
-    method public abstract suspend Object? requestSurfacePackage(android.adservices.ondevicepersonalization.SurfacePackageToken surfacePackageToken, android.os.IBinder surfaceViewHostToken, int displayId, int width, int height, kotlin.coroutines.Continuation<? super android.view.SurfaceControlViewHost.SurfacePackage>);
-    field public static final androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager.Companion Companion;
-  }
-
-  public static final class OnDevicePersonalizationManager.Companion {
-    method public androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager? obtain(android.content.Context context);
-  }
-
-}
-
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/res-current.txt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/res-current.txt
deleted file mode 100644
index e69de29..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/res-current.txt
+++ /dev/null
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/restricted_current.txt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/restricted_current.txt
deleted file mode 100644
index e6ae350..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/api/restricted_current.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-// Signature format: 4.0
-package androidx.privacysandbox.ondevicepersonalization.client {
-
-  public final class ExecuteInIsolatedServiceRequest {
-    ctor public ExecuteInIsolatedServiceRequest(android.content.ComponentName service, optional android.os.PersistableBundle appParams);
-    method public android.content.ComponentName component1();
-    method public android.os.PersistableBundle component2();
-    method public androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceRequest copy(android.content.ComponentName service, android.os.PersistableBundle appParams);
-    method public android.os.PersistableBundle getAppParams();
-    method public android.content.ComponentName getService();
-    property public android.os.PersistableBundle appParams;
-    property public android.content.ComponentName service;
-  }
-
-  public final class ExecuteInIsolatedServiceResponse {
-    method public android.adservices.ondevicepersonalization.SurfacePackageToken? component1();
-    method public androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceResponse copy(android.adservices.ondevicepersonalization.SurfacePackageToken? surfacePackageToken);
-    method public android.adservices.ondevicepersonalization.SurfacePackageToken? getSurfacePackageToken();
-    property public android.adservices.ondevicepersonalization.SurfacePackageToken? surfacePackageToken;
-  }
-
-  public abstract class OnDevicePersonalizationManager {
-    method public abstract suspend Object? executeInIsolatedService(androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceRequest executeInIsolatedServiceRequest, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ondevicepersonalization.client.ExecuteInIsolatedServiceResponse>);
-    method public static final androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager? obtain(android.content.Context context);
-    method public abstract suspend Object? requestSurfacePackage(android.adservices.ondevicepersonalization.SurfacePackageToken surfacePackageToken, android.os.IBinder surfaceViewHostToken, int displayId, int width, int height, kotlin.coroutines.Continuation<? super android.view.SurfaceControlViewHost.SurfacePackage>);
-    field public static final androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager.Companion Companion;
-  }
-
-  public static final class OnDevicePersonalizationManager.Companion {
-    method public androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager? obtain(android.content.Context context);
-  }
-
-}
-
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/build.gradle b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/build.gradle
deleted file mode 100644
index a528884..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/build.gradle
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2024 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.
- */
-
-/**
- * This file was created using the `create_project.py` script located in the
- * `<AndroidX root>/development/project-creator` directory.
- *
- * Please use that script when creating a new project, rather than copying an existing project and
- * modifying its settings.
- */
-import androidx.build.SoftwareType
-
-plugins {
-    id("AndroidXPlugin")
-    id("com.android.library")
-    id("org.jetbrains.kotlin.android")
-}
-
-dependencies {
-    api(libs.kotlinStdlib)
-    api(libs.kotlinCoroutinesCore)
-    implementation("androidx.core:core-ktx:1.8.0")
-    implementation(project(":annotation:annotation-experimental"))
-    api("androidx.annotation:annotation:1.8.1")
-
-    androidTestImplementation(libs.junit)
-    androidTestImplementation(libs.kotlinTestJunit)
-    androidTestImplementation(libs.mockitoKotlin4)
-    androidTestImplementation(libs.testCore)
-    androidTestImplementation(libs.testExtJunit)
-    androidTestImplementation(libs.testRunner)
-    androidTestImplementation(libs.testRules)
-    androidTestImplementation(libs.truth)
-    androidTestImplementation(project(":internal-testutils-truth"))
-
-    androidTestImplementation(libs.mockitoCore4)
-    androidTestImplementation(libs.dexmakerMockitoInline)
-    androidTestImplementation(libs.dexmakerMockitoInlineExtended)
-}
-
-android {
-    compileSdk = 34
-    compileSdkExtension = 12
-    namespace "androidx.privacysandbox.ondevicepersonalization"
-}
-
-androidx {
-    name = "androidx.privacysandbox.ondevicepersonalization:ondevicepersonalization-client"
-    type = SoftwareType.PUBLISHED_LIBRARY
-    inceptionYear = "2025"
-    description = "This library enables integration with On Device Personalization APIs provided by Privacy Sandbox on Android."
-    legacyDisableKotlinStrictApiMode = true
-}
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/dependencyAnalysis-baseline.json b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/dependencyAnalysis-baseline.json
deleted file mode 100644
index 2c9d161..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/dependencyAnalysis-baseline.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "projectPath": ":privacysandbox:ondevicepersonalization:ondevicepersonalization-client",
-  "dependencyAdvice": [
-    {
-      "coordinates": {
-        "type": "module",
-        "identifier": "androidx.test:rules",
-        "resolvedVersion": "1.7.0-alpha01"
-      },
-      "fromConfiguration": "androidTestImplementation"
-    },
-    {
-      "coordinates": {
-        "type": "module",
-        "identifier": "com.linkedin.dexmaker:dexmaker-mockito-inline",
-        "resolvedVersion": "2.28.4"
-      },
-      "fromConfiguration": "androidTestImplementation",
-      "toConfiguration": "androidTestRuntimeOnly"
-    },
-    {
-      "coordinates": {
-        "type": "module",
-        "identifier": "org.jetbrains.kotlin:kotlin-test-junit",
-        "resolvedVersion": "1.8.22"
-      },
-      "fromConfiguration": "androidTestImplementation",
-      "toConfiguration": "androidTestRuntimeOnly"
-    },
-    {
-      "coordinates": {
-        "type": "project",
-        "identifier": ":annotation:annotation-experimental"
-      },
-      "fromConfiguration": "implementation"
-    },
-    {
-      "coordinates": {
-        "type": "project",
-        "identifier": ":internal-testutils-truth"
-      },
-      "fromConfiguration": "androidTestImplementation"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/androidTest/AndroidManifest.xml b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/androidTest/AndroidManifest.xml
deleted file mode 100644
index 3f2e804..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/androidTest/AndroidManifest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  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.
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-</manifest>
\ No newline at end of file
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/androidTest/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerTest.kt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/androidTest/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerTest.kt
deleted file mode 100644
index 3530f63..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/androidTest/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerTest.kt
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ondevicepersonalization.client
-
-import android.adservices.ondevicepersonalization.OnDevicePersonalizationManager
-import android.adservices.ondevicepersonalization.SurfacePackageToken
-import android.content.ComponentName
-import android.content.Context
-import android.os.IBinder
-import android.os.OutcomeReceiver
-import android.os.PersistableBundle
-import android.os.ext.SdkExtensions
-import android.view.SurfaceControlViewHost.SurfacePackage
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SdkSuppress
-import androidx.test.filters.SmallTest
-import com.android.dx.mockito.inline.extended.ExtendedMockito
-import com.android.dx.mockito.inline.extended.StaticMockitoSession
-import com.google.common.truth.Truth.assertThat
-import java.util.concurrent.Executor
-import kotlinx.coroutines.runBlocking
-import org.junit.After
-import org.junit.Assume
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.ArgumentCaptor
-import org.mockito.Mockito.doAnswer
-import org.mockito.Mockito.mock
-import org.mockito.Mockito.spy
-import org.mockito.Mockito.verify
-import org.mockito.Mockito.`when`
-import org.mockito.invocation.InvocationOnMock
-import org.mockito.kotlin.any
-import org.mockito.quality.Strictness
-
-@SmallTest
-@SuppressWarnings("NewApi")
-@RunWith(AndroidJUnit4::class)
-@SdkSuppress(minSdkVersion = 33)
-class OnDevicePersonalizationManagerTest {
-    private var mSession: StaticMockitoSession? = null
-    private val mValidAdServicesSdkExtVersion =
-        SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES) >= 12
-
-    @Before
-    fun setUp() {
-        mContext = spy(ApplicationProvider.getApplicationContext<Context>())
-        if (mValidAdServicesSdkExtVersion)
-            mSession =
-                ExtendedMockito.mockitoSession()
-                    .mockStatic(OnDevicePersonalizationManager::class.java)
-                    .strictness(Strictness.LENIENT)
-                    .startMocking()
-    }
-
-    @After
-    fun tearDown() {
-        mSession?.finishMocking()
-    }
-
-    @Test
-    @SdkSuppress(maxSdkVersion = 34, minSdkVersion = 30)
-    fun testODPOlderVersions() {
-        Assume.assumeTrue("maxSdkVersion = API 34 ext 12", !mValidAdServicesSdkExtVersion)
-        assertThat(
-                androidx.privacysandbox.ondevicepersonalization.client
-                    .OnDevicePersonalizationManager
-                    .obtain(mContext)
-            )
-            .isNull()
-    }
-
-    @Test
-    fun testODPManagerExecute() {
-        Assume.assumeTrue("minSdkVersion = API 34 ext 12", mValidAdServicesSdkExtVersion)
-
-        var testResult: OnDevicePersonalizationManager.ExecuteResult =
-            mock(OnDevicePersonalizationManager.ExecuteResult::class.java)
-        val odpManager = mockODPManager(mContext)
-        val managerCompat =
-            androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager
-                .obtain(mContext)
-
-        val answer = { args: InvocationOnMock ->
-            val receiver = args.getArgument<OutcomeReceiver<Any, Exception>>(3)
-            receiver.onResult(testResult)
-            null
-        }
-        doAnswer(answer)
-            .`when`(odpManager)
-            .execute(
-                any<ComponentName>(),
-                any<PersistableBundle>(),
-                any<Executor>(),
-                any<
-                    OutcomeReceiver<
-                        OnDevicePersonalizationManager.ExecuteResult,
-                        java.lang.Exception
-                    >
-                >()
-            )
-        // Actually invoke the compat code.
-        runBlocking {
-            managerCompat?.executeInIsolatedService(
-                ExecuteInIsolatedServiceRequest(TEST_SERVICE_COMPONENT_NAME, TEST_BUNDLE)
-            )
-        }
-        val captor1 = ArgumentCaptor.forClass(ComponentName::class.java)
-        val captor2 = ArgumentCaptor.forClass(PersistableBundle::class.java)
-        verify(odpManager)
-            .execute(
-                captor1.capture(),
-                captor2.capture(),
-                any<Executor>(),
-                any<OutcomeReceiver<OnDevicePersonalizationManager.ExecuteResult, Exception>>()
-            )
-
-        // Verify that the request that the compat code makes to the platform is correct.
-        assertThat(captor1.value == TEST_SERVICE_COMPONENT_NAME)
-        assertThat(captor2.value == TEST_BUNDLE)
-    }
-
-    @Test
-    fun testODPManagerExecuteThrows() {
-        Assume.assumeTrue("minSdkVersion = API 34 ext 12", mValidAdServicesSdkExtVersion)
-
-        val odpManager = mockODPManager(mContext)
-        val managerCompat =
-            androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager
-                .obtain(mContext)
-        val errorMessage = "some error occurred"
-        val errorCallback = { args: InvocationOnMock ->
-            val receiver = args.getArgument<OutcomeReceiver<Any, Exception>>(3)
-            receiver.onError(ClassNotFoundException(errorMessage))
-            null
-        }
-        doAnswer(errorCallback)
-            .`when`(odpManager)
-            .execute(
-                any<ComponentName>(),
-                any<PersistableBundle>(),
-                any<Executor>(),
-                any<
-                    OutcomeReceiver<
-                        OnDevicePersonalizationManager.ExecuteResult,
-                        java.lang.Exception
-                    >
-                >()
-            )
-        // Actually invoke the compat code.
-        runBlocking {
-            try {
-                managerCompat?.executeInIsolatedService(
-                    ExecuteInIsolatedServiceRequest(TEST_SERVICE_COMPONENT_NAME, TEST_BUNDLE)
-                )
-            } catch (e: ClassNotFoundException) {
-                assertThat(e.message).isEqualTo(errorMessage)
-            }
-        }
-    }
-
-    @Test
-    fun testODPManagerSurface() {
-        Assume.assumeTrue("minSdkVersion = API 34 ext 12", mValidAdServicesSdkExtVersion)
-        val odpManager = mockODPManager(mContext)
-        val managerCompat =
-            androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager
-                .obtain(mContext)
-
-        val answer = { args: InvocationOnMock ->
-            val receiver = args.getArgument<OutcomeReceiver<Any, Exception>>(6)
-            receiver.onResult(TEST_SURFACE_PACKAGE)
-        }
-        val surfacePackageToken = mock(SurfacePackageToken::class.java)
-        val iBinder = mock(IBinder::class.java)
-
-        doAnswer(answer)
-            .`when`(odpManager)
-            .requestSurfacePackage(
-                any<SurfacePackageToken>(),
-                any<IBinder>(),
-                any<Int>(),
-                any<Int>(),
-                any<Int>(),
-                any<Executor>(),
-                any<OutcomeReceiver<SurfacePackage, Exception>>()
-            )
-        // Actually invoke the compat code.
-        runBlocking {
-            val result: SurfacePackage? =
-                managerCompat?.requestSurfacePackage(
-                    surfacePackageToken,
-                    iBinder,
-                    TEST_DISPLAY_ID,
-                    TEST_HEIGHT,
-                    TEST_WIDTH
-                )
-            assertThat(result == TEST_SURFACE_PACKAGE)
-        }
-        val captor1 = ArgumentCaptor.forClass(SurfacePackageToken::class.java)
-        val captor2 = ArgumentCaptor.forClass(IBinder::class.java)
-        val captor3 = ArgumentCaptor.forClass(Int::class.java)
-        val captor4 = ArgumentCaptor.forClass(Int::class.java)
-        val captor5 = ArgumentCaptor.forClass(Int::class.java)
-
-        verify(odpManager)
-            .requestSurfacePackage(
-                captor1.capture(),
-                captor2.capture(),
-                captor3.capture(),
-                captor4.capture(),
-                captor5.capture(),
-                any<Executor>(),
-                any<OutcomeReceiver<SurfacePackage, Exception>>()
-            )
-
-        // Verify that the request that the compat code makes to the platform is correct.
-        assertThat(captor1.value == surfacePackageToken)
-        assertThat(captor2.value == iBinder)
-        assertThat(captor3.value == TEST_DISPLAY_ID)
-        assertThat(captor4.value == TEST_HEIGHT)
-        assertThat(captor5.value == TEST_WIDTH)
-    }
-
-    @Test
-    fun testODPManagerSurfaceThrows() {
-        Assume.assumeTrue("minSdkVersion = API 34 ext 12", mValidAdServicesSdkExtVersion)
-        val odpManager = mockODPManager(mContext)
-        val managerCompat =
-            androidx.privacysandbox.ondevicepersonalization.client.OnDevicePersonalizationManager
-                .obtain(mContext)
-
-        val errorMessage = "some error occurred"
-        val errorCallback = { args: InvocationOnMock ->
-            val receiver = args.getArgument<OutcomeReceiver<Any, Exception>>(6)
-            receiver.onError(Exception(errorMessage))
-        }
-        val surfacePackageToken = mock(SurfacePackageToken::class.java)
-        val iBinder = mock(IBinder::class.java)
-
-        doAnswer(errorCallback)
-            .`when`(odpManager)
-            .requestSurfacePackage(
-                any<SurfacePackageToken>(),
-                any<IBinder>(),
-                any<Int>(),
-                any<Int>(),
-                any<Int>(),
-                any<Executor>(),
-                any<OutcomeReceiver<SurfacePackage, Exception>>()
-            )
-        // Actually invoke the compat code.
-        runBlocking {
-            try {
-                managerCompat?.requestSurfacePackage(
-                    surfacePackageToken,
-                    iBinder,
-                    TEST_DISPLAY_ID,
-                    TEST_HEIGHT,
-                    TEST_WIDTH
-                )
-            } catch (e: Exception) {
-                assertThat(e.message).isEqualTo(errorMessage)
-            }
-        }
-    }
-
-    companion object {
-        private lateinit var mContext: Context
-        private val TEST_SERVICE_COMPONENT_NAME: ComponentName =
-            ComponentName.createRelative("com.example.service", ".Example")
-        private val TEST_BUNDLE: PersistableBundle = PersistableBundle.EMPTY
-        private const val TEST_DISPLAY_ID: Int = 1234
-        private const val TEST_HEIGHT: Int = 600
-        private const val TEST_WIDTH: Int = 300
-
-        private val TEST_SURFACE_PACKAGE: SurfacePackage = mock(SurfacePackage::class.java)
-
-        private fun mockODPManager(spyContext: Context): OnDevicePersonalizationManager {
-            val odpManager = mock(OnDevicePersonalizationManager::class.java)
-            `when`(spyContext.getSystemService(OnDevicePersonalizationManager::class.java))
-                .thenReturn(odpManager)
-            return odpManager
-        }
-    }
-}
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/AndroidManifest.xml b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/AndroidManifest.xml
deleted file mode 100644
index 3f2e804..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  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.
-  -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
-</manifest>
\ No newline at end of file
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/ExecuteInIsolatedServiceRequest.kt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/ExecuteInIsolatedServiceRequest.kt
deleted file mode 100644
index ee39bb2..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/ExecuteInIsolatedServiceRequest.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.privacysandbox.ondevicepersonalization.client
-
-import android.content.ComponentName
-import android.os.PersistableBundle
-
-/**
- * The request of [OnDevicePersonalizationManager.executeInIsolatedService].
- *
- * @param service The component name of the service.
- * @param appParams Passed from the calling app to the Isolated Service. The expected contents of
- *   this parameter are defined by the service. The platform does not interpret this parameter.
- */
-@Suppress("DataClassDefinition")
-data class ExecuteInIsolatedServiceRequest(
-    val service: ComponentName,
-    val appParams: PersistableBundle = PersistableBundle.EMPTY,
-) {
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other == null || javaClass != other.javaClass) return false
-
-        val that = other as ExecuteInIsolatedServiceRequest
-        return this.service == that.service && this.appParams == that.appParams
-    }
-
-    override fun hashCode(): Int {
-        var hash = 1
-        hash = 31 * hash + service.hashCode()
-        hash = 31 * hash + appParams.hashCode()
-        return hash
-    }
-}
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/ExecuteInIsolatedServiceResponse.kt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/ExecuteInIsolatedServiceResponse.kt
deleted file mode 100644
index 977c1c9..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/ExecuteInIsolatedServiceResponse.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ondevicepersonalization.client
-
-import android.adservices.ondevicepersonalization.SurfacePackageToken
-
-@Suppress("DataClassDefinition")
-data class ExecuteInIsolatedServiceResponse
-internal constructor(
-    /**
-     * Returns a {@link SurfacePackageToken}, which is an opaque reference to content that can be
-     * displayed in a {@link android.view.SurfaceView}. This may be {@code null} if the {@link
-     * IsolatedService} has not generated any content to be displayed within the calling app.
-     */
-    val surfacePackageToken: SurfacePackageToken?,
-)
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManager.kt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManager.kt
deleted file mode 100644
index 1e6f5d8..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManager.kt
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ondevicepersonalization.client
-
-import android.adservices.ondevicepersonalization.SurfacePackageToken
-import android.annotation.SuppressLint
-import android.content.Context
-import android.os.Build
-import android.os.IBinder
-import android.os.ext.SdkExtensions
-import android.view.SurfaceControlViewHost
-
-/**
- * OnDevicePersonalizationManager provides APIs for apps to load an
- * [IsolatedService][android.adservices.ondevicepersonalization.IsolatedService] in an isolated
- * process and interact with it.
- *
- * An app can request an
- * [IsolatedService][android.adservices.ondevicepersonalization.IsolatedService] to generate content
- * for display within an [SurfaceView][android.view.SurfaceView] within the app's view hierarchy,
- * and also write persistent results to on-device storage which can be consumed by Federated
- * Analytics for cross-device statistical analysis or by Federated Learning for model training. The
- * displayed content and the persistent output are both not directly accessible by the calling app.
- */
-abstract class OnDevicePersonalizationManager internal constructor() {
-    /**
-     * Executes an [IsolatedService][android.adservices.ondevicepersonalization.IsolatedService] in
-     * the OnDevicePersonalization sandbox bound to an isolated process. Upon execution completion,
-     * the returned response object contains tokens that can be subsequently used to display results
-     * in a [SurfaceView][android.view.SurfaceView] within the calling app. If the service returned
-     * a [RenderingConfig][android.adservices.ondevicepersonalization.RenderingConfig] to be
-     * displayed, [ExecuteInIsolatedServiceResponse.surfacePackageToken] can be used in a subsequent
-     * [requestSurfacePackage] call to display the result in a view. The SurfacePackageToken may be
-     * null to indicate that no output is expected to be displayed for this request.
-     *
-     * @param executeInIsolatedServiceRequest
-     * @return [ExecuteInIsolatedServiceResponse]
-     * @throws Exception
-     *   [OnDevicePersonalizationException][android.adservices.ondevicepersonalization.OnDevicePersonalizationException]
-     *   if execution of the handler fails with an error code. Older versions may throw
-     *   [NameNotFoundException][android.content.pm.PackageManager.NameNotFoundException] if the
-     *   handler package is not installed or does not have a valid ODP manifest or
-     *   [ClassNotFoundException] if the handler class is not found,
-     */
-    abstract suspend fun executeInIsolatedService(
-        executeInIsolatedServiceRequest: ExecuteInIsolatedServiceRequest
-    ): ExecuteInIsolatedServiceResponse
-
-    /**
-     * Requests a [SurfacePackage][android.view.SurfaceControlViewHost.SurfacePackage] to be
-     * inserted into a [SurfaceView][android.view.SurfaceView] inside the calling app.
-     *
-     * @param surfacePackageToken a reference to a [SurfacePackageToken] returned by a prior call to
-     *   [executeInIsolatedService].
-     * @param surfaceViewHostToken the hostToken of the [SurfaceView][android.view.SurfaceView],
-     *   which is returned by [android.view.SurfaceView.getHostToken] after the
-     *   [SurfaceView][android.view.SurfaceView] has been added to the view hierarchy.
-     * @param displayId the integer ID of the logical display on which to display the
-     *   [SurfaceControlViewHost.SurfacePackage], returned by Context.getDisplay().getDisplayId().
-     * @param width the width of the [SurfaceControlViewHost.SurfacePackage] in pixels.
-     * @param height the height of the [SurfaceControlViewHost.SurfacePackage] in pixels.
-     * @return A surface package containing a [View][android.view.View] with the content from a
-     *   result of a prior call to [executeInIsolatedService] running in the OnDevicePersonalization
-     *   sandbox.
-     * @throws Exception
-     *   [OnDevicePersonalizationException][android.adservices.ondevicepersonalization.OnDevicePersonalizationException]
-     *   if execution of the handler fails with an error code.
-     */
-    abstract suspend fun requestSurfacePackage(
-        surfacePackageToken: SurfacePackageToken,
-        surfaceViewHostToken: IBinder,
-        displayId: Int,
-        width: Int,
-        height: Int
-    ): SurfaceControlViewHost.SurfacePackage
-
-    companion object {
-        /**
-         * Creates [OnDevicePersonalizationManager].
-         *
-         * @return OnDevicePersonalizationManager object. If the device is running an incompatible
-         *   build, the value returned is null.
-         */
-        @SuppressLint("NewApi")
-        @JvmStatic
-        fun obtain(context: Context): OnDevicePersonalizationManager? {
-            return if (adServicesVersion() >= 12) {
-                OnDevicePersonalizationManagerAPI33Ext12Impl(context)
-            } else {
-                null
-            }
-        }
-
-        private fun adServicesVersion(): Int {
-            return if (Build.VERSION.SDK_INT >= 33) {
-                SdkExtensions.getExtensionVersion(SdkExtensions.AD_SERVICES)
-            } else {
-                0
-            }
-        }
-    }
-}
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerAPI33Ext12Impl.kt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerAPI33Ext12Impl.kt
deleted file mode 100644
index 5f9fc28..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerAPI33Ext12Impl.kt
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ondevicepersonalization.client
-
-import android.annotation.SuppressLint
-import android.content.Context
-import android.os.ext.SdkExtensions
-import androidx.annotation.RequiresExtension
-import androidx.annotation.RestrictTo
-
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-@SuppressLint("NewApi")
-@RequiresExtension(extension = SdkExtensions.AD_SERVICES, version = 12)
-class OnDevicePersonalizationManagerAPI33Ext12Impl(context: Context) :
-    OnDevicePersonalizationManagerImplCommon(
-        context.getSystemService(
-            android.adservices.ondevicepersonalization.OnDevicePersonalizationManager::class.java
-        )
-    )
diff --git a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerImplCommon.kt b/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerImplCommon.kt
deleted file mode 100644
index 5decb89..0000000
--- a/privacysandbox/ondevicepersonalization/ondevicepersonalization-client/src/main/java/androidx/privacysandbox/ondevicepersonalization/client/OnDevicePersonalizationManagerImplCommon.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ondevicepersonalization.client
-
-import android.adservices.ondevicepersonalization.SurfacePackageToken
-import android.annotation.SuppressLint
-import android.os.Build
-import android.os.IBinder
-import android.os.ext.SdkExtensions
-import android.view.SurfaceControlViewHost
-import androidx.annotation.DoNotInline
-import androidx.annotation.RequiresExtension
-import androidx.annotation.RestrictTo
-import androidx.core.os.asOutcomeReceiver
-import kotlinx.coroutines.suspendCancellableCoroutine
-
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-@SuppressLint("NewApi")
-@RequiresExtension(extension = SdkExtensions.AD_SERVICES, version = 12)
-@RequiresExtension(extension = Build.VERSION_CODES.TIRAMISU, version = 12)
-open class OnDevicePersonalizationManagerImplCommon(
-    private val mOdpManager:
-        android.adservices.ondevicepersonalization.OnDevicePersonalizationManager
-) : OnDevicePersonalizationManager() {
-    @DoNotInline
-    override suspend fun executeInIsolatedService(
-        executeInIsolatedServiceRequest: ExecuteInIsolatedServiceRequest
-    ): ExecuteInIsolatedServiceResponse {
-        val result =
-            suspendCancellableCoroutine<
-                android.adservices.ondevicepersonalization.OnDevicePersonalizationManager.ExecuteResult
-            > { continuation ->
-                mOdpManager.execute(
-                    executeInIsolatedServiceRequest.service,
-                    executeInIsolatedServiceRequest.appParams,
-                    Runnable::run,
-                    continuation.asOutcomeReceiver()
-                )
-            }
-        return ExecuteInIsolatedServiceResponse(
-            surfacePackageToken = result.surfacePackageToken,
-        )
-    }
-
-    @DoNotInline
-    override suspend fun requestSurfacePackage(
-        surfacePackageToken: SurfacePackageToken,
-        surfaceViewHostToken: IBinder,
-        displayId: Int,
-        width: Int,
-        height: Int
-    ): SurfaceControlViewHost.SurfacePackage =
-        suspendCancellableCoroutine<SurfaceControlViewHost.SurfacePackage> { continuation ->
-            mOdpManager.requestSurfacePackage(
-                surfacePackageToken,
-                surfaceViewHostToken,
-                displayId,
-                width,
-                height,
-                Runnable::run,
-                continuation.asOutcomeReceiver()
-            )
-        }
-}
diff --git a/privacysandbox/tools/integration-tests/testapp/build.gradle b/privacysandbox/tools/integration-tests/testapp/build.gradle
index 0ae72c9..2d10119 100644
--- a/privacysandbox/tools/integration-tests/testapp/build.gradle
+++ b/privacysandbox/tools/integration-tests/testapp/build.gradle
@@ -58,14 +58,14 @@
     implementation("androidx.core:core-ktx:1.9.0")
     implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.1")
     implementation("androidx.appcompat:appcompat:1.6.1")
-    implementation("androidx.activity:activity:1.10.1")
+    implementation(project(":activity:activity"))
     implementation(libs.material)
     implementation(libs.constraintLayout)
     implementation(libs.kotlinCoroutinesAndroid)
     implementation("androidx.tracing:tracing:1.1.0")
     implementation(libs.espressoIdlingResource)
 
-    androidTestImplementation("androidx.activity:activity:1.10.1")
+    androidTestImplementation(project(":activity:activity"))
     androidTestImplementation(project(":internal-testutils-runtime"))
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testExtJunit)
diff --git a/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/TestAdapters.kt b/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/TestAdapters.kt
index 4c2b212..6dc256c 100644
--- a/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/TestAdapters.kt
+++ b/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/TestAdapters.kt
@@ -22,8 +22,6 @@
 import android.content.res.Configuration
 import android.graphics.Canvas
 import android.graphics.Color
-import android.graphics.Color.BLACK
-import android.graphics.Color.WHITE
 import android.graphics.Paint
 import android.net.Uri
 import android.os.Bundle
@@ -31,18 +29,14 @@
 import android.os.Looper
 import android.provider.Settings
 import android.util.Log
-import android.view.Gravity
-import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
 import android.webkit.WebResourceRequest
 import android.webkit.WebResourceResponse
 import android.webkit.WebSettings
 import android.webkit.WebView
-import android.widget.FrameLayout
 import android.widget.LinearLayout
 import android.widget.TextView
-import android.widget.ToggleButton
 import androidx.privacysandbox.ui.client.SandboxedUiAdapterFactory
 import androidx.privacysandbox.ui.client.view.SandboxedSdkView
 import androidx.privacysandbox.ui.core.SandboxedUiAdapter
@@ -53,11 +47,19 @@
 import java.util.concurrent.Executor
 
 class TestAdapters(private val sdkContext: Context) {
+    inner class TestBannerAd(
+        private val text: String,
+        private val withSlowDraw: Boolean,
+        private val automatedTestCallbackProxy: IAutomatedTestCallbackProxy? = null
+    ) : BannerAd() {
+        override fun buildAdView(sessionContext: Context, width: Int, height: Int): View? {
+            return TestView(sessionContext, withSlowDraw, text, automatedTestCallbackProxy)
+        }
+    }
+
     abstract class BannerAd() : AbstractSandboxedUiAdapter() {
         lateinit var sessionClientExecutor: Executor
         lateinit var sessionClient: SandboxedUiAdapter.SessionClient
-        lateinit var adViewWithConsumeScrollOverlay: AdViewWithConsumeScrollOverlay
-        val mainLooperHandler = Handler(Looper.getMainLooper())
 
         abstract fun buildAdView(sessionContext: Context, width: Int, height: Int): View?
 
@@ -72,22 +74,16 @@
         ) {
             sessionClientExecutor = clientExecutor
             sessionClient = client
-            mainLooperHandler.post(
-                Runnable lambda@{
-                    Log.d(TAG, "Session requested")
-                    var adView: View =
-                        buildAdView(context, initialWidth, initialHeight) ?: return@lambda
-                    adView.layoutParams = ViewGroup.LayoutParams(initialWidth, initialHeight)
-                    adViewWithConsumeScrollOverlay =
-                        AdViewWithConsumeScrollOverlay(context, initialWidth, initialHeight, adView)
-                    if (isZOrderOnTop) {
-                        adViewWithConsumeScrollOverlay.hideOverlay()
+            Handler(Looper.getMainLooper())
+                .post(
+                    Runnable lambda@{
+                        Log.d(TAG, "Session requested")
+                        val adView: View =
+                            buildAdView(context, initialWidth, initialHeight) ?: return@lambda
+                        adView.layoutParams = ViewGroup.LayoutParams(initialWidth, initialHeight)
+                        clientExecutor.execute { client.onSessionOpened(BannerAdSession(adView)) }
                     }
-                    clientExecutor.execute {
-                        client.onSessionOpened(BannerAdSession(adViewWithConsumeScrollOverlay))
-                    }
-                }
-            )
+                )
         }
 
         private inner class BannerAdSession(private val adView: View) : AbstractSession() {
@@ -101,12 +97,7 @@
             }
 
             override fun notifyZOrderChanged(isZOrderOnTop: Boolean) {
-                Log.i(TAG, "Z order changed to (${if (isZOrderOnTop) "z-above" else "z-below"})")
-                if (isZOrderOnTop) {
-                    adViewWithConsumeScrollOverlay.hideOverlay()
-                } else {
-                    adViewWithConsumeScrollOverlay.showOverlay()
-                }
+                Log.i(TAG, "Z order changed")
             }
 
             override fun notifyConfigurationChanged(configuration: Configuration) {
@@ -117,81 +108,6 @@
                 Log.i(TAG, "Closing session")
             }
         }
-
-        inner class AdViewWithConsumeScrollOverlay(
-            context: Context,
-            initialWidth: Int,
-            initialHeight: Int,
-            adView: View
-        ) : FrameLayout(context) {
-            private val consumeScrollOverlay: ViewGroup
-            private var allowAppToScroll = true
-
-            init {
-                layoutParams = ViewGroup.LayoutParams(initialWidth, initialHeight)
-                addView(adView)
-
-                consumeScrollOverlay = createConsumeScrollOverlay()
-                addView(consumeScrollOverlay)
-                consumeScrollOverlay.bringToFront()
-            }
-
-            override fun onInterceptTouchEvent(motionEvent: MotionEvent): Boolean {
-                if (motionEvent.action == MotionEvent.ACTION_DOWN) {
-                    requestDisallowInterceptTouchEvent(!allowAppToScroll)
-                }
-                return super.onInterceptTouchEvent(motionEvent)
-            }
-
-            fun createConsumeScrollOverlay(): ViewGroup {
-                val linearLayout = LinearLayout(context)
-                linearLayout.layoutParams =
-                    LayoutParams(
-                        LayoutParams.WRAP_CONTENT,
-                        LayoutParams.WRAP_CONTENT,
-                        Gravity.BOTTOM or Gravity.RIGHT
-                    )
-                linearLayout.orientation = LinearLayout.HORIZONTAL
-                linearLayout.setPadding(10, 10, 10, 10)
-                linearLayout.setBackgroundColor(BLACK)
-
-                val textView = TextView(context)
-                textView.text = "Allow App to scroll?"
-                textView.layoutParams =
-                    LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
-                textView.setTextColor(WHITE)
-                linearLayout.addView(textView)
-
-                val toggleButton = ToggleButton(context)
-                toggleButton.layoutParams =
-                    LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
-                toggleButton.isChecked = true
-                toggleButton.setOnCheckedChangeListener { _, isChecked ->
-                    allowAppToScroll = isChecked
-                }
-                linearLayout.addView(toggleButton)
-
-                return linearLayout
-            }
-
-            fun hideOverlay() {
-                mainLooperHandler.post { consumeScrollOverlay.visibility = INVISIBLE }
-            }
-
-            fun showOverlay() {
-                mainLooperHandler.post { consumeScrollOverlay.visibility = VISIBLE }
-            }
-        }
-    }
-
-    inner class TestBannerAd(
-        private val text: String,
-        private val withSlowDraw: Boolean,
-        private val automatedTestCallbackProxy: IAutomatedTestCallbackProxy? = null
-    ) : BannerAd() {
-        override fun buildAdView(sessionContext: Context, width: Int, height: Int): View? {
-            return TestView(sessionContext, withSlowDraw, text, automatedTestCallbackProxy)
-        }
     }
 
     inner class WebViewBannerAd : BannerAd() {
diff --git a/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/ViewabilityHandler.kt b/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/ViewabilityHandler.kt
index ce69303..4399b70 100644
--- a/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/ViewabilityHandler.kt
+++ b/privacysandbox/ui/integration-tests/sdkproviderutils/src/main/java/androidx/privacysandbox/ui/integration/sdkproviderutils/ViewabilityHandler.kt
@@ -24,7 +24,6 @@
 import android.util.Log
 import android.view.View
 import androidx.privacysandbox.ui.core.SandboxedSdkViewUiInfo
-import androidx.privacysandbox.ui.core.SandboxedUiAdapterSignalOptions
 import androidx.privacysandbox.ui.core.SessionObserver
 import androidx.privacysandbox.ui.core.SessionObserverContext
 import androidx.privacysandbox.ui.core.SessionObserverFactory
@@ -45,9 +44,6 @@
         private class SessionObserverFactoryImpl(val drawViewability: Boolean) :
             SessionObserverFactory {
 
-            override val signalOptions: Set<String> =
-                setOf(SandboxedUiAdapterSignalOptions.GEOMETRY)
-
             override fun create(): SessionObserver {
                 return SessionObserverImpl()
             }
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
index b87de7a..e269009 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/BaseFragment.kt
@@ -163,7 +163,7 @@
     }
 
     open fun handleDrawerStateChange(isDrawerOpen: Boolean) {
-        providerUiOnTop = !isDrawerOpen && isZOrderAboveToggleChecked
+        providerUiOnTop = !isDrawerOpen && !isZOrderBelowToggleChecked
         getSandboxedSdkViews().forEach { it.orderProviderUiAboveClientUi(providerUiOnTop) }
     }
 
@@ -192,7 +192,7 @@
         private const val MEDIATEE_SDK_NAME =
             "androidx.privacysandbox.ui.integration.mediateesdkproviderwrapper"
         const val TAG = "TestSandboxClient"
-        var isZOrderAboveToggleChecked = false
+        var isZOrderBelowToggleChecked = false
         @AdFormat var currentAdFormat = AdFormat.BANNER_AD
         @AdType var currentAdType = AdType.BASIC_NON_WEBVIEW
         @MediationOption var currentMediationOption = MediationOption.NON_MEDIATED
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupComposeFragment.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupComposeFragment.kt
index b5901f6..5185060 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupComposeFragment.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupComposeFragment.kt
@@ -41,7 +41,7 @@
 import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.semantics.Role
 import androidx.compose.ui.unit.dp
-import androidx.privacysandbox.activity.client.createManagedSdkActivityLauncher
+import androidx.privacysandbox.activity.client.createSdkActivityLauncher
 import androidx.privacysandbox.activity.client.toLauncherInfo
 import androidx.privacysandbox.ui.integration.sdkproviderutils.SdkApiConstants.Companion.BackNavigation
 import androidx.privacysandbox.ui.integration.sdkproviderutils.SdkApiConstants.Companion.ScreenOrientation
@@ -175,7 +175,7 @@
                 else -> BackNavigation.ENABLED
             }
 
-        val activityLauncher = requireActivity().createManagedSdkActivityLauncher({ true })
+        val activityLauncher = requireActivity().createSdkActivityLauncher({ true })
         getSdkApi()
             .launchFullscreenAd(
                 activityLauncher.toLauncherInfo(),
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupFragment.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupFragment.kt
index e2c72a4..249f5ce 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupFragment.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/FullscreenSetupFragment.kt
@@ -22,12 +22,11 @@
 import android.view.ViewGroup
 import android.widget.Button
 import android.widget.RadioButton
-import androidx.privacysandbox.activity.client.createManagedSdkActivityLauncher
+import androidx.privacysandbox.activity.client.createSdkActivityLauncher
 import androidx.privacysandbox.activity.client.toLauncherInfo
 import androidx.privacysandbox.ui.integration.sdkproviderutils.SdkApiConstants.Companion.BackNavigation
 import androidx.privacysandbox.ui.integration.sdkproviderutils.SdkApiConstants.Companion.ScreenOrientation
 
-// TODO(b/399092069): add non-LifecycleOwner activity CUJ to the fragment.
 class FullscreenSetupFragment : BaseFragment() {
 
     override fun onCreateView(
@@ -62,7 +61,7 @@
                     else -> BackNavigation.ENABLED
                 }
 
-            val activityLauncher = requireActivity().createManagedSdkActivityLauncher({ true })
+            val activityLauncher = requireActivity().createSdkActivityLauncher({ true })
             getSdkApi()
                 .launchFullscreenAd(
                     activityLauncher.toLauncherInfo(),
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
index 98eb877..14b6b45 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/java/androidx/privacysandbox/ui/integration/testapp/MainActivity.kt
@@ -104,7 +104,7 @@
         titleBar = findViewById(R.id.title_bar)
         drawerLayout = findViewById(R.id.drawer)
         navigationView = findViewById(R.id.navigation_view)
-        zOrderToggleButton = findViewById(R.id.zorder_above_switch)
+        zOrderToggleButton = findViewById(R.id.zorder_below_switch)
         composeToggleButton = findViewById(R.id.compose_switch)
         viewabilityToggleButton = findViewById(R.id.display_viewability_switch)
         triggerSandboxDeathButton = findViewById(R.id.trigger_sandbox_death)
@@ -264,7 +264,7 @@
 
     private fun initializeZOrderToggleButton() {
         zOrderToggleButton.setOnCheckedChangeListener { _, isChecked ->
-            BaseFragment.isZOrderAboveToggleChecked = isChecked
+            BaseFragment.isZOrderBelowToggleChecked = isChecked
         }
     }
 
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/res/layout/activity_main.xml b/privacysandbox/ui/integration-tests/testapp/src/main/res/layout/activity_main.xml
index fa111cd..e1b2810 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/res/layout/activity_main.xml
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/res/layout/activity_main.xml
@@ -94,13 +94,13 @@
             android:text="@string/display_viewability_switch" />
 
         <com.google.android.material.switchmaterial.SwitchMaterial
-            android:id="@+id/zorder_above_switch"
+            android:id="@+id/zorder_below_switch"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center"
             android:layout_marginTop="200dp"
             android:checked="false"
-            android:text="@string/zorder_above_switch" />
+            android:text="@string/zorder_below_switch" />
 
         <com.google.android.material.switchmaterial.SwitchMaterial
             android:id="@+id/compose_switch"
diff --git a/privacysandbox/ui/integration-tests/testapp/src/main/res/values/strings.xml b/privacysandbox/ui/integration-tests/testapp/src/main/res/values/strings.xml
index 9fcce38..ebd24b1 100644
--- a/privacysandbox/ui/integration-tests/testapp/src/main/res/values/strings.xml
+++ b/privacysandbox/ui/integration-tests/testapp/src/main/res/values/strings.xml
@@ -25,7 +25,7 @@
     <string name="long_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sit amet lacus dignissim, sollicitudin nisl sed, egestas leo. Sed congue vitae nulla vel mattis. Sed porttitor lobortis felis id sollicitudin. Maecenas a venenatis mi. Etiam sapien ipsum, bibendum at congue eget, venenatis laoreet erat. Integer dapibus varius lectus, eu gravida arcu pharetra in. Suspendisse volutpat sit amet ex non rutrum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quis dui eros. Ut sed magna sit amet nulla iaculis ultrices. Pellentesque fermentum, nibh vel fermentum lacinia, urna nibh dictum risus, id feugiat sapien dolor nec erat. Maecenas augue nibh, sodales eu iaculis ut, volutpat non magna. Donec eget laoreet odio.Sed eget purus id mauris euismod lobortis. Vestibulum suscipit hendrerit rhoncus. Etiam et porttitor justo. Vivamus sodales velit in risus convallis tempor vitae non nunc. Integer lacinia consectetur ipsum, sit amet semper mi posuere eget. Etiam non quam nec sem malesuada viverra. Donec sollicitudin quam metus, at suscipit nisi mattis nec. Nam eu vehicula mauris. Cras nibh massa, interdum eget ante ut, molestie efficitur leo. In aliquet sodales mi vel bibendum. In iaculis neque in laoreet vestibulum. Nullam non interdum lectus. Etiam non ante elit. Vivamus luctus nisi ex, quis facilisis dui pellentesque porttitor. Etiam arcu nisl, porta eu hendrerit vel, porttitor vel turpis. Vestibulum in venenatis elit. Nunc in nisl congue, suscipit massa eu, luctus enim. Donec a fermentum magna, nec commodo purus. Quisque ac nisi et mi pretium porta ut eget nibh. Nulla consequat enim a congue porta. Donec odio magna, elementum in felis sit amet, posuere laoreet urna. Suspendisse ultricies in libero nec volutpat. Vivamus at magna lectus. Sed id metus et tellus suscipit aliquam in at lacus. Ut gravida ultrices augue, quis ultrices lacus ullamcorper ac. Ut fringilla ac quam sit amet pharetra. In non ante consectetur, dapibus ante eu, interdum risus. Nam lobortis blandit nisl ac dapibus. Maecenas vitae est ac odio sollicitudin varius eget quis orci. Mauris vitae ex eget neque tempor faucibus eget vel orci. Morbi eu feugiat lorem. Donec id sem et magna ullamcorper congue. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed laoreet ultrices quam, quis eleifend libero malesuada id. Sed ac sollicitudin diam. Integer sit amet ex ac purus malesuada iaculis at in mauris. Vestibulum egestas velit et sapien volutpat, vel varius augue fringilla. Duis efficitur blandit arcu in suscipit. Maecenas neque purus, finibus vel rhoncus at, pretium ut ipsum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sit amet lacus dignissim, sollicitudin nisl sed, egestas leo. Sed congue vitae nulla vel mattis. Sed porttitor lobortis felis id sollicitudin. Maecenas a venenatis mi. Etiam sapien ipsum, bibendum at congue eget, venenatis laoreet erat. Integer dapibus varius lectus, eu gravida arcu pharetra in. Suspendisse volutpat sit amet ex non rutrum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quis dui eros. Ut sed magna sit amet nulla iaculis ultrices. Pellentesque fermentum, nibh vel fermentum lacinia, urna nibh dictum risus, id feugiat sapien dolor nec erat. Maecenas augue nibh, sodales eu iaculis ut, volutpat non magna. Donec eget laoreet odio.Sed eget purus id mauris euismod lobortis. Vestibulum suscipit hendrerit rhoncus. Etiam et porttitor justo. Vivamus sodales velit in risus convallis tempor vitae non nunc. Integer lacinia consectetur ipsum, sit amet semper mi posuere eget. Etiam non quam nec sem malesuada viverra. Donec sollicitudin quam metus, at suscipit nisi mattis nec. Nam eu vehicula mauris. Cras nibh massa, interdum eget ante ut, molestie efficitur leo. In aliquet sodales mi vel bibendum. In iaculis neque in laoreet vestibulum. Nullam non interdum lectus. Etiam non ante elit. Vivamus luctus nisi ex, quis facilisis dui pellentesque porttitor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sit amet lacus dignissim, sollicitudin nisl sed, egestas leo. Sed congue vitae nulla vel mattis. Sed porttitor lobortis felis id sollicitudin. Maecenas a venenatis mi. Etiam sapien ipsum, bibendum at congue eget, venenatis laoreet erat. Integer dapibus varius lectus, eu gravida arcu pharetra in. Suspendisse volutpat sit amet ex non rutrum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quis dui eros. Ut sed magna sit amet nulla iaculis ultrices. Pellentesque fermentum, nibh vel fermentum lacinia, urna nibh dictum risus, id feugiat sapien dolor nec erat. Maecenas augue nibh, sodales eu iaculis ut, volutpat non magna. Donec eget laoreet odio.Sed eget purus id mauris euismod lobortis. Vestibulum suscipit hendrerit rhoncus. Etiam et porttitor justo. Vivamus sodales velit in risus convallis tempor vitae non nunc. Integer lacinia consectetur ipsum, sit amet semper mi posuere eget. Etiam non quam nec sem malesuada viverra. Donec sollicitudin quam metus, at suscipit nisi mattis nec. Nam eu vehicula mauris. Cras nibh massa, interdum eget ante ut, molestie efficitur leo. In aliquet sodales mi vel bibendum. In iaculis neque in laoreet vestibulum. Nullam non interdum lectus. Etiam non ante elit. Vivamus luctus nisi ex, quis facilisis dui pellentesque porttitor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sit amet lacus dignissim, sollicitudin nisl sed, egestas leo. Sed congue vitae nulla vel mattis. Sed porttitor lobortis felis id sollicitudin. Maecenas a venenatis mi. Etiam sapien ipsum, bibendum at congue eget, venenatis laoreet erat. Integer dapibus varius lectus, eu gravida arcu pharetra in. Suspendisse volutpat sit amet ex non rutrum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed quis dui eros. Ut sed magna sit amet nulla iaculis ultrices. Pellentesque fermentum, nibh vel fermentum lacinia, urna nibh dictum risus, id feugiat sapien dolor nec erat. Maecenas augue nibh, sodales eu iaculis ut, volutpat non magna. Donec eget laoreet odio.Sed eget purus id mauris euismod lobortis. Vestibulum suscipit hendrerit rhoncus. Etiam et porttitor justo. Vivamus sodales velit in risus convallis tempor vitae non nunc. Integer lacinia consectetur ipsum, sit amet semper mi posuere eget. Etiam non quam nec sem malesuada viverra. Donec sollicitudin quam metus, at suscipit nisi mattis nec. Nam eu vehicula mauris. Cras nibh massa, interdum eget ante ut, molestie efficitur leo. In aliquet sodales mi vel bibendum. In iaculis neque in laoreet vestibulum. Nullam non interdum lectus. Etiam non ante elit. Vivamus luctus nisi ex, quis facilisis dui pellentesque porttitor.</string>
     <string name="resizeFromSdk">resize from sdk</string>
     <string name="content_from_assets_switch">Content from assets</string>
-    <string name="zorder_above_switch">Z Order Above</string>
+    <string name="zorder_below_switch">Z Order Below</string>
     <string name="mediation_switch">Mediation</string>
     <string name="app_owned_mediatee_switch">AppOwnedMediatee</string>
     <string name="basic_webview_switch">Basic Webview</string>
diff --git a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/ContentViewTest.kt b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/ContentViewTest.kt
deleted file mode 100644
index 2b1dca8..0000000
--- a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/ContentViewTest.kt
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ui.client.test
-
-import android.content.Context
-import android.content.res.Configuration
-import android.os.Bundle
-import android.os.SystemClock
-import android.view.MotionEvent
-import android.view.animation.AnimationUtils
-import android.widget.FrameLayout
-import androidx.privacysandbox.ui.client.ContentView
-import androidx.privacysandbox.ui.core.IMotionEventTransferCallback
-import androidx.privacysandbox.ui.core.IRemoteSessionController
-import androidx.test.ext.junit.rules.ActivityScenarioRule
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.LargeTest
-import com.google.common.truth.Truth.assertThat
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-@LargeTest
-class ContentViewTest {
-    companion object {
-        const val WIDTH = 500
-        const val HEIGHT = 500
-    }
-
-    @get:Rule var activityScenarioRule = ActivityScenarioRule(UiLibActivity::class.java)
-
-    private lateinit var contentView: ContentView
-    private lateinit var requestDisallowInterceptTracker: RequestDisallowInterceptTracker
-    private var lastTransferredMotionEvent: MotionEvent? = null
-    private var lastTransferredEventTargetFrameTime: Long = 0L
-    private var lastTransferredEventCallback: IMotionEventTransferCallback? = null
-
-    @Before
-    fun setup() {
-        lastTransferredMotionEvent = null
-        lastTransferredEventTargetFrameTime = 0L
-        lastTransferredEventCallback = null
-
-        val remoteController =
-            object : IRemoteSessionController.Stub() {
-                override fun close() {}
-
-                override fun notifyConfigurationChanged(configuration: Configuration?) {}
-
-                override fun notifyResized(width: Int, height: Int) {}
-
-                override fun notifyZOrderChanged(isZOrderOnTop: Boolean) {}
-
-                override fun notifyFetchUiForSession() {}
-
-                override fun notifyUiChanged(uiContainerInfo: Bundle?) {}
-
-                override fun notifySessionRendered(supportedSignalOptions: List<String?>?) {}
-
-                override fun notifyMotionEvent(
-                    motionEvent: MotionEvent,
-                    eventTargetFrameTime: Long,
-                    eventTransferCallback: IMotionEventTransferCallback?
-                ) {
-                    lastTransferredMotionEvent = motionEvent
-                    lastTransferredEventTargetFrameTime = eventTargetFrameTime
-                    lastTransferredEventCallback = eventTransferCallback
-                }
-            }
-
-        activityScenarioRule.scenario.onActivity { activity ->
-            requestDisallowInterceptTracker = RequestDisallowInterceptTracker(activity)
-            contentView = ContentView(activity, remoteController)
-            contentView.layoutParams = FrameLayout.LayoutParams(WIDTH, HEIGHT)
-            requestDisallowInterceptTracker.addView(contentView)
-            activity.setContentView(requestDisallowInterceptTracker)
-        }
-    }
-
-    @Test
-    fun transferEventsWithTargetTimeOnTouchEventTest() {
-        val downEvent = createMotionEvent(MotionEvent.ACTION_DOWN)
-        val timeNow = AnimationUtils.currentAnimationTimeMillis()
-        contentView.onTouchEvent(downEvent)
-
-        assertThat(lastTransferredMotionEvent).isEqualTo(downEvent)
-        assertThat(lastTransferredEventTargetFrameTime).isAtLeast(timeNow)
-        assertThat(lastTransferredEventCallback).isNotNull()
-    }
-
-    @Test
-    fun requestDisallowInterceptShouldNotCallParentIfContentViewIsDetachedTest() {
-        // Closing the activity, detaching the View.
-        activityScenarioRule.scenario.close()
-
-        val downEvent = createMotionEvent(MotionEvent.ACTION_DOWN)
-        contentView.onTouchEvent(downEvent)
-        assertThat(lastTransferredEventCallback).isNotNull()
-
-        requestDisallowInterceptTracker.resetCountDownLatch()
-        lastTransferredEventCallback!!.requestDisallowIntercept(true)
-        requestDisallowInterceptTracker.assertRequestDisallowInterceptIsNotCalled()
-    }
-
-    @Test
-    fun requestDisallowInterceptShouldBeOnlyApplicableOnRunningGestureTest() {
-        val downEvent1 = createMotionEvent(MotionEvent.ACTION_DOWN)
-        contentView.onTouchEvent(downEvent1)
-        assertThat(lastTransferredEventCallback).isNotNull()
-        val previousGestureCallback = lastTransferredEventCallback
-
-        val downEvent2 = createMotionEvent(MotionEvent.ACTION_DOWN)
-        contentView.onTouchEvent(downEvent2)
-
-        requestDisallowInterceptTracker.resetCountDownLatch()
-        previousGestureCallback!!.requestDisallowIntercept(true)
-        requestDisallowInterceptTracker.assertRequestDisallowInterceptIsNotCalled()
-
-        lastTransferredEventCallback!!.requestDisallowIntercept(true)
-        requestDisallowInterceptTracker.assertRequestDisallowInterceptIsCalled()
-    }
-
-    @Test
-    fun passMotionEventTransferCallbackAsNullOnUp() {
-        assertThat(lastTransferredEventCallback).isNull()
-
-        val downEvent = createMotionEvent(MotionEvent.ACTION_DOWN)
-        contentView.onTouchEvent(downEvent)
-        assertThat(lastTransferredEventCallback).isNotNull()
-
-        val cancelEvent = createMotionEvent(MotionEvent.ACTION_UP)
-        contentView.onTouchEvent(cancelEvent)
-        assertThat(lastTransferredEventCallback).isNull()
-    }
-
-    @Test
-    fun passMotionEventTransferCallbackAsNullOnCancel() {
-        assertThat(lastTransferredEventCallback).isNull()
-
-        val downEvent = createMotionEvent(MotionEvent.ACTION_DOWN)
-        contentView.onTouchEvent(downEvent)
-        assertThat(lastTransferredEventCallback).isNotNull()
-
-        val cancelEvent = createMotionEvent(MotionEvent.ACTION_CANCEL)
-        contentView.onTouchEvent(cancelEvent)
-        assertThat(lastTransferredEventCallback).isNull()
-    }
-
-    private class RequestDisallowInterceptTracker(context: Context) : FrameLayout(context) {
-        var requestDisallowInterceptCountDownLatch: CountDownLatch? = null
-
-        override fun requestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
-            requestDisallowInterceptCountDownLatch?.countDown()
-        }
-
-        fun resetCountDownLatch() {
-            requestDisallowInterceptCountDownLatch = CountDownLatch(1)
-        }
-
-        fun assertRequestDisallowInterceptIsCalled() {
-            assertThat(requestDisallowInterceptCountDownLatch!!.await(1, TimeUnit.SECONDS)).isTrue()
-        }
-
-        fun assertRequestDisallowInterceptIsNotCalled() {
-            assertThat(requestDisallowInterceptCountDownLatch!!.await(1, TimeUnit.SECONDS))
-                .isFalse()
-        }
-    }
-
-    private fun createMotionEvent(motionEventAction: Int): MotionEvent {
-        return MotionEvent.obtain(
-            SystemClock.uptimeMillis(),
-            SystemClock.uptimeMillis(),
-            motionEventAction,
-            0f,
-            0f,
-            /* metaState = */ 0
-        )
-    }
-}
diff --git a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkUiTest.kt b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkUiTest.kt
index 40247e5..acc5c70 100644
--- a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkUiTest.kt
+++ b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkUiTest.kt
@@ -73,7 +73,7 @@
     @get:Rule val composeTestRule = createAndroidComposeRule<UiLibComposeActivity>()
     private var testSandboxedUiAdapter by mutableStateOf(TestSandboxedUiAdapter())
     private var eventListener by mutableStateOf(TestEventListener())
-    private var providerUiOnTop by mutableStateOf(false)
+    private var providerUiOnTop by mutableStateOf(true)
     private var signalOptions = setOf(SandboxedUiAdapterSignalOptions.GEOMETRY)
     private var size by mutableStateOf(20.dp)
     private lateinit var uiDevice: UiDevice
@@ -82,7 +82,7 @@
     fun setup() {
         testSandboxedUiAdapter = TestSandboxedUiAdapter(signalOptions)
         eventListener = TestEventListener()
-        providerUiOnTop = false
+        providerUiOnTop = true
         uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
     }
 
@@ -155,16 +155,18 @@
         testSandboxedUiAdapter.assertSessionOpened()
         val session = testSandboxedUiAdapter.testSession
         assertThat(session?.zOrderChangedLatch?.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
-        assertThat(testSandboxedUiAdapter.isZOrderOnTop).isFalse()
-        providerUiOnTop = true
-        composeTestRule.waitForIdle()
-        assertThat(session?.zOrderChangedLatch?.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
         assertThat(testSandboxedUiAdapter.isZOrderOnTop).isTrue()
-        session?.zOrderChangedLatch = CountDownLatch(1)
+        // When state changes to false, the provider should be notified.
         providerUiOnTop = false
         composeTestRule.waitForIdle()
         assertThat(session?.zOrderChangedLatch?.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
         assertThat(testSandboxedUiAdapter.isZOrderOnTop).isFalse()
+        // When state changes back to true, the provider should be notified.
+        session?.zOrderChangedLatch = CountDownLatch(1)
+        providerUiOnTop = true
+        composeTestRule.waitForIdle()
+        assertThat(session?.zOrderChangedLatch?.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
+        assertThat(testSandboxedUiAdapter.isZOrderOnTop).isTrue()
     }
 
     @Test
@@ -183,7 +185,7 @@
         testSandboxedUiAdapter.delayOpenSessionCallback = true
         addNodeToLayout()
         testSandboxedUiAdapter.assertSessionOpened()
-        providerUiOnTop = true
+        providerUiOnTop = false
         composeTestRule.waitForIdle()
         val session = testSandboxedUiAdapter.testSession!!
         assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
@@ -191,7 +193,7 @@
         // After session has opened, the pending Z order changed made while loading is notified
         // to the session.
         assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
-        assertThat(testSandboxedUiAdapter.isZOrderOnTop).isTrue()
+        assertThat(testSandboxedUiAdapter.isZOrderOnTop).isFalse()
     }
 
     @Test
diff --git a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt
index 5a3c620..9da70a8 100644
--- a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt
+++ b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/SandboxedSdkViewTest.kt
@@ -178,14 +178,16 @@
         val session = testSandboxedUiAdapter.testSession!!
         val adapter = testSandboxedUiAdapter
         assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
-        assertThat(adapter.isZOrderOnTop).isFalse()
-        view.orderProviderUiAboveClientUi(true)
-        assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
         assertThat(adapter.isZOrderOnTop).isTrue()
-        session.zOrderChangedLatch = CountDownLatch(1)
+        // When state changes to false, the provider should be notified.
         view.orderProviderUiAboveClientUi(false)
         assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
         assertThat(adapter.isZOrderOnTop).isFalse()
+        // When state changes back to true, the provider should be notified.
+        session.zOrderChangedLatch = CountDownLatch(1)
+        view.orderProviderUiAboveClientUi(true)
+        assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
+        assertThat(adapter.isZOrderOnTop).isTrue()
     }
 
     @Test
@@ -195,12 +197,12 @@
         testSandboxedUiAdapter.assertSessionOpened()
         val session = testSandboxedUiAdapter.testSession!!
         val adapter = testSandboxedUiAdapter
-        assertThat(adapter.isZOrderOnTop).isFalse()
+        assertThat(adapter.isZOrderOnTop).isTrue()
         // When Z-order state is unchanged, the provider should not be notified.
         session.zOrderChangedLatch = CountDownLatch(1)
-        view.orderProviderUiAboveClientUi(false)
+        view.orderProviderUiAboveClientUi(true)
         assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
-        assertThat(adapter.isZOrderOnTop).isFalse()
+        assertThat(adapter.isZOrderOnTop).isTrue()
     }
 
     @Test
@@ -219,14 +221,14 @@
         testSandboxedUiAdapter.delayOpenSessionCallback = true
         addViewToLayout()
         testSandboxedUiAdapter.assertSessionOpened()
-        view.orderProviderUiAboveClientUi(true)
+        view.orderProviderUiAboveClientUi(false)
         val session = testSandboxedUiAdapter.testSession!!
         assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isFalse()
         activityScenarioRule.withActivity { testSandboxedUiAdapter.sendOnSessionOpened() }
         // After session has opened, the pending Z order changed made while loading is notified
         // th the session.
         assertThat(session.zOrderChangedLatch.await(TIMEOUT, TimeUnit.MILLISECONDS)).isTrue()
-        assertThat(testSandboxedUiAdapter.isZOrderOnTop).isTrue()
+        assertThat(testSandboxedUiAdapter.isZOrderOnTop).isFalse()
     }
 
     @Test
diff --git a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/TestSandboxedUiAdapter.kt b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/TestSandboxedUiAdapter.kt
index fc8cc93..069aa63 100644
--- a/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/TestSandboxedUiAdapter.kt
+++ b/privacysandbox/ui/ui-client/src/androidTest/java/androidx/privacysandbox/ui/client/test/TestSandboxedUiAdapter.kt
@@ -40,7 +40,7 @@
     var isSessionOpened = false
     var internalClient: SandboxedUiAdapter.SessionClient? = null
     var testSession: TestSession? = null
-    var isZOrderOnTop = false
+    var isZOrderOnTop = true
     var sessionData: SessionData? = null
 
     // When set to true, the onSessionOpened callback will only be invoked when specified
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/ContentView.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/ContentView.kt
deleted file mode 100644
index 69751c2..0000000
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/ContentView.kt
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ui.client
-
-import android.content.Context
-import android.os.Handler
-import android.view.MotionEvent
-import android.view.SurfaceView
-import android.view.animation.AnimationUtils
-import androidx.privacysandbox.ui.core.IMotionEventTransferCallback
-import androidx.privacysandbox.ui.core.IRemoteSessionController
-
-/**
- * Custom implementation of the [android.view.SurfaceView] that holds the
- * [android.view.SurfaceControlViewHost.SurfacePackage] passed from the provider. It transfers the
- * [android.view.MotionEvent] objects received in [android.view.View.onTouchEvent] to the provider.
- * It also proxy calls to [android.view.ViewParent.requestDisallowInterceptTouchEvent] from provider
- * side to the parent [android.view.View].
- */
-internal class ContentView(
-    context: Context,
-    val remoteSessionController: IRemoteSessionController
-) : SurfaceView(context) {
-    private var currentGestureMotionEventTransferCallback: IMotionEventTransferCallback? = null
-    private var requestDisallowInterceptHandler: Handler? = null
-
-    override fun onAttachedToWindow() {
-        requestDisallowInterceptHandler = Handler(handler.looper)
-        super.onAttachedToWindow()
-    }
-
-    override fun onDetachedFromWindow() {
-        // Remove all handler posted messages.
-        requestDisallowInterceptHandler?.removeCallbacksAndMessages(/* token */ null)
-        requestDisallowInterceptHandler = null
-        super.onDetachedFromWindow()
-    }
-
-    override fun onTouchEvent(motionEvent: MotionEvent): Boolean {
-        if (motionEvent.action == MotionEvent.ACTION_DOWN) {
-            currentGestureMotionEventTransferCallback = MotionEventTransferCallbackProxy()
-        }
-
-        if (
-            (motionEvent.action == MotionEvent.ACTION_UP ||
-                motionEvent.action == MotionEvent.ACTION_CANCEL)
-        ) {
-            currentGestureMotionEventTransferCallback = null
-        }
-
-        val eventTargetFrameTime = AnimationUtils.currentAnimationTimeMillis()
-        remoteSessionController.notifyMotionEvent(
-            motionEvent,
-            eventTargetFrameTime,
-            currentGestureMotionEventTransferCallback
-        )
-        return true
-    }
-
-    inner class MotionEventTransferCallbackProxy() : IMotionEventTransferCallback.Stub() {
-        override fun requestDisallowIntercept(disallowIntercept: Boolean) {
-            requestDisallowInterceptHandler?.post {
-                if (this == currentGestureMotionEventTransferCallback) {
-                    parent.requestDisallowInterceptTouchEvent(disallowIntercept)
-                }
-            }
-        }
-    }
-}
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
index 59a8582..e233bd1 100644
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
+++ b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/SandboxedUiAdapterFactory.kt
@@ -25,6 +25,7 @@
 import android.util.Log
 import android.view.Display
 import android.view.SurfaceControlViewHost
+import android.view.SurfaceView
 import android.view.View
 import android.window.SurfaceSyncGroup
 import androidx.annotation.RequiresApi
@@ -320,7 +321,7 @@
             val clientExecutor: Executor
         ) : IRemoteSessionClient.Stub() {
 
-            lateinit var contentView: ContentView
+            lateinit var surfaceView: SurfaceView
 
             override fun onRemoteSessionOpened(
                 surfacePackage: SurfaceControlViewHost.SurfacePackage,
@@ -328,10 +329,10 @@
                 isZOrderOnTop: Boolean,
                 signalOptions: List<String>
             ) {
-                contentView = ContentView(context, remoteSessionController)
-                contentView.setChildSurfacePackage(surfacePackage)
-                contentView.setZOrderOnTop(isZOrderOnTop)
-                contentView.addOnAttachStateChangeListener(
+                surfaceView = SurfaceView(context)
+                surfaceView.setChildSurfacePackage(surfacePackage)
+                surfaceView.setZOrderOnTop(isZOrderOnTop)
+                surfaceView.addOnAttachStateChangeListener(
                     object : View.OnAttachStateChangeListener {
 
                         private var hasViewBeenPreviouslyAttached = false
@@ -353,7 +354,7 @@
                 clientExecutor.execute {
                     client.onSessionOpened(
                         SessionImpl(
-                            contentView,
+                            surfaceView,
                             remoteSessionController,
                             surfacePackage,
                             signalOptions.toSet()
@@ -374,18 +375,18 @@
             }
 
             override fun onSessionUiFetched(surfacePackage: SurfaceControlViewHost.SurfacePackage) {
-                contentView.setChildSurfacePackage(surfacePackage)
+                surfaceView.setChildSurfacePackage(surfacePackage)
             }
         }
 
         private class SessionImpl(
-            val contentView: ContentView,
+            val surfaceView: SurfaceView,
             val remoteSessionController: IRemoteSessionController,
             val surfacePackage: SurfaceControlViewHost.SurfacePackage,
             override val signalOptions: Set<String>
         ) : SandboxedUiAdapter.Session {
 
-            override val view: View = contentView
+            override val view: View = surfaceView
 
             override fun notifyConfigurationChanged(configuration: Configuration) {
                 tryToCallRemoteObject(remoteSessionController) {
@@ -395,10 +396,10 @@
 
             override fun notifyResized(width: Int, height: Int) {
 
-                val parentView = contentView.parent as View
+                val parentView = surfaceView.parent as View
 
                 val clientResizeRunnable = Runnable {
-                    contentView.layout(
+                    surfaceView.layout(
                         /* left = */ parentView.paddingLeft,
                         /* top = */ parentView.paddingTop,
                         /* right = */ parentView.paddingLeft + width,
@@ -414,13 +415,13 @@
 
                 val syncGroup = SurfaceSyncGroup("AppAndSdkViewsSurfaceSync")
 
-                syncGroup.add(contentView.rootSurfaceControl, clientResizeRunnable)
+                syncGroup.add(surfaceView.rootSurfaceControl, clientResizeRunnable)
                 syncGroup.add(surfacePackage, providerResizeRunnable)
                 syncGroup.markSyncReady()
             }
 
             override fun notifyZOrderChanged(isZOrderOnTop: Boolean) {
-                contentView.setZOrderOnTop(isZOrderOnTop)
+                surfaceView.setZOrderOnTop(isZOrderOnTop)
                 tryToCallRemoteObject(remoteSessionController) {
                     this.notifyZOrderChanged(isZOrderOnTop)
                 }
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkUi.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkUi.kt
index 645e19d..1a1b137 100644
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkUi.kt
+++ b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkUi.kt
@@ -36,7 +36,7 @@
 fun SandboxedSdkUi(
     sandboxedUiAdapter: SandboxedUiAdapter,
     modifier: Modifier = Modifier,
-    providerUiOnTop: Boolean = false,
+    providerUiOnTop: Boolean = true,
     sandboxedSdkViewEventListener: SandboxedSdkViewEventListener? = null
 ) {
     AndroidView(
diff --git a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
index d4453b1..406cd99 100644
--- a/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
+++ b/privacysandbox/ui/ui-client/src/main/java/androidx/privacysandbox/ui/client/view/SandboxedSdkView.kt
@@ -79,7 +79,7 @@
     private var adapter: SandboxedUiAdapter? = null
     private var client: Client? = null
     private var clientSecondary: Client? = null
-    private var isZOrderOnTop = false
+    private var isZOrderOnTop = true
     private var contentView: View? = null
     private var refreshCallback: Consumer<Boolean>? = null
     private var requestedWidth = -1
@@ -119,9 +119,9 @@
      * Sets the Z-ordering of the [SandboxedSdkView]'s surface, relative to its window.
      *
      * When [providerUiOnTop] is true, every [android.view.MotionEvent] on the [SandboxedSdkView]
-     * area will be sent to the UI provider. When [providerUiOnTop] is false, every
-     * [android.view.MotionEvent] will be sent to the client and will also be transferred to the UI
-     * provider. By default, [providerUiOnTop] is false.
+     * will be sent to the UI provider. When [providerUiOnTop] is false, every
+     * [android.view.MotionEvent] will be sent to the client. By default, motion events are sent to
+     * the UI provider.
      *
      * When [providerUiOnTop] is true, the UI provider's surface will be placed above the client's
      * window. In this case, none of the contents of the client's window beneath the provider's
diff --git a/privacysandbox/ui/ui-core/src/main/aidl/androidx/privacysandbox/ui/core/IMotionEventTransferCallback.aidl b/privacysandbox/ui/ui-core/src/main/aidl/androidx/privacysandbox/ui/core/IMotionEventTransferCallback.aidl
deleted file mode 100644
index 4caf175..0000000
--- a/privacysandbox/ui/ui-core/src/main/aidl/androidx/privacysandbox/ui/core/IMotionEventTransferCallback.aidl
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 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.privacysandbox.ui.core;
-
-import android.view.MotionEvent;
-
-@JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
-interface IMotionEventTransferCallback {
-    oneway void requestDisallowIntercept(boolean disallowIntercept);
-}
\ No newline at end of file
diff --git a/privacysandbox/ui/ui-core/src/main/aidl/androidx/privacysandbox/ui/core/IRemoteSessionController.aidl b/privacysandbox/ui/ui-core/src/main/aidl/androidx/privacysandbox/ui/core/IRemoteSessionController.aidl
index 905df5e..3510368 100644
--- a/privacysandbox/ui/ui-core/src/main/aidl/androidx/privacysandbox/ui/core/IRemoteSessionController.aidl
+++ b/privacysandbox/ui/ui-core/src/main/aidl/androidx/privacysandbox/ui/core/IRemoteSessionController.aidl
@@ -16,8 +16,6 @@
 
 package androidx.privacysandbox.ui.core;
 
-import androidx.privacysandbox.ui.core.IMotionEventTransferCallback;
-
 @JavaPassthrough(annotation="@androidx.annotation.RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY)")
 oneway interface IRemoteSessionController {
     void close();
@@ -27,5 +25,4 @@
     void notifyFetchUiForSession();
     void notifyUiChanged(in Bundle uiContainerInfo);
     void notifySessionRendered(in List<String> supportedSignalOptions);
-    void notifyMotionEvent(in MotionEvent motionEvent, in long eventTargetFrameTime, in @nullable IMotionEventTransferCallback eventTransferCallback);
 }
\ No newline at end of file
diff --git a/privacysandbox/ui/ui-provider/src/androidTest/kotlin/androidx/privacysandbox/ui/provider/test/BinderAdapterDelegateTest.kt b/privacysandbox/ui/ui-provider/src/androidTest/kotlin/androidx/privacysandbox/ui/provider/test/BinderAdapterDelegateTest.kt
new file mode 100644
index 0000000..caec996
--- /dev/null
+++ b/privacysandbox/ui/ui-provider/src/androidTest/kotlin/androidx/privacysandbox/ui/provider/test/BinderAdapterDelegateTest.kt
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.ui.provider.test
+
+import android.content.Context
+import android.os.Binder
+import android.os.Build
+import android.os.IBinder
+import android.view.Display
+import android.view.MotionEvent
+import android.view.SurfaceControlViewHost
+import android.view.View
+import android.widget.LinearLayout
+import androidx.privacysandbox.ui.provider.TouchFocusTransferringView
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.slowSwipeLeft
+import androidx.test.espresso.action.ViewActions.swipeLeft
+import androidx.test.espresso.action.ViewActions.swipeUp
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withParent
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.UiScrollable
+import androidx.test.uiautomator.UiSelector
+import androidx.testutils.withActivity
+import com.google.common.truth.Truth.assertThat
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+@RunWith(AndroidJUnit4::class)
+@LargeTest
+class BinderAdapterDelegateTest {
+    companion object {
+        const val TIMEOUT_MILLIS: Long = 2000
+        const val WIDTH = 500
+        const val HEIGHT = 500
+        const val MAIN_LAYOUT_RES = "androidx.privacysandbox.ui.provider.test:id/main_layout"
+    }
+
+    @get:Rule val activityScenarioRule = ActivityScenarioRule(MainActivity::class.java)
+
+    private val transferTouchFocusLatch = CountDownLatch(1)
+
+    @Before
+    fun setUp() {
+        val context = InstrumentationRegistry.getInstrumentation().targetContext
+        val activity = activityScenarioRule.withActivity { this }
+        UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
+        activityScenarioRule.withActivity {
+            val surfaceControlViewHost =
+                GestureTransferringSurfaceControlViewHost(
+                    activity,
+                    activity.display!!,
+                    Binder(),
+                    transferTouchFocusLatch
+                )
+            val touchFocusTransferringView =
+                TouchFocusTransferringView(context, surfaceControlViewHost)
+            touchFocusTransferringView.addView(TestView(context))
+            activity
+                .findViewById<LinearLayout>(R.id.main_layout)
+                .addView(touchFocusTransferringView, WIDTH, HEIGHT)
+        }
+    }
+
+    @Test
+    fun touchFocusTransferredForSwipeUp() {
+        onView(withParent(withId(R.id.main_layout))).perform(swipeUp())
+        assertThat(transferTouchFocusLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+    }
+
+    @Test
+    fun touchFocusNotTransferredForSwipeLeft() {
+        onView(withParent(withId(R.id.main_layout))).perform(swipeLeft())
+        assertThat(transferTouchFocusLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isFalse()
+    }
+
+    @Test
+    fun touchFocusNotTransferredForSlowSwipeLeft() {
+        onView(withParent(withId(R.id.main_layout))).perform(slowSwipeLeft())
+        assertThat(transferTouchFocusLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isFalse()
+    }
+
+    @Test
+    fun touchFocusNotTransferredForClicks() {
+        onView(withParent(withId(R.id.main_layout))).perform(click())
+        assertThat(transferTouchFocusLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isFalse()
+    }
+
+    @Test
+    fun touchFocusTransferredForFlingForward() {
+        val parentSelector = UiSelector().resourceId(MAIN_LAYOUT_RES)
+        val testView = UiScrollable(parentSelector.childSelector(UiSelector().index(0)))
+        testView.flingForward()
+        assertThat(transferTouchFocusLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+    }
+
+    @Test
+    fun touchFocusTransferredForFlingBackward() {
+        val parentSelector = UiSelector().resourceId(MAIN_LAYOUT_RES)
+        val testView = UiScrollable(parentSelector.childSelector(UiSelector().index(0)))
+        testView.flingBackward()
+        assertThat(transferTouchFocusLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)).isTrue()
+    }
+
+    /**
+     * SCVH that takes note of when touch focus is transferred.
+     *
+     * TODO(b/290629538): Add full integration test.
+     */
+    private class GestureTransferringSurfaceControlViewHost(
+        context: Context,
+        display: Display,
+        hostToken: IBinder,
+        countDownLatch: CountDownLatch
+    ) : SurfaceControlViewHost(context, display, hostToken) {
+
+        val latch = countDownLatch
+
+        override fun transferTouchGestureToHost(): Boolean {
+            latch.countDown()
+            return true
+        }
+    }
+
+    private class TestView(context: Context) : View(context) {
+        override fun onTouchEvent(event: MotionEvent?): Boolean {
+            return true
+        }
+    }
+}
diff --git a/privacysandbox/ui/ui-provider/src/androidTest/kotlin/androidx/privacysandbox/ui/provider/test/ProviderViewWrapperTest.kt b/privacysandbox/ui/ui-provider/src/androidTest/kotlin/androidx/privacysandbox/ui/provider/test/ProviderViewWrapperTest.kt
deleted file mode 100644
index 5d1b96f..0000000
--- a/privacysandbox/ui/ui-provider/src/androidTest/kotlin/androidx/privacysandbox/ui/provider/test/ProviderViewWrapperTest.kt
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ui.provider.test
-
-import android.os.Build
-import android.os.Handler
-import android.os.Looper
-import android.os.SystemClock
-import android.view.MotionEvent
-import android.view.View
-import android.widget.FrameLayout
-import androidx.annotation.RequiresApi
-import androidx.privacysandbox.ui.core.IMotionEventTransferCallback
-import androidx.privacysandbox.ui.provider.ProviderViewWrapper
-import androidx.test.ext.junit.rules.ActivityScenarioRule
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.LargeTest
-import com.google.common.truth.Truth.assertThat
-import java.util.concurrent.CountDownLatch
-import java.util.concurrent.TimeUnit
-import org.junit.Assert.assertTrue
-import org.junit.Before
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-@RunWith(AndroidJUnit4::class)
-@LargeTest
-class ProviderViewWrapperTest {
-    companion object {
-        const val TIMEOUT_MILLIS: Long = 2000
-        const val VSYNC_INTERVAL_MS: Long = 100
-        const val WIDTH = 500
-        const val HEIGHT = 500
-    }
-
-    @get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java)
-
-    private lateinit var mainHandler: Handler
-    private lateinit var providerViewWrapper: ProviderViewWrapper
-    private lateinit var providerView: View
-    private var dispatchedEventsSinceLastFrame = 0
-    private lateinit var motionEventTransferCallback: MotionEventTransferCallbackProxy
-
-    @Before
-    fun setup() {
-        activityRule.scenario.onActivity { activity ->
-            mainHandler = Handler(Looper.getMainLooper())
-            providerViewWrapper = ProviderViewWrapper(activity)
-            providerView = View(activity)
-            providerView.layoutParams = FrameLayout.LayoutParams(WIDTH, HEIGHT)
-            providerViewWrapper.addView(providerView)
-            activity.setContentView(providerViewWrapper)
-            setUpOnTouchListener()
-        }
-        motionEventTransferCallback = MotionEventTransferCallbackProxy()
-    }
-
-    @Test
-    fun processingOfMotionEventsWillNotScheduledIfProviderViewDetachedTest() {
-        // Closing the activity, detaching the View.
-        activityRule.scenario.close()
-
-        val frameTimes = simulateFrameTimes(/* frames */ 3)
-
-        val events = createGestureEvents(/* moveEventNumbers */ 1)
-        val eventTargetTimesRelativeToFrames =
-            listOf<Long>(
-                VSYNC_INTERVAL_MS / 2, // (vsync_interval / 2) after frame1
-                0, // at frame2 time
-                -(VSYNC_INTERVAL_MS / 2) // (vsync_interval / 2) before frame3
-            )
-        simulateSchedulingEventDispatchingMessages(
-            events,
-            frameTimes,
-            eventTargetTimesRelativeToFrames
-        )
-
-        val expectedEventsPerFrame = listOf<Long>(0, 0, 0)
-        assertNumberOfDispatchedEventsOnSimulateFrameTimes(frameTimes, expectedEventsPerFrame)
-    }
-
-    @Test
-    fun removePendingMotionEventDispatchMessagesIfViewIsDetachedTest() {
-        val frameTimes = simulateFrameTimes(/* frames */ 3)
-
-        val events = createGestureEvents(/* moveEventNumbers */ 1)
-        val eventTargetTimesRelativeToFrames =
-            listOf<Long>(
-                VSYNC_INTERVAL_MS / 2, // (vsync_interval / 2) after frame1
-                0, // at frame2 time
-                -(VSYNC_INTERVAL_MS / 2) // (vsync_interval / 2) before frame3
-            )
-        simulateSchedulingEventDispatchingMessages(
-            events,
-            frameTimes,
-            eventTargetTimesRelativeToFrames
-        )
-
-        activityRule.scenario.close()
-
-        val expectedEventsPerFrame = listOf<Long>(0, 0, 0)
-        assertNumberOfDispatchedEventsOnSimulateFrameTimes(frameTimes, expectedEventsPerFrame)
-    }
-
-    @Test
-    fun processMotionEventsTargetingNextFrameTest() {
-        val frameTimes = simulateFrameTimes(/* frames */ 5)
-
-        // To simulate real scenarios, setting DOWN, UP and last MOVE as unbuffered events, and
-        // send them randomly between frames.
-        val events = createGestureEvents(/* moveEventNumbers */ 3)
-        val eventTargetTimesRelativeToFrames =
-            listOf<Long>(
-                VSYNC_INTERVAL_MS / 2, // (vsync_interval / 2) after frame1
-                0, // at frame2 time
-                0, // at frame3 time
-                -(VSYNC_INTERVAL_MS / 2), // (vsync_interval / 2) before frame4
-                -(VSYNC_INTERVAL_MS / 2) // (vsync_interval / 2) before frame5
-            )
-
-        simulateSchedulingEventDispatchingMessages(
-            events,
-            frameTimes,
-            eventTargetTimesRelativeToFrames
-        )
-
-        val expectedEventsPerFrame = listOf<Long>(0, 1, 1, 2, 1)
-        assertNumberOfDispatchedEventsOnSimulateFrameTimes(frameTimes, expectedEventsPerFrame)
-    }
-
-    @Test
-    fun requestDisallowInterceptTest() {
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isFalse()
-
-        val downEvent = createMotionEvent(MotionEvent.ACTION_DOWN)
-        scheduleAndWaitForMotionEventProcessing(downEvent, motionEventTransferCallback)
-
-        activityRule.scenario.onActivity { _ ->
-            providerViewWrapper.requestDisallowInterceptTouchEvent(true)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isTrue()
-
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(false)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isFalse()
-    }
-
-    @Test
-    fun requestDisallowInterceptOnlyCalledOnLastTransferredCallbackTest() {
-        val eventTransferCallback1 = MotionEventTransferCallbackProxy()
-        val eventTransferCallback2 = MotionEventTransferCallbackProxy()
-        assertThat(eventTransferCallback1.lastValueForDisallowIntercept).isFalse()
-        assertThat(eventTransferCallback2.lastValueForDisallowIntercept).isFalse()
-
-        val downEvent1 = createMotionEvent(MotionEvent.ACTION_DOWN)
-        scheduleAndWaitForMotionEventProcessing(downEvent1, eventTransferCallback1)
-        val downEvent2 = createMotionEvent(MotionEvent.ACTION_DOWN)
-        scheduleAndWaitForMotionEventProcessing(downEvent2, eventTransferCallback2)
-
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(true)
-        }
-        assertThat(eventTransferCallback1.lastValueForDisallowIntercept).isFalse()
-        assertThat(eventTransferCallback2.lastValueForDisallowIntercept).isTrue()
-    }
-
-    @Test
-    fun requestDisallowInterceptWillOnlyProxiedOnChangeValueTest() {
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isFalse()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(0)
-
-        val downEvent1 = createMotionEvent(MotionEvent.ACTION_DOWN)
-        scheduleAndWaitForMotionEventProcessing(downEvent1, motionEventTransferCallback)
-
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(false)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isFalse()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(0)
-
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(true)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isTrue()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(1)
-
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(true)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isTrue()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(1)
-    }
-
-    @Test
-    fun cachingLastValueOfRequestDisallowInterceptShouldResetForNewGestureTest() {
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isFalse()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(0)
-
-        val downEvent1 = createMotionEvent(MotionEvent.ACTION_DOWN)
-        scheduleAndWaitForMotionEventProcessing(downEvent1, motionEventTransferCallback)
-
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(true)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isTrue()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(1)
-
-        val downEvent2 = createMotionEvent(MotionEvent.ACTION_DOWN)
-        scheduleAndWaitForMotionEventProcessing(downEvent2, motionEventTransferCallback)
-        // Calling requestDisallowIntercept with false, will have no effect for the new gesture.
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(false)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isTrue()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(1)
-
-        activityRule.scenario.onActivity { _ ->
-            providerView.parent.requestDisallowInterceptTouchEvent(true)
-        }
-        assertThat(motionEventTransferCallback.lastValueForDisallowIntercept).isTrue()
-        assertThat(motionEventTransferCallback.numberOfRequestDisallowInterceptCalls).isEqualTo(2)
-    }
-
-    private fun setUpOnTouchListener() {
-        providerView.setOnTouchListener { _, _ ->
-            dispatchedEventsSinceLastFrame++
-            true
-        }
-    }
-
-    private fun simulateFrameTimes(frames: Int): List<Long> {
-        val firstFrameTime = SystemClock.uptimeMillis() + VSYNC_INTERVAL_MS
-        return List(frames) { index -> firstFrameTime + (index * VSYNC_INTERVAL_MS) }
-    }
-
-    private fun createGestureEvents(moveEventNumbers: Int): List<MotionEvent> {
-        val events: MutableList<MotionEvent> = mutableListOf()
-        events.add(createMotionEvent(MotionEvent.ACTION_DOWN))
-        repeat(moveEventNumbers) { events.add(createMotionEvent(MotionEvent.ACTION_MOVE)) }
-        events.add(createMotionEvent(MotionEvent.ACTION_UP))
-        return events
-    }
-
-    private fun createMotionEvent(motionEventAction: Int): MotionEvent {
-        return MotionEvent.obtain(
-            SystemClock.uptimeMillis(),
-            SystemClock.uptimeMillis(),
-            motionEventAction,
-            providerView.width / 2f,
-            providerView.width / 2f,
-            /* metaState = */ 0
-        )
-    }
-
-    private fun simulateSchedulingEventDispatchingMessages(
-        events: List<MotionEvent>,
-        frameTimes: List<Long>,
-        eventTargetTimesRelativeToFrames: List<Long>
-    ) {
-        val eventTargetTime =
-            eventTargetTimesRelativeToFrames.withIndex().map { (index, value) ->
-                frameTimes[index] + value
-            }
-
-        for (i in 0 until events.size) {
-            providerViewWrapper.scheduleMotionEventProcessing(
-                events[i],
-                eventTargetTime[i],
-                motionEventTransferCallback
-            )
-        }
-    }
-
-    private fun assertNumberOfDispatchedEventsOnSimulateFrameTimes(
-        frameTimes: List<Long>,
-        expectedDispatchedEventsPerFrame: List<Long>
-    ) {
-        val allFramesPassedLatch = CountDownLatch(frameTimes.size)
-        // Simulating doFrame at the frame times.
-        for (i in 0 until frameTimes.size) {
-            mainHandler.postAtTime(
-                {
-                    assertThat(dispatchedEventsSinceLastFrame)
-                        .isEqualTo(expectedDispatchedEventsPerFrame[i])
-                    dispatchedEventsSinceLastFrame = 0
-                    allFramesPassedLatch.countDown()
-                },
-                frameTimes[i]
-            )
-        }
-        assertTrue(
-            "Timeout before passing all frames",
-            allFramesPassedLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
-        )
-    }
-
-    fun scheduleAndWaitForMotionEventProcessing(
-        motionEvent: MotionEvent,
-        eventTransferCallback: MotionEventTransferCallbackProxy
-    ) {
-        val eventDispatchLatch = CountDownLatch(1)
-        activityRule.scenario.onActivity { _ ->
-            providerView.setOnTouchListener { _, event ->
-                eventDispatchLatch.countDown()
-                providerView.onTouchEvent(event)
-                true
-            }
-        }
-        providerViewWrapper.scheduleMotionEventProcessing(
-            motionEvent,
-            motionEvent.eventTime,
-            eventTransferCallback
-        )
-        assertTrue(
-            "dispatchTouchEvent on providerView was not called within the timeout",
-            eventDispatchLatch.await(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
-        )
-    }
-
-    class MotionEventTransferCallbackProxy : IMotionEventTransferCallback.Stub() {
-        var lastValueForDisallowIntercept = false
-        var numberOfRequestDisallowInterceptCalls = 0
-
-        override fun requestDisallowIntercept(disallowIntercept: Boolean) {
-            lastValueForDisallowIntercept = disallowIntercept
-            numberOfRequestDisallowInterceptCalls++
-        }
-    }
-}
diff --git a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
index 99fc949..19a9fdbf 100644
--- a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
+++ b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/BinderAdapterDelegate.kt
@@ -26,7 +26,6 @@
 import android.os.Looper
 import android.util.Log
 import android.view.Display
-import android.view.MotionEvent
 import android.view.SurfaceControlViewHost
 import android.view.View
 import androidx.annotation.RequiresApi
@@ -36,7 +35,6 @@
 import androidx.privacysandbox.ui.core.IDelegateChangeListener
 import androidx.privacysandbox.ui.core.IDelegatingSandboxedUiAdapter
 import androidx.privacysandbox.ui.core.IDelegatorCallback
-import androidx.privacysandbox.ui.core.IMotionEventTransferCallback
 import androidx.privacysandbox.ui.core.IRemoteSessionClient
 import androidx.privacysandbox.ui.core.IRemoteSessionController
 import androidx.privacysandbox.ui.core.ISandboxedUiAdapter
@@ -245,7 +243,7 @@
 
     @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
     private class SessionClientProxy(
-        private val providerViewWrapper: ProviderViewWrapper,
+        private val touchTransferringView: TouchFocusTransferringView,
         private val surfaceControlViewHost: SurfaceControlViewHost,
         private val isZOrderOnTop: Boolean,
         private val remoteSessionClient: IRemoteSessionClient
@@ -256,16 +254,16 @@
          * step duration and interference with actual openSession() logic (reduce potential delays).
          */
         fun initialize(initialWidth: Int, initialHeight: Int) {
-            surfaceControlViewHost.setView(providerViewWrapper, initialWidth, initialHeight)
+            surfaceControlViewHost.setView(touchTransferringView, initialWidth, initialHeight)
         }
 
         override fun onSessionOpened(session: SandboxedUiAdapter.Session) {
             val view = session.view
 
-            if (providerViewWrapper.childCount > 0) {
-                providerViewWrapper.removeAllViews()
+            if (touchTransferringView.childCount > 0) {
+                touchTransferringView.removeAllViews()
             }
-            providerViewWrapper.addView(view)
+            touchTransferringView.addView(view)
 
             // This var is not locked as it will be set to false by the first event that can trigger
             // sending the remote session opened callback.
@@ -355,18 +353,6 @@
                 session.notifySessionRendered(supportedSignalOptions.toSet())
             }
 
-            override fun notifyMotionEvent(
-                motionEvent: MotionEvent,
-                eventTargetFrameTime: Long,
-                eventTransferCallback: IMotionEventTransferCallback?
-            ) {
-                providerViewWrapper.scheduleMotionEventProcessing(
-                    motionEvent,
-                    eventTargetFrameTime,
-                    eventTransferCallback
-                )
-            }
-
             override fun close() {
                 val mHandler = Handler(Looper.getMainLooper())
                 mHandler.post {
@@ -446,8 +432,10 @@
                 checkNotNull(createSurfaceControlViewHost(displayContext, display, sessionData)) {
                     "Failed to create SurfaceControlViewHost"
                 }
+            val touchTransferringView =
+                TouchFocusTransferringView(displayContext, surfaceControlViewHost)
             return SessionClientProxy(
-                ProviderViewWrapper(displayContext),
+                touchTransferringView,
                 surfaceControlViewHost,
                 isZOrderOnTop,
                 remoteSessionClient
diff --git a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/ProviderViewWrapper.kt b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/ProviderViewWrapper.kt
deleted file mode 100644
index 85c8f7c9..0000000
--- a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/ProviderViewWrapper.kt
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2025 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.privacysandbox.ui.provider
-
-import android.content.Context
-import android.os.Build
-import android.os.Handler
-import android.os.Message
-import android.view.MotionEvent
-import android.widget.FrameLayout
-import androidx.annotation.RequiresApi
-import androidx.privacysandbox.ui.core.IMotionEventTransferCallback
-
-/**
- * A container [FrameLayout] that wraps the provider content view.
- *
- * It dispatches [MotionEvent] objects passed from the host against the provider view. [MotionEvent]
- * objects passed from the host (accompanied with target frame time) are scheduled to be dispatched
- * on the UiThread with a delay from the target frame time, so any UI impact caused by processing
- * these events will target the following frame.
- *
- * It also proxies the calls of [android.view.ViewParent.requestDisallowInterceptTouchEvent] to the
- * client side.
- */
-@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-internal class ProviderViewWrapper(context: Context) : FrameLayout(context) {
-    private companion object {
-        // That delay will be used to ensure processing the transferred events after their target
-        // frame time and before the following frame time.
-        const val TRANSFERRED_EVENT_DISPATCH_DELAY_MS = 1
-    }
-
-    private var eventDispatchHandler: Handler? = null
-    private var currentMotionEventCallback: IMotionEventTransferCallback? = null
-    private var lastValueForRequestDisallowIntercept = false
-
-    override fun onAttachedToWindow() {
-        eventDispatchHandler = Handler(handler.looper)
-        super.onAttachedToWindow()
-    }
-
-    override fun onDetachedFromWindow() {
-        /** Remove [eventDispatchHandler] posted messages. */
-        eventDispatchHandler?.removeCallbacksAndMessages(/* token */ null)
-        eventDispatchHandler = null
-        super.onDetachedFromWindow()
-    }
-
-    override fun requestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
-        if (disallowIntercept == lastValueForRequestDisallowIntercept) {
-            return
-        }
-        currentMotionEventCallback?.requestDisallowIntercept(disallowIntercept)
-        lastValueForRequestDisallowIntercept = disallowIntercept
-    }
-
-    fun scheduleMotionEventProcessing(
-        motionEvent: MotionEvent,
-        eventTargetFrameTime: Long,
-        motionEventTransferCallback: IMotionEventTransferCallback?
-    ) {
-        if (eventDispatchHandler == null) {
-            return
-        }
-        val dispatchMessage: Message =
-            Message.obtain(handler) { processMotionEvent(motionEvent, motionEventTransferCallback) }
-        dispatchMessage.isAsynchronous = true
-
-        eventDispatchHandler?.sendMessageAtTime(
-            dispatchMessage,
-            eventTargetFrameTime + TRANSFERRED_EVENT_DISPATCH_DELAY_MS
-        )
-    }
-
-    fun processMotionEvent(
-        motionEvent: MotionEvent,
-        motionEventTransferCallback: IMotionEventTransferCallback?
-    ) {
-        if (motionEvent.action == MotionEvent.ACTION_DOWN) {
-            // Resetting the value of it to false (parent can intercept) for new gestures.
-            lastValueForRequestDisallowIntercept = false
-        }
-        currentMotionEventCallback = motionEventTransferCallback
-        dispatchTouchEvent(motionEvent)
-    }
-}
diff --git a/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/TouchFocusTransferringView.kt b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/TouchFocusTransferringView.kt
new file mode 100644
index 0000000..d1d55a5
--- /dev/null
+++ b/privacysandbox/ui/ui-provider/src/main/java/androidx/privacysandbox/ui/provider/TouchFocusTransferringView.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.privacysandbox.ui.provider
+
+import android.content.Context
+import android.os.Build
+import android.view.GestureDetector
+import android.view.MotionEvent
+import android.view.SurfaceControlViewHost
+import android.view.ViewGroup
+import android.widget.FrameLayout
+import androidx.annotation.RequiresApi
+import kotlin.math.abs
+
+/**
+ * A container [ViewGroup] that delegates touch events to the host or the UI provider.
+ *
+ * Touch events will first be passed to a scroll detector. If a vertical scroll or fling is
+ * detected, the gesture will be transferred to the host. Otherwise, the touch event will pass
+ * through and be handled by the provider of UI.
+ *
+ * TODO(b/286829818): Pass scroll events to the UI provider if it can handle scrolls.
+ */
+@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
+internal class TouchFocusTransferringView(
+    context: Context,
+    surfaceControlViewHost: SurfaceControlViewHost
+) : FrameLayout(context) {
+
+    private val scvh: SurfaceControlViewHost = surfaceControlViewHost
+    private val detector = ScrollDetector(context)
+
+    @Suppress("deprecation") // transferTouchGestureToHost needs to be called on U- devices
+    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
+        detector.onTouchEvent(ev)
+        if (!detector.isScrolling) {
+            return false
+        }
+        detector.reset()
+        return scvh.transferTouchGestureToHost()
+    }
+
+    override fun onTouchEvent(event: MotionEvent): Boolean {
+        // This will only be called if the dispatch of the touch event is intercepted.
+        return true
+    }
+
+    /**
+     * Handles intercepted touch events before they reach the UI provider.
+     *
+     * If a vertical scroll or fling event is caught, this is indicated by the [isScrolling] var.
+     */
+    private class ScrollDetector(context: Context) : GestureDetector.SimpleOnGestureListener() {
+
+        var isScrolling = false
+            private set
+
+        private val gestureDetector = GestureDetector(context, this)
+
+        override fun onScroll(e1: MotionEvent?, e2: MotionEvent, dX: Float, dY: Float): Boolean {
+            // A scroll is vertical if its y displacement is greater than its x displacement.
+            if (abs(dY) > abs(dX)) {
+                isScrolling = true
+                return false
+            }
+            return true
+        }
+
+        override fun onFling(
+            e1: MotionEvent?,
+            e2: MotionEvent,
+            velocityX: Float,
+            velocityY: Float
+        ): Boolean {
+            // A fling is vertical if its y velocity is greater than its x velocity.
+            if (abs(velocityY) > abs(velocityX)) {
+                isScrolling = true
+                return false
+            }
+            return true
+        }
+
+        fun onTouchEvent(ev: MotionEvent) {
+            gestureDetector.onTouchEvent(ev)
+        }
+
+        fun reset() {
+            isScrolling = false
+        }
+    }
+}
diff --git a/savedstate/OWNERS b/savedstate/OWNERS
index a2e56ef..b33056f 100644
--- a/savedstate/OWNERS
+++ b/savedstate/OWNERS
@@ -3,7 +3,6 @@
 [email protected]
 [email protected]
 [email protected]
[email protected]
 [email protected]
 
 per-file settings.gradle = [email protected], [email protected]
\ No newline at end of file
diff --git a/savedstate/savedstate-samples/build.gradle b/savedstate/savedstate-samples/build.gradle
index cefd8c4..7c46dfe 100644
--- a/savedstate/savedstate-samples/build.gradle
+++ b/savedstate/savedstate-samples/build.gradle
@@ -34,7 +34,7 @@
 
 dependencies {
     api(libs.kotlinStdlib)
-    implementation("androidx.activity:activity:1.10.1")
+    implementation(project(":activity:activity-ktx"))
     implementation(project(":savedstate:savedstate"))
     compileOnly(project(":annotation:annotation-sampled"))
     implementation(libs.kotlinSerializationCore)
diff --git a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateConfiguration.kt b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateConfiguration.kt
index 9054b2a..188604b 100644
--- a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateConfiguration.kt
+++ b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateConfiguration.kt
@@ -59,9 +59,6 @@
          * Module with contextual and polymorphic serializers to be used in the resulting
          * [SavedStateConfiguration] instance.
          *
-         * Note that this [SerializersModule] will be combined with an internal [SerializersModule]
-         * in the resulting [SavedStateConfiguration] to support built-in types.
-         *
          * @see SerializersModule
          * @see Contextual
          * @see Polymorphic
diff --git a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.kt b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.kt
index f760bef..efd3720 100644
--- a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.kt
+++ b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateDecoder.kt
@@ -34,8 +34,7 @@
  *
  * @sample androidx.savedstate.decode
  * @param savedState The [SavedState] to decode from.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @return The decoded object.
  * @throws SerializationException in case of any decoding-specific error.
  * @throws IllegalArgumentException if the decoded input is not a valid instance of [T].
@@ -52,8 +51,7 @@
  * @sample androidx.savedstate.decodeWithExplicitSerializerAndConfig
  * @param deserializer The deserializer to use.
  * @param savedState The [SavedState] to decode from.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @return The deserialized object.
  * @throws SerializationException in case of any decoding-specific error.
  * @throws IllegalArgumentException if the decoded input is not a valid instance of [T].
diff --git a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.kt b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.kt
index 7c0231c..0efb61a 100644
--- a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.kt
+++ b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateEncoder.kt
@@ -36,8 +36,7 @@
  *
  * @sample androidx.savedstate.encode
  * @param value The serializable object to encode.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @return The encoded [SavedState].
  * @throws SerializationException in case of any encoding-specific error.
  */
@@ -53,8 +52,7 @@
  * @sample androidx.savedstate.encodeWithExplicitSerializerAndConfig
  * @param serializer The serializer to use.
  * @param value The serializable object to encode.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @return The encoded [SavedState].
  * @throws SerializationException in case of any encoding-specific error.
  */
diff --git a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateRegistryOwnerDelegate.kt b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateRegistryOwnerDelegate.kt
index 5507a66..19c8990 100644
--- a/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateRegistryOwnerDelegate.kt
+++ b/savedstate/savedstate/src/commonMain/kotlin/androidx/savedstate/serialization/SavedStateRegistryOwnerDelegate.kt
@@ -30,8 +30,7 @@
  * @sample androidx.savedstate.serialization.savedStateRegistryOwner_saved_withKey
  * @param key An optional [String] key to use for storing the value in the [SavedStateRegistry]. A
  *   default key will be generated if it's omitted or when 'null' is passed.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @param init The function to provide the initial value of the property.
  * @return A property delegate provider that manages the saving and restoring of the value.
  * @see encodeToSavedState
@@ -53,8 +52,7 @@
  * @param serializer The [KSerializer] to use for serializing and deserializing the value.
  * @param key An optional [String] key to use for storing the value in the [SavedStateRegistry]. A
  *   default key will be generated if it's omitted or when 'null' is passed.
- * @param configuration The [SavedStateConfiguration] to use. Defaults to
- *   [SavedStateConfiguration.DEFAULT].
+ * @param configuration The [SavedStateConfiguration] to use.
  * @param init The function to provide the initial value of the property.
  * @return A property delegate provider that manages the saving and restoring of the value.
  * @see encodeToSavedState
diff --git a/settings.gradle b/settings.gradle
index bde8008..4c2b05f 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -903,7 +903,6 @@
 includeProject(":palette:palette", [BuildType.MAIN])
 includeProject(":palette:palette-ktx", [BuildType.MAIN])
 includeProject(":pdf:integration-tests:testapp", [BuildType.MAIN])
-includeProject(":pdf:pdf-compose", [BuildType.COMPOSE])
 includeProject(":pdf:pdf-document-service", [BuildType.MAIN])
 includeProject(":pdf:pdf-viewer", [BuildType.MAIN])
 includeProject(":pdf:pdf-viewer-fragment", [BuildType.MAIN])
@@ -917,7 +916,6 @@
 includeProject(":privacysandbox:activity:activity-provider", [BuildType.MAIN])
 includeProject(":privacysandbox:ads:ads-adservices", [BuildType.MAIN])
 includeProject(":privacysandbox:ads:ads-adservices-java", [BuildType.MAIN])
-includeProject(":privacysandbox:ondevicepersonalization:ondevicepersonalization-client", [BuildType.MAIN])
 includeProject(":privacysandbox:plugins:plugins-privacysandbox-library", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:integration-tests:testaidl", [BuildType.MAIN])
 includeProject(":privacysandbox:sdkruntime:integration-tests:macrobenchmark", [BuildType.MAIN])
diff --git a/test/uiautomator/integration-tests/testapp/build.gradle b/test/uiautomator/integration-tests/testapp/build.gradle
index 8e4fc10..6e240e0 100644
--- a/test/uiautomator/integration-tests/testapp/build.gradle
+++ b/test/uiautomator/integration-tests/testapp/build.gradle
@@ -27,7 +27,8 @@
     implementation(libs.androidx.annotation)
     implementation("androidx.core:core:1.6.0")
 
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity"))
+    implementation(project(":activity:activity-compose"))
     implementation(project(":compose:foundation:foundation"))
     implementation(project(":compose:foundation:foundation-layout"))
     implementation(project(":compose:material:material"))
diff --git a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
index 5b327b2..3640dac 100644
--- a/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
+++ b/test/uiautomator/uiautomator/src/main/java/androidx/test/uiautomator/UiDevice.java
@@ -63,10 +63,11 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.TimeoutException;
 
 /**
@@ -1411,16 +1412,12 @@
         return uiAutomation.getWindows();
     }
 
-    /**
-     * Returns a list containing the root {@link AccessibilityNodeInfo}s for each active window.
-     * For convenience the returned list is sorted in descending window order, ensuring the root of
-     * the topmost visible window is reported first.
-     */
+    /** Returns a list containing the root {@link AccessibilityNodeInfo}s for each active window */
     @NonNull
     public List<AccessibilityNodeInfo> getWindowRoots() {
         waitForIdle();
 
-        LinkedHashSet<AccessibilityNodeInfo> roots = new LinkedHashSet<>();
+        Set<AccessibilityNodeInfo> roots = new HashSet<>();
         UiAutomation uiAutomation = getUiAutomation();
 
         // Ensure the active window root is included.
diff --git a/versionedparcelable/versionedparcelable/build.gradle b/versionedparcelable/versionedparcelable/build.gradle
index d96809c..1f196db 100644
--- a/versionedparcelable/versionedparcelable/build.gradle
+++ b/versionedparcelable/versionedparcelable/build.gradle
@@ -42,9 +42,9 @@
     androidTestImplementation(libs.testExtJunit)
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testRunner)
+    androidTestImplementation(libs.mockitoCore)
+    androidTestImplementation(libs.dexmakerMockito)
     androidTestImplementation(libs.truth)
-    androidTestImplementation(libs.junit)
-
     androidTestAnnotationProcessor(project(":versionedparcelable:versionedparcelable-compiler"))
 }
 
diff --git a/wear/benchmark/integration-tests/macrobenchmark-target/build.gradle b/wear/benchmark/integration-tests/macrobenchmark-target/build.gradle
index f74de36..4acae42 100644
--- a/wear/benchmark/integration-tests/macrobenchmark-target/build.gradle
+++ b/wear/benchmark/integration-tests/macrobenchmark-target/build.gradle
@@ -39,7 +39,7 @@
 dependencies {
     implementation(libs.kotlinStdlib)
     implementation(libs.constraintLayout)
-    implementation("androidx.activity:activity:1.10.1")
+    implementation(project(":activity:activity-ktx"))
     implementation("androidx.core:core-ktx")
     implementation(libs.material)
     implementation(project(":profileinstaller:profileinstaller"))
diff --git a/wear/compose/compose-material3/api/current.txt b/wear/compose/compose-material3/api/current.txt
index 6f512ae..ea11df5 100644
--- a/wear/compose/compose-material3/api/current.txt
+++ b/wear/compose/compose-material3/api/current.txt
@@ -7,9 +7,7 @@
     method @androidx.compose.runtime.Composable public void EdgeButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material3.ButtonColors colors, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public void GroupSeparator();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues confirmDismissContentPadding();
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues confirmDismissWithIconContentPadding();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues contentPadding();
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues contentWithIconPadding();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.RowScope,kotlin.Unit> getConfirmIcon();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.RowScope,kotlin.Unit> getDismissIcon();
     method public androidx.compose.foundation.layout.Arrangement.Vertical getVerticalArrangement();
diff --git a/wear/compose/compose-material3/api/restricted_current.txt b/wear/compose/compose-material3/api/restricted_current.txt
index 6f512ae..ea11df5 100644
--- a/wear/compose/compose-material3/api/restricted_current.txt
+++ b/wear/compose/compose-material3/api/restricted_current.txt
@@ -7,9 +7,7 @@
     method @androidx.compose.runtime.Composable public void EdgeButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.wear.compose.material3.ButtonColors colors, optional kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.runtime.Composable public void GroupSeparator();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues confirmDismissContentPadding();
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues confirmDismissWithIconContentPadding();
     method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues contentPadding();
-    method @androidx.compose.runtime.Composable public androidx.compose.foundation.layout.PaddingValues contentWithIconPadding();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.RowScope,kotlin.Unit> getConfirmIcon();
     method public kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.RowScope,kotlin.Unit> getDismissIcon();
     method public androidx.compose.foundation.layout.Arrangement.Vertical getVerticalArrangement();
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/AlertDialogDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/AlertDialogDemo.kt
index 975e29d..863387f 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/AlertDialogDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/AlertDialogDemo.kt
@@ -125,7 +125,6 @@
                         label = { Text("Caption") },
                     )
                 }
-
                 item { ListHeader { Text("Buttons") } }
                 item {
                     RadioButton(
@@ -151,7 +150,6 @@
                         label = { Text("No EdgeButton") },
                     )
                 }
-
                 item { Button(onClick = { showDialog = true }, label = { Text("Show dialog") }) }
             }
         }
diff --git a/wear/compose/compose-material3/macrobenchmark-target/build.gradle b/wear/compose/compose-material3/macrobenchmark-target/build.gradle
index 144b29c..e6ca2cb 100644
--- a/wear/compose/compose-material3/macrobenchmark-target/build.gradle
+++ b/wear/compose/compose-material3/macrobenchmark-target/build.gradle
@@ -43,7 +43,7 @@
     implementation(project(":compose:foundation:foundation"))
     implementation(project(":compose:foundation:foundation-layout"))
     implementation(project(":compose:ui:ui"))
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":profileinstaller:profileinstaller"))
     implementation(project(":wear:compose:compose-material3"))
     implementation(project(":wear:compose:compose-material3-macrobenchmark-common"))
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AlertDialog.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AlertDialog.kt
index ff17682..5d64c5e 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AlertDialog.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AlertDialog.kt
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 package androidx.wear.compose.material3
 
 import androidx.compose.foundation.layout.Arrangement
@@ -37,11 +38,9 @@
 import androidx.compose.ui.graphics.graphicsLayer
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.window.DialogProperties
 import androidx.wear.compose.foundation.lazy.ScalingLazyColumn
-import androidx.wear.compose.foundation.lazy.ScalingLazyColumnDefaults
 import androidx.wear.compose.foundation.lazy.ScalingLazyListScope
 import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
 import androidx.wear.compose.material3.PaddingDefaults.horizontalContentPadding
@@ -88,8 +87,7 @@
  * @param verticalArrangement The vertical arrangement of the dialog's children. There is a default
  *   padding between icon, title, and text, which will be added to the spacing specified in this
  *   [verticalArrangement] parameter.
- * @param contentPadding The padding to apply around the entire dialog's contents. It is recommended
- *   to use the defaults, which adjust to reduce the top padding when an icon is present.
+ * @param contentPadding The padding to apply around the entire dialog's contents.
  * @param properties An optional [DialogProperties] object for configuring the dialog's behavior.
  * @param content A slot for additional content, displayed within a scrollable [ScalingLazyColumn].
  */
@@ -106,12 +104,7 @@
     icon: @Composable (() -> Unit)? = null,
     text: @Composable (() -> Unit)? = null,
     verticalArrangement: Arrangement.Vertical = AlertDialogDefaults.VerticalArrangement,
-    contentPadding: PaddingValues =
-        if (icon != null) {
-            AlertDialogDefaults.confirmDismissWithIconContentPadding()
-        } else {
-            AlertDialogDefaults.confirmDismissContentPadding()
-        },
+    contentPadding: PaddingValues = AlertDialogDefaults.confirmDismissContentPadding(),
     properties: DialogProperties = DialogProperties(),
     content: (ScalingLazyListScope.() -> Unit)? = null
 ) {
@@ -161,8 +154,7 @@
  * @param verticalArrangement The vertical arrangement of the dialog's children. There is a default
  *   padding between icon, title, and text, which will be added to the spacing specified in this
  *   [verticalArrangement] parameter.
- * @param contentPadding The padding to apply around the entire dialog's contents. It is recommended
- *   to use the defaults, which adjust to reduce the top padding when an icon is present.
+ * @param contentPadding The padding to apply around the entire dialog's contents.
  * @param properties An optional [DialogProperties] object for configuring the dialog's behavior.
  * @param content A slot for additional content, displayed within a scrollable [ScalingLazyColumn].
  *   Any buttons added in this slot that are intended to dismiss the dialog must remove the dialog
@@ -177,12 +169,7 @@
     icon: @Composable (() -> Unit)? = null,
     text: @Composable (() -> Unit)? = null,
     verticalArrangement: Arrangement.Vertical = AlertDialogDefaults.VerticalArrangement,
-    contentPadding: PaddingValues =
-        if (icon != null) {
-            AlertDialogDefaults.contentWithIconPadding()
-        } else {
-            AlertDialogDefaults.contentPadding()
-        },
+    contentPadding: PaddingValues = AlertDialogDefaults.contentPadding(),
     properties: DialogProperties = DialogProperties(),
     content: (ScalingLazyListScope.() -> Unit)? = null
 ) {
@@ -242,8 +229,7 @@
  *   padding between icon, title, and text, which will be added to the spacing specified in this
  *   [verticalArrangement] parameter.
  * @param contentPadding The padding to apply around the entire dialog's contents. Bottom padding
- *   will be ignored and default spacing for the [EdgeButton] will be used. It is recommended to use
- *   the defaults, which adjust to reduce the top padding when an icon is present.
+ *   will be ignored and default spacing for the [EdgeButton] will be used.
  * @param properties An optional [DialogProperties] object for configuring the dialog's behavior.
  * @param content A slot for additional content, displayed within a scrollable [ScalingLazyColumn].
  *   Any buttons added in this slot that are intended to dismiss the dialog must remove the dialog
@@ -259,12 +245,7 @@
     icon: @Composable (() -> Unit)? = null,
     text: @Composable (() -> Unit)? = null,
     verticalArrangement: Arrangement.Vertical = AlertDialogDefaults.VerticalArrangement,
-    contentPadding: PaddingValues =
-        if (icon != null) {
-            AlertDialogDefaults.contentWithIconPadding()
-        } else {
-            AlertDialogDefaults.contentPadding()
-        },
+    contentPadding: PaddingValues = AlertDialogDefaults.contentPadding(),
     properties: DialogProperties = DialogProperties(),
     content: (ScalingLazyListScope.() -> Unit)? = null
 ) {
@@ -309,8 +290,7 @@
  * @param verticalArrangement The vertical arrangement of the dialog's children. There is a default
  *   padding between icon, title, and text, which will be added to the spacing specified in this
  *   [verticalArrangement] parameter.
- * @param contentPadding The padding to apply around the entire dialog's contents. It is recommended
- *   to use the defaults, which adjust to reduce the top padding when an icon is present.
+ * @param contentPadding The padding to apply around the entire dialog's contents.
  * @param content A slot for additional content, displayed within a scrollable [ScalingLazyColumn].
  */
 @Composable
@@ -322,22 +302,17 @@
     icon: @Composable (() -> Unit)? = null,
     text: @Composable (() -> Unit)? = null,
     verticalArrangement: Arrangement.Vertical = AlertDialogDefaults.VerticalArrangement,
-    contentPadding: PaddingValues =
-        if (icon != null) {
-            AlertDialogDefaults.confirmDismissWithIconContentPadding()
-        } else {
-            AlertDialogDefaults.confirmDismissContentPadding()
-        },
+    contentPadding: PaddingValues = AlertDialogDefaults.confirmDismissContentPadding(),
     content: (ScalingLazyListScope.() -> Unit)? = null
 ) {
     val state = rememberScalingLazyListState(initialCenterItemIndex = 0)
+
     ScreenScaffold(
         scrollState = state,
         modifier = modifier,
         contentPadding = contentPadding,
     ) {
         ScalingLazyColumn(
-            scalingParams = AlertScalingParams,
             state = state,
             contentPadding = it,
             horizontalAlignment = Alignment.CenterHorizontally,
@@ -346,6 +321,7 @@
             modifier = Modifier.fillMaxSize(),
         ) {
             alertDialogCommonContent(icon = icon, title = title, text = text, content = content)
+
             item {
                 ConfirmDismissButtons(confirmButton = confirmButton, dismissButton = dismissButton)
             }
@@ -370,8 +346,7 @@
  * @param verticalArrangement The vertical arrangement of the dialog's children. There is a default
  *   padding between icon, title, and text, which will be added to the spacing specified in this
  *   [verticalArrangement] parameter.
- * @param contentPadding The padding to apply around the entire dialog's contents. It is recommended
- *   to use the defaults, which adjust to reduce the top padding when an icon is present.
+ * @param contentPadding The padding to apply around the entire dialog's contents.
  * @param content A slot for additional content, displayed within a scrollable [ScalingLazyColumn].
  */
 @Composable
@@ -381,22 +356,17 @@
     icon: @Composable (() -> Unit)? = null,
     text: @Composable (() -> Unit)? = null,
     verticalArrangement: Arrangement.Vertical = AlertDialogDefaults.VerticalArrangement,
-    contentPadding: PaddingValues =
-        if (icon != null) {
-            AlertDialogDefaults.contentWithIconPadding()
-        } else {
-            AlertDialogDefaults.contentPadding()
-        },
+    contentPadding: PaddingValues = AlertDialogDefaults.contentPadding(),
     content: (ScalingLazyListScope.() -> Unit)? = null
 ) {
     val state = rememberScalingLazyListState(initialCenterItemIndex = 0)
+
     ScreenScaffold(
         scrollState = state,
         modifier = modifier,
         contentPadding = contentPadding,
     ) {
         ScalingLazyColumn(
-            scalingParams = AlertScalingParams,
             state = state,
             contentPadding = it,
             horizontalAlignment = Alignment.CenterHorizontally,
@@ -431,8 +401,7 @@
  *   padding between icon, title, and text, which will be added to the spacing specified in this
  *   [verticalArrangement] parameter.
  * @param contentPadding The padding to apply around the entire dialog's contents. Bottom padding
- *   will be ignored and default spacing for the [EdgeButton] will be used. It is recommended to use
- *   the defaults, which adjust to reduce the top padding when an icon is present.
+ *   will be ignored and default spacing for the [EdgeButton] will be used.
  * @param content A slot for additional content, displayed within a scrollable [ScalingLazyColumn].
  */
 @Composable
@@ -443,15 +412,11 @@
     icon: @Composable (() -> Unit)? = null,
     text: @Composable (() -> Unit)? = null,
     verticalArrangement: Arrangement.Vertical = AlertDialogDefaults.VerticalArrangement,
-    contentPadding: PaddingValues =
-        if (icon != null) {
-            AlertDialogDefaults.contentWithIconPadding()
-        } else {
-            AlertDialogDefaults.contentPadding()
-        },
+    contentPadding: PaddingValues = AlertDialogDefaults.contentPadding(),
     content: (ScalingLazyListScope.() -> Unit)? = null
 ) {
     val state = rememberScalingLazyListState(initialCenterItemIndex = 0)
+
     val noTextAndContent = text == null && content == null
     ScreenScaffold(
         scrollState = state,
@@ -463,7 +428,6 @@
             else AlertEdgeButtonSpacing,
     ) {
         ScalingLazyColumn(
-            scalingParams = AlertScalingParams,
             state = state,
             contentPadding = it,
             horizontalAlignment = Alignment.CenterHorizontally,
@@ -522,7 +486,9 @@
     ) {
         val confirmWidth = 63.dp
         val confirmHeight = 54.dp
+
         val confirmShape = CircleShape
+
         FilledIconButton(
             onClick = onClick,
             modifier = modifier.rotate(-45f).size(confirmWidth, confirmHeight),
@@ -554,6 +520,7 @@
     ) {
         val dismissSize = 60.dp
         val dismissShape = MaterialTheme.shapes.medium
+
         Box(modifier = Modifier.size(dismissSize + cancelButtonPadding)) {
             FilledTonalIconButton(
                 onClick = onClick,
@@ -568,60 +535,25 @@
 
     /**
      * The padding to apply around the content for the [AlertDialog] variation with confirm dismiss
-     * buttons and no icon content.
+     * buttons.
      */
     @Composable
     public fun confirmDismissContentPadding(): PaddingValues {
         val verticalPadding = verticalContentPadding()
         val horizontalPadding = horizontalContentPadding()
-        return PaddingValues(
-            top = calculateTopPadding(hasIcon = false),
-            bottom = verticalPadding,
-            start = horizontalPadding,
-            end = horizontalPadding,
-        )
+        return PaddingValues(horizontal = horizontalPadding, vertical = verticalPadding)
     }
 
     /**
-     * The padding to apply around the content for the [AlertDialog] variation when an icon is
-     * provided and with confirm dismiss buttons.
-     */
-    @Composable
-    public fun confirmDismissWithIconContentPadding(): PaddingValues {
-        val verticalPadding = verticalContentPadding()
-        val horizontalPadding = horizontalContentPadding()
-        return PaddingValues(
-            top = calculateTopPadding(hasIcon = true),
-            bottom = verticalPadding,
-            start = horizontalPadding,
-            end = horizontalPadding,
-        )
-    }
-
-    /**
-     * The padding to apply around the content for the [AlertDialog] variation without an icon, that
-     * has a stack of buttons for options and no confirm or dismiss buttons at the end.
+     * The padding to apply around the content for the [AlertDialog] variation with a stack of
+     * options and no buttons at the end.
      */
     @Composable
     public fun contentPadding(): PaddingValues {
+        val topPadding = verticalContentPadding()
         val horizontalPadding = horizontalContentPadding()
         return PaddingValues(
-            top = calculateTopPadding(hasIcon = false),
-            bottom = screenHeightDp().dp * noEdgeButtonBottomPaddingFraction,
-            start = horizontalPadding,
-            end = horizontalPadding,
-        )
-    }
-
-    /**
-     * The padding to apply around the content for the [AlertDialog] variation with an icon, that
-     * has a stack of buttons for options and no confirm or dismiss buttons at the end.
-     */
-    @Composable
-    public fun contentWithIconPadding(): PaddingValues {
-        val horizontalPadding = horizontalContentPadding()
-        return PaddingValues(
-            top = calculateTopPadding(hasIcon = true),
+            top = topPadding,
             bottom = screenHeightDp().dp * noEdgeButtonBottomPaddingFraction,
             start = horizontalPadding,
             end = horizontalPadding,
@@ -640,6 +572,7 @@
     /** Default vertical arrangement for an [AlertDialog]. */
     public val VerticalArrangement: Arrangement.Vertical =
         Arrangement.spacedBy(space = 4.dp, alignment = Alignment.CenterVertically)
+
     /** Default icon for the confirm button. */
     public val ConfirmIcon: @Composable RowScope.() -> Unit = {
         Icon(
@@ -648,6 +581,7 @@
             modifier = Modifier.size(28.dp).align(Alignment.CenterVertically)
         )
     }
+
     /** Default icon for the dismiss button. */
     public val DismissIcon: @Composable RowScope.() -> Unit = {
         Icon(
@@ -657,13 +591,8 @@
         )
     }
 
-    @Composable
-    private fun calculateTopPadding(hasIcon: Boolean): Dp {
-        return if (hasIcon) screenHeightDp().dp * iconTopPaddingFraction
-        else verticalContentPadding()
-    }
-
-    internal val iconTopPaddingFraction = 0.012f
+    /** The extra top padding to apply to the edge button. */
+    internal val edgeButtonExtraTopPadding = 1.dp
     internal val noEdgeButtonBottomPaddingFraction = 0.3646f
     internal val cancelButtonPadding = 1.dp
 }
@@ -767,10 +696,7 @@
 internal val AlertContentTopSpacing = 8.dp
 internal const val ConfirmDismissButtonsBottomSpacingFraction = 0.045f
 internal const val AlertTitleMaxLines = 3
+
 private const val TextPaddingFraction = 0.0416f
 private const val TitlePaddingFraction = 0.12f
 private const val ConfirmDismissBetweenButtonsPaddingFraction = 0.03f
-private val AlertScalingParams =
-    ScalingLazyColumnDefaults.scalingParams(
-        minTransitionArea = 0.2f,
-    )
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AnimationSpecUtils.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AnimationSpecUtils.kt
index f283325..980af7f 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AnimationSpecUtils.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/AnimationSpecUtils.kt
@@ -17,7 +17,6 @@
 package androidx.wear.compose.material3
 
 import androidx.annotation.FloatRange
-import androidx.compose.animation.core.Animatable
 import androidx.compose.animation.core.AnimationVector
 import androidx.compose.animation.core.AnimationVector1D
 import androidx.compose.animation.core.AnimationVector2D
@@ -27,20 +26,8 @@
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.animation.core.TwoWayConverter
 import androidx.compose.animation.core.VectorizedFiniteAnimationSpec
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
 import androidx.compose.runtime.withFrameMillis
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.graphicsLayer
-import androidx.compose.ui.text.TextStyle
-import androidx.compose.ui.text.style.TextAlign
 import java.util.concurrent.TimeUnit
-import kotlin.math.abs
 import kotlinx.coroutines.delay
 
 /**
@@ -115,6 +102,8 @@
     val speedupFactor: Float,
     val startDelayNanos: Long = 0
 ) : VectorizedFiniteAnimationSpec<V> {
+    override val isInfinite: Boolean
+        get() = wrapped.isInfinite
 
     override fun getValueFromNanos(
         playTimeNanos: Long,
@@ -184,59 +173,4 @@
     }
 }
 
-/**
- * Animated [Text] based component that on text change fades out the old value and then fades in the
- * new value in one smooth animation.
- */
-@Composable
-internal fun FadeLabel(
-    text: String,
-    animationSpec: FiniteAnimationSpec<Float>,
-    modifier: Modifier = Modifier,
-    color: Color = Color.Unspecified,
-    style: TextStyle = LocalTextStyle.current,
-    maxLines: Int = LocalTextConfiguration.current.maxLines,
-    textAlign: TextAlign? = LocalTextConfiguration.current.textAlign,
-) {
-    var currentText by remember { mutableStateOf(text) }
-    var targetText by remember { mutableStateOf(text) }
-    val animatedAlpha = remember { Animatable(1f) }
-
-    LaunchedEffect(text) {
-        // Don't animate the first time the text is set
-        if (currentText.isEmpty() || currentText == text) {
-            currentText = text
-            return@LaunchedEffect
-        }
-
-        // If an animation is already running when a new animation is started, finish the animation
-        // quickly and then start the new animation
-        if (animatedAlpha.value != animatedAlpha.targetValue) {
-            animatedAlpha.animateTo(-1f, animationSpec.faster(200f)) {
-                if (animatedAlpha.value < 0f) {
-                    currentText = targetText
-                }
-            }
-            animatedAlpha.snapTo(1f)
-        }
-
-        targetText = text
-        animatedAlpha.animateTo(-1f, animationSpec) {
-            if (animatedAlpha.value < 0f) {
-                currentText = targetText
-            }
-        }
-        animatedAlpha.snapTo(1f)
-    }
-
-    Text(
-        text = currentText,
-        modifier = modifier.graphicsLayer { alpha = abs(animatedAlpha.value) },
-        color = color,
-        style = style,
-        maxLines = maxLines,
-        textAlign = textAlign
-    )
-}
-
 private const val MAX_WAIT_TIME_MILLIS = 1_000L
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/DatePicker.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/DatePicker.kt
index f506972..4e02db7 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/DatePicker.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/DatePicker.kt
@@ -19,7 +19,12 @@
 import android.os.Build
 import android.text.format.DateFormat
 import androidx.annotation.RequiresApi
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.ContentTransform
 import androidx.compose.animation.core.Animatable
+import androidx.compose.animation.core.FiniteAnimationSpec
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
 import androidx.compose.foundation.focusable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.BoxWithConstraints
@@ -264,25 +269,38 @@
         val maxTextLines = if (selectedIndex == null) 2 else 1
         val textPaddingPercentage = 24f
 
+        val headingAnimationSpec: FiniteAnimationSpec<Float> =
+            MaterialTheme.motionScheme.defaultEffectsSpec()
         Column(
             verticalArrangement = Arrangement.Center,
             horizontalAlignment = Alignment.CenterHorizontally,
         ) {
             Spacer(Modifier.height(14.dp))
-            FadeLabel(
-                text = heading,
-                animationSpec = MaterialTheme.motionScheme.defaultEffectsSpec(),
-                modifier =
-                    Modifier.padding(
-                            horizontal =
-                                PaddingDefaults.horizontalContentPadding(textPaddingPercentage)
-                        )
-                        .fillMaxWidth(),
-                color = colors.pickerLabelColor,
-                style = labelTextStyle,
-                maxLines = maxTextLines,
-                textAlign = TextAlign.Center
-            )
+            AnimatedContent(
+                targetState = heading,
+                transitionSpec = {
+                    ContentTransform(
+                        targetContentEnter =
+                            fadeIn(animationSpec = headingAnimationSpec.delayMillis(200)),
+                        initialContentExit = fadeOut(animationSpec = headingAnimationSpec),
+                        sizeTransform = null
+                    )
+                }
+            ) { targetText ->
+                Text(
+                    modifier =
+                        Modifier.padding(
+                                horizontal =
+                                    PaddingDefaults.horizontalContentPadding(textPaddingPercentage)
+                            )
+                            .fillMaxWidth(),
+                    text = targetText,
+                    color = colors.pickerLabelColor,
+                    textAlign = TextAlign.Center,
+                    style = labelTextStyle,
+                    maxLines = maxTextLines,
+                )
+            }
             Spacer(Modifier.height(if (isLargeScreen) 6.dp else 4.dp))
             FontScaleIndependent {
                 val measurer = rememberTextMeasurer()
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/PagerScaffold.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/PagerScaffold.kt
index 7437135..28f7ca9 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/PagerScaffold.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/PagerScaffold.kt
@@ -160,6 +160,13 @@
     val isReduceMotionEnabled = LocalReduceMotion.current
     val isRtlEnabled = LocalLayoutDirection.current == LayoutDirection.Rtl
     val isCurrentPage: Boolean = pageIndex == pagerState.currentPage
+    val pageTransitionFraction =
+        if (isCurrentPage) {
+            pagerState.currentPageOffsetFraction.absoluteValue
+        } else {
+            // interpolate left or right pages in opposite direction
+            1 - pagerState.currentPageOffsetFraction.absoluteValue
+        }
     val graphicsLayerModifier =
         if (isReduceMotionEnabled) Modifier
         else
@@ -180,8 +187,6 @@
                         // Flip X and Y for vertical pager
                         TransformOrigin(0.5f, pivotFractionX)
                     }
-                val pageTransitionFraction =
-                    getPageTransitionFraction(isCurrentPage, pagerState.currentPageOffsetFraction)
                 val scale = lerp(start = 1f, stop = 0.55f, fraction = pageTransitionFraction)
                 scaleX = scale
                 scaleY = scale
@@ -191,8 +196,6 @@
 
         if (contentScrimColor.isSpecified) {
             Canvas(Modifier.fillMaxSize()) {
-                val pageTransitionFraction =
-                    getPageTransitionFraction(isCurrentPage, pagerState.currentPageOffsetFraction)
                 val color =
                     contentScrimColor.copy(
                         alpha = lerp(start = 0f, stop = 0.5f, fraction = pageTransitionFraction)
@@ -281,15 +284,3 @@
         )
     }
 }
-
-private fun getPageTransitionFraction(
-    isCurrentPage: Boolean,
-    currentPageOffsetFraction: Float
-): Float {
-    return if (isCurrentPage) {
-        currentPageOffsetFraction.absoluteValue
-    } else {
-        // interpolate left or right pages in opposite direction
-        1 - currentPageOffsetFraction.absoluteValue
-    }
-}
diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TimePicker.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TimePicker.kt
index 87a5a9f..0910732 100644
--- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TimePicker.kt
+++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/TimePicker.kt
@@ -18,7 +18,12 @@
 
 import android.os.Build
 import androidx.annotation.RequiresApi
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.ContentTransform
 import androidx.compose.animation.core.Animatable
+import androidx.compose.animation.core.FiniteAnimationSpec
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
 import androidx.compose.foundation.focusable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
@@ -201,27 +206,43 @@
                         }
                     } ?: if (touchExplorationServicesEnabled) instructionHeadingString else ""
 
+                val headingAnimationSpec: FiniteAnimationSpec<Float> =
+                    MaterialTheme.motionScheme.defaultEffectsSpec()
+
                 // Allow more room for the initial instruction heading under TalkBack
                 val maxTextLines = if (selectedIndex == null) 2 else 1
                 val textPaddingPercentage = 30f
                 val textModifier = if (selectedIndex == null) Modifier else Modifier.height(24.dp)
 
-                FadeLabel(
-                    text = heading,
-                    animationSpec = MaterialTheme.motionScheme.defaultEffectsSpec(),
-                    modifier =
-                        textModifier
-                            .padding(
-                                horizontal =
-                                    PaddingDefaults.horizontalContentPadding(textPaddingPercentage)
-                            )
-                            .fillMaxWidth()
-                            .align(Alignment.CenterHorizontally),
-                    color = colors.pickerLabelColor,
-                    style = styles.labelTextStyle,
-                    maxLines = maxTextLines,
-                    textAlign = TextAlign.Center
-                )
+                AnimatedContent(
+                    targetState = heading,
+                    transitionSpec = {
+                        ContentTransform(
+                            targetContentEnter =
+                                fadeIn(animationSpec = headingAnimationSpec.delayMillis(200)),
+                            initialContentExit = fadeOut(animationSpec = headingAnimationSpec),
+                            sizeTransform = null
+                        )
+                    }
+                ) { targetText ->
+                    Text(
+                        text = targetText,
+                        color = colors.pickerLabelColor,
+                        style = styles.labelTextStyle,
+                        maxLines = maxTextLines,
+                        modifier =
+                            textModifier
+                                .padding(
+                                    horizontal =
+                                        PaddingDefaults.horizontalContentPadding(
+                                            textPaddingPercentage
+                                        )
+                                )
+                                .fillMaxWidth()
+                                .align(Alignment.CenterHorizontally),
+                        textAlign = TextAlign.Center
+                    )
+                }
                 Spacer(Modifier.height(styles.sectionVerticalPadding))
                 Row(
                     modifier = Modifier.fillMaxWidth().weight(1f),
diff --git a/wear/compose/integration-tests/demos/build.gradle b/wear/compose/integration-tests/demos/build.gradle
index a286922..44d482b 100644
--- a/wear/compose/integration-tests/demos/build.gradle
+++ b/wear/compose/integration-tests/demos/build.gradle
@@ -28,8 +28,8 @@
     defaultConfig {
         applicationId = "androidx.wear.compose.integration.demos"
         minSdk = 25
-        versionCode = 72
-        versionName = "1.72"
+        versionCode = 71
+        versionName = "1.71"
     }
 
     buildTypes {
diff --git a/wear/compose/integration-tests/macrobenchmark-target/build.gradle b/wear/compose/integration-tests/macrobenchmark-target/build.gradle
index 6a50fb6..f4a5733 100644
--- a/wear/compose/integration-tests/macrobenchmark-target/build.gradle
+++ b/wear/compose/integration-tests/macrobenchmark-target/build.gradle
@@ -45,7 +45,7 @@
     implementation(project(":compose:foundation:foundation-layout"))
     implementation(project(":compose:runtime:runtime"))
     implementation(project(":compose:ui:ui-tooling"))
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":profileinstaller:profileinstaller"))
     implementation(project(":wear:compose:compose-foundation"))
     implementation(project(":wear:compose:compose-material"))
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-expression-pipeline/api/1.3.0-beta01.txt
deleted file mode 100644
index 28d52cc..0000000
--- a/wear/protolayout/protolayout-expression-pipeline/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.expression.pipeline {
-
-  public interface BoundDynamicType extends java.lang.AutoCloseable {
-    method @UiThread public void close();
-    method @UiThread public void startEvaluation();
-  }
-
-  public abstract class DynamicTypeBindingRequest {
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicBool(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Boolean!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicColor(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicDuration(androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Duration!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicFloat(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Float!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicInstant(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Instant!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicInt32(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicString(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString, android.icu.util.ULocale, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.String!>);
-  }
-
-  public class DynamicTypeEvaluator {
-    ctor public DynamicTypeEvaluator(androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config);
-    method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest) throws androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.EvaluationException;
-  }
-
-  public static final class DynamicTypeEvaluator.Config {
-    method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getAnimationQuotaManager();
-    method @VisibleForTesting public java.util.function.Supplier<java.time.Instant!>? getClock();
-    method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getDynamicTypesQuotaManager();
-    method public java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!> getPlatformDataProviders();
-    method public androidx.wear.protolayout.expression.pipeline.PlatformTimeUpdateNotifier? getPlatformTimeUpdateNotifier();
-    method public androidx.wear.protolayout.expression.pipeline.StateStore? getStateStore();
-  }
-
-  public static final class DynamicTypeEvaluator.Config.Builder {
-    ctor public DynamicTypeEvaluator.Config.Builder();
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!>);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config build();
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setAnimationQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
-    method @VisibleForTesting public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setClock(java.util.function.Supplier<java.time.Instant!>);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setDynamicTypesQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setPlatformTimeUpdateNotifier(androidx.wear.protolayout.expression.pipeline.PlatformTimeUpdateNotifier);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setStateStore(androidx.wear.protolayout.expression.pipeline.StateStore);
-  }
-
-  public static class DynamicTypeEvaluator.EvaluationException extends java.lang.Exception {
-    ctor public DynamicTypeEvaluator.EvaluationException(String);
-  }
-
-  public interface DynamicTypeValueReceiver<T> {
-    method public void onData(T);
-    method public void onInvalidated();
-  }
-
-  public interface PlatformDataProvider {
-    method public void clearReceiver();
-    method public void setReceiver(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.PlatformDataReceiver);
-  }
-
-  public interface PlatformDataReceiver {
-    method public void onData(androidx.wear.protolayout.expression.PlatformDataValues);
-    method public void onInvalidated(java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!>);
-  }
-
-  public interface PlatformTimeUpdateNotifier {
-    method public void clearReceiver();
-    method public void setReceiver(java.util.concurrent.Executor, Runnable);
-  }
-
-  public interface QuotaManager {
-    method public void releaseQuota(int);
-    method public boolean tryAcquireQuota(int);
-  }
-
-  public final class StateStore {
-    method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!>);
-    method public static int getMaxStateEntryCount();
-    method @UiThread public void setAppStateEntryValues(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!>);
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout-expression-pipeline/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout-expression-pipeline/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout-expression-pipeline/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-expression-pipeline/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index 14e2a44..0000000
--- a/wear/protolayout/protolayout-expression-pipeline/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.expression.pipeline {
-
-  public interface BoundDynamicType extends java.lang.AutoCloseable {
-    method @UiThread public void close();
-    method @UiThread public void startEvaluation();
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface DynamicTypeAnimator {
-    method public void advanceToAnimationTime(long);
-    method public Object? getCurrentValue();
-    method public long getDurationMs();
-    method public Object? getEndValue();
-    method public long getStartDelayMs();
-    method public Object? getStartValue();
-    method public android.animation.TypeEvaluator<? extends java.lang.Object!> getTypeEvaluator();
-    method public boolean isTerminal();
-    method public void setFloatValues(float...);
-    method public void setIntValues(int...);
-  }
-
-  public abstract class DynamicTypeBindingRequest {
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicBool(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Boolean!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicColor(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicDuration(androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Duration!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicFloat(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Float!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicInstant(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.time.Instant!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicInt32(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.Integer!>);
-    method public static androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest forDynamicString(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString, android.icu.util.ULocale, java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.DynamicTypeValueReceiver<java.lang.String!>);
-  }
-
-  public class DynamicTypeEvaluator {
-    ctor public DynamicTypeEvaluator(androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config);
-    method public androidx.wear.protolayout.expression.pipeline.BoundDynamicType bind(androidx.wear.protolayout.expression.pipeline.DynamicTypeBindingRequest) throws androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.EvaluationException;
-  }
-
-  public static final class DynamicTypeEvaluator.Config {
-    method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getAnimationQuotaManager();
-    method @VisibleForTesting public java.util.function.Supplier<java.time.Instant!>? getClock();
-    method public androidx.wear.protolayout.expression.pipeline.QuotaManager? getDynamicTypesQuotaManager();
-    method public java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!> getPlatformDataProviders();
-    method public androidx.wear.protolayout.expression.pipeline.PlatformTimeUpdateNotifier? getPlatformTimeUpdateNotifier();
-    method public androidx.wear.protolayout.expression.pipeline.StateStore? getStateStore();
-  }
-
-  public static final class DynamicTypeEvaluator.Config.Builder {
-    ctor public DynamicTypeEvaluator.Config.Builder();
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!>);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config build();
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setAnimationQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
-    method @VisibleForTesting public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setClock(java.util.function.Supplier<java.time.Instant!>);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setDynamicTypesQuotaManager(androidx.wear.protolayout.expression.pipeline.QuotaManager);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setPlatformTimeUpdateNotifier(androidx.wear.protolayout.expression.pipeline.PlatformTimeUpdateNotifier);
-    method public androidx.wear.protolayout.expression.pipeline.DynamicTypeEvaluator.Config.Builder setStateStore(androidx.wear.protolayout.expression.pipeline.StateStore);
-  }
-
-  public static class DynamicTypeEvaluator.EvaluationException extends java.lang.Exception {
-    ctor public DynamicTypeEvaluator.EvaluationException(String);
-  }
-
-  public interface DynamicTypeValueReceiver<T> {
-    method public void onData(T);
-    method public void onInvalidated();
-  }
-
-  public interface PlatformDataProvider {
-    method public void clearReceiver();
-    method public void setReceiver(java.util.concurrent.Executor, androidx.wear.protolayout.expression.pipeline.PlatformDataReceiver);
-  }
-
-  public interface PlatformDataReceiver {
-    method public void onData(androidx.wear.protolayout.expression.PlatformDataValues);
-    method public void onInvalidated(java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!>);
-  }
-
-  public interface PlatformTimeUpdateNotifier {
-    method public void clearReceiver();
-    method public void setReceiver(java.util.concurrent.Executor, Runnable);
-  }
-
-  public interface QuotaManager {
-    method public void releaseQuota(int);
-    method public boolean tryAcquireQuota(int);
-  }
-
-  public final class StateStore {
-    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public StateStore(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue!>);
-    method public static androidx.wear.protolayout.expression.pipeline.StateStore create(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!>);
-    method public static int getMaxStateEntryCount();
-    method @UiThread public void setAppStateEntryValues(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!>);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @UiThread public void setAppStateEntryValuesProto(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.proto.DynamicDataProto.DynamicDataValue!>);
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-expression/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-expression/api/1.3.0-beta01.txt
deleted file mode 100644
index 34cb16ee..0000000
--- a/wear/protolayout/protolayout-expression/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1,513 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.expression {
-
-  public final class AnimationParameterBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int REPEAT_MODE_RESTART = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int REPEAT_MODE_REVERSE = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int REPEAT_MODE_UNKNOWN = 0; // 0x0
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class AnimationParameterBuilders.AnimationParameters {
-    method @IntRange(from=0) public long getDelayMillis();
-    method @IntRange(from=0) public long getDurationMillis();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing? getEasing();
-  }
-
-  public static final class AnimationParameterBuilders.AnimationParameters.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public AnimationParameterBuilders.AnimationParameters.Builder();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters.Builder setDelayMillis(@IntRange(from=0) long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters.Builder setDurationMillis(@IntRange(from=0) long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters.Builder setEasing(androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class AnimationParameterBuilders.AnimationSpec {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getAnimationParameters();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable? getRepeatable();
-  }
-
-  public static final class AnimationParameterBuilders.AnimationSpec.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public AnimationParameterBuilders.AnimationSpec.Builder();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setAnimationParameters(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setRepeatable(androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface AnimationParameterBuilders.Easing {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing cubicBezier(float, float, float, float);
-    method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing fromByteArray(byte[]);
-    method public default byte[] toEasingByteArray();
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_LINEAR_IN_EASING;
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_SLOW_IN_EASING;
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing LINEAR_OUT_SLOW_IN_EASING;
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class AnimationParameterBuilders.Repeatable {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getForwardRepeatOverride();
-    method public int getIterations();
-    method public int getRepeatMode();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getReverseRepeatOverride();
-    method public boolean hasInfiniteIteration();
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_RESTART;
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_REVERSE;
-  }
-
-  public static final class AnimationParameterBuilders.Repeatable.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public AnimationParameterBuilders.Repeatable.Builder();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setForwardRepeatOverride(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setIterations(@IntRange(from=1) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setRepeatMode(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setReverseRepeatOverride(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
-  }
-
-  public final class AppDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
-    ctor public AppDataKey(String key);
-  }
-
-  public final class AppDataKeyUtil {
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> boolAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> colorAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> durationAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> floatAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> instantAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> intAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> stringAppDataKey(String key);
-  }
-
-  public class ConditionScopes {
-  }
-
-  public static class ConditionScopes.ConditionScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
-    method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(RawT!);
-    method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
-  }
-
-  public static class ConditionScopes.IfTrueScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
-    method public T! elseUse(RawT!);
-    method public T! elseUse(T!);
-  }
-
-  public final class DynamicBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicBool extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicBoolByteArray();
-    method public default int toDynamicBoolByteArray(byte[]);
-    method public default int toDynamicBoolByteArray(byte[], int, int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicColor extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor constant(@ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicColorByteArray();
-    method public default int toDynamicColorByteArray(byte[]);
-    method public default int toDynamicColorByteArray(byte[], int, int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!,java.time.Duration!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicDurationByteArray();
-    method public default int toDynamicDurationByteArray(byte[]);
-    method public default int toDynamicDurationByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntSeconds();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration withSecondsPrecision(java.time.Duration);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 asInt();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat constant(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!,java.lang.Float!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
-    method public default byte[] toDynamicFloatByteArray();
-    method public default int toDynamicFloatByteArray(byte[]);
-    method public default int toDynamicFloatByteArray(byte[], int, int);
-  }
-
-  public static class DynamicBuilders.DynamicFloat.FloatFormatter {
-    method @IntRange(from=0) public int getMaxFractionDigits();
-    method @IntRange(from=0) public int getMinFractionDigits();
-    method @IntRange(from=0) public int getMinIntegerDigits();
-    method public boolean isGroupingUsed();
-  }
-
-  public static final class DynamicBuilders.DynamicFloat.FloatFormatter.Builder {
-    ctor public DynamicBuilders.DynamicFloat.FloatFormatter.Builder();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setGroupingUsed(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setMaxFractionDigits(@IntRange(from=0) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setMinFractionDigits(@IntRange(from=0) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setMinIntegerDigits(@IntRange(from=0) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getDayOfMonth(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getDayOfWeek(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHour(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinute(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMonth(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecond(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getYear(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!,java.time.Instant!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
-    method public default byte[] toDynamicInstantByteArray();
-    method public default int toDynamicInstantByteArray(byte[]);
-    method public default int toDynamicInstantByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat asFloat();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 constant(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
-    method public default byte[] toDynamicInt32ByteArray();
-    method public default int toDynamicInt32ByteArray(byte[]);
-    method public default int toDynamicInt32ByteArray(byte[], int, int);
-  }
-
-  public static class DynamicBuilders.DynamicInt32.IntFormatter {
-    method @IntRange(from=0) public int getMinIntegerDigits();
-    method public boolean isGroupingUsed();
-  }
-
-  public static final class DynamicBuilders.DynamicInt32.IntFormatter.Builder {
-    ctor public DynamicBuilders.DynamicInt32.IntFormatter.Builder();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter.Builder setGroupingUsed(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter.Builder setMinIntegerDigits(@IntRange(from=0) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicString extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString concat(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString constant(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(String, java.lang.Object!...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!,java.lang.String!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicStringByteArray();
-    method public default int toDynamicStringByteArray(byte[]);
-    method public default int toDynamicStringByteArray(byte[], int, int);
-  }
-
-  public static interface DynamicBuilders.DynamicType {
-  }
-
-  public final class DynamicDataBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicDataBuilders.DynamicDataValue<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool!> fromBool(boolean);
-    method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!> fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!> fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!> fromColor(@ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!> fromDuration(java.time.Duration);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> fromFloat(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!> fromInstant(java.time.Instant);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> fromInt(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!> fromString(String);
-    method public default boolean getBoolValue();
-    method @ColorInt public default int getColorValue();
-    method public default java.time.Duration getDurationValue();
-    method public default float getFloatValue();
-    method public default java.time.Instant getInstantValue();
-    method public default int getIntValue();
-    method public default String getStringValue();
-    method public default boolean hasBoolValue();
-    method public default boolean hasColorValue();
-    method public default boolean hasDurationValue();
-    method public default boolean hasFloatValue();
-    method public default boolean hasInstantValue();
-    method public default boolean hasIntValue();
-    method public default boolean hasStringValue();
-    method public default boolean hasValueOfType(Class<? extends java.lang.Object!>);
-    method public default byte[] toDynamicDataValueByteArray();
-    method public default int toDynamicDataValueByteArray(byte[]);
-    method public default int toDynamicDataValueByteArray(byte[], int, int);
-  }
-
-  public abstract class DynamicDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
-    method public final String getKey();
-    method public final String getNamespace();
-    property public final String key;
-    property public final String namespace;
-  }
-
-  public class DynamicDataMap {
-    method public final inline operator <reified T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> boolean contains(androidx.wear.protolayout.expression.DynamicDataKey<T> key);
-    method public final <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> boolean contains(androidx.wear.protolayout.expression.DynamicDataKey<T> key, Class<T> type);
-    method public final operator Boolean? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> key);
-    method public final operator android.graphics.Color? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> key);
-    method public final operator java.time.Duration? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> key);
-    method public final operator Float? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> key);
-    method public final operator java.time.Instant? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> key);
-    method public final operator Integer? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> key);
-    method public final operator String? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> key);
-    method public final java.util.Set<java.util.Map.Entry<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>>> getEntries();
-    method public final java.util.Set<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> getKeys();
-    method public final int getSize();
-    method public final java.util.Collection<androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> getValues();
-    method public final operator androidx.wear.protolayout.expression.DynamicDataMap plus(androidx.wear.protolayout.expression.DynamicDataMap rhs);
-    property public final java.util.Set<java.util.Map.Entry<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>>> entries;
-    property public final java.util.Set<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> keys;
-    property public final int size;
-    property public final java.util.Collection<androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> values;
-  }
-
-  public final class DynamicDataMapUtil {
-    method public static androidx.wear.protolayout.expression.DynamicDataMap dynamicDataMapOf(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... pairs);
-    method public static androidx.wear.protolayout.expression.MutableDynamicDataMap mutableDynamicDataMapOf(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... pairs);
-  }
-
-  public final class DynamicDataPair<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
-    ctor public DynamicDataPair(androidx.wear.protolayout.expression.DynamicDataKey<T> key, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> value);
-    method public kotlin.Pair<androidx.wear.protolayout.expression.DynamicDataKey<T>,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T>> asPair();
-    method public androidx.wear.protolayout.expression.DynamicDataKey<T> getKey();
-    method public androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> getValue();
-    property public androidx.wear.protolayout.expression.DynamicDataKey<T> key;
-    property public androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> value;
-  }
-
-  public final class DynamicDataPairUtil {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool>, boolean value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor>, android.graphics.Color value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration>, java.time.Duration value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat>, float value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant>, java.time.Instant value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32>, int value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString>, String value);
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface ExperimentalProtoLayoutExtensionApi {
-  }
-
-  public final class MutableDynamicDataMap extends androidx.wear.protolayout.expression.DynamicDataMap {
-    ctor public MutableDynamicDataMap(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... pairs);
-    method public void putAll(androidx.wear.protolayout.expression.DynamicDataMap other);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> key, boolean value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> key, android.graphics.Color value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> key, java.time.Duration value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> key, float value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> key, java.time.Instant value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> key, int value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> key, String value);
-    method public operator <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> void set(androidx.wear.protolayout.expression.DynamicDataKey<T> key, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> value);
-  }
-
-  public final class PlatformDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T!> {
-    ctor public PlatformDataKey(String, String);
-  }
-
-  public final class PlatformDataValues {
-    method public java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!> getAll();
-    method public static <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> androidx.wear.protolayout.expression.PlatformDataValues of(androidx.wear.protolayout.expression.PlatformDataKey<T!>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T!>);
-  }
-
-  public static final class PlatformDataValues.Builder {
-    ctor public PlatformDataValues.Builder();
-    method public androidx.wear.protolayout.expression.PlatformDataValues build();
-    method public <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> androidx.wear.protolayout.expression.PlatformDataValues.Builder put(androidx.wear.protolayout.expression.PlatformDataKey<T!>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T!>);
-    method public androidx.wear.protolayout.expression.PlatformDataValues.Builder putAll(androidx.wear.protolayout.expression.DynamicDataMap);
-    method public androidx.wear.protolayout.expression.PlatformDataValues.Builder putAll(androidx.wear.protolayout.expression.PlatformDataValues);
-  }
-
-  public final class PlatformEventSources {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=600) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isLayoutUpdatePending();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isLayoutVisible();
-    field public static final androidx.wear.protolayout.expression.PlatformEventSources INSTANCE;
-  }
-
-  public static final class PlatformEventSources.Keys {
-    property @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_UPDATE_PENDING;
-    property public androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_VISIBILITY;
-    field public static final androidx.wear.protolayout.expression.PlatformEventSources.Keys INSTANCE;
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_UPDATE_PENDING;
-    field public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_VISIBILITY;
-  }
-
-  public class PlatformHealthSources {
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dailyCalories();
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dailyDistanceMeters();
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dailyFloors();
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 dailySteps();
-    method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy heartRateAccuracy();
-    method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat heartRateBpm();
-    field public static final int HEART_RATE_ACCURACY_HIGH = 5; // 0x5
-    field public static final int HEART_RATE_ACCURACY_LOW = 3; // 0x3
-    field public static final int HEART_RATE_ACCURACY_MEDIUM = 4; // 0x4
-    field public static final int HEART_RATE_ACCURACY_NO_CONTACT = 1; // 0x1
-    field public static final int HEART_RATE_ACCURACY_UNKNOWN = 0; // 0x0
-    field public static final int HEART_RATE_ACCURACY_UNRELIABLE = 2; // 0x2
-  }
-
-  public static final class PlatformHealthSources.DynamicHeartRateAccuracy implements androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy constant(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy!> dynamicDataValueOf(int);
-  }
-
-  public static class PlatformHealthSources.Keys {
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> DAILY_CALORIES;
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> DAILY_DISTANCE_METERS;
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> DAILY_FLOORS;
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> DAILY_STEPS;
-    field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy!> HEART_RATE_ACCURACY;
-    field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> HEART_RATE_BPM;
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface ProtoLayoutExperimental {
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER}) @kotlin.annotation.MustBeDocumented public @interface RequiresSchemaVersion {
-    method public abstract int major();
-    method public abstract int minor();
-  }
-
-  public final class VersionBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class VersionBuilders.VersionInfo implements java.lang.Comparable<androidx.wear.protolayout.expression.VersionBuilders.VersionInfo!> {
-    method public int compareTo(androidx.wear.protolayout.expression.VersionBuilders.VersionInfo);
-    method public int getMajor();
-    method public int getMinor();
-  }
-
-  public static final class VersionBuilders.VersionInfo.Builder {
-    ctor public VersionBuilders.VersionInfo.Builder();
-    method public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo.Builder setMajor(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo.Builder setMinor(int);
-  }
-
-}
-
-package androidx.wear.protolayout.expression.util {
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public final class DynamicDateFormat {
-    ctor public DynamicDateFormat(String pattern);
-    ctor public DynamicDateFormat(String pattern, optional java.time.ZoneId timeZone);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant instant);
-    method public java.time.ZoneId getTimeZone();
-    method public void setTimeZone(java.time.ZoneId);
-    property public java.time.ZoneId timeZone;
-  }
-
-  public final class DynamicFormatter {
-    ctor public DynamicFormatter();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(String format, java.lang.Object?... args);
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-expression/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout-expression/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout-expression/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout-expression/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-expression/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index 44784a0..0000000
--- a/wear/protolayout/protolayout-expression/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1,514 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.expression {
-
-  public final class AnimationParameterBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int REPEAT_MODE_RESTART = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int REPEAT_MODE_REVERSE = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int REPEAT_MODE_UNKNOWN = 0; // 0x0
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class AnimationParameterBuilders.AnimationParameters {
-    method @IntRange(from=0) public long getDelayMillis();
-    method @IntRange(from=0) public long getDurationMillis();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing? getEasing();
-  }
-
-  public static final class AnimationParameterBuilders.AnimationParameters.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public AnimationParameterBuilders.AnimationParameters.Builder();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters.Builder setDelayMillis(@IntRange(from=0) long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters.Builder setDurationMillis(@IntRange(from=0) long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters.Builder setEasing(androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class AnimationParameterBuilders.AnimationSpec {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getAnimationParameters();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable? getRepeatable();
-  }
-
-  public static final class AnimationParameterBuilders.AnimationSpec.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public AnimationParameterBuilders.AnimationSpec.Builder();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setAnimationParameters(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec.Builder setRepeatable(androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface AnimationParameterBuilders.Easing {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing cubicBezier(float, float, float, float);
-    method public static androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing fromByteArray(byte[]);
-    method public default byte[] toEasingByteArray();
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_LINEAR_IN_EASING;
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing FAST_OUT_SLOW_IN_EASING;
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Easing LINEAR_OUT_SLOW_IN_EASING;
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class AnimationParameterBuilders.Repeatable {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getForwardRepeatOverride();
-    method public int getIterations();
-    method public int getRepeatMode();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters? getReverseRepeatOverride();
-    method public boolean hasInfiniteIteration();
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_RESTART;
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable INFINITE_REPEATABLE_WITH_REVERSE;
-  }
-
-  public static final class AnimationParameterBuilders.Repeatable.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public AnimationParameterBuilders.Repeatable.Builder();
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setForwardRepeatOverride(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setIterations(@IntRange(from=1) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setRepeatMode(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.AnimationParameterBuilders.Repeatable.Builder setReverseRepeatOverride(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationParameters);
-  }
-
-  public final class AppDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T> {
-    ctor public AppDataKey(String key);
-  }
-
-  public final class AppDataKeyUtil {
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> boolAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> colorAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> durationAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> floatAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> instantAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> intAppDataKey(String key);
-    method public static androidx.wear.protolayout.expression.AppDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> stringAppDataKey(String key);
-  }
-
-  public class ConditionScopes {
-  }
-
-  public static class ConditionScopes.ConditionScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
-    method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(RawT!);
-    method public androidx.wear.protolayout.expression.ConditionScopes.IfTrueScope<T!,RawT!> use(T!);
-  }
-
-  public static class ConditionScopes.IfTrueScope<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType, RawT> {
-    method public T! elseUse(RawT!);
-    method public T! elseUse(T!);
-  }
-
-  public final class DynamicBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicBool extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool and(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool constant(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool negate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool or(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicBoolByteArray();
-    method public default int toDynamicBoolByteArray(byte[]);
-    method public default int toDynamicBoolByteArray(byte[], int, int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicColor extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor animate(@ColorInt int, @ColorInt int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor constant(@ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicColorByteArray();
-    method public default int toDynamicColorByteArray(byte[]);
-    method public default int toDynamicColorByteArray(byte[], int, int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicDuration extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHoursPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getIntDaysPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinutesPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecondsPart();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!,java.time.Duration!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicDurationByteArray();
-    method public default int toDynamicDurationByteArray(byte[]);
-    method public default int toDynamicDurationByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntDays();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntHours();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntMinutes();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 toIntSeconds();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration withSecondsPrecision(java.time.Duration);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicFloat extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat animate(float, float, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 asInt();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat constant(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!,java.lang.Float!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
-    method public default byte[] toDynamicFloatByteArray();
-    method public default int toDynamicFloatByteArray(byte[]);
-    method public default int toDynamicFloatByteArray(byte[], int, int);
-  }
-
-  public static class DynamicBuilders.DynamicFloat.FloatFormatter {
-    method @IntRange(from=0) public int getMaxFractionDigits();
-    method @IntRange(from=0) public int getMinFractionDigits();
-    method @IntRange(from=0) public int getMinIntegerDigits();
-    method public boolean isGroupingUsed();
-  }
-
-  public static final class DynamicBuilders.DynamicFloat.FloatFormatter.Builder {
-    ctor public DynamicBuilders.DynamicFloat.FloatFormatter.Builder();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setGroupingUsed(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setMaxFractionDigits(@IntRange(from=0) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setMinFractionDigits(@IntRange(from=0) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat.FloatFormatter.Builder setMinIntegerDigits(@IntRange(from=0) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicInstant extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration durationUntil(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getDayOfMonth(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getDayOfWeek(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getHour(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMinute(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getMonth(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getSecond(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 getYear(java.time.ZoneId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!,java.time.Instant!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant platformTimeWithSecondsPrecision();
-    method public default byte[] toDynamicInstantByteArray();
-    method public default int toDynamicInstantByteArray(byte[]);
-    method public default int toDynamicInstantByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant withSecondsPrecision(java.time.Instant);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicInt32 extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 animate(int, int, androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat asFloat();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 constant(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat div(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 div(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool eq(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gt(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool gte(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lt(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool lte(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat minus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 minus(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool ne(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!,java.lang.Integer!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat plus(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 plus(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat rem(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 rem(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat times(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 times(int);
-    method public default byte[] toDynamicInt32ByteArray();
-    method public default int toDynamicInt32ByteArray(byte[]);
-    method public default int toDynamicInt32ByteArray(byte[], int, int);
-  }
-
-  public static class DynamicBuilders.DynamicInt32.IntFormatter {
-    method @IntRange(from=0) public int getMinIntegerDigits();
-    method public boolean isGroupingUsed();
-  }
-
-  public static final class DynamicBuilders.DynamicInt32.IntFormatter.Builder {
-    ctor public DynamicBuilders.DynamicInt32.IntFormatter.Builder();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter.Builder setGroupingUsed(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32.IntFormatter.Builder setMinIntegerDigits(@IntRange(from=0) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicBuilders.DynamicString extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public default androidx.wear.protolayout.expression.DynamicBuilders.DynamicString concat(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString constant(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(String, java.lang.Object!...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString from(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!>);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicString fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.ConditionScopes.ConditionScope<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!,java.lang.String!> onCondition(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method public default byte[] toDynamicStringByteArray();
-    method public default int toDynamicStringByteArray(byte[]);
-    method public default int toDynamicStringByteArray(byte[], int, int);
-  }
-
-  public static interface DynamicBuilders.DynamicType {
-  }
-
-  public final class DynamicDataBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface DynamicDataBuilders.DynamicDataValue<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool!> fromBool(boolean);
-    method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!> fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!> fromByteArray(byte[], int, int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor!> fromColor(@ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration!> fromDuration(java.time.Duration);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> fromFloat(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant!> fromInstant(java.time.Instant);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> fromInt(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString!> fromString(String);
-    method public default boolean getBoolValue();
-    method @ColorInt public default int getColorValue();
-    method public default java.time.Duration getDurationValue();
-    method public default float getFloatValue();
-    method public default java.time.Instant getInstantValue();
-    method public default int getIntValue();
-    method public default String getStringValue();
-    method public default boolean hasBoolValue();
-    method public default boolean hasColorValue();
-    method public default boolean hasDurationValue();
-    method public default boolean hasFloatValue();
-    method public default boolean hasInstantValue();
-    method public default boolean hasIntValue();
-    method public default boolean hasStringValue();
-    method public default boolean hasValueOfType(Class<? extends java.lang.Object!>);
-    method public default byte[] toDynamicDataValueByteArray();
-    method public default int toDynamicDataValueByteArray(byte[]);
-    method public default int toDynamicDataValueByteArray(byte[], int, int);
-  }
-
-  public abstract class DynamicDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
-    method public final String getKey();
-    method public final String getNamespace();
-    property public final String key;
-    property public final String namespace;
-  }
-
-  public class DynamicDataMap {
-    method public final inline operator <reified T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> boolean contains(androidx.wear.protolayout.expression.DynamicDataKey<T> key);
-    method public final <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> boolean contains(androidx.wear.protolayout.expression.DynamicDataKey<T> key, Class<T> type);
-    method public final operator Boolean? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> key);
-    method public final operator android.graphics.Color? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> key);
-    method public final operator java.time.Duration? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> key);
-    method public final operator Float? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> key);
-    method public final operator java.time.Instant? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> key);
-    method public final operator Integer? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> key);
-    method public final operator String? get(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> key);
-    method public final java.util.Set<java.util.Map.Entry<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>>> getEntries();
-    method public final java.util.Set<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> getKeys();
-    method public final int getSize();
-    method public final java.util.Collection<androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> getValues();
-    method public final operator androidx.wear.protolayout.expression.DynamicDataMap plus(androidx.wear.protolayout.expression.DynamicDataMap rhs);
-    property public final java.util.Set<java.util.Map.Entry<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>>> entries;
-    property public final java.util.Set<androidx.wear.protolayout.expression.DynamicDataKey<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> keys;
-    property public final int size;
-    property public final java.util.Collection<androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType>> values;
-  }
-
-  public final class DynamicDataMapUtil {
-    method public static androidx.wear.protolayout.expression.DynamicDataMap dynamicDataMapOf(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... pairs);
-    method public static androidx.wear.protolayout.expression.MutableDynamicDataMap mutableDynamicDataMapOf(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... pairs);
-  }
-
-  public final class DynamicDataPair<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> {
-    ctor public DynamicDataPair(androidx.wear.protolayout.expression.DynamicDataKey<T> key, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> value);
-    method public kotlin.Pair<androidx.wear.protolayout.expression.DynamicDataKey<T>,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T>> asPair();
-    method public androidx.wear.protolayout.expression.DynamicDataKey<T> getKey();
-    method public androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> getValue();
-    property public androidx.wear.protolayout.expression.DynamicDataKey<T> key;
-    property public androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> value;
-  }
-
-  public final class DynamicDataPairUtil {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool>, boolean value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor>, android.graphics.Color value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration>, java.time.Duration value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat>, float value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant>, java.time.Instant value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32>, int value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static infix androidx.wear.protolayout.expression.DynamicDataPair<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> dynamicDataPairOf(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString>, String value);
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface ExperimentalProtoLayoutExtensionApi {
-  }
-
-  public final class MutableDynamicDataMap extends androidx.wear.protolayout.expression.DynamicDataMap {
-    ctor public MutableDynamicDataMap(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... pairs);
-    method public void putAll(androidx.wear.protolayout.expression.DynamicDataMap other);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> key, boolean value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor> key, android.graphics.Color value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicDuration> key, java.time.Duration value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat> key, float value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant> key, java.time.Instant value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32> key, int value);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public operator void set(androidx.wear.protolayout.expression.DynamicDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicString> key, String value);
-    method public operator <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> void set(androidx.wear.protolayout.expression.DynamicDataKey<T> key, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T> value);
-  }
-
-  public final class PlatformDataKey<T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> extends androidx.wear.protolayout.expression.DynamicDataKey<T!> {
-    ctor public PlatformDataKey(String, String);
-  }
-
-  public final class PlatformDataValues {
-    method public java.util.Map<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!> getAll();
-    method public static <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> androidx.wear.protolayout.expression.PlatformDataValues of(androidx.wear.protolayout.expression.PlatformDataKey<T!>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T!>);
-  }
-
-  public static final class PlatformDataValues.Builder {
-    ctor public PlatformDataValues.Builder();
-    method public androidx.wear.protolayout.expression.PlatformDataValues build();
-    method public <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> androidx.wear.protolayout.expression.PlatformDataValues.Builder put(androidx.wear.protolayout.expression.PlatformDataKey<T!>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T!>);
-    method public androidx.wear.protolayout.expression.PlatformDataValues.Builder putAll(androidx.wear.protolayout.expression.DynamicDataMap);
-    method public androidx.wear.protolayout.expression.PlatformDataValues.Builder putAll(androidx.wear.protolayout.expression.PlatformDataValues);
-  }
-
-  public final class PlatformEventSources {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=600) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isLayoutUpdatePending();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool isLayoutVisible();
-    field public static final androidx.wear.protolayout.expression.PlatformEventSources INSTANCE;
-  }
-
-  public static final class PlatformEventSources.Keys {
-    property @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_UPDATE_PENDING;
-    property public androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_VISIBILITY;
-    field public static final androidx.wear.protolayout.expression.PlatformEventSources.Keys INSTANCE;
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_UPDATE_PENDING;
-    field public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool> LAYOUT_VISIBILITY;
-  }
-
-  public class PlatformHealthSources {
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dailyCalories();
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dailyDistanceMeters();
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat dailyFloors();
-    method @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 dailySteps();
-    method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy heartRateAccuracy();
-    method @RequiresPermission(android.Manifest.permission.BODY_SENSORS) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat heartRateBpm();
-    field public static final int HEART_RATE_ACCURACY_HIGH = 5; // 0x5
-    field public static final int HEART_RATE_ACCURACY_LOW = 3; // 0x3
-    field public static final int HEART_RATE_ACCURACY_MEDIUM = 4; // 0x4
-    field public static final int HEART_RATE_ACCURACY_NO_CONTACT = 1; // 0x1
-    field public static final int HEART_RATE_ACCURACY_UNKNOWN = 0; // 0x0
-    field public static final int HEART_RATE_ACCURACY_UNRELIABLE = 2; // 0x2
-  }
-
-  public static final class PlatformHealthSources.DynamicHeartRateAccuracy implements androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32 {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy constant(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy!> dynamicDataValueOf(int);
-  }
-
-  public static class PlatformHealthSources.Keys {
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> DAILY_CALORIES;
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> DAILY_DISTANCE_METERS;
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> DAILY_FLOORS;
-    field @RequiresPermission(android.Manifest.permission.ACTIVITY_RECOGNITION) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicInt32!> DAILY_STEPS;
-    field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.PlatformHealthSources.DynamicHeartRateAccuracy!> HEART_RATE_ACCURACY;
-    field @RequiresPermission(android.Manifest.permission.BODY_SENSORS) public static final androidx.wear.protolayout.expression.PlatformDataKey<androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat!> HEART_RATE_BPM;
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface ProtoLayoutExperimental {
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.PARAMETER}) @kotlin.annotation.MustBeDocumented public @interface RequiresSchemaVersion {
-    method public abstract int major();
-    method public abstract int minor();
-  }
-
-  public final class VersionBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class VersionBuilders.VersionInfo implements java.lang.Comparable<androidx.wear.protolayout.expression.VersionBuilders.VersionInfo!> {
-    method public int compareTo(androidx.wear.protolayout.expression.VersionBuilders.VersionInfo);
-    method public int getMajor();
-    method public int getMinor();
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final androidx.wear.protolayout.expression.VersionBuilders.VersionInfo CURRENT;
-  }
-
-  public static final class VersionBuilders.VersionInfo.Builder {
-    ctor public VersionBuilders.VersionInfo.Builder();
-    method public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo.Builder setMajor(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo.Builder setMinor(int);
-  }
-
-}
-
-package androidx.wear.protolayout.expression.util {
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public final class DynamicDateFormat {
-    ctor public DynamicDateFormat(String pattern);
-    ctor public DynamicDateFormat(String pattern, optional java.time.ZoneId timeZone);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicInstant instant);
-    method public java.time.ZoneId getTimeZone();
-    method public void setTimeZone(java.time.ZoneId);
-    property public java.time.ZoneId timeZone;
-  }
-
-  public final class DynamicFormatter {
-    ctor public DynamicFormatter();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString format(String format, java.lang.Object?... args);
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformEventSources.kt b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformEventSources.kt
index f0133e4..8a565f1 100644
--- a/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformEventSources.kt
+++ b/wear/protolayout/protolayout-expression/src/main/java/androidx/wear/protolayout/expression/PlatformEventSources.kt
@@ -21,29 +21,17 @@
 /** Dynamic types for platform events */
 public object PlatformEventSources {
 
-    /** A [DynamicBool] which receives the current visibility status from platform. */
-    @RequiresSchemaVersion(major = 1, minor = 500)
-    private val isLayoutVisible: DynamicBool = DynamicBool.from(Keys.LAYOUT_VISIBILITY)
-
     /**
-     * A [DynamicBool] which receives the current state of any pending updates for the current
-     * layout.
-     */
-    @ProtoLayoutExperimental
-    @RequiresSchemaVersion(major = 1, minor = 600)
-    private val isLayoutUpdatePending: DynamicBool = DynamicBool.from(Keys.LAYOUT_UPDATE_PENDING)
-
-    /**
-     * Returns a [DynamicBool] which receives the current visibility status from platform.
+     * Creates a [DynamicBool] which receives the current visibility status from platform.
      *
      * The visibility status value is `true` when layout is visible, and `false` when invisible.
      */
     @JvmStatic
     @RequiresSchemaVersion(major = 1, minor = 500)
-    public fun isLayoutVisible(): DynamicBool = isLayoutVisible
+    public fun isLayoutVisible(): DynamicBool = DynamicBool.from(Keys.LAYOUT_VISIBILITY)
 
     /**
-     * Returns a [DynamicBool] which receives the current state of any pending updates for the
+     * Creates a [DynamicBool] which receives the current state of any pending updates for the
      * current layout.
      *
      * The layout update pending status is `true` from when a new layout is requested until it is
@@ -52,7 +40,7 @@
     @JvmStatic
     @ProtoLayoutExperimental
     @RequiresSchemaVersion(major = 1, minor = 600)
-    public fun isLayoutUpdatePending(): DynamicBool = isLayoutUpdatePending
+    public fun isLayoutUpdatePending(): DynamicBool = DynamicBool.from(Keys.LAYOUT_UPDATE_PENDING)
 
     /** Data sources keys for platform event. */
     public object Keys {
diff --git a/wear/protolayout/protolayout-external-protobuf/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-external-protobuf/api/1.3.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/wear/protolayout/protolayout-external-protobuf/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/wear/protolayout/protolayout-external-protobuf/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-external-protobuf/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/wear/protolayout/protolayout-external-protobuf/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/wear/protolayout/protolayout-material-core/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-material-core/api/1.3.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/wear/protolayout/protolayout-material-core/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/wear/protolayout/protolayout-material-core/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout-material-core/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout-material-core/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout-material-core/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-material-core/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/wear/protolayout/protolayout-material-core/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/wear/protolayout/protolayout-material/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-material/api/1.3.0-beta01.txt
deleted file mode 100644
index c51a973..0000000
--- a/wear/protolayout/protolayout-material/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1,337 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.material {
-
-  public class Button implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.Button? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ButtonColors getButtonColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method public String? getIconContent();
-    method public String? getImageContent();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getSize();
-    method public String? getTextContent();
-  }
-
-  public static final class Button.Builder {
-    ctor public Button.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable);
-    method public androidx.wear.protolayout.material.Button build();
-    method public androidx.wear.protolayout.material.Button.Builder setButtonColors(androidx.wear.protolayout.material.ButtonColors);
-    method public androidx.wear.protolayout.material.Button.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.Button.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.Button.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.Button.Builder setImageContent(String);
-    method public androidx.wear.protolayout.material.Button.Builder setSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.material.Button.Builder setTextContent(String);
-    method public androidx.wear.protolayout.material.Button.Builder setTextContent(String, int);
-  }
-
-  public class ButtonColors {
-    ctor public ButtonColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ButtonColors(@ColorInt int, @ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
-    method public static androidx.wear.protolayout.material.ButtonColors primaryButtonColors(androidx.wear.protolayout.material.Colors);
-    method public static androidx.wear.protolayout.material.ButtonColors secondaryButtonColors(androidx.wear.protolayout.material.Colors);
-  }
-
-  public class ButtonDefaults {
-    method public static androidx.wear.protolayout.DimensionBuilders.DpProp recommendedIconSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public static androidx.wear.protolayout.DimensionBuilders.DpProp recommendedIconSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_SIZE;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp EXTRA_LARGE_SIZE;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp LARGE_SIZE;
-    field public static final androidx.wear.protolayout.material.ButtonColors PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ButtonColors SECONDARY_COLORS;
-  }
-
-  public class Chip implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.Chip? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ChipColors getChipColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getHeight();
-    method public int getHorizontalAlignment();
-    method public String? getIconContent();
-    method public String? getPrimaryLabelContent();
-    method public String? getSecondaryLabelContent();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  public static final class Chip.Builder {
-    ctor public Chip.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.Chip build();
-    method public androidx.wear.protolayout.material.Chip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
-    method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.Chip.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.Chip.Builder setHorizontalAlignment(int);
-    method public androidx.wear.protolayout.material.Chip.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.Chip.Builder setPrimaryLabelContent(String);
-    method public androidx.wear.protolayout.material.Chip.Builder setSecondaryLabelContent(String);
-    method public androidx.wear.protolayout.material.Chip.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method public androidx.wear.protolayout.material.Chip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class ChipColors {
-    ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ChipColors(@ColorInt int, @ColorInt int);
-    ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getIconColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getSecondaryContentColor();
-    method public static androidx.wear.protolayout.material.ChipColors primaryChipColors(androidx.wear.protolayout.material.Colors);
-    method public static androidx.wear.protolayout.material.ChipColors secondaryChipColors(androidx.wear.protolayout.material.Colors);
-  }
-
-  public class ChipDefaults {
-    field public static final androidx.wear.protolayout.material.ChipColors COMPACT_PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors COMPACT_SECONDARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors SECONDARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors TITLE_PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors TITLE_SECONDARY_COLORS;
-  }
-
-  public class CircularProgressIndicator implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.CircularProgressIndicator? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ProgressIndicatorColors getCircularProgressIndicatorColors();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getEndAngle();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getProgress();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getStartAngle();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getStrokeWidth();
-    method public boolean isOuterMarginApplied();
-  }
-
-  public static final class CircularProgressIndicator.Builder {
-    ctor public CircularProgressIndicator.Builder();
-    method public androidx.wear.protolayout.material.CircularProgressIndicator build();
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.protolayout.material.ProgressIndicatorColors);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setOuterMarginApplied(boolean);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStrokeWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class Colors {
-    ctor public Colors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method @ColorInt public int getOnPrimary();
-    method @ColorInt public int getOnSurface();
-    method @ColorInt public int getPrimary();
-    method @ColorInt public int getSurface();
-    field public static final androidx.wear.protolayout.material.Colors DEFAULT;
-  }
-
-  public class CompactChip implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.CompactChip? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ChipColors getChipColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public String? getIconContent();
-    method public String getText();
-    method public boolean hasText();
-  }
-
-  public static final class CompactChip.Builder {
-    ctor public CompactChip.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    ctor public CompactChip.Builder(android.content.Context, String, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.CompactChip build();
-    method public androidx.wear.protolayout.material.CompactChip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setTextContent(String);
-  }
-
-  public class ProgressIndicatorColors {
-    ctor public ProgressIndicatorColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ProgressIndicatorColors(@ColorInt int, @ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getIndicatorColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getTrackColor();
-    method public static androidx.wear.protolayout.material.ProgressIndicatorColors progressIndicatorColors(androidx.wear.protolayout.material.Colors);
-  }
-
-  public class ProgressIndicatorDefaults {
-    field public static final androidx.wear.protolayout.material.ProgressIndicatorColors DEFAULT_COLORS;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH;
-    field public static final float GAP_END_ANGLE = 156.1f;
-    field public static final float GAP_START_ANGLE = -156.1f;
-  }
-
-  public class Text implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.Text? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getColor();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle getFontStyle();
-    method public float getLineHeight();
-    method public int getMaxLines();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers getModifiers();
-    method public int getMultilineAlignment();
-    method public int getOverflow();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp getText();
-    method public int getWeight();
-    method public boolean isItalic();
-    method public boolean isUnderline();
-  }
-
-  public static final class Text.Builder {
-    ctor public Text.Builder(android.content.Context, androidx.wear.protolayout.TypeBuilders.StringProp, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
-    ctor public Text.Builder(android.content.Context, String);
-    method public androidx.wear.protolayout.material.Text build();
-    method public androidx.wear.protolayout.material.Text.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method public androidx.wear.protolayout.material.Text.Builder setItalic(boolean);
-    method public androidx.wear.protolayout.material.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method public androidx.wear.protolayout.material.Text.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method public androidx.wear.protolayout.material.Text.Builder setMultilineAlignment(int);
-    method public androidx.wear.protolayout.material.Text.Builder setOverflow(int);
-    method public androidx.wear.protolayout.material.Text.Builder setScalable(boolean);
-    method public androidx.wear.protolayout.material.Text.Builder setTypography(int);
-    method public androidx.wear.protolayout.material.Text.Builder setUnderline(boolean);
-    method public androidx.wear.protolayout.material.Text.Builder setWeight(int);
-  }
-
-  public class TitleChip implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.TitleChip? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ChipColors getChipColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public int getHorizontalAlignment();
-    method public String? getIconContent();
-    method public String getText();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  public static final class TitleChip.Builder {
-    ctor public TitleChip.Builder(android.content.Context, String, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.TitleChip build();
-    method public androidx.wear.protolayout.material.TitleChip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setHorizontalAlignment(int);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class Typography {
-    field public static final int TYPOGRAPHY_BODY1 = 7; // 0x7
-    field public static final int TYPOGRAPHY_BODY2 = 8; // 0x8
-    field public static final int TYPOGRAPHY_BUTTON = 9; // 0x9
-    field public static final int TYPOGRAPHY_CAPTION1 = 10; // 0xa
-    field public static final int TYPOGRAPHY_CAPTION2 = 11; // 0xb
-    field public static final int TYPOGRAPHY_CAPTION3 = 12; // 0xc
-    field public static final int TYPOGRAPHY_DISPLAY1 = 1; // 0x1
-    field public static final int TYPOGRAPHY_DISPLAY2 = 2; // 0x2
-    field public static final int TYPOGRAPHY_DISPLAY3 = 3; // 0x3
-    field public static final int TYPOGRAPHY_TITLE1 = 4; // 0x4
-    field public static final int TYPOGRAPHY_TITLE2 = 5; // 0x5
-    field public static final int TYPOGRAPHY_TITLE3 = 6; // 0x6
-  }
-
-}
-
-package androidx.wear.protolayout.material.layouts {
-
-  public class EdgeContentLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.EdgeContentLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getContent();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getContentAndSecondaryLabelSpacing();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getEdgeContent();
-    method public float getEdgeContentThickness();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-    method public boolean isEdgeContentBehindAllOtherContent();
-    method public boolean isResponsiveContentInsetEnabled();
-  }
-
-  public static final class EdgeContentLayout.Builder {
-    ctor public EdgeContentLayout.Builder(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout build();
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setContentAndSecondaryLabelSpacing(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setEdgeContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setEdgeContentBehindAllOtherContent(boolean);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setEdgeContentThickness(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setPrimaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setResponsiveContentInsetEnabled(boolean);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setSecondaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-  }
-
-  public class LayoutDefaults {
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_LARGE_VERTICAL_SPACER_HEIGHT;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
-    field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
-    field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
-    field @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
-  }
-
-  public static final class LayoutDefaults.MultiButtonLayoutDefaults {
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_1_BUTTON;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_2_BUTTONS;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_3_PLUS_BUTTONS;
-    field public static final int MAX_BUTTONS = 7; // 0x7
-  }
-
-  public class MultiButtonLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getButtonContents();
-    method public int getFiveButtonDistribution();
-    field public static final int FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY = 2; // 0x2
-    field public static final int FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY = 1; // 0x1
-  }
-
-  public static final class MultiButtonLayout.Builder {
-    ctor public MultiButtonLayout.Builder();
-    method public androidx.wear.protolayout.material.layouts.MultiButtonLayout.Builder addButtonContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.MultiButtonLayout build();
-    method public androidx.wear.protolayout.material.layouts.MultiButtonLayout.Builder setFiveButtonDistribution(int);
-  }
-
-  public class MultiSlotLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.MultiSlotLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getHorizontalSpacerWidth();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getSlotContents();
-  }
-
-  public static final class MultiSlotLayout.Builder {
-    ctor public MultiSlotLayout.Builder();
-    method public androidx.wear.protolayout.material.layouts.MultiSlotLayout.Builder addSlotContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.MultiSlotLayout build();
-    method public androidx.wear.protolayout.material.layouts.MultiSlotLayout.Builder setHorizontalSpacerWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class PrimaryLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.PrimaryLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getPrimaryChipContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getVerticalSpacerHeight();
-    method public boolean isResponsiveContentInsetEnabled();
-  }
-
-  public static final class PrimaryLayout.Builder {
-    ctor public PrimaryLayout.Builder(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout build();
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setPrimaryChipContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setPrimaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setResponsiveContentInsetEnabled(boolean);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setSecondaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setVerticalSpacerHeight(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-material/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout-material/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout-material/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout-material/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-material/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index c51a973..0000000
--- a/wear/protolayout/protolayout-material/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1,337 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.material {
-
-  public class Button implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.Button? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ButtonColors getButtonColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method public String? getIconContent();
-    method public String? getImageContent();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getSize();
-    method public String? getTextContent();
-  }
-
-  public static final class Button.Builder {
-    ctor public Button.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable);
-    method public androidx.wear.protolayout.material.Button build();
-    method public androidx.wear.protolayout.material.Button.Builder setButtonColors(androidx.wear.protolayout.material.ButtonColors);
-    method public androidx.wear.protolayout.material.Button.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.Button.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.Button.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.Button.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.Button.Builder setIconContent(String, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.Button.Builder setImageContent(String);
-    method public androidx.wear.protolayout.material.Button.Builder setSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.material.Button.Builder setTextContent(String);
-    method public androidx.wear.protolayout.material.Button.Builder setTextContent(String, int);
-  }
-
-  public class ButtonColors {
-    ctor public ButtonColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ButtonColors(@ColorInt int, @ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
-    method public static androidx.wear.protolayout.material.ButtonColors primaryButtonColors(androidx.wear.protolayout.material.Colors);
-    method public static androidx.wear.protolayout.material.ButtonColors secondaryButtonColors(androidx.wear.protolayout.material.Colors);
-  }
-
-  public class ButtonDefaults {
-    method public static androidx.wear.protolayout.DimensionBuilders.DpProp recommendedIconSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public static androidx.wear.protolayout.DimensionBuilders.DpProp recommendedIconSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_SIZE;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp EXTRA_LARGE_SIZE;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp LARGE_SIZE;
-    field public static final androidx.wear.protolayout.material.ButtonColors PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ButtonColors SECONDARY_COLORS;
-  }
-
-  public class Chip implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.Chip? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ChipColors getChipColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getHeight();
-    method public int getHorizontalAlignment();
-    method public String? getIconContent();
-    method public String? getPrimaryLabelContent();
-    method public String? getSecondaryLabelContent();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  public static final class Chip.Builder {
-    ctor public Chip.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.Chip build();
-    method public androidx.wear.protolayout.material.Chip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
-    method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.Chip.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.Chip.Builder setCustomContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.Chip.Builder setHorizontalAlignment(int);
-    method public androidx.wear.protolayout.material.Chip.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.Chip.Builder setPrimaryLabelContent(String);
-    method public androidx.wear.protolayout.material.Chip.Builder setSecondaryLabelContent(String);
-    method public androidx.wear.protolayout.material.Chip.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method public androidx.wear.protolayout.material.Chip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class ChipColors {
-    ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ChipColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ChipColors(@ColorInt int, @ColorInt int);
-    ctor public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getBackgroundColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getContentColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getIconColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getSecondaryContentColor();
-    method public static androidx.wear.protolayout.material.ChipColors primaryChipColors(androidx.wear.protolayout.material.Colors);
-    method public static androidx.wear.protolayout.material.ChipColors secondaryChipColors(androidx.wear.protolayout.material.Colors);
-  }
-
-  public class ChipDefaults {
-    field public static final androidx.wear.protolayout.material.ChipColors COMPACT_PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors COMPACT_SECONDARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors SECONDARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors TITLE_PRIMARY_COLORS;
-    field public static final androidx.wear.protolayout.material.ChipColors TITLE_SECONDARY_COLORS;
-  }
-
-  public class CircularProgressIndicator implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.CircularProgressIndicator? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ProgressIndicatorColors getCircularProgressIndicatorColors();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getEndAngle();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getProgress();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getStartAngle();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getStrokeWidth();
-    method public boolean isOuterMarginApplied();
-  }
-
-  public static final class CircularProgressIndicator.Builder {
-    ctor public CircularProgressIndicator.Builder();
-    method public androidx.wear.protolayout.material.CircularProgressIndicator build();
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.protolayout.material.ProgressIndicatorColors);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setEndAngle(float);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setOuterMarginApplied(boolean);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStartAngle(float);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.CircularProgressIndicator.Builder setStrokeWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class Colors {
-    ctor public Colors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method @ColorInt public int getOnPrimary();
-    method @ColorInt public int getOnSurface();
-    method @ColorInt public int getPrimary();
-    method @ColorInt public int getSurface();
-    field public static final androidx.wear.protolayout.material.Colors DEFAULT;
-  }
-
-  public class CompactChip implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.CompactChip? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ChipColors getChipColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public String? getIconContent();
-    method public String getText();
-    method public boolean hasText();
-  }
-
-  public static final class CompactChip.Builder {
-    ctor public CompactChip.Builder(android.content.Context, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    ctor public CompactChip.Builder(android.content.Context, String, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.CompactChip build();
-    method public androidx.wear.protolayout.material.CompactChip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.CompactChip.Builder setTextContent(String);
-  }
-
-  public class ProgressIndicatorColors {
-    ctor public ProgressIndicatorColors(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.ColorBuilders.ColorProp);
-    ctor public ProgressIndicatorColors(@ColorInt int, @ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getIndicatorColor();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getTrackColor();
-    method public static androidx.wear.protolayout.material.ProgressIndicatorColors progressIndicatorColors(androidx.wear.protolayout.material.Colors);
-  }
-
-  public class ProgressIndicatorDefaults {
-    field public static final androidx.wear.protolayout.material.ProgressIndicatorColors DEFAULT_COLORS;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH;
-    field public static final float GAP_END_ANGLE = 156.1f;
-    field public static final float GAP_START_ANGLE = -156.1f;
-  }
-
-  public class Text implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.Text? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getColor();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle getFontStyle();
-    method public float getLineHeight();
-    method public int getMaxLines();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers getModifiers();
-    method public int getMultilineAlignment();
-    method public int getOverflow();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp getText();
-    method public int getWeight();
-    method public boolean isItalic();
-    method public boolean isUnderline();
-  }
-
-  public static final class Text.Builder {
-    ctor public Text.Builder(android.content.Context, androidx.wear.protolayout.TypeBuilders.StringProp, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
-    ctor public Text.Builder(android.content.Context, String);
-    method public androidx.wear.protolayout.material.Text build();
-    method public androidx.wear.protolayout.material.Text.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method public androidx.wear.protolayout.material.Text.Builder setItalic(boolean);
-    method public androidx.wear.protolayout.material.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method public androidx.wear.protolayout.material.Text.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method public androidx.wear.protolayout.material.Text.Builder setMultilineAlignment(int);
-    method public androidx.wear.protolayout.material.Text.Builder setOverflow(int);
-    method public androidx.wear.protolayout.material.Text.Builder setScalable(boolean);
-    method public androidx.wear.protolayout.material.Text.Builder setTypography(int);
-    method public androidx.wear.protolayout.material.Text.Builder setUnderline(boolean);
-    method public androidx.wear.protolayout.material.Text.Builder setWeight(int);
-  }
-
-  public class TitleChip implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.TitleChip? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.ChipColors getChipColors();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public int getHorizontalAlignment();
-    method public String? getIconContent();
-    method public String getText();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  public static final class TitleChip.Builder {
-    ctor public TitleChip.Builder(android.content.Context, String, androidx.wear.protolayout.ModifiersBuilders.Clickable, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.TitleChip build();
-    method public androidx.wear.protolayout.material.TitleChip.Builder setChipColors(androidx.wear.protolayout.material.ChipColors);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setContentDescription(CharSequence);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setHorizontalAlignment(int);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setIconContent(String);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method public androidx.wear.protolayout.material.TitleChip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class Typography {
-    field public static final int TYPOGRAPHY_BODY1 = 7; // 0x7
-    field public static final int TYPOGRAPHY_BODY2 = 8; // 0x8
-    field public static final int TYPOGRAPHY_BUTTON = 9; // 0x9
-    field public static final int TYPOGRAPHY_CAPTION1 = 10; // 0xa
-    field public static final int TYPOGRAPHY_CAPTION2 = 11; // 0xb
-    field public static final int TYPOGRAPHY_CAPTION3 = 12; // 0xc
-    field public static final int TYPOGRAPHY_DISPLAY1 = 1; // 0x1
-    field public static final int TYPOGRAPHY_DISPLAY2 = 2; // 0x2
-    field public static final int TYPOGRAPHY_DISPLAY3 = 3; // 0x3
-    field public static final int TYPOGRAPHY_TITLE1 = 4; // 0x4
-    field public static final int TYPOGRAPHY_TITLE2 = 5; // 0x5
-    field public static final int TYPOGRAPHY_TITLE3 = 6; // 0x6
-  }
-
-}
-
-package androidx.wear.protolayout.material.layouts {
-
-  public class EdgeContentLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.EdgeContentLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getContent();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getContentAndSecondaryLabelSpacing();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getEdgeContent();
-    method public float getEdgeContentThickness();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-    method public boolean isEdgeContentBehindAllOtherContent();
-    method public boolean isResponsiveContentInsetEnabled();
-  }
-
-  public static final class EdgeContentLayout.Builder {
-    ctor public EdgeContentLayout.Builder(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout build();
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setContentAndSecondaryLabelSpacing(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setEdgeContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setEdgeContentBehindAllOtherContent(boolean);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setEdgeContentThickness(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setPrimaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setResponsiveContentInsetEnabled(boolean);
-    method public androidx.wear.protolayout.material.layouts.EdgeContentLayout.Builder setSecondaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-  }
-
-  public class LayoutDefaults {
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_LARGE_VERTICAL_SPACER_HEIGHT;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
-    field public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
-    field public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
-    field @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
-  }
-
-  public static final class LayoutDefaults.MultiButtonLayoutDefaults {
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_1_BUTTON;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_2_BUTTONS;
-    field public static final androidx.wear.protolayout.DimensionBuilders.DpProp BUTTON_SIZE_FOR_3_PLUS_BUTTONS;
-    field public static final int MAX_BUTTONS = 7; // 0x7
-  }
-
-  public class MultiButtonLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getButtonContents();
-    method public int getFiveButtonDistribution();
-    field public static final int FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY = 2; // 0x2
-    field public static final int FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY = 1; // 0x1
-  }
-
-  public static final class MultiButtonLayout.Builder {
-    ctor public MultiButtonLayout.Builder();
-    method public androidx.wear.protolayout.material.layouts.MultiButtonLayout.Builder addButtonContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.MultiButtonLayout build();
-    method public androidx.wear.protolayout.material.layouts.MultiButtonLayout.Builder setFiveButtonDistribution(int);
-  }
-
-  public class MultiSlotLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.MultiSlotLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getHorizontalSpacerWidth();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getSlotContents();
-  }
-
-  public static final class MultiSlotLayout.Builder {
-    ctor public MultiSlotLayout.Builder();
-    method public androidx.wear.protolayout.material.layouts.MultiSlotLayout.Builder addSlotContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.MultiSlotLayout build();
-    method public androidx.wear.protolayout.material.layouts.MultiSlotLayout.Builder setHorizontalSpacerWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  public class PrimaryLayout implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public static androidx.wear.protolayout.material.layouts.PrimaryLayout? fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getPrimaryChipContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getVerticalSpacerHeight();
-    method public boolean isResponsiveContentInsetEnabled();
-  }
-
-  public static final class PrimaryLayout.Builder {
-    ctor public PrimaryLayout.Builder(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout build();
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setPrimaryChipContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setPrimaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setResponsiveContentInsetEnabled(boolean);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setSecondaryLabelTextContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.material.layouts.PrimaryLayout.Builder setVerticalSpacerHeight(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-material3/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-material3/api/1.3.0-beta01.txt
deleted file mode 100644
index 0f3c820..0000000
--- a/wear/protolayout/protolayout-material3/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1,408 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.material3 {
-
-  public final class AppCardStyle {
-    field public static final androidx.wear.protolayout.material3.AppCardStyle.Companion Companion;
-  }
-
-  public static final class AppCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.AppCardStyle defaultAppCardStyle();
-    method public androidx.wear.protolayout.material3.AppCardStyle largeAppCardStyle();
-    method public androidx.wear.protolayout.material3.AppCardStyle smallAppCardStyle();
-  }
-
-  public final class AvatarButtonStyle {
-    field public static final androidx.wear.protolayout.material3.AvatarButtonStyle.Companion Companion;
-  }
-
-  public static final class AvatarButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.AvatarButtonStyle defaultAvatarButtonStyle();
-    method public androidx.wear.protolayout.material3.AvatarButtonStyle largeAvatarButtonStyle();
-  }
-
-  public final class ButtonColors {
-    ctor public ButtonColors();
-    ctor public ButtonColors(optional androidx.wear.protolayout.types.LayoutColor containerColor, optional androidx.wear.protolayout.types.LayoutColor iconColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryLabelColor);
-    method public androidx.wear.protolayout.material3.ButtonColors copy(optional androidx.wear.protolayout.types.LayoutColor containerColor, optional androidx.wear.protolayout.types.LayoutColor iconColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryLabelColor);
-    method public androidx.wear.protolayout.types.LayoutColor getContainerColor();
-    method public androidx.wear.protolayout.types.LayoutColor getIconColor();
-    method public androidx.wear.protolayout.types.LayoutColor getLabelColor();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryLabelColor();
-    property public androidx.wear.protolayout.types.LayoutColor containerColor;
-    property public androidx.wear.protolayout.types.LayoutColor iconColor;
-    property public androidx.wear.protolayout.types.LayoutColor labelColor;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryLabelColor;
-  }
-
-  public final class ButtonDefaults {
-    method public androidx.wear.protolayout.material3.ButtonColors filledButtonColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ButtonColors filledTonalButtonColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ButtonColors filledVariantButtonColors(androidx.wear.protolayout.material3.MaterialScope);
-    field public static final androidx.wear.protolayout.material3.ButtonDefaults INSTANCE;
-  }
-
-  public final class ButtonGroupDefaults {
-    property public androidx.wear.protolayout.LayoutElementBuilders.Spacer DEFAULT_SPACER_BETWEEN_BUTTON_GROUPS;
-    property @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static float DEFAULT_SPACER_WIDTH_DP;
-    field public static final androidx.wear.protolayout.LayoutElementBuilders.Spacer DEFAULT_SPACER_BETWEEN_BUTTON_GROUPS;
-    field @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static final float DEFAULT_SPACER_WIDTH_DP = 4.0f;
-    field public static final androidx.wear.protolayout.material3.ButtonGroupDefaults INSTANCE;
-  }
-
-  public final class ButtonGroupKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement buttonGroup(androidx.wear.protolayout.material3.MaterialScope, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float spacing, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.ButtonGroupScope,kotlin.Unit> content);
-  }
-
-  @androidx.wear.protolayout.material3.MaterialScopeMarker public final class ButtonGroupScope {
-    method public void buttonGroupItem(kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> content);
-  }
-
-  public final class ButtonKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement avatarButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> avatarContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryLabelContent, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional androidx.wear.protolayout.material3.AvatarButtonStyle style, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement button(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryLabelContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? iconContent, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.ButtonStyle style, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement compactButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? labelContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? iconContent, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement iconButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> iconContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional androidx.wear.protolayout.material3.IconButtonStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement imageButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> backgroundContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement textButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional androidx.wear.protolayout.material3.TextButtonStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-  }
-
-  public final class ButtonStyle {
-    field public static final androidx.wear.protolayout.material3.ButtonStyle.Companion Companion;
-  }
-
-  public static final class ButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.ButtonStyle defaultButtonStyle();
-    method public androidx.wear.protolayout.material3.ButtonStyle largeButtonStyle();
-    method public androidx.wear.protolayout.material3.ButtonStyle smallButtonStyle();
-  }
-
-  public final class CardColors {
-    ctor public CardColors();
-    ctor public CardColors(optional androidx.wear.protolayout.types.LayoutColor backgroundColor, optional androidx.wear.protolayout.types.LayoutColor titleColor, optional androidx.wear.protolayout.types.LayoutColor contentColor, optional androidx.wear.protolayout.types.LayoutColor timeColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryIconColor, optional androidx.wear.protolayout.types.LayoutColor secondaryTextColor, optional androidx.wear.protolayout.material3.ProgressIndicatorColors? graphicProgressIndicatorColors, optional androidx.wear.protolayout.types.LayoutColor? graphicIconColor);
-    method public androidx.wear.protolayout.material3.CardColors copy(optional androidx.wear.protolayout.types.LayoutColor backgroundColor, optional androidx.wear.protolayout.types.LayoutColor titleColor, optional androidx.wear.protolayout.types.LayoutColor contentColor, optional androidx.wear.protolayout.types.LayoutColor timeColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryIconColor, optional androidx.wear.protolayout.types.LayoutColor secondaryTextColor, optional androidx.wear.protolayout.material3.ProgressIndicatorColors? graphicProgressIndicatorColors, optional androidx.wear.protolayout.types.LayoutColor? graphicIconColor);
-    method public androidx.wear.protolayout.types.LayoutColor getBackgroundColor();
-    method public androidx.wear.protolayout.types.LayoutColor getContentColor();
-    method public androidx.wear.protolayout.types.LayoutColor? getGraphicIconColor();
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors? getGraphicProgressIndicatorColors();
-    method public androidx.wear.protolayout.types.LayoutColor getLabelColor();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryIconColor();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryTextColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTimeColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTitleColor();
-    property public androidx.wear.protolayout.types.LayoutColor backgroundColor;
-    property public androidx.wear.protolayout.types.LayoutColor contentColor;
-    property public androidx.wear.protolayout.types.LayoutColor? graphicIconColor;
-    property public androidx.wear.protolayout.material3.ProgressIndicatorColors? graphicProgressIndicatorColors;
-    property public androidx.wear.protolayout.types.LayoutColor labelColor;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryIconColor;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryTextColor;
-    property public androidx.wear.protolayout.types.LayoutColor timeColor;
-    property public androidx.wear.protolayout.types.LayoutColor titleColor;
-  }
-
-  public final class CardDefaults {
-    method public androidx.wear.protolayout.material3.CardColors filledCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.CardColors filledTonalCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.CardColors filledVariantCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.CardColors imageBackgroundCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    field public static final androidx.wear.protolayout.material3.CardDefaults INSTANCE;
-  }
-
-  public final class CardKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement appCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? avatar, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? label, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? time, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.AppCardStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement card(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> content);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement graphicDataCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> graphic, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional androidx.wear.protolayout.material3.GraphicDataCardStyle style, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement iconDataCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryIcon, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.DataCardStyle style, optional int titleContentPlacement, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement textDataCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryText, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.DataCardStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement titleCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? time, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.TitleCardStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding, optional int horizontalAlignment);
-  }
-
-  public final class CircularProgressIndicatorDefaults {
-    method @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public float calculateRecommendedGapSize(@Dimension(unit=androidx.annotation.Dimension.Companion.DP) float strokeWidth);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors filledProgressIndicatorColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors filledTonalProgressIndicatorColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors filledVariantProgressIndicatorColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec getRecommendedAnimationSpec();
-    property @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static float LARGE_STROKE_WIDTH;
-    property @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static float SMALL_STROKE_WIDTH;
-    property public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec recommendedAnimationSpec;
-    field public static final androidx.wear.protolayout.material3.CircularProgressIndicatorDefaults INSTANCE;
-    field @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static final float LARGE_STROKE_WIDTH = 8.0f;
-    field @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static final float SMALL_STROKE_WIDTH = 4.0f;
-  }
-
-  public final class CircularProgressIndicatorKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Box circularProgressIndicator(androidx.wear.protolayout.material3.MaterialScope, optional float staticProgress, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicProgress, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional float startAngleDegrees, optional float endAngleDegrees, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float strokeWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float gapSize, optional androidx.wear.protolayout.material3.ProgressIndicatorColors colors, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension size);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Box segmentedCircularProgressIndicator(androidx.wear.protolayout.material3.MaterialScope, @IntRange(from=1L) int segmentCount, optional float staticProgress, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicProgress, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional float startAngleDegrees, optional float endAngleDegrees, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float strokeWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float gapSize, optional androidx.wear.protolayout.material3.ProgressIndicatorColors colors, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension size);
-  }
-
-  public final class ColorScheme {
-    ctor public ColorScheme();
-    ctor public ColorScheme(optional androidx.wear.protolayout.types.LayoutColor primary, optional androidx.wear.protolayout.types.LayoutColor primaryDim, optional androidx.wear.protolayout.types.LayoutColor primaryContainer, optional androidx.wear.protolayout.types.LayoutColor onPrimary, optional androidx.wear.protolayout.types.LayoutColor onPrimaryContainer, optional androidx.wear.protolayout.types.LayoutColor secondary, optional androidx.wear.protolayout.types.LayoutColor secondaryDim, optional androidx.wear.protolayout.types.LayoutColor secondaryContainer, optional androidx.wear.protolayout.types.LayoutColor onSecondary, optional androidx.wear.protolayout.types.LayoutColor onSecondaryContainer, optional androidx.wear.protolayout.types.LayoutColor tertiary, optional androidx.wear.protolayout.types.LayoutColor tertiaryDim, optional androidx.wear.protolayout.types.LayoutColor tertiaryContainer, optional androidx.wear.protolayout.types.LayoutColor onTertiary, optional androidx.wear.protolayout.types.LayoutColor onTertiaryContainer, optional androidx.wear.protolayout.types.LayoutColor surfaceContainerLow, optional androidx.wear.protolayout.types.LayoutColor surfaceContainer, optional androidx.wear.protolayout.types.LayoutColor surfaceContainerHigh, optional androidx.wear.protolayout.types.LayoutColor onSurface, optional androidx.wear.protolayout.types.LayoutColor onSurfaceVariant, optional androidx.wear.protolayout.types.LayoutColor outline, optional androidx.wear.protolayout.types.LayoutColor outlineVariant, optional androidx.wear.protolayout.types.LayoutColor background, optional androidx.wear.protolayout.types.LayoutColor onBackground, optional androidx.wear.protolayout.types.LayoutColor error, optional androidx.wear.protolayout.types.LayoutColor errorDim, optional androidx.wear.protolayout.types.LayoutColor errorContainer, optional androidx.wear.protolayout.types.LayoutColor onError, optional androidx.wear.protolayout.types.LayoutColor onErrorContainer);
-    method public androidx.wear.protolayout.types.LayoutColor getBackground();
-    method public androidx.wear.protolayout.types.LayoutColor getError();
-    method public androidx.wear.protolayout.types.LayoutColor getErrorContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getErrorDim();
-    method public androidx.wear.protolayout.types.LayoutColor getOnBackground();
-    method public androidx.wear.protolayout.types.LayoutColor getOnError();
-    method public androidx.wear.protolayout.types.LayoutColor getOnErrorContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOnPrimary();
-    method public androidx.wear.protolayout.types.LayoutColor getOnPrimaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSecondary();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSecondaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSurface();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSurfaceVariant();
-    method public androidx.wear.protolayout.types.LayoutColor getOnTertiary();
-    method public androidx.wear.protolayout.types.LayoutColor getOnTertiaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOutline();
-    method public androidx.wear.protolayout.types.LayoutColor getOutlineVariant();
-    method public androidx.wear.protolayout.types.LayoutColor getPrimary();
-    method public androidx.wear.protolayout.types.LayoutColor getPrimaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getPrimaryDim();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondary();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryDim();
-    method public androidx.wear.protolayout.types.LayoutColor getSurfaceContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getSurfaceContainerHigh();
-    method public androidx.wear.protolayout.types.LayoutColor getSurfaceContainerLow();
-    method public androidx.wear.protolayout.types.LayoutColor getTertiary();
-    method public androidx.wear.protolayout.types.LayoutColor getTertiaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getTertiaryDim();
-    property public androidx.wear.protolayout.types.LayoutColor background;
-    property public androidx.wear.protolayout.types.LayoutColor error;
-    property public androidx.wear.protolayout.types.LayoutColor errorContainer;
-    property public androidx.wear.protolayout.types.LayoutColor errorDim;
-    property public androidx.wear.protolayout.types.LayoutColor onBackground;
-    property public androidx.wear.protolayout.types.LayoutColor onError;
-    property public androidx.wear.protolayout.types.LayoutColor onErrorContainer;
-    property public androidx.wear.protolayout.types.LayoutColor onPrimary;
-    property public androidx.wear.protolayout.types.LayoutColor onPrimaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor onSecondary;
-    property public androidx.wear.protolayout.types.LayoutColor onSecondaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor onSurface;
-    property public androidx.wear.protolayout.types.LayoutColor onSurfaceVariant;
-    property public androidx.wear.protolayout.types.LayoutColor onTertiary;
-    property public androidx.wear.protolayout.types.LayoutColor onTertiaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor outline;
-    property public androidx.wear.protolayout.types.LayoutColor outlineVariant;
-    property public androidx.wear.protolayout.types.LayoutColor primary;
-    property public androidx.wear.protolayout.types.LayoutColor primaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor primaryDim;
-    property public androidx.wear.protolayout.types.LayoutColor secondary;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryDim;
-    property public androidx.wear.protolayout.types.LayoutColor surfaceContainer;
-    property public androidx.wear.protolayout.types.LayoutColor surfaceContainerHigh;
-    property public androidx.wear.protolayout.types.LayoutColor surfaceContainerLow;
-    property public androidx.wear.protolayout.types.LayoutColor tertiary;
-    property public androidx.wear.protolayout.types.LayoutColor tertiaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor tertiaryDim;
-  }
-
-  public final class DataCardStyle {
-    field public static final androidx.wear.protolayout.material3.DataCardStyle.Companion Companion;
-  }
-
-  public static final class DataCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.DataCardStyle defaultCompactDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle defaultDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle extraLargeDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle largeCompactDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle largeDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle smallCompactDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle smallDataCardStyle();
-  }
-
-  public final class DynamicColorSchemeKt {
-    method public static androidx.wear.protolayout.material3.ColorScheme dynamicColorScheme(android.content.Context context, optional androidx.wear.protolayout.material3.ColorScheme defaultColorScheme);
-    method public static boolean isDynamicColorSchemeEnabled(android.content.Context context);
-  }
-
-  public final class EdgeButtonKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement iconEdgeButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.material3.ButtonColors colors, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> iconContent);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement textEdgeButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.material3.ButtonColors colors, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent);
-  }
-
-  public final class GraphicDataCardDefaults {
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement constructGraphic(androidx.wear.protolayout.material3.MaterialScope, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,androidx.wear.protolayout.LayoutElementBuilders.Box> mainContent, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> iconContent, optional float iconSizeRatio);
-    field public static final androidx.wear.protolayout.material3.GraphicDataCardDefaults INSTANCE;
-  }
-
-  public final class GraphicDataCardStyle {
-    field public static final androidx.wear.protolayout.material3.GraphicDataCardStyle.Companion Companion;
-  }
-
-  public static final class GraphicDataCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.GraphicDataCardStyle defaultGraphicDataCardStyle();
-    method public androidx.wear.protolayout.material3.GraphicDataCardStyle largeGraphicDataCardStyle();
-  }
-
-  public final class IconButtonStyle {
-    field public static final androidx.wear.protolayout.material3.IconButtonStyle.Companion Companion;
-  }
-
-  public static final class IconButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.IconButtonStyle defaultIconButtonStyle();
-    method public androidx.wear.protolayout.material3.IconButtonStyle largeIconButtonStyle();
-  }
-
-  public final class IconKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement icon(androidx.wear.protolayout.material3.MaterialScope, String protoLayoutResourceId, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension width, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension height, optional androidx.wear.protolayout.types.LayoutColor tintColor);
-  }
-
-  public final class ImageKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement avatarImage(androidx.wear.protolayout.material3.MaterialScope, String protoLayoutResourceId, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension width, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension height, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional int contentScaleMode);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement backgroundImage(androidx.wear.protolayout.material3.MaterialScope, String protoLayoutResourceId, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension width, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension height, optional androidx.wear.protolayout.types.LayoutColor? overlayColor, optional int contentScaleMode);
-  }
-
-  @androidx.wear.protolayout.material3.MaterialScopeMarker public class MaterialScope {
-    method public final androidx.wear.protolayout.material3.ColorScheme getColorScheme();
-    method public final android.content.Context getContext();
-    method public final androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters getDeviceConfiguration();
-    method public final androidx.wear.protolayout.material3.Shapes getShapes();
-    property public final androidx.wear.protolayout.material3.ColorScheme colorScheme;
-    property public final android.content.Context context;
-    property public final androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters deviceConfiguration;
-    property public final androidx.wear.protolayout.material3.Shapes shapes;
-  }
-
-  public final class MaterialScopeKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement materialScope(android.content.Context context, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters deviceConfiguration, optional boolean allowDynamicTheme, optional androidx.wear.protolayout.material3.ColorScheme defaultColorScheme, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> layout);
-  }
-
-  @kotlin.DslMarker public @interface MaterialScopeMarker {
-  }
-
-  public final class PrimaryLayoutKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement primaryLayout(androidx.wear.protolayout.material3.MaterialScope, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> mainSlot, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? titleSlot, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? bottomSlot, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? labelForBottomSlot, optional androidx.wear.protolayout.ModifiersBuilders.Clickable? onClick, optional androidx.wear.protolayout.material3.PrimaryLayoutMargins margins);
-  }
-
-  public abstract class PrimaryLayoutMargins {
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins.Companion Companion;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins DEFAULT_PRIMARY_LAYOUT_MARGIN;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins MAX_PRIMARY_LAYOUT_MARGIN;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins MID_PRIMARY_LAYOUT_MARGIN;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins MIN_PRIMARY_LAYOUT_MARGIN;
-  }
-
-  public static final class PrimaryLayoutMargins.Companion {
-    method public androidx.wear.protolayout.material3.PrimaryLayoutMargins customizedPrimaryLayoutMargin(@FloatRange(from=0.0, to=1.0) float start, @FloatRange(from=0.0, to=1.0) float end);
-    method public androidx.wear.protolayout.material3.PrimaryLayoutMargins customizedPrimaryLayoutMargin(@FloatRange(from=0.0, to=1.0) float start, @FloatRange(from=0.0, to=1.0) float end, @FloatRange(from=0.0, to=1.0) float bottom);
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins DEFAULT_PRIMARY_LAYOUT_MARGIN;
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins MAX_PRIMARY_LAYOUT_MARGIN;
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins MID_PRIMARY_LAYOUT_MARGIN;
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins MIN_PRIMARY_LAYOUT_MARGIN;
-  }
-
-  public final class ProgressIndicatorColors {
-    ctor public ProgressIndicatorColors(androidx.wear.protolayout.types.LayoutColor indicatorColor, androidx.wear.protolayout.types.LayoutColor trackColor, optional androidx.wear.protolayout.types.LayoutColor trackOverflowColor);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors copy(optional androidx.wear.protolayout.types.LayoutColor indicatorColor, optional androidx.wear.protolayout.types.LayoutColor trackColor, optional androidx.wear.protolayout.types.LayoutColor trackOverflowColor);
-    method public androidx.wear.protolayout.types.LayoutColor getIndicatorColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTrackColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTrackOverflowColor();
-    property public androidx.wear.protolayout.types.LayoutColor indicatorColor;
-    property public androidx.wear.protolayout.types.LayoutColor trackColor;
-    property public androidx.wear.protolayout.types.LayoutColor trackOverflowColor;
-  }
-
-  public final class Shapes {
-    ctor public Shapes();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getExtraLarge();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getExtraSmall();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getFull();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getLarge();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getMedium();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getNone();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getSmall();
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner extraLarge;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner extraSmall;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner full;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner large;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner medium;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner none;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner small;
-  }
-
-  public final class TextButtonStyle {
-    field public static final androidx.wear.protolayout.material3.TextButtonStyle.Companion Companion;
-  }
-
-  public static final class TextButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.TextButtonStyle defaultTextButtonStyle();
-    method public androidx.wear.protolayout.material3.TextButtonStyle extraLargeTextButtonStyle();
-    method public androidx.wear.protolayout.material3.TextButtonStyle largeTextButtonStyle();
-    method public androidx.wear.protolayout.material3.TextButtonStyle smallTextButtonStyle();
-  }
-
-  public final class TextKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement text(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.types.LayoutString text, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional int typography, optional androidx.wear.protolayout.types.LayoutColor color, optional boolean italic, optional boolean underline, optional boolean scalable, optional int maxLines, optional int alignment, optional int overflow, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) java.util.List<? extends androidx.wear.protolayout.LayoutElementBuilders.FontSetting> settings);
-  }
-
-  public final class TitleCardDefaults {
-    field public static final androidx.wear.protolayout.material3.TitleCardDefaults INSTANCE;
-  }
-
-  public final class TitleCardStyle {
-    field public static final androidx.wear.protolayout.material3.TitleCardStyle.Companion Companion;
-  }
-
-  public static final class TitleCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.TitleCardStyle defaultTitleCardStyle();
-    method public androidx.wear.protolayout.material3.TitleCardStyle extraLargeTitleCardStyle();
-    method public androidx.wear.protolayout.material3.TitleCardStyle largeTitleCardStyle();
-    method public androidx.wear.protolayout.material3.TitleCardStyle smallTitleCardStyle();
-  }
-
-  @kotlin.jvm.JvmInline public final value class TitleContentPlacementInDataCard {
-    field public static final androidx.wear.protolayout.material3.TitleContentPlacementInDataCard.Companion Companion;
-  }
-
-  public static final class TitleContentPlacementInDataCard.Companion {
-    method public int getBottom();
-    method public int getTop();
-    property public int Bottom;
-    property public int Top;
-  }
-
-  public final class Typography {
-    property public static int BODY_EXTRA_SMALL;
-    property public static int BODY_LARGE;
-    property public static int BODY_MEDIUM;
-    property public static int BODY_SMALL;
-    property public static int DISPLAY_LARGE;
-    property public static int DISPLAY_MEDIUM;
-    property public static int DISPLAY_SMALL;
-    property public static int LABEL_LARGE;
-    property public static int LABEL_MEDIUM;
-    property public static int LABEL_SMALL;
-    property public static int NUMERAL_EXTRA_LARGE;
-    property public static int NUMERAL_EXTRA_SMALL;
-    property public static int NUMERAL_LARGE;
-    property public static int NUMERAL_MEDIUM;
-    property public static int NUMERAL_SMALL;
-    property public static int TITLE_LARGE;
-    property public static int TITLE_MEDIUM;
-    property public static int TITLE_SMALL;
-    field public static final int BODY_EXTRA_SMALL = 2; // 0x2
-    field public static final int BODY_LARGE = 3; // 0x3
-    field public static final int BODY_MEDIUM = 4; // 0x4
-    field public static final int BODY_SMALL = 5; // 0x5
-    field public static final int DISPLAY_LARGE = 6; // 0x6
-    field public static final int DISPLAY_MEDIUM = 7; // 0x7
-    field public static final int DISPLAY_SMALL = 8; // 0x8
-    field public static final androidx.wear.protolayout.material3.Typography INSTANCE;
-    field public static final int LABEL_LARGE = 9; // 0x9
-    field public static final int LABEL_MEDIUM = 10; // 0xa
-    field public static final int LABEL_SMALL = 11; // 0xb
-    field public static final int NUMERAL_EXTRA_LARGE = 12; // 0xc
-    field public static final int NUMERAL_EXTRA_SMALL = 13; // 0xd
-    field public static final int NUMERAL_LARGE = 14; // 0xe
-    field public static final int NUMERAL_MEDIUM = 15; // 0xf
-    field public static final int NUMERAL_SMALL = 16; // 0x10
-    field public static final int TITLE_LARGE = 17; // 0x11
-    field public static final int TITLE_MEDIUM = 18; // 0x12
-    field public static final int TITLE_SMALL = 19; // 0x13
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-material3/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout-material3/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout-material3/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout-material3/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-material3/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index 0f3c820..0000000
--- a/wear/protolayout/protolayout-material3/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1,408 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.material3 {
-
-  public final class AppCardStyle {
-    field public static final androidx.wear.protolayout.material3.AppCardStyle.Companion Companion;
-  }
-
-  public static final class AppCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.AppCardStyle defaultAppCardStyle();
-    method public androidx.wear.protolayout.material3.AppCardStyle largeAppCardStyle();
-    method public androidx.wear.protolayout.material3.AppCardStyle smallAppCardStyle();
-  }
-
-  public final class AvatarButtonStyle {
-    field public static final androidx.wear.protolayout.material3.AvatarButtonStyle.Companion Companion;
-  }
-
-  public static final class AvatarButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.AvatarButtonStyle defaultAvatarButtonStyle();
-    method public androidx.wear.protolayout.material3.AvatarButtonStyle largeAvatarButtonStyle();
-  }
-
-  public final class ButtonColors {
-    ctor public ButtonColors();
-    ctor public ButtonColors(optional androidx.wear.protolayout.types.LayoutColor containerColor, optional androidx.wear.protolayout.types.LayoutColor iconColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryLabelColor);
-    method public androidx.wear.protolayout.material3.ButtonColors copy(optional androidx.wear.protolayout.types.LayoutColor containerColor, optional androidx.wear.protolayout.types.LayoutColor iconColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryLabelColor);
-    method public androidx.wear.protolayout.types.LayoutColor getContainerColor();
-    method public androidx.wear.protolayout.types.LayoutColor getIconColor();
-    method public androidx.wear.protolayout.types.LayoutColor getLabelColor();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryLabelColor();
-    property public androidx.wear.protolayout.types.LayoutColor containerColor;
-    property public androidx.wear.protolayout.types.LayoutColor iconColor;
-    property public androidx.wear.protolayout.types.LayoutColor labelColor;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryLabelColor;
-  }
-
-  public final class ButtonDefaults {
-    method public androidx.wear.protolayout.material3.ButtonColors filledButtonColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ButtonColors filledTonalButtonColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ButtonColors filledVariantButtonColors(androidx.wear.protolayout.material3.MaterialScope);
-    field public static final androidx.wear.protolayout.material3.ButtonDefaults INSTANCE;
-  }
-
-  public final class ButtonGroupDefaults {
-    property public androidx.wear.protolayout.LayoutElementBuilders.Spacer DEFAULT_SPACER_BETWEEN_BUTTON_GROUPS;
-    property @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static float DEFAULT_SPACER_WIDTH_DP;
-    field public static final androidx.wear.protolayout.LayoutElementBuilders.Spacer DEFAULT_SPACER_BETWEEN_BUTTON_GROUPS;
-    field @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static final float DEFAULT_SPACER_WIDTH_DP = 4.0f;
-    field public static final androidx.wear.protolayout.material3.ButtonGroupDefaults INSTANCE;
-  }
-
-  public final class ButtonGroupKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement buttonGroup(androidx.wear.protolayout.material3.MaterialScope, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float spacing, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.ButtonGroupScope,kotlin.Unit> content);
-  }
-
-  @androidx.wear.protolayout.material3.MaterialScopeMarker public final class ButtonGroupScope {
-    method public void buttonGroupItem(kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> content);
-  }
-
-  public final class ButtonKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement avatarButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> avatarContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryLabelContent, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional androidx.wear.protolayout.material3.AvatarButtonStyle style, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement button(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryLabelContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? iconContent, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.ButtonStyle style, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement compactButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? labelContent, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? iconContent, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement iconButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> iconContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional androidx.wear.protolayout.material3.IconButtonStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement imageButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> backgroundContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement textButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.ButtonColors colors, optional androidx.wear.protolayout.material3.TextButtonStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-  }
-
-  public final class ButtonStyle {
-    field public static final androidx.wear.protolayout.material3.ButtonStyle.Companion Companion;
-  }
-
-  public static final class ButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.ButtonStyle defaultButtonStyle();
-    method public androidx.wear.protolayout.material3.ButtonStyle largeButtonStyle();
-    method public androidx.wear.protolayout.material3.ButtonStyle smallButtonStyle();
-  }
-
-  public final class CardColors {
-    ctor public CardColors();
-    ctor public CardColors(optional androidx.wear.protolayout.types.LayoutColor backgroundColor, optional androidx.wear.protolayout.types.LayoutColor titleColor, optional androidx.wear.protolayout.types.LayoutColor contentColor, optional androidx.wear.protolayout.types.LayoutColor timeColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryIconColor, optional androidx.wear.protolayout.types.LayoutColor secondaryTextColor, optional androidx.wear.protolayout.material3.ProgressIndicatorColors? graphicProgressIndicatorColors, optional androidx.wear.protolayout.types.LayoutColor? graphicIconColor);
-    method public androidx.wear.protolayout.material3.CardColors copy(optional androidx.wear.protolayout.types.LayoutColor backgroundColor, optional androidx.wear.protolayout.types.LayoutColor titleColor, optional androidx.wear.protolayout.types.LayoutColor contentColor, optional androidx.wear.protolayout.types.LayoutColor timeColor, optional androidx.wear.protolayout.types.LayoutColor labelColor, optional androidx.wear.protolayout.types.LayoutColor secondaryIconColor, optional androidx.wear.protolayout.types.LayoutColor secondaryTextColor, optional androidx.wear.protolayout.material3.ProgressIndicatorColors? graphicProgressIndicatorColors, optional androidx.wear.protolayout.types.LayoutColor? graphicIconColor);
-    method public androidx.wear.protolayout.types.LayoutColor getBackgroundColor();
-    method public androidx.wear.protolayout.types.LayoutColor getContentColor();
-    method public androidx.wear.protolayout.types.LayoutColor? getGraphicIconColor();
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors? getGraphicProgressIndicatorColors();
-    method public androidx.wear.protolayout.types.LayoutColor getLabelColor();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryIconColor();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryTextColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTimeColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTitleColor();
-    property public androidx.wear.protolayout.types.LayoutColor backgroundColor;
-    property public androidx.wear.protolayout.types.LayoutColor contentColor;
-    property public androidx.wear.protolayout.types.LayoutColor? graphicIconColor;
-    property public androidx.wear.protolayout.material3.ProgressIndicatorColors? graphicProgressIndicatorColors;
-    property public androidx.wear.protolayout.types.LayoutColor labelColor;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryIconColor;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryTextColor;
-    property public androidx.wear.protolayout.types.LayoutColor timeColor;
-    property public androidx.wear.protolayout.types.LayoutColor titleColor;
-  }
-
-  public final class CardDefaults {
-    method public androidx.wear.protolayout.material3.CardColors filledCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.CardColors filledTonalCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.CardColors filledVariantCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.CardColors imageBackgroundCardColors(androidx.wear.protolayout.material3.MaterialScope);
-    field public static final androidx.wear.protolayout.material3.CardDefaults INSTANCE;
-  }
-
-  public final class CardKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement appCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? avatar, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? label, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? time, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.AppCardStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement card(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> content);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement graphicDataCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> graphic, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional androidx.wear.protolayout.material3.GraphicDataCardStyle style, optional int horizontalAlignment, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement iconDataCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryIcon, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.DataCardStyle style, optional int titleContentPlacement, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement textDataCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? secondaryText, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension width, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.DataCardStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement titleCard(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> title, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? content, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? time, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension height, optional androidx.wear.protolayout.ModifiersBuilders.Corner shape, optional androidx.wear.protolayout.material3.CardColors colors, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? backgroundContent, optional androidx.wear.protolayout.material3.TitleCardStyle style, optional androidx.wear.protolayout.ModifiersBuilders.Padding contentPadding, optional int horizontalAlignment);
-  }
-
-  public final class CircularProgressIndicatorDefaults {
-    method @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public float calculateRecommendedGapSize(@Dimension(unit=androidx.annotation.Dimension.Companion.DP) float strokeWidth);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors filledProgressIndicatorColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors filledTonalProgressIndicatorColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors filledVariantProgressIndicatorColors(androidx.wear.protolayout.material3.MaterialScope);
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec getRecommendedAnimationSpec();
-    property @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static float LARGE_STROKE_WIDTH;
-    property @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static float SMALL_STROKE_WIDTH;
-    property public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec recommendedAnimationSpec;
-    field public static final androidx.wear.protolayout.material3.CircularProgressIndicatorDefaults INSTANCE;
-    field @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static final float LARGE_STROKE_WIDTH = 8.0f;
-    field @Dimension(unit=androidx.annotation.Dimension.Companion.DP) public static final float SMALL_STROKE_WIDTH = 4.0f;
-  }
-
-  public final class CircularProgressIndicatorKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Box circularProgressIndicator(androidx.wear.protolayout.material3.MaterialScope, optional float staticProgress, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicProgress, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional float startAngleDegrees, optional float endAngleDegrees, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float strokeWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float gapSize, optional androidx.wear.protolayout.material3.ProgressIndicatorColors colors, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension size);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Box segmentedCircularProgressIndicator(androidx.wear.protolayout.material3.MaterialScope, @IntRange(from=1L) int segmentCount, optional float staticProgress, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicProgress, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional float startAngleDegrees, optional float endAngleDegrees, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float strokeWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float gapSize, optional androidx.wear.protolayout.material3.ProgressIndicatorColors colors, optional androidx.wear.protolayout.DimensionBuilders.ContainerDimension size);
-  }
-
-  public final class ColorScheme {
-    ctor public ColorScheme();
-    ctor public ColorScheme(optional androidx.wear.protolayout.types.LayoutColor primary, optional androidx.wear.protolayout.types.LayoutColor primaryDim, optional androidx.wear.protolayout.types.LayoutColor primaryContainer, optional androidx.wear.protolayout.types.LayoutColor onPrimary, optional androidx.wear.protolayout.types.LayoutColor onPrimaryContainer, optional androidx.wear.protolayout.types.LayoutColor secondary, optional androidx.wear.protolayout.types.LayoutColor secondaryDim, optional androidx.wear.protolayout.types.LayoutColor secondaryContainer, optional androidx.wear.protolayout.types.LayoutColor onSecondary, optional androidx.wear.protolayout.types.LayoutColor onSecondaryContainer, optional androidx.wear.protolayout.types.LayoutColor tertiary, optional androidx.wear.protolayout.types.LayoutColor tertiaryDim, optional androidx.wear.protolayout.types.LayoutColor tertiaryContainer, optional androidx.wear.protolayout.types.LayoutColor onTertiary, optional androidx.wear.protolayout.types.LayoutColor onTertiaryContainer, optional androidx.wear.protolayout.types.LayoutColor surfaceContainerLow, optional androidx.wear.protolayout.types.LayoutColor surfaceContainer, optional androidx.wear.protolayout.types.LayoutColor surfaceContainerHigh, optional androidx.wear.protolayout.types.LayoutColor onSurface, optional androidx.wear.protolayout.types.LayoutColor onSurfaceVariant, optional androidx.wear.protolayout.types.LayoutColor outline, optional androidx.wear.protolayout.types.LayoutColor outlineVariant, optional androidx.wear.protolayout.types.LayoutColor background, optional androidx.wear.protolayout.types.LayoutColor onBackground, optional androidx.wear.protolayout.types.LayoutColor error, optional androidx.wear.protolayout.types.LayoutColor errorDim, optional androidx.wear.protolayout.types.LayoutColor errorContainer, optional androidx.wear.protolayout.types.LayoutColor onError, optional androidx.wear.protolayout.types.LayoutColor onErrorContainer);
-    method public androidx.wear.protolayout.types.LayoutColor getBackground();
-    method public androidx.wear.protolayout.types.LayoutColor getError();
-    method public androidx.wear.protolayout.types.LayoutColor getErrorContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getErrorDim();
-    method public androidx.wear.protolayout.types.LayoutColor getOnBackground();
-    method public androidx.wear.protolayout.types.LayoutColor getOnError();
-    method public androidx.wear.protolayout.types.LayoutColor getOnErrorContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOnPrimary();
-    method public androidx.wear.protolayout.types.LayoutColor getOnPrimaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSecondary();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSecondaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSurface();
-    method public androidx.wear.protolayout.types.LayoutColor getOnSurfaceVariant();
-    method public androidx.wear.protolayout.types.LayoutColor getOnTertiary();
-    method public androidx.wear.protolayout.types.LayoutColor getOnTertiaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getOutline();
-    method public androidx.wear.protolayout.types.LayoutColor getOutlineVariant();
-    method public androidx.wear.protolayout.types.LayoutColor getPrimary();
-    method public androidx.wear.protolayout.types.LayoutColor getPrimaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getPrimaryDim();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondary();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getSecondaryDim();
-    method public androidx.wear.protolayout.types.LayoutColor getSurfaceContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getSurfaceContainerHigh();
-    method public androidx.wear.protolayout.types.LayoutColor getSurfaceContainerLow();
-    method public androidx.wear.protolayout.types.LayoutColor getTertiary();
-    method public androidx.wear.protolayout.types.LayoutColor getTertiaryContainer();
-    method public androidx.wear.protolayout.types.LayoutColor getTertiaryDim();
-    property public androidx.wear.protolayout.types.LayoutColor background;
-    property public androidx.wear.protolayout.types.LayoutColor error;
-    property public androidx.wear.protolayout.types.LayoutColor errorContainer;
-    property public androidx.wear.protolayout.types.LayoutColor errorDim;
-    property public androidx.wear.protolayout.types.LayoutColor onBackground;
-    property public androidx.wear.protolayout.types.LayoutColor onError;
-    property public androidx.wear.protolayout.types.LayoutColor onErrorContainer;
-    property public androidx.wear.protolayout.types.LayoutColor onPrimary;
-    property public androidx.wear.protolayout.types.LayoutColor onPrimaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor onSecondary;
-    property public androidx.wear.protolayout.types.LayoutColor onSecondaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor onSurface;
-    property public androidx.wear.protolayout.types.LayoutColor onSurfaceVariant;
-    property public androidx.wear.protolayout.types.LayoutColor onTertiary;
-    property public androidx.wear.protolayout.types.LayoutColor onTertiaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor outline;
-    property public androidx.wear.protolayout.types.LayoutColor outlineVariant;
-    property public androidx.wear.protolayout.types.LayoutColor primary;
-    property public androidx.wear.protolayout.types.LayoutColor primaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor primaryDim;
-    property public androidx.wear.protolayout.types.LayoutColor secondary;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor secondaryDim;
-    property public androidx.wear.protolayout.types.LayoutColor surfaceContainer;
-    property public androidx.wear.protolayout.types.LayoutColor surfaceContainerHigh;
-    property public androidx.wear.protolayout.types.LayoutColor surfaceContainerLow;
-    property public androidx.wear.protolayout.types.LayoutColor tertiary;
-    property public androidx.wear.protolayout.types.LayoutColor tertiaryContainer;
-    property public androidx.wear.protolayout.types.LayoutColor tertiaryDim;
-  }
-
-  public final class DataCardStyle {
-    field public static final androidx.wear.protolayout.material3.DataCardStyle.Companion Companion;
-  }
-
-  public static final class DataCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.DataCardStyle defaultCompactDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle defaultDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle extraLargeDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle largeCompactDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle largeDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle smallCompactDataCardStyle();
-    method public androidx.wear.protolayout.material3.DataCardStyle smallDataCardStyle();
-  }
-
-  public final class DynamicColorSchemeKt {
-    method public static androidx.wear.protolayout.material3.ColorScheme dynamicColorScheme(android.content.Context context, optional androidx.wear.protolayout.material3.ColorScheme defaultColorScheme);
-    method public static boolean isDynamicColorSchemeEnabled(android.content.Context context);
-  }
-
-  public final class EdgeButtonKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement iconEdgeButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.material3.ButtonColors colors, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> iconContent);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement textEdgeButton(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.ModifiersBuilders.Clickable onClick, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.material3.ButtonColors colors, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> labelContent);
-  }
-
-  public final class GraphicDataCardDefaults {
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement constructGraphic(androidx.wear.protolayout.material3.MaterialScope, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,androidx.wear.protolayout.LayoutElementBuilders.Box> mainContent, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> iconContent, optional float iconSizeRatio);
-    field public static final androidx.wear.protolayout.material3.GraphicDataCardDefaults INSTANCE;
-  }
-
-  public final class GraphicDataCardStyle {
-    field public static final androidx.wear.protolayout.material3.GraphicDataCardStyle.Companion Companion;
-  }
-
-  public static final class GraphicDataCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.GraphicDataCardStyle defaultGraphicDataCardStyle();
-    method public androidx.wear.protolayout.material3.GraphicDataCardStyle largeGraphicDataCardStyle();
-  }
-
-  public final class IconButtonStyle {
-    field public static final androidx.wear.protolayout.material3.IconButtonStyle.Companion Companion;
-  }
-
-  public static final class IconButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.IconButtonStyle defaultIconButtonStyle();
-    method public androidx.wear.protolayout.material3.IconButtonStyle largeIconButtonStyle();
-  }
-
-  public final class IconKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement icon(androidx.wear.protolayout.material3.MaterialScope, String protoLayoutResourceId, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension width, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension height, optional androidx.wear.protolayout.types.LayoutColor tintColor);
-  }
-
-  public final class ImageKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement avatarImage(androidx.wear.protolayout.material3.MaterialScope, String protoLayoutResourceId, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension width, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension height, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional int contentScaleMode);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement backgroundImage(androidx.wear.protolayout.material3.MaterialScope, String protoLayoutResourceId, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension width, optional androidx.wear.protolayout.DimensionBuilders.ImageDimension height, optional androidx.wear.protolayout.types.LayoutColor? overlayColor, optional int contentScaleMode);
-  }
-
-  @androidx.wear.protolayout.material3.MaterialScopeMarker public class MaterialScope {
-    method public final androidx.wear.protolayout.material3.ColorScheme getColorScheme();
-    method public final android.content.Context getContext();
-    method public final androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters getDeviceConfiguration();
-    method public final androidx.wear.protolayout.material3.Shapes getShapes();
-    property public final androidx.wear.protolayout.material3.ColorScheme colorScheme;
-    property public final android.content.Context context;
-    property public final androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters deviceConfiguration;
-    property public final androidx.wear.protolayout.material3.Shapes shapes;
-  }
-
-  public final class MaterialScopeKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement materialScope(android.content.Context context, androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters deviceConfiguration, optional boolean allowDynamicTheme, optional androidx.wear.protolayout.material3.ColorScheme defaultColorScheme, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> layout);
-  }
-
-  @kotlin.DslMarker public @interface MaterialScopeMarker {
-  }
-
-  public final class PrimaryLayoutKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement primaryLayout(androidx.wear.protolayout.material3.MaterialScope, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement> mainSlot, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? titleSlot, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? bottomSlot, optional kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.material3.MaterialScope,? extends androidx.wear.protolayout.LayoutElementBuilders.LayoutElement>? labelForBottomSlot, optional androidx.wear.protolayout.ModifiersBuilders.Clickable? onClick, optional androidx.wear.protolayout.material3.PrimaryLayoutMargins margins);
-  }
-
-  public abstract class PrimaryLayoutMargins {
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins.Companion Companion;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins DEFAULT_PRIMARY_LAYOUT_MARGIN;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins MAX_PRIMARY_LAYOUT_MARGIN;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins MID_PRIMARY_LAYOUT_MARGIN;
-    field public static final androidx.wear.protolayout.material3.PrimaryLayoutMargins MIN_PRIMARY_LAYOUT_MARGIN;
-  }
-
-  public static final class PrimaryLayoutMargins.Companion {
-    method public androidx.wear.protolayout.material3.PrimaryLayoutMargins customizedPrimaryLayoutMargin(@FloatRange(from=0.0, to=1.0) float start, @FloatRange(from=0.0, to=1.0) float end);
-    method public androidx.wear.protolayout.material3.PrimaryLayoutMargins customizedPrimaryLayoutMargin(@FloatRange(from=0.0, to=1.0) float start, @FloatRange(from=0.0, to=1.0) float end, @FloatRange(from=0.0, to=1.0) float bottom);
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins DEFAULT_PRIMARY_LAYOUT_MARGIN;
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins MAX_PRIMARY_LAYOUT_MARGIN;
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins MID_PRIMARY_LAYOUT_MARGIN;
-    property public androidx.wear.protolayout.material3.PrimaryLayoutMargins MIN_PRIMARY_LAYOUT_MARGIN;
-  }
-
-  public final class ProgressIndicatorColors {
-    ctor public ProgressIndicatorColors(androidx.wear.protolayout.types.LayoutColor indicatorColor, androidx.wear.protolayout.types.LayoutColor trackColor, optional androidx.wear.protolayout.types.LayoutColor trackOverflowColor);
-    method public androidx.wear.protolayout.material3.ProgressIndicatorColors copy(optional androidx.wear.protolayout.types.LayoutColor indicatorColor, optional androidx.wear.protolayout.types.LayoutColor trackColor, optional androidx.wear.protolayout.types.LayoutColor trackOverflowColor);
-    method public androidx.wear.protolayout.types.LayoutColor getIndicatorColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTrackColor();
-    method public androidx.wear.protolayout.types.LayoutColor getTrackOverflowColor();
-    property public androidx.wear.protolayout.types.LayoutColor indicatorColor;
-    property public androidx.wear.protolayout.types.LayoutColor trackColor;
-    property public androidx.wear.protolayout.types.LayoutColor trackOverflowColor;
-  }
-
-  public final class Shapes {
-    ctor public Shapes();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getExtraLarge();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getExtraSmall();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getFull();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getLarge();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getMedium();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getNone();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner getSmall();
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner extraLarge;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner extraSmall;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner full;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner large;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner medium;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner none;
-    property public androidx.wear.protolayout.ModifiersBuilders.Corner small;
-  }
-
-  public final class TextButtonStyle {
-    field public static final androidx.wear.protolayout.material3.TextButtonStyle.Companion Companion;
-  }
-
-  public static final class TextButtonStyle.Companion {
-    method public androidx.wear.protolayout.material3.TextButtonStyle defaultTextButtonStyle();
-    method public androidx.wear.protolayout.material3.TextButtonStyle extraLargeTextButtonStyle();
-    method public androidx.wear.protolayout.material3.TextButtonStyle largeTextButtonStyle();
-    method public androidx.wear.protolayout.material3.TextButtonStyle smallTextButtonStyle();
-  }
-
-  public final class TextKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.LayoutElement text(androidx.wear.protolayout.material3.MaterialScope, androidx.wear.protolayout.types.LayoutString text, optional androidx.wear.protolayout.modifiers.LayoutModifier modifier, optional int typography, optional androidx.wear.protolayout.types.LayoutColor color, optional boolean italic, optional boolean underline, optional boolean scalable, optional int maxLines, optional int alignment, optional int overflow, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) java.util.List<? extends androidx.wear.protolayout.LayoutElementBuilders.FontSetting> settings);
-  }
-
-  public final class TitleCardDefaults {
-    field public static final androidx.wear.protolayout.material3.TitleCardDefaults INSTANCE;
-  }
-
-  public final class TitleCardStyle {
-    field public static final androidx.wear.protolayout.material3.TitleCardStyle.Companion Companion;
-  }
-
-  public static final class TitleCardStyle.Companion {
-    method public androidx.wear.protolayout.material3.TitleCardStyle defaultTitleCardStyle();
-    method public androidx.wear.protolayout.material3.TitleCardStyle extraLargeTitleCardStyle();
-    method public androidx.wear.protolayout.material3.TitleCardStyle largeTitleCardStyle();
-    method public androidx.wear.protolayout.material3.TitleCardStyle smallTitleCardStyle();
-  }
-
-  @kotlin.jvm.JvmInline public final value class TitleContentPlacementInDataCard {
-    field public static final androidx.wear.protolayout.material3.TitleContentPlacementInDataCard.Companion Companion;
-  }
-
-  public static final class TitleContentPlacementInDataCard.Companion {
-    method public int getBottom();
-    method public int getTop();
-    property public int Bottom;
-    property public int Top;
-  }
-
-  public final class Typography {
-    property public static int BODY_EXTRA_SMALL;
-    property public static int BODY_LARGE;
-    property public static int BODY_MEDIUM;
-    property public static int BODY_SMALL;
-    property public static int DISPLAY_LARGE;
-    property public static int DISPLAY_MEDIUM;
-    property public static int DISPLAY_SMALL;
-    property public static int LABEL_LARGE;
-    property public static int LABEL_MEDIUM;
-    property public static int LABEL_SMALL;
-    property public static int NUMERAL_EXTRA_LARGE;
-    property public static int NUMERAL_EXTRA_SMALL;
-    property public static int NUMERAL_LARGE;
-    property public static int NUMERAL_MEDIUM;
-    property public static int NUMERAL_SMALL;
-    property public static int TITLE_LARGE;
-    property public static int TITLE_MEDIUM;
-    property public static int TITLE_SMALL;
-    field public static final int BODY_EXTRA_SMALL = 2; // 0x2
-    field public static final int BODY_LARGE = 3; // 0x3
-    field public static final int BODY_MEDIUM = 4; // 0x4
-    field public static final int BODY_SMALL = 5; // 0x5
-    field public static final int DISPLAY_LARGE = 6; // 0x6
-    field public static final int DISPLAY_MEDIUM = 7; // 0x7
-    field public static final int DISPLAY_SMALL = 8; // 0x8
-    field public static final androidx.wear.protolayout.material3.Typography INSTANCE;
-    field public static final int LABEL_LARGE = 9; // 0x9
-    field public static final int LABEL_MEDIUM = 10; // 0xa
-    field public static final int LABEL_SMALL = 11; // 0xb
-    field public static final int NUMERAL_EXTRA_LARGE = 12; // 0xc
-    field public static final int NUMERAL_EXTRA_SMALL = 13; // 0xd
-    field public static final int NUMERAL_LARGE = 14; // 0xe
-    field public static final int NUMERAL_MEDIUM = 15; // 0xf
-    field public static final int NUMERAL_SMALL = 16; // 0x10
-    field public static final int TITLE_LARGE = 17; // 0x11
-    field public static final int TITLE_MEDIUM = 18; // 0x12
-    field public static final int TITLE_SMALL = 19; // 0x13
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-renderer/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-renderer/api/1.3.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/wear/protolayout/protolayout-renderer/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/wear/protolayout/protolayout-renderer/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout-renderer/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout-renderer/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout-renderer/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-renderer/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index 1997456..0000000
--- a/wear/protolayout/protolayout-renderer/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.renderer.common {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface LoggingUtils {
-    method public boolean canLogD(String);
-    method public void logD(String, String);
-    method @com.google.errorprone.annotations.FormatMethod public void logD(String, @com.google.errorprone.annotations.FormatString String, java.lang.Object!...);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class LoggingUtilsImpl implements androidx.wear.protolayout.renderer.common.LoggingUtils {
-    ctor public LoggingUtilsImpl(android.content.ComponentName);
-    method public boolean canLogD(String);
-    method public void logD(String, String);
-    method @com.google.errorprone.annotations.FormatMethod public void logD(String, @com.google.errorprone.annotations.FormatString String, java.lang.Object!...);
-  }
-
-}
-
-package androidx.wear.protolayout.renderer.impl {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ProtoLayoutViewInstance implements java.lang.AutoCloseable {
-    ctor public ProtoLayoutViewInstance(androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance.Config);
-    method public void close() throws java.lang.Exception;
-    method @UiThread public void detach(android.view.ViewGroup);
-    method public java.util.List<androidx.wear.protolayout.expression.pipeline.DynamicTypeAnimator!> getAnimations();
-    method public void invalidateCache();
-    method @UiThread public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> renderAndAttach(androidx.wear.protolayout.proto.LayoutElementProto.Layout, androidx.wear.protolayout.proto.ResourceProto.Resources, android.view.ViewGroup);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class ProtoLayoutViewInstance.Config {
-    method public com.google.common.util.concurrent.ListeningExecutorService getBgExecutorService();
-    method public String getClickableIdExtra();
-    method public androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance.LoadActionListener getLoadActionListener();
-    method public androidx.wear.protolayout.renderer.common.LoggingUtils? getLoggingUtils();
-    method public java.util.Map<androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!,java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!>!> getPlatformDataProviders();
-    method public androidx.wear.protolayout.expression.pipeline.StateStore? getStateStore();
-    method public android.content.Context getUiContext();
-    method public com.google.common.util.concurrent.ListeningExecutorService getUiExecutorService();
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class ProtoLayoutViewInstance.Config.Builder {
-    ctor public ProtoLayoutViewInstance.Config.Builder(android.content.Context, com.google.common.util.concurrent.ListeningExecutorService, com.google.common.util.concurrent.ListeningExecutorService, String);
-    method public androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance.Config.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!...);
-    method public androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance.Config build();
-    method public androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance.Config.Builder setLoadActionListener(androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance.LoadActionListener);
-    method public androidx.wear.protolayout.renderer.impl.ProtoLayoutViewInstance.Config.Builder setStateStore(androidx.wear.protolayout.expression.pipeline.StateStore);
-  }
-
-  public static interface ProtoLayoutViewInstance.LoadActionListener {
-    method public void onClick(androidx.wear.protolayout.proto.StateProto.State);
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-renderer/lint-baseline.xml b/wear/protolayout/protolayout-renderer/lint-baseline.xml
deleted file mode 100644
index 0862d5c..0000000
--- a/wear/protolayout/protolayout-renderer/lint-baseline.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.10.0-alpha07" type="baseline" client="gradle" dependencies="false" name="AGP (8.10.0-alpha07)" variant="all" version="8.10.0-alpha07">
-
-    <issue
-        id="WrongThread"
-        message="Constructor FrameLayout must be called from the UI thread, currently inferred thread is worker thread"
-        errorLine1="        inflateParent = new FrameLayout(uiContext);"
-        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
-    </issue>
-
-    <issue
-        id="WrongThread"
-        message="Method getChildCount must be called from the UI thread, currently inferred thread is worker thread"
-        errorLine1="        if (inflateParent.getChildCount() > 0) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
-    </issue>
-
-    <issue
-        id="WrongThread"
-        message="Method getChildAt must be called from the UI thread, currently inferred thread is worker thread"
-        errorLine1="            View firstChild = inflateParent.getChildAt(0);"
-        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
-    </issue>
-
-    <issue
-        id="WrongThread"
-        message="Method getLayoutParams must be called from the UI thread, currently inferred thread is worker thread"
-        errorLine1="                    (FrameLayout.LayoutParams) firstChild.getLayoutParams();"
-        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
-    </issue>
-
-    <issue
-        id="WrongThread"
-        message="Method setLayoutParams must be called from the UI thread, currently inferred thread is worker thread"
-        errorLine1="            firstChild.setLayoutParams(childLp);"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/protolayout/renderer/impl/ProtoLayoutViewInstance.java"/>
-    </issue>
-
-</issues>
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/BackgroundDrawable.kt b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/BackgroundDrawable.kt
index 7f94a56..8baa73e 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/BackgroundDrawable.kt
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/BackgroundDrawable.kt
@@ -34,13 +34,13 @@
 internal class BackgroundDrawable : GradientDrawable() {
     private val customPaint = Paint(Paint.ANTI_ALIAS_FLAG)
     private var isStrokeUsed = false
-    private var isAsymmetricalCornerUsed = false
+    private var cornerRadiiUsed = false
     private var fillColor: Int? = null
 
     var linearGradientHelper: LinearGradientHelper? = null
 
     override fun setCornerRadii(radii: FloatArray?) {
-        isAsymmetricalCornerUsed = true
+        cornerRadiiUsed = true
         super.setCornerRadii(radii)
     }
 
@@ -58,15 +58,14 @@
         val width = bounds.width()
         val height = bounds.height()
 
-        if (linearGradientHelper == null && (isStrokeUsed || isAsymmetricalCornerUsed)) {
+        val isCircle = width == height && cornerRadius >= width * 0.5f && !cornerRadiiUsed
+        if (linearGradientHelper == null && (isStrokeUsed || !isCircle)) {
             // If the shape is not a circle or stroke is used, then use the default implementation
             // of draw();
             super.draw(canvas)
             return
         }
 
-        // Shape of the drawable will be clipped by using outline on the caller site to prevent
-        // aliasing. See b/357061501.
         if (fillColor != null || linearGradientHelper != null) {
             customPaint.apply {
                 reset()
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/IgnorableSpace.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/IgnorableSpace.java
deleted file mode 100644
index 7349a7e..0000000
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/IgnorableSpace.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2025 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.wear.protolayout.renderer.inflater;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.view.View;
-
-import org.jspecify.annotations.NonNull;
-
-/**
- * Space is a lightweight View subclass that may be used to create gaps between components in
- * general purpose layouts.
- */
-public final class IgnorableSpace extends View {
-    /** {@inheritDoc} */
-    public IgnorableSpace(@NonNull Context context) {
-        super(context, /* attrs= */ null, /* defStyleAttr= */ 0, /* defStyleRes= */ 0);
-        if (getVisibility() == VISIBLE) {
-            setVisibility(INVISIBLE);
-        }
-    }
-
-    /**
-     * Draw nothing.
-     *
-     * @param canvas an unused parameter.
-     */
-    @SuppressWarnings("MissingSuperCall") // android.widget.Space doesn't call it
-    @Override
-    public void draw(@NonNull Canvas canvas) {}
-
-    /**
-     * Compare to: {@link View#getDefaultSize(int, int)} If mode is AT_MOST, return the child size
-     * instead of the parent size (unless it is too big).
-     */
-    private static int getDefaultSize2(int size, int measureSpec) {
-        int result = size;
-        int specMode = MeasureSpec.getMode(measureSpec);
-        int specSize = MeasureSpec.getSize(measureSpec);
-        switch (specMode) {
-            case MeasureSpec.UNSPECIFIED:
-                result = size;
-                break;
-            case MeasureSpec.AT_MOST:
-                result = Math.min(size, specSize);
-                break;
-            case MeasureSpec.EXACTLY:
-                result = specSize;
-                break;
-        }
-        return result;
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        setMeasuredDimension(
-                getDefaultSize2(getSuggestedMinimumWidth(), widthMeasureSpec),
-                getDefaultSize2(getSuggestedMinimumHeight(), heightMeasureSpec));
-    }
-}
diff --git a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
index 8af0824..440fd79 100644
--- a/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
+++ b/wear/protolayout/protolayout-renderer/src/main/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflater.java
@@ -44,7 +44,6 @@
 import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.graphics.Color;
-import android.graphics.Outline;
 import android.graphics.Paint.Cap;
 import android.graphics.PorterDuff.Mode;
 import android.graphics.Rect;
@@ -454,7 +453,7 @@
                 return false;
             }
             ViewGroup sourceGroup = (ViewGroup) source;
-            if (getEffectiveChildCount(sourceGroup) != mNumMissingChildren) {
+            if (sourceGroup.getChildCount() != mNumMissingChildren) {
                 Log.w(
                         TAG,
                         String.format(
@@ -482,20 +481,6 @@
             return true;
         }
 
-        /**
-         * Returns the number of children that the given {@link ViewGroup} has, ignoring the
-         * children that are {@link IgnorableSpace} type.
-         */
-        private static int getEffectiveChildCount(ViewGroup viewGroup) {
-            int nonIgnoredChildrenCnt = 0;
-            for (int i = 0; i < viewGroup.getChildCount(); i++) {
-                if (!(viewGroup.getChildAt(i) instanceof IgnorableSpace)) {
-                    nonIgnoredChildrenCnt++;
-                }
-            }
-            return nonIgnoredChildrenCnt;
-        }
-
         @Nullable String getTag() {
             return (String) mView.getTag();
         }
@@ -1664,8 +1649,6 @@
         // apply corner
         final Corner corner = background.getCorner();
         final int radiusPx = corner.hasRadius() ? safeDpToPx(corner.getRadius()) : 0;
-
-        // Sort out specific corner radii.
         float[] radii = new float[8];
         Arrays.fill(radii, radiusPx);
         if (corner.hasTopLeftRadius()) {
@@ -1681,33 +1664,19 @@
             setCornerRadiusToArray(corner.getBottomLeftRadius(), radii, /* index= */ 6);
         }
 
-        boolean isCornerWithEqualRadii = areAllEqual(radii, /* count= */ 8);
-        if (isCornerWithEqualRadii) {
+        if (areAllEqual(radii, /* count= */ 8)) {
             if (radii[0] == 0) {
                 return;
             }
-            // We will clip the drawable view with all equal corner radii by using outline, but we
-            // still
-            // need to set corners for cases when we use border.
+            // The implementation in BackgroundDrawable is more efficient by calling setCornerRadius
+            // than calling setCornerRadii with an array of all equal items.
             drawable.setCornerRadius(radii[0]);
-
-            // Set outline provider to correctly clip to the given corner, when it's some form of
-            // rounded
-            // rectangular (i.e. all equal corner radii). This can't be done automatically by the
-            // drawable
-            // due to the aliasing issues. See b/357061501 for more details.
-            view.setOutlineProvider(
-                    new ViewOutlineProvider() {
-                        @Override
-                        public void getOutline(View view, Outline outline) {
-                            outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radii[0]);
-                            outline.setAlpha(0.0f);
-                        }
-                    });
-            view.setClipToOutline(true);
         } else {
             drawable.setCornerRadii(radii);
         }
+
+        view.setClipToOutline(true);
+        view.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
     }
 
     private void setCornerRadiusToArray(
@@ -2534,11 +2503,10 @@
         // bottom of FrameLayout#onMeasure).
         //
         // To work around this (without copying the whole of FrameLayout just to change a "1" to
-        // "0"), we add a specific IgnorableSpace element in if there is one MATCH_PARENT child.
-        // This has a tiny cost to the measure pass, and negligible cost to layout/draw (since it
-        // doesn't take part in those passes).
-        // This element needs to be specific class that won't be counted towards the effective
-        // children of the parent when doing layout mutation. See b/345186544
+        // "0"),
+        // we add a Space element in if there is one MATCH_PARENT child. This has a tiny cost to the
+        // measure pass, and negligible cost to layout/draw (since it doesn't take part in those
+        // passes).
         int numMatchParentChildren = 0;
         for (int i = 0; i < frame.getChildCount(); i++) {
             LayoutParams lp = frame.getChildAt(i).getLayoutParams();
@@ -2548,7 +2516,7 @@
         }
 
         if (numMatchParentChildren == 1) {
-            IgnorableSpace hackSpace = new IgnorableSpace(mUiContext);
+            Space hackSpace = new Space(mUiContext);
             LayoutParams hackSpaceLp =
                     new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
             frame.addView(hackSpace, hackSpaceLp);
diff --git a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
index 9c2062d..e9e5582 100644
--- a/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
+++ b/wear/protolayout/protolayout-renderer/src/test/java/androidx/wear/protolayout/renderer/inflater/ProtoLayoutInflaterTest.java
@@ -760,75 +760,6 @@
     }
 
     @Test
-    public void inflate_expandableBox_withExpandChildWithWrapChild_appliesMutationCorrectly() {
-        // Box - Box - Text
-        Text.Builder text1 = Text.newBuilder().setText(StringProp.newBuilder().setValue("1"));
-        LayoutElement.Builder children1 =
-                LayoutElement.newBuilder()
-                        .setBox(
-                                Box.newBuilder()
-                                        .setWidth(expand())
-                                        .setHeight(expand())
-                                        .addContents(
-                                                LayoutElement.newBuilder().setText(text1).build())
-                                        .build());
-        Modifiers.Builder modifier1 =
-                Modifiers.newBuilder().setClickable(Clickable.newBuilder().setId("1").build());
-        LayoutElement layout1 =
-                LayoutElement.newBuilder()
-                        .setBox(
-                                Box.newBuilder()
-                                        .setModifiers(modifier1)
-                                        .setWidth(expand())
-                                        .setHeight(expand())
-                                        .addContents(children1))
-                        .build();
-
-        // Box (has diff for self) - Box - Text (has diff for self)
-        Text.Builder text2 = Text.newBuilder().setText(StringProp.newBuilder().setValue("2"));
-        LayoutElement.Builder children2 =
-                LayoutElement.newBuilder()
-                        .setBox(
-                                Box.newBuilder()
-                                        .setWidth(expand())
-                                        .setHeight(expand())
-                                        .addContents(
-                                                LayoutElement.newBuilder().setText(text2).build())
-                                        .build());
-        Modifiers.Builder modifier2 =
-                Modifiers.newBuilder().setClickable(Clickable.newBuilder().setId("2").build());
-        LayoutElement layout2 =
-                LayoutElement.newBuilder()
-                        .setBox(
-                                Box.newBuilder()
-                                        .setModifiers(modifier2)
-                                        .setWidth(expand())
-                                        .setHeight(expand())
-                                        .addContents(children2))
-                        .build();
-
-        // Add initial layout.
-        Renderer renderer = renderer(fingerprintedLayout(layout1));
-        ViewGroup inflatedViewParent = renderer.inflate();
-
-        // Check that there's a single element in the layout
-        assertThat(inflatedViewParent.getChildCount()).isEqualTo(1);
-
-        // Compute the mutation.
-        ViewGroupMutation mutation =
-                renderer.computeMutation(
-                        getRenderedMetadata(inflatedViewParent), fingerprintedLayout(layout2));
-        assertThat(mutation).isNotNull();
-        assertThat(mutation.isNoOp()).isFalse();
-
-        // Apply the mutation.
-        boolean mutationResult = renderer.applyMutation(inflatedViewParent, mutation);
-
-        // Make sure that mutation was successful.
-        assertThat(mutationResult).isTrue();
-    }
-
-    @Test
     public void inflate_spacerWithModifiers() {
         int width = 10;
         int height = 20;
diff --git a/wear/protolayout/protolayout-testing/api/1.3.0-beta01.txt b/wear/protolayout/protolayout-testing/api/1.3.0-beta01.txt
deleted file mode 100644
index 9689c33..0000000
--- a/wear/protolayout/protolayout-testing/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.testing {
-
-  public final class Filters {
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher containsTag(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasAllCorners(float radiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasBottomLeftCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasBottomRightCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasChild(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable();
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minClickableWidth);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minClickableWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minClickableHeight);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasColor(@ColorInt int argb);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasContentDescription(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasContentDescription(kotlin.text.Regex pattern);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasDescendant(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension height);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasHeight(androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp height);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasImage(String protolayoutResId);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasTag(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasText(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasText(String value, optional boolean subString);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasText(String value, optional boolean subString, optional boolean ignoreCase);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasTopLeftCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasTopRightCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension width);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasWidth(androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp width);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher isClickable();
-  }
-
-  public final class LayoutElementAssertion {
-    method public androidx.wear.protolayout.testing.LayoutElementAssertion assert(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public void assertDoesNotExist();
-    method public void assertExists();
-  }
-
-  public final class LayoutElementAssertionsProvider {
-    ctor public LayoutElementAssertionsProvider(androidx.wear.protolayout.LayoutElementBuilders.Layout layout);
-    ctor public LayoutElementAssertionsProvider(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement layoutRoot);
-    method public androidx.wear.protolayout.testing.LayoutElementAssertion onElement(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public androidx.wear.protolayout.testing.LayoutElementAssertion onRoot();
-    method public androidx.wear.protolayout.testing.LayoutElementAssertionsProvider withDynamicData(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... dynamicDataPairs);
-  }
-
-  public final class LayoutElementMatcher {
-    ctor public LayoutElementMatcher(String description, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.LayoutElementBuilders.LayoutElement,java.lang.Boolean> matcher);
-    ctor public LayoutElementMatcher(String description, kotlin.jvm.functions.Function2<? super androidx.wear.protolayout.LayoutElementBuilders.LayoutElement,? super androidx.wear.protolayout.testing.TestContext,java.lang.Boolean> matcher);
-    method public infix androidx.wear.protolayout.testing.LayoutElementMatcher and(androidx.wear.protolayout.testing.LayoutElementMatcher other);
-    method public operator androidx.wear.protolayout.testing.LayoutElementMatcher not();
-    method public infix androidx.wear.protolayout.testing.LayoutElementMatcher or(androidx.wear.protolayout.testing.LayoutElementMatcher other);
-  }
-
-  public final class TestContext {
-    method public androidx.wear.protolayout.expression.DynamicDataMap getDynamicData();
-    property public androidx.wear.protolayout.expression.DynamicDataMap dynamicData;
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout-testing/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout-testing/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout-testing/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout-testing/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout-testing/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index 9689c33..0000000
--- a/wear/protolayout/protolayout-testing/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout.testing {
-
-  public final class Filters {
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher containsTag(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasAllCorners(float radiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasBottomLeftCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasBottomRightCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasChild(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable();
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minClickableWidth);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasClickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minClickableWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minClickableHeight);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasColor(@ColorInt int argb);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasContentDescription(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasContentDescription(kotlin.text.Regex pattern);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasDescendant(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension height);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasHeight(androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp height);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasImage(String protolayoutResId);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasTag(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasText(String value);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasText(String value, optional boolean subString);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasText(String value, optional boolean subString, optional boolean ignoreCase);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasTopLeftCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasTopRightCorner(float xRadiusDp, float yRadiusDp);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension width);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher hasWidth(androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp width);
-    method public static androidx.wear.protolayout.testing.LayoutElementMatcher isClickable();
-  }
-
-  public final class LayoutElementAssertion {
-    method public androidx.wear.protolayout.testing.LayoutElementAssertion assert(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public void assertDoesNotExist();
-    method public void assertExists();
-  }
-
-  public final class LayoutElementAssertionsProvider {
-    ctor public LayoutElementAssertionsProvider(androidx.wear.protolayout.LayoutElementBuilders.Layout layout);
-    ctor public LayoutElementAssertionsProvider(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement layoutRoot);
-    method public androidx.wear.protolayout.testing.LayoutElementAssertion onElement(androidx.wear.protolayout.testing.LayoutElementMatcher matcher);
-    method public androidx.wear.protolayout.testing.LayoutElementAssertion onRoot();
-    method public androidx.wear.protolayout.testing.LayoutElementAssertionsProvider withDynamicData(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object?>... dynamicDataPairs);
-  }
-
-  public final class LayoutElementMatcher {
-    ctor public LayoutElementMatcher(String description, kotlin.jvm.functions.Function1<? super androidx.wear.protolayout.LayoutElementBuilders.LayoutElement,java.lang.Boolean> matcher);
-    ctor public LayoutElementMatcher(String description, kotlin.jvm.functions.Function2<? super androidx.wear.protolayout.LayoutElementBuilders.LayoutElement,? super androidx.wear.protolayout.testing.TestContext,java.lang.Boolean> matcher);
-    method public infix androidx.wear.protolayout.testing.LayoutElementMatcher and(androidx.wear.protolayout.testing.LayoutElementMatcher other);
-    method public operator androidx.wear.protolayout.testing.LayoutElementMatcher not();
-    method public infix androidx.wear.protolayout.testing.LayoutElementMatcher or(androidx.wear.protolayout.testing.LayoutElementMatcher other);
-  }
-
-  public final class TestContext {
-    method public androidx.wear.protolayout.expression.DynamicDataMap getDynamicData();
-    property public androidx.wear.protolayout.expression.DynamicDataMap dynamicData;
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout/api/1.3.0-beta01.txt b/wear/protolayout/protolayout/api/1.3.0-beta01.txt
deleted file mode 100644
index c7d1618..0000000
--- a/wear/protolayout/protolayout/api/1.3.0-beta01.txt
+++ /dev/null
@@ -1,1662 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout {
-
-  public final class ActionBuilders {
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidIntExtra intExtra(int);
-    method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName);
-    method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName, java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!>);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidLongExtra longExtra(long);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidStringExtra stringExtra(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface ActionBuilders.Action {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidActivity {
-    method public String getClassName();
-    method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
-    method public String getPackageName();
-  }
-
-  public static final class ActionBuilders.AndroidActivity.Builder {
-    ctor public ActionBuilders.AndroidActivity.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidActivity.Builder addKeyToExtraMapping(String, androidx.wear.protolayout.ActionBuilders.AndroidExtra);
-    method public androidx.wear.protolayout.ActionBuilders.AndroidActivity build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidActivity.Builder setClassName(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidActivity.Builder setPackageName(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidBooleanExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public boolean getValue();
-  }
-
-  public static final class ActionBuilders.AndroidBooleanExtra.Builder {
-    ctor public ActionBuilders.AndroidBooleanExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra.Builder setValue(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidDoubleExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public double getValue();
-  }
-
-  public static final class ActionBuilders.AndroidDoubleExtra.Builder {
-    ctor public ActionBuilders.AndroidDoubleExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra.Builder setValue(double);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface ActionBuilders.AndroidExtra {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidIntExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public int getValue();
-  }
-
-  public static final class ActionBuilders.AndroidIntExtra.Builder {
-    ctor public ActionBuilders.AndroidIntExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidIntExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidIntExtra.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidLongExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public long getValue();
-  }
-
-  public static final class ActionBuilders.AndroidLongExtra.Builder {
-    ctor public ActionBuilders.AndroidLongExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidLongExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidLongExtra.Builder setValue(long);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidStringExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public String getValue();
-  }
-
-  public static final class ActionBuilders.AndroidStringExtra.Builder {
-    ctor public ActionBuilders.AndroidStringExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidStringExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidStringExtra.Builder setValue(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.LaunchAction implements androidx.wear.protolayout.ActionBuilders.Action {
-    method public androidx.wear.protolayout.ActionBuilders.AndroidActivity? getAndroidActivity();
-  }
-
-  public static final class ActionBuilders.LaunchAction.Builder {
-    ctor public ActionBuilders.LaunchAction.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.LaunchAction build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.protolayout.ActionBuilders.AndroidActivity);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.LoadAction implements androidx.wear.protolayout.ActionBuilders.Action {
-    method public androidx.wear.protolayout.StateBuilders.State? getRequestState();
-  }
-
-  public static final class ActionBuilders.LoadAction.Builder {
-    ctor public ActionBuilders.LoadAction.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.LoadAction build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
-  }
-
-  public final class ColorBuilders {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.ColorBuilders.ColorProp argb(@ColorInt int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static interface ColorBuilders.Brush {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ColorBuilders.ColorProp {
-    method @ColorInt public int getArgb();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? getDynamicValue();
-  }
-
-  public static final class ColorBuilders.ColorProp.Builder {
-    ctor @Deprecated public ColorBuilders.ColorProp.Builder();
-    ctor public ColorBuilders.ColorProp.Builder(@ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ColorBuilders.ColorProp.Builder setArgb(@ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ColorBuilders.ColorProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class ColorBuilders.ColorStop {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getColor();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getOffset();
-  }
-
-  public static final class ColorBuilders.ColorStop.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public ColorBuilders.ColorStop.Builder(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method public androidx.wear.protolayout.ColorBuilders.ColorStop build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class ColorBuilders.LinearGradient implements androidx.wear.protolayout.ColorBuilders.Brush {
-    method public java.util.List<androidx.wear.protolayout.ColorBuilders.ColorStop!> getColorStops();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getEndX();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getEndY();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getStartX();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getStartY();
-  }
-
-  public static final class ColorBuilders.LinearGradient.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) @java.lang.SafeVarargs public ColorBuilders.LinearGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorProp!...);
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) @java.lang.SafeVarargs public ColorBuilders.LinearGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorStop!...);
-    method public androidx.wear.protolayout.ColorBuilders.LinearGradient build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setEndX(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setEndY(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setStartX(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setStartY(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class ColorBuilders.SweepGradient implements androidx.wear.protolayout.ColorBuilders.Brush {
-    method public java.util.List<androidx.wear.protolayout.ColorBuilders.ColorStop!> getColorStops();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getEndAngle();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getStartAngle();
-  }
-
-  public static final class ColorBuilders.SweepGradient.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) @java.lang.SafeVarargs public ColorBuilders.SweepGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorProp!...);
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) @java.lang.SafeVarargs public ColorBuilders.SweepGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorStop!...);
-    method public androidx.wear.protolayout.ColorBuilders.SweepGradient build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ColorBuilders.SweepGradient.Builder setEndAngle(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ColorBuilders.SweepGradient.Builder setStartAngle(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-  }
-
-  public final class DeviceParametersBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int DEVICE_PLATFORM_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int DEVICE_PLATFORM_WEAR_OS = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SCREEN_SHAPE_RECT = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SCREEN_SHAPE_ROUND = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DeviceParametersBuilders.Capabilities {
-    method public long getMinimumFreshnessLimitMillis();
-  }
-
-  public static final class DeviceParametersBuilders.Capabilities.Builder {
-    ctor public DeviceParametersBuilders.Capabilities.Builder();
-    method public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities.Builder setMinimumFreshnessLimitMillis(long);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DeviceParametersBuilders.DeviceParameters {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities? getCapabilities();
-    method public int getDevicePlatform();
-    method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getFontScale();
-    method public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo getRendererSchemaVersion();
-    method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
-    method public int getScreenShape();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenWidthDp();
-  }
-
-  public static final class DeviceParametersBuilders.DeviceParameters.Builder {
-    ctor public DeviceParametersBuilders.DeviceParameters.Builder();
-    method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters build();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setCapabilities(androidx.wear.protolayout.DeviceParametersBuilders.Capabilities);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setFontScale(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setRendererSchemaVersion(androidx.wear.protolayout.expression.VersionBuilders.VersionInfo);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenWidthDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-  }
-
-  public final class DimensionBuilders {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.DegreesProp degrees(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp weight(@FloatRange(from=0.0) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static interface DimensionBuilders.AngularDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DimensionBuilders.AngularLayoutConstraint {
-    method public int getAngularAlignment();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.AngularLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public DimensionBuilders.AngularLayoutConstraint.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint.Builder setAngularAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class DimensionBuilders.BoundingBoxRatio implements androidx.wear.protolayout.DimensionBuilders.OffsetDimension androidx.wear.protolayout.DimensionBuilders.PivotDimension {
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp getRatio();
-  }
-
-  public static final class DimensionBuilders.BoundingBoxRatio.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public DimensionBuilders.BoundingBoxRatio.Builder(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method public androidx.wear.protolayout.DimensionBuilders.BoundingBoxRatio build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.ContainerDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.DegreesProp implements androidx.wear.protolayout.DimensionBuilders.AngularDimension {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
-    method public float getValue();
-  }
-
-  public static final class DimensionBuilders.DegreesProp.Builder {
-    ctor @Deprecated public DimensionBuilders.DegreesProp.Builder();
-    ctor public DimensionBuilders.DegreesProp.Builder(float);
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.DegreesProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.DegreesProp.Builder setValue(float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.DpProp implements androidx.wear.protolayout.DimensionBuilders.AngularDimension androidx.wear.protolayout.DimensionBuilders.ContainerDimension androidx.wear.protolayout.DimensionBuilders.ExtensionDimension androidx.wear.protolayout.DimensionBuilders.ImageDimension androidx.wear.protolayout.DimensionBuilders.OffsetDimension androidx.wear.protolayout.DimensionBuilders.PivotDimension androidx.wear.protolayout.DimensionBuilders.SpacerDimension {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.DpProp.Builder {
-    ctor @Deprecated public DimensionBuilders.DpProp.Builder();
-    ctor public DimensionBuilders.DpProp.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.DpProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.DpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.EmProp {
-    method public float getValue();
-  }
-
-  public static final class DimensionBuilders.EmProp.Builder {
-    ctor public DimensionBuilders.EmProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.EmProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.EmProp.Builder setValue(float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension androidx.wear.protolayout.DimensionBuilders.ImageDimension androidx.wear.protolayout.DimensionBuilders.SpacerDimension {
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getLayoutWeight();
-  }
-
-  public static final class DimensionBuilders.ExpandedDimensionProp.Builder {
-    ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp.Builder setLayoutWeight(androidx.wear.protolayout.TypeBuilders.FloatProp);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ExperimentalProtoLayoutExtensionApi @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.ExtensionDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DimensionBuilders.HorizontalLayoutConstraint {
-    method public int getHorizontalAlignment();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.HorizontalLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public DimensionBuilders.HorizontalLayoutConstraint.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint.Builder setHorizontalAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.ImageDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static interface DimensionBuilders.OffsetDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static interface DimensionBuilders.PivotDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.ProportionalDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ImageDimension {
-    method @IntRange(from=0) public int getAspectRatioHeight();
-    method @IntRange(from=0) public int getAspectRatioWidth();
-  }
-
-  public static final class DimensionBuilders.ProportionalDimensionProp.Builder {
-    ctor public DimensionBuilders.ProportionalDimensionProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioHeight(@IntRange(from=0) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioWidth(@IntRange(from=0) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.SpProp {
-    method @Dimension(unit=androidx.annotation.Dimension.SP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.SpProp.Builder {
-    ctor public DimensionBuilders.SpProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.SpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.SpacerDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DimensionBuilders.VerticalLayoutConstraint {
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-    method public int getVerticalAlignment();
-  }
-
-  public static final class DimensionBuilders.VerticalLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public DimensionBuilders.VerticalLayoutConstraint.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint.Builder setVerticalAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getMinimumSize();
-  }
-
-  public static final class DimensionBuilders.WrappedDimensionProp.Builder {
-    ctor public DimensionBuilders.WrappedDimensionProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp.Builder setMinimumSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  public final class LayoutElementBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_END = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_START = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_END = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_START = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_CROP = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_FILL_BOUNDS = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_FIT = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_VARIANT_BODY = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_VARIANT_TITLE = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_VARIANT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_END = 5; // 0x5
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_LEFT = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_RIGHT = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_START = 4; // 0x4
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SPAN_VERTICAL_ALIGN_BOTTOM = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SPAN_VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_BUTT = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_ROUND = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_SQUARE = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_END = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_START = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final int TEXT_OVERFLOW_ELLIPSIZE = 4; // 0x4
-    field @Deprecated @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int TEXT_OVERFLOW_MARQUEE = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_TOP = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Arc implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getAnchorAngle();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp? getAnchorType();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement!> getContents();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlign();
-  }
-
-  public static final class LayoutElementBuilders.Arc.Builder {
-    ctor public LayoutElementBuilders.Arc.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Arc build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setAnchorAngle(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setAnchorType(androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setAnchorType(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setVerticalAlign(androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setVerticalAlign(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcAdapter implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getContent();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getRotateContents();
-  }
-
-  public static final class LayoutElementBuilders.ArcAdapter.Builder {
-    ctor public LayoutElementBuilders.ArcAdapter.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter.Builder setContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcAnchorTypeProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.ArcAnchorTypeProp.Builder {
-    ctor public LayoutElementBuilders.ArcAnchorTypeProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class LayoutElementBuilders.ArcDirectionProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.ArcDirectionProp.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public LayoutElementBuilders.ArcDirectionProp.Builder(int);
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface LayoutElementBuilders.ArcLayoutElement {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcLine implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public androidx.wear.protolayout.ColorBuilders.Brush? getBrush();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint? getLayoutConstraintsForDynamicLength();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getLength();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp? getStrokeCap();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getThickness();
-  }
-
-  public static final class LayoutElementBuilders.ArcLine.Builder {
-    ctor public LayoutElementBuilders.ArcLine.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcLine build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setBrush(androidx.wear.protolayout.ColorBuilders.Brush);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setLayoutConstraintsForDynamicLength(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setLength(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setStrokeCap(androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setStrokeCap(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setThickness(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcSpacer implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.AngularDimension? getAngularLength();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getLength();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getThickness();
-  }
-
-  public static final class LayoutElementBuilders.ArcSpacer.Builder {
-    ctor public LayoutElementBuilders.ArcSpacer.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setAngularLength(androidx.wear.protolayout.DimensionBuilders.AngularDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setLength(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setThickness(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcText implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle? getFontStyle();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getText();
-  }
-
-  public static final class LayoutElementBuilders.ArcText.Builder {
-    ctor public LayoutElementBuilders.ArcText.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcText build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setFontStyle(androidx.wear.protolayout.LayoutElementBuilders.FontStyle);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setText(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setText(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Box implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getContents();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getHeight();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Box.Builder {
-    ctor public LayoutElementBuilders.Box.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Box build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setHorizontalAlignment(androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setHorizontalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setVerticalAlignment(androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setVerticalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ColorFilter {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getTint();
-  }
-
-  public static final class LayoutElementBuilders.ColorFilter.Builder {
-    ctor public LayoutElementBuilders.ColorFilter.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ColorFilter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ColorFilter.Builder setTint(androidx.wear.protolayout.ColorBuilders.ColorProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Column implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getContents();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getHeight();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Column.Builder {
-    ctor public LayoutElementBuilders.Column.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Column build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setHorizontalAlignment(androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setHorizontalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ContentScaleModeProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.ContentScaleModeProp.Builder {
-    ctor public LayoutElementBuilders.ContentScaleModeProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class LayoutElementBuilders.DashedArcLine implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint? getLayoutConstraintsForDynamicLength();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getLength();
-    method public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern? getLinePattern();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getThickness();
-  }
-
-  public static final class LayoutElementBuilders.DashedArcLine.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public LayoutElementBuilders.DashedArcLine.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setLayoutConstraintsForDynamicLength(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setLength(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setLinePattern(androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setThickness(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class LayoutElementBuilders.DashedLinePattern {
-    method public java.util.List<androidx.wear.protolayout.DimensionBuilders.DegreesProp!> getGapLocations();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getGapSize();
-  }
-
-  public static final class LayoutElementBuilders.DashedLinePattern.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public LayoutElementBuilders.DashedLinePattern.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern.Builder setGapInterval(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern.Builder setGapLocations(float...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern.Builder setGapSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ExperimentalProtoLayoutExtensionApi @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class LayoutElementBuilders.ExtensionLayoutElement implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public String getExtensionId();
-    method public androidx.wear.protolayout.DimensionBuilders.ExtensionDimension? getHeight();
-    method public byte[] getPayload();
-    method public androidx.wear.protolayout.DimensionBuilders.ExtensionDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.ExtensionLayoutElement.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public LayoutElementBuilders.ExtensionLayoutElement.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setExtensionId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ExtensionDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setPayload(byte[]);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ExtensionDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static interface LayoutElementBuilders.FontSetting {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting roundness(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting tabularNum();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting weight(@IntRange(from=1, to=1000) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting width(@FloatRange(from=25, to=200) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.FontStyle {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getItalic();
-    method public androidx.wear.protolayout.DimensionBuilders.EmProp? getLetterSpacing();
-    method public java.util.List<java.lang.String!> getPreferredFontFamilies();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.FontSetting!> getSettings();
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp? getSize();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public java.util.List<androidx.wear.protolayout.DimensionBuilders.SpProp!> getSizes();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getUnderline();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp? getVariant();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp? getWeight();
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final String ROBOTO_FLEX_FONT = "roboto-flex";
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final String ROBOTO_FONT = "roboto";
-  }
-
-  public static final class LayoutElementBuilders.FontStyle.Builder {
-    ctor public LayoutElementBuilders.FontStyle.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setItalic(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setItalic(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setLetterSpacing(androidx.wear.protolayout.DimensionBuilders.EmProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setPreferredFontFamilies(String, java.lang.String!...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setSettings(androidx.wear.protolayout.LayoutElementBuilders.FontSetting!...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setSize(androidx.wear.protolayout.DimensionBuilders.SpProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setSizes(@Dimension(unit=androidx.annotation.Dimension.SP) @IntRange(from=1) int...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setUnderline(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setUnderline(boolean);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setVariant(androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setVariant(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setWeight(androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setWeight(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontStyles {
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.FontVariantProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.FontVariantProp.Builder {
-    ctor public LayoutElementBuilders.FontVariantProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.FontWeightProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.FontWeightProp.Builder {
-    ctor public LayoutElementBuilders.FontWeightProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.HorizontalAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.HorizontalAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.HorizontalAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Image implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ColorFilter? getColorFilter();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp? getContentScaleMode();
-    method public androidx.wear.protolayout.DimensionBuilders.ImageDimension? getHeight();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getResourceId();
-    method public androidx.wear.protolayout.DimensionBuilders.ImageDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Image.Builder {
-    ctor public LayoutElementBuilders.Image.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Image build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setColorFilter(androidx.wear.protolayout.LayoutElementBuilders.ColorFilter);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setContentScaleMode(androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setContentScaleMode(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ImageDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setResourceId(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setResourceId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ImageDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Layout {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static androidx.wear.protolayout.LayoutElementBuilders.Layout? fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Layout fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getRoot();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public byte[] toByteArray();
-  }
-
-  public static final class LayoutElementBuilders.Layout.Builder {
-    ctor public LayoutElementBuilders.Layout.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Layout build();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Layout.Builder setRoot(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface LayoutElementBuilders.LayoutElement {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Row implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getContents();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getHeight();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Row.Builder {
-    ctor public LayoutElementBuilders.Row.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Row build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setVerticalAlignment(androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setVerticalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Spacer implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.SpacerDimension? getHeight();
-    method public androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint? getLayoutConstraintsForDynamicHeight();
-    method public androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint? getLayoutConstraintsForDynamicWidth();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.DimensionBuilders.SpacerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Spacer.Builder {
-    ctor public LayoutElementBuilders.Spacer.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Spacer build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.SpacerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setLayoutConstraintsForDynamicHeight(androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setLayoutConstraintsForDynamicWidth(androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.SpacerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface LayoutElementBuilders.Span {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.SpanImage implements androidx.wear.protolayout.LayoutElementBuilders.Span {
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp? getAlignment();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getHeight();
-    method public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getResourceId();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.SpanImage.Builder {
-    ctor public LayoutElementBuilders.SpanImage.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanImage build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setAlignment(androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.SpanModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setResourceId(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setResourceId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.SpanText implements androidx.wear.protolayout.LayoutElementBuilders.Span {
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle? getFontStyle();
-    method public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getText();
-  }
-
-  public static final class LayoutElementBuilders.SpanText.Builder {
-    ctor public LayoutElementBuilders.SpanText.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanText build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setFontStyle(androidx.wear.protolayout.LayoutElementBuilders.FontStyle);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.SpanModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setText(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setText(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.SpanVerticalAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.SpanVerticalAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Spannable implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp? getLineHeight();
-    method @SuppressCompatibility @IntRange(from=0xffffffff) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public int getMarqueeIterations();
-    method public androidx.wear.protolayout.TypeBuilders.Int32Prop? getMaxLines();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.Span!> getSpans();
-  }
-
-  public static final class LayoutElementBuilders.Spannable.Builder {
-    ctor public LayoutElementBuilders.Spannable.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.protolayout.LayoutElementBuilders.Span);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Spannable build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.protolayout.DimensionBuilders.SpProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMarqueeIterations(@IntRange(from=0xffffffff) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.protolayout.TypeBuilders.Int32Prop);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setOverflow(androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setOverflow(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class LayoutElementBuilders.StrokeCapProp {
-    method public androidx.wear.protolayout.ModifiersBuilders.Shadow? getShadow();
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.StrokeCapProp.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public LayoutElementBuilders.StrokeCapProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp.Builder setShadow(androidx.wear.protolayout.ModifiersBuilders.Shadow);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Text implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle? getFontStyle();
-    method public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint? getLayoutConstraintsForDynamicText();
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp? getLineHeight();
-    method @SuppressCompatibility @IntRange(from=0xffffffff) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public int getMarqueeIterations();
-    method public androidx.wear.protolayout.TypeBuilders.Int32Prop? getMaxLines();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getText();
-  }
-
-  public static final class LayoutElementBuilders.Text.Builder {
-    ctor public LayoutElementBuilders.Text.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Text build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.protolayout.LayoutElementBuilders.FontStyle);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setLayoutConstraintsForDynamicText(androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.protolayout.DimensionBuilders.SpProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMarqueeIterations(@IntRange(from=0xffffffff) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.protolayout.TypeBuilders.Int32Prop);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMultilineAlignment(androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMultilineAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setOverflow(androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setOverflow(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setText(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setText(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.TextAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.TextAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.TextAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.TextOverflowProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.TextOverflowProp.Builder {
-    ctor public LayoutElementBuilders.TextOverflowProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.VerticalAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.VerticalAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.VerticalAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp.Builder setValue(int);
-  }
-
-  public final class ModifiersBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_BUTTON = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_CHECKBOX = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_IMAGE = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_NONE = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_RADIOBUTTON = 5; // 0x5
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_SWITCH = 4; // 0x4
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_BOTTOM_TO_TOP = 4; // 0x4
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_LEFT_TO_RIGHT = 1; // 0x1
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_RIGHT_TO_LEFT = 2; // 0x2
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_TOP_TO_BOTTOM = 3; // 0x3
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_UNDEFINED = 0; // 0x0
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_PARENT_SNAP_TO_INSIDE = 1; // 0x1
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_PARENT_SNAP_TO_OUTSIDE = 2; // 0x2
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_PARENT_SNAP_UNDEFINED = 0; // 0x0
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.AnimatedVisibility {
-    method public androidx.wear.protolayout.ModifiersBuilders.EnterTransition? getEnterTransition();
-    method public androidx.wear.protolayout.ModifiersBuilders.ExitTransition? getExitTransition();
-  }
-
-  public static final class ModifiersBuilders.AnimatedVisibility.Builder {
-    ctor public ModifiersBuilders.AnimatedVisibility.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility.Builder setEnterTransition(androidx.wear.protolayout.ModifiersBuilders.EnterTransition);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility.Builder setExitTransition(androidx.wear.protolayout.ModifiersBuilders.ExitTransition);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.ArcModifiers {
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable? getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getOpacity();
-    method public androidx.wear.protolayout.ModifiersBuilders.Semantics? getSemantics();
-  }
-
-  public static final class ModifiersBuilders.ArcModifiers.Builder {
-    ctor public ModifiersBuilders.ArcModifiers.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers.Builder setClickable(androidx.wear.protolayout.ModifiersBuilders.Clickable);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers.Builder setOpacity(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers.Builder setSemantics(androidx.wear.protolayout.ModifiersBuilders.Semantics);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Background {
-    method public androidx.wear.protolayout.ColorBuilders.Brush? getBrush();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner? getCorner();
-  }
-
-  public static final class ModifiersBuilders.Background.Builder {
-    ctor public ModifiersBuilders.Background.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Background build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ModifiersBuilders.Background.Builder setBrush(androidx.wear.protolayout.ColorBuilders.Brush);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Background.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Background.Builder setCorner(androidx.wear.protolayout.ModifiersBuilders.Corner);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Border {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getWidth();
-  }
-
-  public static final class ModifiersBuilders.Border.Builder {
-    ctor public ModifiersBuilders.Border.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Border build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Border.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Border.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Clickable {
-    method public String getId();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getMinimumClickableHeight();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getMinimumClickableWidth();
-    method public androidx.wear.protolayout.ActionBuilders.Action? getOnClick();
-    method public boolean isVisualFeedbackEnabled();
-  }
-
-  public static final class ModifiersBuilders.Clickable.Builder {
-    ctor public ModifiersBuilders.Clickable.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setMinimumClickableHeight(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setMinimumClickableWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setOnClick(androidx.wear.protolayout.ActionBuilders.Action);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setVisualFeedbackEnabled(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Corner {
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getBottomLeftRadius();
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getBottomRightRadius();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getRadius();
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getTopLeftRadius();
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getTopRightRadius();
-  }
-
-  public static final class ModifiersBuilders.Corner.Builder {
-    ctor public ModifiersBuilders.Corner.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomLeftRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomLeftRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomRightRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomRightRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setRadius(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopLeftRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopLeftRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopRightRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopRightRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class ModifiersBuilders.CornerRadius {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getX();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getY();
-  }
-
-  public static final class ModifiersBuilders.CornerRadius.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public ModifiersBuilders.CornerRadius.Builder(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius build();
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final class ModifiersBuilders.DefaultContentTransitions {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.EnterTransition fadeIn();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.EnterTransition fadeInSlideIn(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.ExitTransition fadeOut();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.ExitTransition fadeOutSlideOut(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.EnterTransition slideIn(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.ExitTransition slideOut(@SuppressCompatibility int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.ElementMetadata {
-    method public byte[] getTagData();
-  }
-
-  public static final class ModifiersBuilders.ElementMetadata.Builder {
-    ctor public ModifiersBuilders.ElementMetadata.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.ElementMetadata build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.ElementMetadata.Builder setTagData(byte[]);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.EnterTransition {
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition? getFadeIn();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition? getSlideIn();
-  }
-
-  public static final class ModifiersBuilders.EnterTransition.Builder {
-    ctor public ModifiersBuilders.EnterTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.EnterTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.EnterTransition.Builder setFadeIn(androidx.wear.protolayout.ModifiersBuilders.FadeInTransition);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.EnterTransition.Builder setSlideIn(androidx.wear.protolayout.ModifiersBuilders.SlideInTransition);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.ExitTransition {
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition? getFadeOut();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition? getSlideOut();
-  }
-
-  public static final class ModifiersBuilders.ExitTransition.Builder {
-    ctor public ModifiersBuilders.ExitTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.ExitTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.ExitTransition.Builder setFadeOut(androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.ExitTransition.Builder setSlideOut(androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.FadeInTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @FloatRange(from=0.0, to=1.0) public float getInitialAlpha();
-  }
-
-  public static final class ModifiersBuilders.FadeInTransition.Builder {
-    ctor public ModifiersBuilders.FadeInTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition.Builder setInitialAlpha(@FloatRange(from=0.0, to=1.0) float);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.FadeOutTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @FloatRange(from=0.0, to=1.0) public float getTargetAlpha();
-  }
-
-  public static final class ModifiersBuilders.FadeOutTransition.Builder {
-    ctor public ModifiersBuilders.FadeOutTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition.Builder setTargetAlpha(@FloatRange(from=0.0, to=1.0) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Modifiers {
-    method public androidx.wear.protolayout.ModifiersBuilders.Background? getBackground();
-    method public androidx.wear.protolayout.ModifiersBuilders.Border? getBorder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable? getClickable();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility? getContentUpdateAnimation();
-    method public androidx.wear.protolayout.ModifiersBuilders.ElementMetadata? getMetadata();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getOpacity();
-    method public androidx.wear.protolayout.ModifiersBuilders.Padding? getPadding();
-    method public androidx.wear.protolayout.ModifiersBuilders.Semantics? getSemantics();
-    method public androidx.wear.protolayout.ModifiersBuilders.Transformation? getTransformation();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.TypeBuilders.BoolProp isVisible();
-  }
-
-  public static final class ModifiersBuilders.Modifiers.Builder {
-    ctor public ModifiersBuilders.Modifiers.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setBackground(androidx.wear.protolayout.ModifiersBuilders.Background);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setBorder(androidx.wear.protolayout.ModifiersBuilders.Border);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setClickable(androidx.wear.protolayout.ModifiersBuilders.Clickable);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setContentUpdateAnimation(androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setMetadata(androidx.wear.protolayout.ModifiersBuilders.ElementMetadata);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setOpacity(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setPadding(androidx.wear.protolayout.ModifiersBuilders.Padding);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setSemantics(androidx.wear.protolayout.ModifiersBuilders.Semantics);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setTransformation(androidx.wear.protolayout.ModifiersBuilders.Transformation);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setVisible(androidx.wear.protolayout.TypeBuilders.BoolProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Padding {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getBottom();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getEnd();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getRtlAware();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getStart();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getTop();
-  }
-
-  public static final class ModifiersBuilders.Padding.Builder {
-    ctor public ModifiersBuilders.Padding.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Padding build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setAll(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setBottom(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setEnd(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setRtlAware(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setRtlAware(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setStart(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setTop(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Semantics {
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public int getRole();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getStateDescription();
-  }
-
-  public static final class ModifiersBuilders.Semantics.Builder {
-    ctor public ModifiersBuilders.Semantics.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Semantics build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setRole(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setStateDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class ModifiersBuilders.Shadow {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getBlurRadius();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getColor();
-  }
-
-  public static final class ModifiersBuilders.Shadow.Builder {
-    ctor public ModifiersBuilders.Shadow.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Shadow build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Shadow.Builder setBlurRadius(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Shadow.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface ModifiersBuilders.SlideBound {
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.SlideInTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @SuppressCompatibility public int getDirection();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideBound? getInitialSlideBound();
-  }
-
-  public static final class ModifiersBuilders.SlideInTransition.Builder {
-    ctor public ModifiersBuilders.SlideInTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition.Builder setDirection(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition.Builder setInitialSlideBound(androidx.wear.protolayout.ModifiersBuilders.SlideBound);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.SlideOutTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @SuppressCompatibility public int getDirection();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideBound? getTargetSlideBound();
-  }
-
-  public static final class ModifiersBuilders.SlideOutTransition.Builder {
-    ctor public ModifiersBuilders.SlideOutTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition.Builder setDirection(@SuppressCompatibility int);
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition.Builder setTargetSlideBound(androidx.wear.protolayout.ModifiersBuilders.SlideBound);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.SlideParentBound implements androidx.wear.protolayout.ModifiersBuilders.SlideBound {
-    method @SuppressCompatibility public int getSnapTo();
-  }
-
-  public static final class ModifiersBuilders.SlideParentBound.Builder {
-    ctor public ModifiersBuilders.SlideParentBound.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideParentBound build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideParentBound.Builder setSnapTo(@SuppressCompatibility int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.SpanModifiers {
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable? getClickable();
-  }
-
-  public static final class ModifiersBuilders.SpanModifiers.Builder {
-    ctor public ModifiersBuilders.SpanModifiers.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers.Builder setClickable(androidx.wear.protolayout.ModifiersBuilders.Clickable);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class ModifiersBuilders.Transformation {
-    method public androidx.wear.protolayout.DimensionBuilders.PivotDimension getPivotX();
-    method public androidx.wear.protolayout.DimensionBuilders.PivotDimension getPivotY();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getRotation();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp getScaleX();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp getScaleY();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getTranslationX();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getTranslationY();
-  }
-
-  public static final class ModifiersBuilders.Transformation.Builder {
-    ctor public ModifiersBuilders.Transformation.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Transformation build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setPivotX(androidx.wear.protolayout.DimensionBuilders.PivotDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setPivotY(androidx.wear.protolayout.DimensionBuilders.PivotDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setRotation(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setScaleX(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setScaleY(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setTranslationX(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setTranslationY(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  public final class ResourceBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int IMAGE_FORMAT_ARGB_8888 = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId {
-    method public int getAnimatedImageFormat();
-    method @DrawableRes public int getResourceId();
-    method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
-  }
-
-  public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder {
-    ctor public ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setStartTrigger(androidx.wear.protolayout.TriggerBuilders.Trigger);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.AndroidImageResourceByResId {
-    method @DrawableRes public int getResourceId();
-  }
-
-  public static final class ResourceBuilders.AndroidImageResourceByResId.Builder {
-    ctor public ResourceBuilders.AndroidImageResourceByResId.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class ResourceBuilders.AndroidLottieResourceByResId {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
-    method @RawRes public int getRawResourceId();
-    method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
-  }
-
-  public static final class ResourceBuilders.AndroidLottieResourceByResId.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public ResourceBuilders.AndroidLottieResourceByResId.Builder(@RawRes int);
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId.Builder setProgress(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId.Builder setStartTrigger(androidx.wear.protolayout.TriggerBuilders.Trigger);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId {
-    method public int getAnimatedImageFormat();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
-    method @DrawableRes public int getResourceId();
-  }
-
-  public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder {
-    ctor public ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setProgress(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.ImageResource {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId? getAndroidAnimatedResourceByResId();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId? getAndroidLottieResourceByResId();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId? getAndroidSeekableAnimatedResourceByResId();
-    method public androidx.wear.protolayout.ResourceBuilders.InlineImageResource? getInlineResource();
-  }
-
-  public static final class ResourceBuilders.ImageResource.Builder {
-    ctor public ResourceBuilders.ImageResource.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.ImageResource build();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidLottieResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidSeekableAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.protolayout.ResourceBuilders.InlineImageResource);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.InlineImageResource {
-    method public byte[] getData();
-    method public int getFormat();
-    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getHeightPx();
-    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getWidthPx();
-  }
-
-  public static final class ResourceBuilders.InlineImageResource.Builder {
-    ctor public ResourceBuilders.InlineImageResource.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.InlineImageResource build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setData(byte[]);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setFormat(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setWidthPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.Resources {
-    method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ResourceBuilders.ImageResource!> getIdToImageMapping();
-    method public String getVersion();
-  }
-
-  public static final class ResourceBuilders.Resources.Builder {
-    ctor public ResourceBuilders.Resources.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.Resources.Builder addIdToImageMapping(String, androidx.wear.protolayout.ResourceBuilders.ImageResource);
-    method public androidx.wear.protolayout.ResourceBuilders.Resources build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.Resources.Builder setVersion(String);
-  }
-
-  public final class StateBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class StateBuilders.State {
-    method public java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!> getKeyToValueMapping();
-    method public String getLastClickableId();
-    method public static int getMaxStateEntryCount();
-    method public androidx.wear.protolayout.expression.DynamicDataMap getStateMap();
-  }
-
-  public static final class StateBuilders.State.Builder {
-    ctor public StateBuilders.State.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> androidx.wear.protolayout.StateBuilders.State.Builder addKeyToValueMapping(androidx.wear.protolayout.expression.AppDataKey<T!>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.StateBuilders.State.Builder addToStateMap(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object!>...);
-    method public androidx.wear.protolayout.StateBuilders.State build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.StateBuilders.State.Builder setStateMap(androidx.wear.protolayout.expression.DynamicDataMap);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.StateBuilders.State.Builder setStateMap(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object!>...);
-  }
-
-  public final class TimelineBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TimelineBuilders.TimeInterval {
-    method public long getEndMillis();
-    method public long getStartMillis();
-  }
-
-  public static final class TimelineBuilders.TimeInterval.Builder {
-    ctor public TimelineBuilders.TimeInterval.Builder();
-    method public androidx.wear.protolayout.TimelineBuilders.TimeInterval build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimeInterval.Builder setEndMillis(long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimeInterval.Builder setStartMillis(long);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TimelineBuilders.Timeline {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.TimelineBuilders.Timeline fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public java.util.List<androidx.wear.protolayout.TimelineBuilders.TimelineEntry!> getTimelineEntries();
-  }
-
-  public static final class TimelineBuilders.Timeline.Builder {
-    ctor public TimelineBuilders.Timeline.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.Timeline.Builder addTimelineEntry(androidx.wear.protolayout.TimelineBuilders.TimelineEntry);
-    method public androidx.wear.protolayout.TimelineBuilders.Timeline build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TimelineBuilders.TimelineEntry {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.TimelineBuilders.TimelineEntry fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Layout? getLayout();
-    method public androidx.wear.protolayout.TimelineBuilders.TimeInterval? getValidity();
-  }
-
-  public static final class TimelineBuilders.TimelineEntry.Builder {
-    ctor public TimelineBuilders.TimelineEntry.Builder();
-    method public androidx.wear.protolayout.TimelineBuilders.TimelineEntry build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimelineEntry.Builder setLayout(androidx.wear.protolayout.LayoutElementBuilders.Layout);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.protolayout.TimelineBuilders.TimeInterval);
-  }
-
-  public final class TriggerBuilders {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnLoadTrigger();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnVisibleOnceTrigger();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnVisibleTrigger();
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class TriggerBuilders.OnVisibleOnceTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
-  }
-
-  public static final class TriggerBuilders.OnVisibleOnceTrigger.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public TriggerBuilders.OnVisibleOnceTrigger.Builder();
-    method public androidx.wear.protolayout.TriggerBuilders.OnVisibleOnceTrigger build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class TriggerBuilders.OnVisibleTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
-  }
-
-  public static final class TriggerBuilders.OnVisibleTrigger.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public TriggerBuilders.OnVisibleTrigger.Builder();
-    method public androidx.wear.protolayout.TriggerBuilders.OnVisibleTrigger build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface TriggerBuilders.Trigger {
-  }
-
-  public final class TypeBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.BoolProp {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool? getDynamicValue();
-    method public boolean getValue();
-  }
-
-  public static final class TypeBuilders.BoolProp.Builder {
-    ctor @Deprecated public TypeBuilders.BoolProp.Builder();
-    ctor public TypeBuilders.BoolProp.Builder(boolean);
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.BoolProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.BoolProp.Builder setValue(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.FloatProp {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
-    method public float getValue();
-  }
-
-  public static final class TypeBuilders.FloatProp.Builder {
-    ctor @Deprecated public TypeBuilders.FloatProp.Builder();
-    ctor public TypeBuilders.FloatProp.Builder(float);
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setValue(float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.Int32Prop {
-    method public int getValue();
-  }
-
-  public static final class TypeBuilders.Int32Prop.Builder {
-    ctor public TypeBuilders.Int32Prop.Builder();
-    method public androidx.wear.protolayout.TypeBuilders.Int32Prop build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.Int32Prop.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class TypeBuilders.StringLayoutConstraint {
-    method public int getAlignment();
-    method public String getPatternForLayout();
-  }
-
-  public static final class TypeBuilders.StringLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public TypeBuilders.StringLayoutConstraint.Builder(String);
-    method public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint.Builder setAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.StringProp {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? getDynamicValue();
-    method public String getValue();
-  }
-
-  public static final class TypeBuilders.StringProp.Builder {
-    ctor @Deprecated public TypeBuilders.StringProp.Builder();
-    ctor public TypeBuilders.StringProp.Builder(String);
-    method public androidx.wear.protolayout.TypeBuilders.StringProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.StringProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.StringProp.Builder setValue(String);
-  }
-
-}
-
-package androidx.wear.protolayout.layout {
-
-  public final class TextKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Text basicText(androidx.wear.protolayout.types.LayoutString text, optional androidx.wear.protolayout.LayoutElementBuilders.FontStyle? fontStyle, optional androidx.wear.protolayout.modifiers.LayoutModifier? modifier, optional int maxLines, optional int alignment, optional int overflow, optional @Dimension(unit=androidx.annotation.Dimension.Companion.SP) float lineHeight);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle fontStyle(optional @Dimension(unit=androidx.annotation.Dimension.Companion.SP) float size, optional boolean italic, optional boolean underline, optional androidx.wear.protolayout.types.LayoutColor? color, optional int weight, optional float letterSpacingEm, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) java.util.List<java.lang.Float> additionalSizesSp, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) java.util.List<? extends androidx.wear.protolayout.LayoutElementBuilders.FontSetting> settings, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) java.util.List<java.lang.String> preferredFontFamilies);
-  }
-
-}
-
-package androidx.wear.protolayout.modifiers {
-
-  public final class BackgroundKt {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static androidx.wear.protolayout.modifiers.LayoutModifier background(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ColorBuilders.Brush brush);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier background(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.types.LayoutColor color);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clip(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.Corner corner);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clip(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float cornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clip(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipBottomLeft(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipBottomRight(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipTopLeft(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipTopRight(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-  }
-
-  public final class BorderKt {
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier border(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float width, androidx.wear.protolayout.types.LayoutColor color);
-  }
-
-  public final class ClickableKt {
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable();
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) float minClickableWidth);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) float minClickableWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) float minClickableHeight);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clickable(androidx.wear.protolayout.modifiers.LayoutModifier, optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clickable(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.Clickable clickable);
-    method public static androidx.wear.protolayout.ActionBuilders.LoadAction loadAction(optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) androidx.wear.protolayout.expression.DynamicDataMap? requestedStateMap);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.modifiers.LayoutModifier minimumTouchTargetSize(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minWidth, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minHeight);
-  }
-
-  public interface LayoutModifier {
-    method public <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.wear.protolayout.modifiers.LayoutModifier.Element,? extends R> operation);
-    method public default infix androidx.wear.protolayout.modifiers.LayoutModifier then(androidx.wear.protolayout.modifiers.LayoutModifier other);
-    field public static final androidx.wear.protolayout.modifiers.LayoutModifier.Companion Companion;
-  }
-
-  public static final class LayoutModifier.Companion implements androidx.wear.protolayout.modifiers.LayoutModifier {
-    method public <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.wear.protolayout.modifiers.LayoutModifier.Element,? extends R> operation);
-  }
-
-  public static interface LayoutModifier.Element extends androidx.wear.protolayout.modifiers.LayoutModifier {
-    method public default <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.wear.protolayout.modifiers.LayoutModifier.Element,? extends R> operation);
-  }
-
-  public final class ModifierAppliersKt {
-    method public static androidx.wear.protolayout.ModifiersBuilders.Modifiers toProtoLayoutModifiers(androidx.wear.protolayout.modifiers.LayoutModifier);
-  }
-
-  public final class OpacityKt {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier opacity(androidx.wear.protolayout.modifiers.LayoutModifier, @FloatRange(from=0.0, to=1.0) float staticValue, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue);
-  }
-
-  public final class PaddingKt {
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.Padding padding);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float all);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float horizontal, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float vertical);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float start, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float top, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float end, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float bottom, optional boolean rtlAware);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Padding padding(@Dimension(unit=androidx.annotation.Dimension.Companion.DP) float all);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Padding padding(@Dimension(unit=androidx.annotation.Dimension.Companion.DP) float horizontal, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float vertical);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Padding padding(optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float start, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float top, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float end, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float bottom, optional boolean rtlAware);
-  }
-
-  public final class SemanticsKt {
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clearSemantics(androidx.wear.protolayout.modifiers.LayoutModifier);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier contentDescription(androidx.wear.protolayout.modifiers.LayoutModifier, String staticValue, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? dynamicValue);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier semanticsRole(androidx.wear.protolayout.modifiers.LayoutModifier, int semanticsRole);
-  }
-
-  public final class TransitionKt {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier enterTransition(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.EnterTransition transition);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier enterTransition(androidx.wear.protolayout.modifiers.LayoutModifier, optional androidx.wear.protolayout.ModifiersBuilders.FadeInTransition? fadeIn, optional androidx.wear.protolayout.ModifiersBuilders.SlideInTransition? slideIn);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier exitTransition(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.ExitTransition transition);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier exitTransition(androidx.wear.protolayout.modifiers.LayoutModifier, optional androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition? fadeOut, optional androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition? slideOut);
-  }
-
-  public final class VisibilityKt {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.modifiers.LayoutModifier visibility(androidx.wear.protolayout.modifiers.LayoutModifier, boolean staticVisibility, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool? dynamicVisibility);
-  }
-
-}
-
-package androidx.wear.protolayout.types {
-
-  public final class LayoutColor {
-    ctor public LayoutColor(@ColorInt int staticArgb, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? dynamicArgb);
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? getDynamicArgb();
-    method public int getStaticArgb();
-    property @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? dynamicArgb;
-    property @ColorInt public int staticArgb;
-  }
-
-  public final class LayoutColorUtil {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, @ColorInt int staticArgb);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, @ColorInt long staticArgb);
-    method public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(int);
-    method public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(long);
-    property public static androidx.wear.protolayout.types.LayoutColor int.argb;
-    property public static androidx.wear.protolayout.types.LayoutColor long.argb;
-  }
-
-  public final class LayoutString {
-    ctor public LayoutString(String staticValue);
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public LayoutString(String staticValue, androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint layoutConstraint);
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? getDynamicValue();
-    method public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint? getLayoutConstraint();
-    method public String getStaticValue();
-    property public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? dynamicValue;
-    property public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint? layoutConstraint;
-    property public String staticValue;
-  }
-
-  public final class LayoutStringUtil {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint asLayoutConstraint(String, optional int alignment);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.types.LayoutString createLayoutString(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString, String staticValue, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint layoutConstraint);
-    method public static androidx.wear.protolayout.types.LayoutString createLayoutString(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint stringLayoutConstraint(String longestPattern);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint stringLayoutConstraint(String longestPattern, optional int alignment);
-    property public static androidx.wear.protolayout.types.LayoutString String.layoutString;
-  }
-
-}
-
diff --git a/wear/protolayout/protolayout/api/res-1.3.0-beta01.txt b/wear/protolayout/protolayout/api/res-1.3.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/protolayout/protolayout/api/res-1.3.0-beta01.txt
+++ /dev/null
diff --git a/wear/protolayout/protolayout/api/restricted_1.3.0-beta01.txt b/wear/protolayout/protolayout/api/restricted_1.3.0-beta01.txt
deleted file mode 100644
index c7d1618..0000000
--- a/wear/protolayout/protolayout/api/restricted_1.3.0-beta01.txt
+++ /dev/null
@@ -1,1662 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.protolayout {
-
-  public final class ActionBuilders {
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidIntExtra intExtra(int);
-    method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName);
-    method public static androidx.wear.protolayout.ActionBuilders.LaunchAction launchAction(android.content.ComponentName, java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!>);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidLongExtra longExtra(long);
-    method public static androidx.wear.protolayout.ActionBuilders.AndroidStringExtra stringExtra(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface ActionBuilders.Action {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidActivity {
-    method public String getClassName();
-    method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
-    method public String getPackageName();
-  }
-
-  public static final class ActionBuilders.AndroidActivity.Builder {
-    ctor public ActionBuilders.AndroidActivity.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidActivity.Builder addKeyToExtraMapping(String, androidx.wear.protolayout.ActionBuilders.AndroidExtra);
-    method public androidx.wear.protolayout.ActionBuilders.AndroidActivity build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidActivity.Builder setClassName(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidActivity.Builder setPackageName(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidBooleanExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public boolean getValue();
-  }
-
-  public static final class ActionBuilders.AndroidBooleanExtra.Builder {
-    ctor public ActionBuilders.AndroidBooleanExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidBooleanExtra.Builder setValue(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidDoubleExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public double getValue();
-  }
-
-  public static final class ActionBuilders.AndroidDoubleExtra.Builder {
-    ctor public ActionBuilders.AndroidDoubleExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidDoubleExtra.Builder setValue(double);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface ActionBuilders.AndroidExtra {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidIntExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public int getValue();
-  }
-
-  public static final class ActionBuilders.AndroidIntExtra.Builder {
-    ctor public ActionBuilders.AndroidIntExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidIntExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidIntExtra.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidLongExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public long getValue();
-  }
-
-  public static final class ActionBuilders.AndroidLongExtra.Builder {
-    ctor public ActionBuilders.AndroidLongExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidLongExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidLongExtra.Builder setValue(long);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.AndroidStringExtra implements androidx.wear.protolayout.ActionBuilders.AndroidExtra {
-    method public String getValue();
-  }
-
-  public static final class ActionBuilders.AndroidStringExtra.Builder {
-    ctor public ActionBuilders.AndroidStringExtra.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.AndroidStringExtra build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.AndroidStringExtra.Builder setValue(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.LaunchAction implements androidx.wear.protolayout.ActionBuilders.Action {
-    method public androidx.wear.protolayout.ActionBuilders.AndroidActivity? getAndroidActivity();
-  }
-
-  public static final class ActionBuilders.LaunchAction.Builder {
-    ctor public ActionBuilders.LaunchAction.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.LaunchAction build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.protolayout.ActionBuilders.AndroidActivity);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ActionBuilders.LoadAction implements androidx.wear.protolayout.ActionBuilders.Action {
-    method public androidx.wear.protolayout.StateBuilders.State? getRequestState();
-  }
-
-  public static final class ActionBuilders.LoadAction.Builder {
-    ctor public ActionBuilders.LoadAction.Builder();
-    method public androidx.wear.protolayout.ActionBuilders.LoadAction build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.protolayout.StateBuilders.State);
-  }
-
-  public final class ColorBuilders {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.ColorBuilders.ColorProp argb(@ColorInt int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static interface ColorBuilders.Brush {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ColorBuilders.ColorProp {
-    method @ColorInt public int getArgb();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? getDynamicValue();
-  }
-
-  public static final class ColorBuilders.ColorProp.Builder {
-    ctor @Deprecated public ColorBuilders.ColorProp.Builder();
-    ctor public ColorBuilders.ColorProp.Builder(@ColorInt int);
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ColorBuilders.ColorProp.Builder setArgb(@ColorInt int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ColorBuilders.ColorProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class ColorBuilders.ColorStop {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getColor();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getOffset();
-  }
-
-  public static final class ColorBuilders.ColorStop.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public ColorBuilders.ColorStop.Builder(androidx.wear.protolayout.ColorBuilders.ColorProp, androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method public androidx.wear.protolayout.ColorBuilders.ColorStop build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class ColorBuilders.LinearGradient implements androidx.wear.protolayout.ColorBuilders.Brush {
-    method public java.util.List<androidx.wear.protolayout.ColorBuilders.ColorStop!> getColorStops();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getEndX();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getEndY();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getStartX();
-    method public androidx.wear.protolayout.DimensionBuilders.OffsetDimension? getStartY();
-  }
-
-  public static final class ColorBuilders.LinearGradient.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) @java.lang.SafeVarargs public ColorBuilders.LinearGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorProp!...);
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) @java.lang.SafeVarargs public ColorBuilders.LinearGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorStop!...);
-    method public androidx.wear.protolayout.ColorBuilders.LinearGradient build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setEndX(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setEndY(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setStartX(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ColorBuilders.LinearGradient.Builder setStartY(androidx.wear.protolayout.DimensionBuilders.OffsetDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class ColorBuilders.SweepGradient implements androidx.wear.protolayout.ColorBuilders.Brush {
-    method public java.util.List<androidx.wear.protolayout.ColorBuilders.ColorStop!> getColorStops();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getEndAngle();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getStartAngle();
-  }
-
-  public static final class ColorBuilders.SweepGradient.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) @java.lang.SafeVarargs public ColorBuilders.SweepGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorProp!...);
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) @java.lang.SafeVarargs public ColorBuilders.SweepGradient.Builder(androidx.wear.protolayout.ColorBuilders.ColorStop!...);
-    method public androidx.wear.protolayout.ColorBuilders.SweepGradient build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ColorBuilders.SweepGradient.Builder setEndAngle(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ColorBuilders.SweepGradient.Builder setStartAngle(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-  }
-
-  public final class DeviceParametersBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int DEVICE_PLATFORM_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int DEVICE_PLATFORM_WEAR_OS = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SCREEN_SHAPE_RECT = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SCREEN_SHAPE_ROUND = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DeviceParametersBuilders.Capabilities {
-    method public long getMinimumFreshnessLimitMillis();
-  }
-
-  public static final class DeviceParametersBuilders.Capabilities.Builder {
-    ctor public DeviceParametersBuilders.Capabilities.Builder();
-    method public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities.Builder setMinimumFreshnessLimitMillis(long);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DeviceParametersBuilders.DeviceParameters {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.DeviceParametersBuilders.Capabilities? getCapabilities();
-    method public int getDevicePlatform();
-    method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getFontScale();
-    method public androidx.wear.protolayout.expression.VersionBuilders.VersionInfo getRendererSchemaVersion();
-    method @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
-    method public int getScreenShape();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenWidthDp();
-  }
-
-  public static final class DeviceParametersBuilders.DeviceParameters.Builder {
-    ctor public DeviceParametersBuilders.DeviceParameters.Builder();
-    method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters build();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setCapabilities(androidx.wear.protolayout.DeviceParametersBuilders.Capabilities);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setFontScale(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setRendererSchemaVersion(androidx.wear.protolayout.expression.VersionBuilders.VersionInfo);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters.Builder setScreenWidthDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-  }
-
-  public final class DimensionBuilders {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.DegreesProp degrees(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.EmProp em(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.EmProp em(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp expand();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp weight(@FloatRange(from=0.0) float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp wrap();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static interface DimensionBuilders.AngularDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DimensionBuilders.AngularLayoutConstraint {
-    method public int getAngularAlignment();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.AngularLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public DimensionBuilders.AngularLayoutConstraint.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint.Builder setAngularAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class DimensionBuilders.BoundingBoxRatio implements androidx.wear.protolayout.DimensionBuilders.OffsetDimension androidx.wear.protolayout.DimensionBuilders.PivotDimension {
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp getRatio();
-  }
-
-  public static final class DimensionBuilders.BoundingBoxRatio.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public DimensionBuilders.BoundingBoxRatio.Builder(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method public androidx.wear.protolayout.DimensionBuilders.BoundingBoxRatio build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.ContainerDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.DegreesProp implements androidx.wear.protolayout.DimensionBuilders.AngularDimension {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
-    method public float getValue();
-  }
-
-  public static final class DimensionBuilders.DegreesProp.Builder {
-    ctor @Deprecated public DimensionBuilders.DegreesProp.Builder();
-    ctor public DimensionBuilders.DegreesProp.Builder(float);
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.DegreesProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.DegreesProp.Builder setValue(float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.DpProp implements androidx.wear.protolayout.DimensionBuilders.AngularDimension androidx.wear.protolayout.DimensionBuilders.ContainerDimension androidx.wear.protolayout.DimensionBuilders.ExtensionDimension androidx.wear.protolayout.DimensionBuilders.ImageDimension androidx.wear.protolayout.DimensionBuilders.OffsetDimension androidx.wear.protolayout.DimensionBuilders.PivotDimension androidx.wear.protolayout.DimensionBuilders.SpacerDimension {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.DpProp.Builder {
-    ctor @Deprecated public DimensionBuilders.DpProp.Builder();
-    ctor public DimensionBuilders.DpProp.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.DpProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.DpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.EmProp {
-    method public float getValue();
-  }
-
-  public static final class DimensionBuilders.EmProp.Builder {
-    ctor public DimensionBuilders.EmProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.EmProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.EmProp.Builder setValue(float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension androidx.wear.protolayout.DimensionBuilders.ImageDimension androidx.wear.protolayout.DimensionBuilders.SpacerDimension {
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getLayoutWeight();
-  }
-
-  public static final class DimensionBuilders.ExpandedDimensionProp.Builder {
-    ctor public DimensionBuilders.ExpandedDimensionProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.ExpandedDimensionProp.Builder setLayoutWeight(androidx.wear.protolayout.TypeBuilders.FloatProp);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ExperimentalProtoLayoutExtensionApi @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.ExtensionDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DimensionBuilders.HorizontalLayoutConstraint {
-    method public int getHorizontalAlignment();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.HorizontalLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public DimensionBuilders.HorizontalLayoutConstraint.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint.Builder setHorizontalAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.ImageDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static interface DimensionBuilders.OffsetDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static interface DimensionBuilders.PivotDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.ProportionalDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ImageDimension {
-    method @IntRange(from=0) public int getAspectRatioHeight();
-    method @IntRange(from=0) public int getAspectRatioWidth();
-  }
-
-  public static final class DimensionBuilders.ProportionalDimensionProp.Builder {
-    ctor public DimensionBuilders.ProportionalDimensionProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioHeight(@IntRange(from=0) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioWidth(@IntRange(from=0) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.SpProp {
-    method @Dimension(unit=androidx.annotation.Dimension.SP) public float getValue();
-  }
-
-  public static final class DimensionBuilders.SpProp.Builder {
-    ctor public DimensionBuilders.SpProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.DimensionBuilders.SpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface DimensionBuilders.SpacerDimension {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class DimensionBuilders.VerticalLayoutConstraint {
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-    method public int getVerticalAlignment();
-  }
-
-  public static final class DimensionBuilders.VerticalLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public DimensionBuilders.VerticalLayoutConstraint.Builder(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method public androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint.Builder setVerticalAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.protolayout.DimensionBuilders.ContainerDimension {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getMinimumSize();
-  }
-
-  public static final class DimensionBuilders.WrappedDimensionProp.Builder {
-    ctor public DimensionBuilders.WrappedDimensionProp.Builder();
-    method public androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.DimensionBuilders.WrappedDimensionProp.Builder setMinimumSize(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  public final class LayoutElementBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_END = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_START = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANGULAR_ALIGNMENT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_END = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_START = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int ARC_ANCHOR_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_CROP = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_FILL_BOUNDS = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_FIT = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int CONTENT_SCALE_MODE_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_VARIANT_BODY = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_VARIANT_TITLE = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_VARIANT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int FONT_WEIGHT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_END = 5; // 0x5
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_LEFT = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_RIGHT = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_START = 4; // 0x4
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int HORIZONTAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SPAN_VERTICAL_ALIGN_BOTTOM = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int SPAN_VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_BUTT = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_ROUND = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_SQUARE = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int STROKE_CAP_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_END = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_START = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final int TEXT_OVERFLOW_ELLIPSIZE = 4; // 0x4
-    field @Deprecated @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int TEXT_OVERFLOW_MARQUEE = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_TOP = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Arc implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getAnchorAngle();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp? getAnchorType();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement!> getContents();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlign();
-  }
-
-  public static final class LayoutElementBuilders.Arc.Builder {
-    ctor public LayoutElementBuilders.Arc.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Arc build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setAnchorAngle(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setAnchorType(androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setAnchorType(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setVerticalAlign(androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Arc.Builder setVerticalAlign(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcAdapter implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getContent();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getRotateContents();
-  }
-
-  public static final class LayoutElementBuilders.ArcAdapter.Builder {
-    ctor public LayoutElementBuilders.ArcAdapter.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter.Builder setContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcAnchorTypeProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.ArcAnchorTypeProp.Builder {
-    ctor public LayoutElementBuilders.ArcAnchorTypeProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcAnchorTypeProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class LayoutElementBuilders.ArcDirectionProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.ArcDirectionProp.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public LayoutElementBuilders.ArcDirectionProp.Builder(int);
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface LayoutElementBuilders.ArcLayoutElement {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcLine implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public androidx.wear.protolayout.ColorBuilders.Brush? getBrush();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint? getLayoutConstraintsForDynamicLength();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getLength();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp? getStrokeCap();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getThickness();
-  }
-
-  public static final class LayoutElementBuilders.ArcLine.Builder {
-    ctor public LayoutElementBuilders.ArcLine.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcLine build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setBrush(androidx.wear.protolayout.ColorBuilders.Brush);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setLayoutConstraintsForDynamicLength(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setLength(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setStrokeCap(androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setStrokeCap(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcLine.Builder setThickness(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcSpacer implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.AngularDimension? getAngularLength();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getLength();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getThickness();
-  }
-
-  public static final class LayoutElementBuilders.ArcSpacer.Builder {
-    ctor public LayoutElementBuilders.ArcSpacer.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setAngularLength(androidx.wear.protolayout.DimensionBuilders.AngularDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setLength(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcSpacer.Builder setThickness(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ArcText implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle? getFontStyle();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getText();
-  }
-
-  public static final class LayoutElementBuilders.ArcText.Builder {
-    ctor public LayoutElementBuilders.ArcText.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcText build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setFontStyle(androidx.wear.protolayout.LayoutElementBuilders.FontStyle);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setText(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcText.Builder setText(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Box implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getContents();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getHeight();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Box.Builder {
-    ctor public LayoutElementBuilders.Box.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Box build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setHorizontalAlignment(androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setHorizontalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setVerticalAlignment(androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setVerticalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Box.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ColorFilter {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getTint();
-  }
-
-  public static final class LayoutElementBuilders.ColorFilter.Builder {
-    ctor public LayoutElementBuilders.ColorFilter.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ColorFilter build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ColorFilter.Builder setTint(androidx.wear.protolayout.ColorBuilders.ColorProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Column implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getContents();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getHeight();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Column.Builder {
-    ctor public LayoutElementBuilders.Column.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Column build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setHorizontalAlignment(androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setHorizontalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Column.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.ContentScaleModeProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.ContentScaleModeProp.Builder {
-    ctor public LayoutElementBuilders.ContentScaleModeProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class LayoutElementBuilders.DashedArcLine implements androidx.wear.protolayout.LayoutElementBuilders.ArcLayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp? getArcDirection();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint? getLayoutConstraintsForDynamicLength();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp? getLength();
-    method public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern? getLinePattern();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Dimension(unit=androidx.annotation.Dimension.DP) public float getThickness();
-  }
-
-  public static final class LayoutElementBuilders.DashedArcLine.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public LayoutElementBuilders.DashedArcLine.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setArcDirection(androidx.wear.protolayout.LayoutElementBuilders.ArcDirectionProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setArcDirection(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setLayoutConstraintsForDynamicLength(androidx.wear.protolayout.DimensionBuilders.AngularLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setLength(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setLinePattern(androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.ArcModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedArcLine.Builder setThickness(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class LayoutElementBuilders.DashedLinePattern {
-    method public java.util.List<androidx.wear.protolayout.DimensionBuilders.DegreesProp!> getGapLocations();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getGapSize();
-  }
-
-  public static final class LayoutElementBuilders.DashedLinePattern.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public LayoutElementBuilders.DashedLinePattern.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern.Builder setGapInterval(float);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern.Builder setGapLocations(float...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.LayoutElementBuilders.DashedLinePattern.Builder setGapSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ExperimentalProtoLayoutExtensionApi @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class LayoutElementBuilders.ExtensionLayoutElement implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public String getExtensionId();
-    method public androidx.wear.protolayout.DimensionBuilders.ExtensionDimension? getHeight();
-    method public byte[] getPayload();
-    method public androidx.wear.protolayout.DimensionBuilders.ExtensionDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.ExtensionLayoutElement.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public LayoutElementBuilders.ExtensionLayoutElement.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setExtensionId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ExtensionDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setPayload(byte[]);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.ExtensionLayoutElement.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ExtensionDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static interface LayoutElementBuilders.FontSetting {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting roundness(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting tabularNum();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting weight(@IntRange(from=1, to=1000) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.LayoutElementBuilders.FontSetting width(@FloatRange(from=25, to=200) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.FontStyle {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getItalic();
-    method public androidx.wear.protolayout.DimensionBuilders.EmProp? getLetterSpacing();
-    method public java.util.List<java.lang.String!> getPreferredFontFamilies();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.FontSetting!> getSettings();
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp? getSize();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public java.util.List<androidx.wear.protolayout.DimensionBuilders.SpProp!> getSizes();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getUnderline();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp? getVariant();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp? getWeight();
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final String ROBOTO_FLEX_FONT = "roboto-flex";
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final String ROBOTO_FONT = "roboto";
-  }
-
-  public static final class LayoutElementBuilders.FontStyle.Builder {
-    ctor public LayoutElementBuilders.FontStyle.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setItalic(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setItalic(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setLetterSpacing(androidx.wear.protolayout.DimensionBuilders.EmProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setPreferredFontFamilies(String, java.lang.String!...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setSettings(androidx.wear.protolayout.LayoutElementBuilders.FontSetting!...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setSize(androidx.wear.protolayout.DimensionBuilders.SpProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setSizes(@Dimension(unit=androidx.annotation.Dimension.SP) @IntRange(from=1) int...);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setUnderline(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setUnderline(boolean);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setVariant(androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setVariant(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setWeight(androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder setWeight(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontStyles {
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.FontVariantProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.FontVariantProp.Builder {
-    ctor public LayoutElementBuilders.FontVariantProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontVariantProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.FontWeightProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.FontWeightProp.Builder {
-    ctor public LayoutElementBuilders.FontWeightProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.FontWeightProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.HorizontalAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.HorizontalAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.HorizontalAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Image implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.ColorFilter? getColorFilter();
-    method public androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp? getContentScaleMode();
-    method public androidx.wear.protolayout.DimensionBuilders.ImageDimension? getHeight();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getResourceId();
-    method public androidx.wear.protolayout.DimensionBuilders.ImageDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Image.Builder {
-    ctor public LayoutElementBuilders.Image.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Image build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setColorFilter(androidx.wear.protolayout.LayoutElementBuilders.ColorFilter);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setContentScaleMode(androidx.wear.protolayout.LayoutElementBuilders.ContentScaleModeProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setContentScaleMode(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ImageDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setResourceId(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setResourceId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Image.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ImageDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Layout {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static androidx.wear.protolayout.LayoutElementBuilders.Layout? fromByteArray(byte[]);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Layout fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.LayoutElement? getRoot();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public byte[] toByteArray();
-  }
-
-  public static final class LayoutElementBuilders.Layout.Builder {
-    ctor public LayoutElementBuilders.Layout.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Layout build();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Layout.Builder setRoot(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface LayoutElementBuilders.LayoutElement {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Row implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.LayoutElement!> getContents();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getHeight();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method public androidx.wear.protolayout.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Row.Builder {
-    ctor public LayoutElementBuilders.Row.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder addContent(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Row build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setVerticalAlignment(androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setVerticalAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Row.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.ContainerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Spacer implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.SpacerDimension? getHeight();
-    method public androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint? getLayoutConstraintsForDynamicHeight();
-    method public androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint? getLayoutConstraintsForDynamicWidth();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.DimensionBuilders.SpacerDimension? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.Spacer.Builder {
-    ctor public LayoutElementBuilders.Spacer.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Spacer build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.SpacerDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setLayoutConstraintsForDynamicHeight(androidx.wear.protolayout.DimensionBuilders.VerticalLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setLayoutConstraintsForDynamicWidth(androidx.wear.protolayout.DimensionBuilders.HorizontalLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spacer.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.SpacerDimension);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static interface LayoutElementBuilders.Span {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.SpanImage implements androidx.wear.protolayout.LayoutElementBuilders.Span {
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp? getAlignment();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getHeight();
-    method public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getResourceId();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getWidth();
-  }
-
-  public static final class LayoutElementBuilders.SpanImage.Builder {
-    ctor public LayoutElementBuilders.SpanImage.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanImage build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setAlignment(androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setHeight(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.SpanModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setResourceId(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setResourceId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanImage.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.SpanText implements androidx.wear.protolayout.LayoutElementBuilders.Span {
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle? getFontStyle();
-    method public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers? getModifiers();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getText();
-  }
-
-  public static final class LayoutElementBuilders.SpanText.Builder {
-    ctor public LayoutElementBuilders.SpanText.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanText build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setFontStyle(androidx.wear.protolayout.LayoutElementBuilders.FontStyle);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.SpanModifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setText(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanText.Builder setText(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.SpanVerticalAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.SpanVerticalAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.SpanVerticalAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.SpanVerticalAlignmentProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Spannable implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp? getLineHeight();
-    method @SuppressCompatibility @IntRange(from=0xffffffff) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public int getMarqueeIterations();
-    method public androidx.wear.protolayout.TypeBuilders.Int32Prop? getMaxLines();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method public java.util.List<androidx.wear.protolayout.LayoutElementBuilders.Span!> getSpans();
-  }
-
-  public static final class LayoutElementBuilders.Spannable.Builder {
-    ctor public LayoutElementBuilders.Spannable.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.protolayout.LayoutElementBuilders.Span);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Spannable build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.protolayout.DimensionBuilders.SpProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMarqueeIterations(@IntRange(from=0xffffffff) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.protolayout.TypeBuilders.Int32Prop);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(androidx.wear.protolayout.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setOverflow(androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Spannable.Builder setOverflow(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class LayoutElementBuilders.StrokeCapProp {
-    method public androidx.wear.protolayout.ModifiersBuilders.Shadow? getShadow();
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.StrokeCapProp.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public LayoutElementBuilders.StrokeCapProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp.Builder setShadow(androidx.wear.protolayout.ModifiersBuilders.Shadow);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.StrokeCapProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.Text implements androidx.wear.protolayout.LayoutElementBuilders.LayoutElement {
-    method public androidx.wear.protolayout.LayoutElementBuilders.FontStyle? getFontStyle();
-    method public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint? getLayoutConstraintsForDynamicText();
-    method public androidx.wear.protolayout.DimensionBuilders.SpProp? getLineHeight();
-    method @SuppressCompatibility @IntRange(from=0xffffffff) @androidx.wear.protolayout.expression.ProtoLayoutExperimental public int getMarqueeIterations();
-    method public androidx.wear.protolayout.TypeBuilders.Int32Prop? getMaxLines();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers? getModifiers();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getText();
-  }
-
-  public static final class LayoutElementBuilders.Text.Builder {
-    ctor public LayoutElementBuilders.Text.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.Text build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.protolayout.LayoutElementBuilders.FontStyle);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setLayoutConstraintsForDynamicText(androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.protolayout.DimensionBuilders.SpProp);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMarqueeIterations(@IntRange(from=0xffffffff) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.protolayout.TypeBuilders.Int32Prop);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.protolayout.ModifiersBuilders.Modifiers);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMultilineAlignment(androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setMultilineAlignment(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setOverflow(androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setOverflow(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setText(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.Text.Builder setText(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.TextAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.TextAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.TextAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.TextAlignmentProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.TextOverflowProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.TextOverflowProp.Builder {
-    ctor public LayoutElementBuilders.TextOverflowProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.TextOverflowProp.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class LayoutElementBuilders.VerticalAlignmentProp {
-    method public int getValue();
-  }
-
-  public static final class LayoutElementBuilders.VerticalAlignmentProp.Builder {
-    ctor public LayoutElementBuilders.VerticalAlignmentProp.Builder();
-    method public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.LayoutElementBuilders.VerticalAlignmentProp.Builder setValue(int);
-  }
-
-  public final class ModifiersBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_BUTTON = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_CHECKBOX = 3; // 0x3
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_IMAGE = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_NONE = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_RADIOBUTTON = 5; // 0x5
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SEMANTICS_ROLE_SWITCH = 4; // 0x4
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_BOTTOM_TO_TOP = 4; // 0x4
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_LEFT_TO_RIGHT = 1; // 0x1
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_RIGHT_TO_LEFT = 2; // 0x2
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_TOP_TO_BOTTOM = 3; // 0x3
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_DIRECTION_UNDEFINED = 0; // 0x0
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_PARENT_SNAP_TO_INSIDE = 1; // 0x1
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_PARENT_SNAP_TO_OUTSIDE = 2; // 0x2
-    field @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int SLIDE_PARENT_SNAP_UNDEFINED = 0; // 0x0
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.AnimatedVisibility {
-    method public androidx.wear.protolayout.ModifiersBuilders.EnterTransition? getEnterTransition();
-    method public androidx.wear.protolayout.ModifiersBuilders.ExitTransition? getExitTransition();
-  }
-
-  public static final class ModifiersBuilders.AnimatedVisibility.Builder {
-    ctor public ModifiersBuilders.AnimatedVisibility.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility.Builder setEnterTransition(androidx.wear.protolayout.ModifiersBuilders.EnterTransition);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility.Builder setExitTransition(androidx.wear.protolayout.ModifiersBuilders.ExitTransition);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.ArcModifiers {
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable? getClickable();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getOpacity();
-    method public androidx.wear.protolayout.ModifiersBuilders.Semantics? getSemantics();
-  }
-
-  public static final class ModifiersBuilders.ArcModifiers.Builder {
-    ctor public ModifiersBuilders.ArcModifiers.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers.Builder setClickable(androidx.wear.protolayout.ModifiersBuilders.Clickable);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers.Builder setOpacity(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.ArcModifiers.Builder setSemantics(androidx.wear.protolayout.ModifiersBuilders.Semantics);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Background {
-    method public androidx.wear.protolayout.ColorBuilders.Brush? getBrush();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner? getCorner();
-  }
-
-  public static final class ModifiersBuilders.Background.Builder {
-    ctor public ModifiersBuilders.Background.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Background build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ModifiersBuilders.Background.Builder setBrush(androidx.wear.protolayout.ColorBuilders.Brush);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Background.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Background.Builder setCorner(androidx.wear.protolayout.ModifiersBuilders.Corner);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Border {
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp? getColor();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getWidth();
-  }
-
-  public static final class ModifiersBuilders.Border.Builder {
-    ctor public ModifiersBuilders.Border.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Border build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Border.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Border.Builder setWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Clickable {
-    method public String getId();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getMinimumClickableHeight();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getMinimumClickableWidth();
-    method public androidx.wear.protolayout.ActionBuilders.Action? getOnClick();
-    method public boolean isVisualFeedbackEnabled();
-  }
-
-  public static final class ModifiersBuilders.Clickable.Builder {
-    ctor public ModifiersBuilders.Clickable.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setId(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setMinimumClickableHeight(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setMinimumClickableWidth(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setOnClick(androidx.wear.protolayout.ActionBuilders.Action);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Clickable.Builder setVisualFeedbackEnabled(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Corner {
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getBottomLeftRadius();
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getBottomRightRadius();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getRadius();
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getTopLeftRadius();
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius getTopRightRadius();
-  }
-
-  public static final class ModifiersBuilders.Corner.Builder {
-    ctor public ModifiersBuilders.Corner.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Corner build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomLeftRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomLeftRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomRightRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setBottomRightRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setRadius(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopLeftRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopLeftRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopRightRadius(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Corner.Builder setTopRightRadius(androidx.wear.protolayout.ModifiersBuilders.CornerRadius);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class ModifiersBuilders.CornerRadius {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getX();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getY();
-  }
-
-  public static final class ModifiersBuilders.CornerRadius.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public ModifiersBuilders.CornerRadius.Builder(androidx.wear.protolayout.DimensionBuilders.DpProp, androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method public androidx.wear.protolayout.ModifiersBuilders.CornerRadius build();
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public static final class ModifiersBuilders.DefaultContentTransitions {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.EnterTransition fadeIn();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.EnterTransition fadeInSlideIn(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.ExitTransition fadeOut();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.ExitTransition fadeOutSlideOut(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.EnterTransition slideIn(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.ModifiersBuilders.ExitTransition slideOut(@SuppressCompatibility int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.ElementMetadata {
-    method public byte[] getTagData();
-  }
-
-  public static final class ModifiersBuilders.ElementMetadata.Builder {
-    ctor public ModifiersBuilders.ElementMetadata.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.ElementMetadata build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.ElementMetadata.Builder setTagData(byte[]);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.EnterTransition {
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition? getFadeIn();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition? getSlideIn();
-  }
-
-  public static final class ModifiersBuilders.EnterTransition.Builder {
-    ctor public ModifiersBuilders.EnterTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.EnterTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.EnterTransition.Builder setFadeIn(androidx.wear.protolayout.ModifiersBuilders.FadeInTransition);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.EnterTransition.Builder setSlideIn(androidx.wear.protolayout.ModifiersBuilders.SlideInTransition);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.ExitTransition {
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition? getFadeOut();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition? getSlideOut();
-  }
-
-  public static final class ModifiersBuilders.ExitTransition.Builder {
-    ctor public ModifiersBuilders.ExitTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.ExitTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.ExitTransition.Builder setFadeOut(androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.ExitTransition.Builder setSlideOut(androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.FadeInTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @FloatRange(from=0.0, to=1.0) public float getInitialAlpha();
-  }
-
-  public static final class ModifiersBuilders.FadeInTransition.Builder {
-    ctor public ModifiersBuilders.FadeInTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.FadeInTransition.Builder setInitialAlpha(@FloatRange(from=0.0, to=1.0) float);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.FadeOutTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @FloatRange(from=0.0, to=1.0) public float getTargetAlpha();
-  }
-
-  public static final class ModifiersBuilders.FadeOutTransition.Builder {
-    ctor public ModifiersBuilders.FadeOutTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method public androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition.Builder setTargetAlpha(@FloatRange(from=0.0, to=1.0) float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Modifiers {
-    method public androidx.wear.protolayout.ModifiersBuilders.Background? getBackground();
-    method public androidx.wear.protolayout.ModifiersBuilders.Border? getBorder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable? getClickable();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility? getContentUpdateAnimation();
-    method public androidx.wear.protolayout.ModifiersBuilders.ElementMetadata? getMetadata();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp? getOpacity();
-    method public androidx.wear.protolayout.ModifiersBuilders.Padding? getPadding();
-    method public androidx.wear.protolayout.ModifiersBuilders.Semantics? getSemantics();
-    method public androidx.wear.protolayout.ModifiersBuilders.Transformation? getTransformation();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.TypeBuilders.BoolProp isVisible();
-  }
-
-  public static final class ModifiersBuilders.Modifiers.Builder {
-    ctor public ModifiersBuilders.Modifiers.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Modifiers build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setBackground(androidx.wear.protolayout.ModifiersBuilders.Background);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setBorder(androidx.wear.protolayout.ModifiersBuilders.Border);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setClickable(androidx.wear.protolayout.ModifiersBuilders.Clickable);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setContentUpdateAnimation(androidx.wear.protolayout.ModifiersBuilders.AnimatedVisibility);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setMetadata(androidx.wear.protolayout.ModifiersBuilders.ElementMetadata);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setOpacity(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setPadding(androidx.wear.protolayout.ModifiersBuilders.Padding);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setSemantics(androidx.wear.protolayout.ModifiersBuilders.Semantics);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setTransformation(androidx.wear.protolayout.ModifiersBuilders.Transformation);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Modifiers.Builder setVisible(androidx.wear.protolayout.TypeBuilders.BoolProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Padding {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getBottom();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getEnd();
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp? getRtlAware();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getStart();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp? getTop();
-  }
-
-  public static final class ModifiersBuilders.Padding.Builder {
-    ctor public ModifiersBuilders.Padding.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Padding build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setAll(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setBottom(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setEnd(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setRtlAware(androidx.wear.protolayout.TypeBuilders.BoolProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setRtlAware(boolean);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setStart(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Padding.Builder setTop(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.Semantics {
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getContentDescription();
-    method public int getRole();
-    method public androidx.wear.protolayout.TypeBuilders.StringProp? getStateDescription();
-  }
-
-  public static final class ModifiersBuilders.Semantics.Builder {
-    ctor public ModifiersBuilders.Semantics.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Semantics build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setContentDescription(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setRole(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.Semantics.Builder setStateDescription(androidx.wear.protolayout.TypeBuilders.StringProp);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static final class ModifiersBuilders.Shadow {
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getBlurRadius();
-    method public androidx.wear.protolayout.ColorBuilders.ColorProp getColor();
-  }
-
-  public static final class ModifiersBuilders.Shadow.Builder {
-    ctor public ModifiersBuilders.Shadow.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Shadow build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Shadow.Builder setBlurRadius(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public androidx.wear.protolayout.ModifiersBuilders.Shadow.Builder setColor(androidx.wear.protolayout.ColorBuilders.ColorProp);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface ModifiersBuilders.SlideBound {
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.SlideInTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @SuppressCompatibility public int getDirection();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideBound? getInitialSlideBound();
-  }
-
-  public static final class ModifiersBuilders.SlideInTransition.Builder {
-    ctor public ModifiersBuilders.SlideInTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition.Builder setDirection(@SuppressCompatibility int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideInTransition.Builder setInitialSlideBound(androidx.wear.protolayout.ModifiersBuilders.SlideBound);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.SlideOutTransition {
-    method public androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec? getAnimationSpec();
-    method @SuppressCompatibility public int getDirection();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideBound? getTargetSlideBound();
-  }
-
-  public static final class ModifiersBuilders.SlideOutTransition.Builder {
-    ctor public ModifiersBuilders.SlideOutTransition.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition.Builder setAnimationSpec(androidx.wear.protolayout.expression.AnimationParameterBuilders.AnimationSpec);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition.Builder setDirection(@SuppressCompatibility int);
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition.Builder setTargetSlideBound(androidx.wear.protolayout.ModifiersBuilders.SlideBound);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ModifiersBuilders.SlideParentBound implements androidx.wear.protolayout.ModifiersBuilders.SlideBound {
-    method @SuppressCompatibility public int getSnapTo();
-  }
-
-  public static final class ModifiersBuilders.SlideParentBound.Builder {
-    ctor public ModifiersBuilders.SlideParentBound.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SlideParentBound build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ModifiersBuilders.SlideParentBound.Builder setSnapTo(@SuppressCompatibility int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ModifiersBuilders.SpanModifiers {
-    method public androidx.wear.protolayout.ModifiersBuilders.Clickable? getClickable();
-  }
-
-  public static final class ModifiersBuilders.SpanModifiers.Builder {
-    ctor public ModifiersBuilders.SpanModifiers.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ModifiersBuilders.SpanModifiers.Builder setClickable(androidx.wear.protolayout.ModifiersBuilders.Clickable);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class ModifiersBuilders.Transformation {
-    method public androidx.wear.protolayout.DimensionBuilders.PivotDimension getPivotX();
-    method public androidx.wear.protolayout.DimensionBuilders.PivotDimension getPivotY();
-    method public androidx.wear.protolayout.DimensionBuilders.DegreesProp getRotation();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp getScaleX();
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp getScaleY();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getTranslationX();
-    method public androidx.wear.protolayout.DimensionBuilders.DpProp getTranslationY();
-  }
-
-  public static final class ModifiersBuilders.Transformation.Builder {
-    ctor public ModifiersBuilders.Transformation.Builder();
-    method public androidx.wear.protolayout.ModifiersBuilders.Transformation build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setPivotX(androidx.wear.protolayout.DimensionBuilders.PivotDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setPivotY(androidx.wear.protolayout.DimensionBuilders.PivotDimension);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setRotation(androidx.wear.protolayout.DimensionBuilders.DegreesProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setScaleX(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setScaleY(androidx.wear.protolayout.TypeBuilders.FloatProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setTranslationX(androidx.wear.protolayout.DimensionBuilders.DpProp);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.protolayout.ModifiersBuilders.Transformation.Builder setTranslationY(androidx.wear.protolayout.DimensionBuilders.DpProp);
-  }
-
-  public final class ResourceBuilders {
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANIMATED_IMAGE_FORMAT_AVD = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int ANIMATED_IMAGE_FORMAT_UNDEFINED = 0; // 0x0
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final int IMAGE_FORMAT_ARGB_8888 = 2; // 0x2
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
-    field @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId {
-    method public int getAnimatedImageFormat();
-    method @DrawableRes public int getResourceId();
-    method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
-  }
-
-  public static final class ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder {
-    ctor public ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId.Builder setStartTrigger(androidx.wear.protolayout.TriggerBuilders.Trigger);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.AndroidImageResourceByResId {
-    method @DrawableRes public int getResourceId();
-  }
-
-  public static final class ResourceBuilders.AndroidImageResourceByResId.Builder {
-    ctor public ResourceBuilders.AndroidImageResourceByResId.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static final class ResourceBuilders.AndroidLottieResourceByResId {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
-    method @RawRes public int getRawResourceId();
-    method public androidx.wear.protolayout.TriggerBuilders.Trigger? getStartTrigger();
-  }
-
-  public static final class ResourceBuilders.AndroidLottieResourceByResId.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public ResourceBuilders.AndroidLottieResourceByResId.Builder(@RawRes int);
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId.Builder setProgress(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId.Builder setStartTrigger(androidx.wear.protolayout.TriggerBuilders.Trigger);
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId {
-    method public int getAnimatedImageFormat();
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getProgress();
-    method @DrawableRes public int getResourceId();
-  }
-
-  public static final class ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder {
-    ctor public ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setAnimatedImageFormat(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setProgress(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId.Builder setResourceId(@DrawableRes int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.ImageResource {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId? getAndroidAnimatedResourceByResId();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId? getAndroidLottieResourceByResId();
-    method public androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental public androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId? getAndroidSeekableAnimatedResourceByResId();
-    method public androidx.wear.protolayout.ResourceBuilders.InlineImageResource? getInlineResource();
-  }
-
-  public static final class ResourceBuilders.ImageResource.Builder {
-    ctor public ResourceBuilders.ImageResource.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.ImageResource build();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidAnimatedImageResourceByResId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidLottieResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidLottieResourceByResId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidImageResourceByResId);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setAndroidSeekableAnimatedResourceByResId(androidx.wear.protolayout.ResourceBuilders.AndroidSeekableAnimatedImageResourceByResId);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.protolayout.ResourceBuilders.InlineImageResource);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.InlineImageResource {
-    method public byte[] getData();
-    method public int getFormat();
-    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getHeightPx();
-    method @Dimension(unit=androidx.annotation.Dimension.PX) public int getWidthPx();
-  }
-
-  public static final class ResourceBuilders.InlineImageResource.Builder {
-    ctor public ResourceBuilders.InlineImageResource.Builder();
-    method public androidx.wear.protolayout.ResourceBuilders.InlineImageResource build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setData(byte[]);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setFormat(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.InlineImageResource.Builder setWidthPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class ResourceBuilders.Resources {
-    method public java.util.Map<java.lang.String!,androidx.wear.protolayout.ResourceBuilders.ImageResource!> getIdToImageMapping();
-    method public String getVersion();
-  }
-
-  public static final class ResourceBuilders.Resources.Builder {
-    ctor public ResourceBuilders.Resources.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.Resources.Builder addIdToImageMapping(String, androidx.wear.protolayout.ResourceBuilders.ImageResource);
-    method public androidx.wear.protolayout.ResourceBuilders.Resources build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.ResourceBuilders.Resources.Builder setVersion(String);
-  }
-
-  public final class StateBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class StateBuilders.State {
-    method public java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!> getKeyToValueMapping();
-    method public String getLastClickableId();
-    method public static int getMaxStateEntryCount();
-    method public androidx.wear.protolayout.expression.DynamicDataMap getStateMap();
-  }
-
-  public static final class StateBuilders.State.Builder {
-    ctor public StateBuilders.State.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public <T extends androidx.wear.protolayout.expression.DynamicBuilders.DynamicType> androidx.wear.protolayout.StateBuilders.State.Builder addKeyToValueMapping(androidx.wear.protolayout.expression.AppDataKey<T!>, androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<T!>);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.StateBuilders.State.Builder addToStateMap(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object!>...);
-    method public androidx.wear.protolayout.StateBuilders.State build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.StateBuilders.State.Builder setStateMap(androidx.wear.protolayout.expression.DynamicDataMap);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.StateBuilders.State.Builder setStateMap(androidx.wear.protolayout.expression.DynamicDataPair<? extends java.lang.Object!>...);
-  }
-
-  public final class TimelineBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TimelineBuilders.TimeInterval {
-    method public long getEndMillis();
-    method public long getStartMillis();
-  }
-
-  public static final class TimelineBuilders.TimeInterval.Builder {
-    ctor public TimelineBuilders.TimeInterval.Builder();
-    method public androidx.wear.protolayout.TimelineBuilders.TimeInterval build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimeInterval.Builder setEndMillis(long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimeInterval.Builder setStartMillis(long);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TimelineBuilders.Timeline {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.TimelineBuilders.Timeline fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public java.util.List<androidx.wear.protolayout.TimelineBuilders.TimelineEntry!> getTimelineEntries();
-  }
-
-  public static final class TimelineBuilders.Timeline.Builder {
-    ctor public TimelineBuilders.Timeline.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.Timeline.Builder addTimelineEntry(androidx.wear.protolayout.TimelineBuilders.TimelineEntry);
-    method public androidx.wear.protolayout.TimelineBuilders.Timeline build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TimelineBuilders.TimelineEntry {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static androidx.wear.protolayout.TimelineBuilders.TimelineEntry fromLayoutElement(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement);
-    method public androidx.wear.protolayout.LayoutElementBuilders.Layout? getLayout();
-    method public androidx.wear.protolayout.TimelineBuilders.TimeInterval? getValidity();
-  }
-
-  public static final class TimelineBuilders.TimelineEntry.Builder {
-    ctor public TimelineBuilders.TimelineEntry.Builder();
-    method public androidx.wear.protolayout.TimelineBuilders.TimelineEntry build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimelineEntry.Builder setLayout(androidx.wear.protolayout.LayoutElementBuilders.Layout);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.protolayout.TimelineBuilders.TimeInterval);
-  }
-
-  public final class TriggerBuilders {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnConditionMetTrigger(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnLoadTrigger();
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnVisibleOnceTrigger();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TriggerBuilders.Trigger createOnVisibleTrigger();
-  }
-
-  @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class TriggerBuilders.OnVisibleOnceTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
-  }
-
-  public static final class TriggerBuilders.OnVisibleOnceTrigger.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public TriggerBuilders.OnVisibleOnceTrigger.Builder();
-    method public androidx.wear.protolayout.TriggerBuilders.OnVisibleOnceTrigger build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class TriggerBuilders.OnVisibleTrigger implements androidx.wear.protolayout.TriggerBuilders.Trigger {
-  }
-
-  public static final class TriggerBuilders.OnVisibleTrigger.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public TriggerBuilders.OnVisibleTrigger.Builder();
-    method public androidx.wear.protolayout.TriggerBuilders.OnVisibleTrigger build();
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static interface TriggerBuilders.Trigger {
-  }
-
-  public final class TypeBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.BoolProp {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool? getDynamicValue();
-    method public boolean getValue();
-  }
-
-  public static final class TypeBuilders.BoolProp.Builder {
-    ctor @Deprecated public TypeBuilders.BoolProp.Builder();
-    ctor public TypeBuilders.BoolProp.Builder(boolean);
-    method public androidx.wear.protolayout.TypeBuilders.BoolProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.BoolProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.BoolProp.Builder setValue(boolean);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.FloatProp {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? getDynamicValue();
-    method public float getValue();
-  }
-
-  public static final class TypeBuilders.FloatProp.Builder {
-    ctor @Deprecated public TypeBuilders.FloatProp.Builder();
-    ctor public TypeBuilders.FloatProp.Builder(float);
-    method public androidx.wear.protolayout.TypeBuilders.FloatProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.FloatProp.Builder setValue(float);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.Int32Prop {
-    method public int getValue();
-  }
-
-  public static final class TypeBuilders.Int32Prop.Builder {
-    ctor public TypeBuilders.Int32Prop.Builder();
-    method public androidx.wear.protolayout.TypeBuilders.Int32Prop build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.Int32Prop.Builder setValue(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static final class TypeBuilders.StringLayoutConstraint {
-    method public int getAlignment();
-    method public String getPatternForLayout();
-  }
-
-  public static final class TypeBuilders.StringLayoutConstraint.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public TypeBuilders.StringLayoutConstraint.Builder(String);
-    method public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint.Builder setAlignment(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TypeBuilders.StringProp {
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? getDynamicValue();
-    method public String getValue();
-  }
-
-  public static final class TypeBuilders.StringProp.Builder {
-    ctor @Deprecated public TypeBuilders.StringProp.Builder();
-    ctor public TypeBuilders.StringProp.Builder(String);
-    method public androidx.wear.protolayout.TypeBuilders.StringProp build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.TypeBuilders.StringProp.Builder setDynamicValue(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.protolayout.TypeBuilders.StringProp.Builder setValue(String);
-  }
-
-}
-
-package androidx.wear.protolayout.layout {
-
-  public final class TextKt {
-    method public static androidx.wear.protolayout.LayoutElementBuilders.Text basicText(androidx.wear.protolayout.types.LayoutString text, optional androidx.wear.protolayout.LayoutElementBuilders.FontStyle? fontStyle, optional androidx.wear.protolayout.modifiers.LayoutModifier? modifier, optional int maxLines, optional int alignment, optional int overflow, optional @Dimension(unit=androidx.annotation.Dimension.Companion.SP) float lineHeight);
-    method public static androidx.wear.protolayout.LayoutElementBuilders.FontStyle fontStyle(optional @Dimension(unit=androidx.annotation.Dimension.Companion.SP) float size, optional boolean italic, optional boolean underline, optional androidx.wear.protolayout.types.LayoutColor? color, optional int weight, optional float letterSpacingEm, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) java.util.List<java.lang.Float> additionalSizesSp, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) java.util.List<? extends androidx.wear.protolayout.LayoutElementBuilders.FontSetting> settings, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) java.util.List<java.lang.String> preferredFontFamilies);
-  }
-
-}
-
-package androidx.wear.protolayout.modifiers {
-
-  public final class BackgroundKt {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=500) public static androidx.wear.protolayout.modifiers.LayoutModifier background(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ColorBuilders.Brush brush);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier background(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.types.LayoutColor color);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clip(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.Corner corner);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clip(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float cornerRadius);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clip(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipBottomLeft(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipBottomRight(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipTopLeft(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier clipTopRight(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float x, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float y);
-  }
-
-  public final class BorderKt {
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier border(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float width, androidx.wear.protolayout.types.LayoutColor color);
-  }
-
-  public final class ClickableKt {
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable();
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) float minClickableWidth);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Clickable clickable(optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) float minClickableWidth, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) float minClickableHeight);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clickable(androidx.wear.protolayout.modifiers.LayoutModifier, optional androidx.wear.protolayout.ActionBuilders.Action action, optional String? id);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clickable(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.Clickable clickable);
-    method public static androidx.wear.protolayout.ActionBuilders.LoadAction loadAction(optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) androidx.wear.protolayout.expression.DynamicDataMap? requestedStateMap);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.modifiers.LayoutModifier minimumTouchTargetSize(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minWidth, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float minHeight);
-  }
-
-  public interface LayoutModifier {
-    method public <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.wear.protolayout.modifiers.LayoutModifier.Element,? extends R> operation);
-    method public default infix androidx.wear.protolayout.modifiers.LayoutModifier then(androidx.wear.protolayout.modifiers.LayoutModifier other);
-    field public static final androidx.wear.protolayout.modifiers.LayoutModifier.Companion Companion;
-  }
-
-  public static final class LayoutModifier.Companion implements androidx.wear.protolayout.modifiers.LayoutModifier {
-    method public <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.wear.protolayout.modifiers.LayoutModifier.Element,? extends R> operation);
-  }
-
-  public static interface LayoutModifier.Element extends androidx.wear.protolayout.modifiers.LayoutModifier {
-    method public default <R> R foldRight(R initial, kotlin.jvm.functions.Function2<? super R,? super androidx.wear.protolayout.modifiers.LayoutModifier.Element,? extends R> operation);
-  }
-
-  public final class ModifierAppliersKt {
-    method public static androidx.wear.protolayout.ModifiersBuilders.Modifiers toProtoLayoutModifiers(androidx.wear.protolayout.modifiers.LayoutModifier);
-  }
-
-  public final class OpacityKt {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static androidx.wear.protolayout.modifiers.LayoutModifier opacity(androidx.wear.protolayout.modifiers.LayoutModifier, @FloatRange(from=0.0, to=1.0) float staticValue, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicFloat? dynamicValue);
-  }
-
-  public final class PaddingKt {
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.Padding padding);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float all);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float horizontal, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float vertical);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier padding(androidx.wear.protolayout.modifiers.LayoutModifier, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float start, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float top, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float end, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float bottom, optional boolean rtlAware);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Padding padding(@Dimension(unit=androidx.annotation.Dimension.Companion.DP) float all);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Padding padding(@Dimension(unit=androidx.annotation.Dimension.Companion.DP) float horizontal, @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float vertical);
-    method public static androidx.wear.protolayout.ModifiersBuilders.Padding padding(optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float start, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float top, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float end, optional @Dimension(unit=androidx.annotation.Dimension.Companion.DP) float bottom, optional boolean rtlAware);
-  }
-
-  public final class SemanticsKt {
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier clearSemantics(androidx.wear.protolayout.modifiers.LayoutModifier);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier contentDescription(androidx.wear.protolayout.modifiers.LayoutModifier, String staticValue, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? dynamicValue);
-    method public static androidx.wear.protolayout.modifiers.LayoutModifier semanticsRole(androidx.wear.protolayout.modifiers.LayoutModifier, int semanticsRole);
-  }
-
-  public final class TransitionKt {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier enterTransition(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.EnterTransition transition);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier enterTransition(androidx.wear.protolayout.modifiers.LayoutModifier, optional androidx.wear.protolayout.ModifiersBuilders.FadeInTransition? fadeIn, optional androidx.wear.protolayout.ModifiersBuilders.SlideInTransition? slideIn);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier exitTransition(androidx.wear.protolayout.modifiers.LayoutModifier, androidx.wear.protolayout.ModifiersBuilders.ExitTransition transition);
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.modifiers.LayoutModifier exitTransition(androidx.wear.protolayout.modifiers.LayoutModifier, optional androidx.wear.protolayout.ModifiersBuilders.FadeOutTransition? fadeOut, optional androidx.wear.protolayout.ModifiersBuilders.SlideOutTransition? slideOut);
-  }
-
-  public final class VisibilityKt {
-    method @SuppressCompatibility @androidx.wear.protolayout.expression.ProtoLayoutExperimental @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=300) public static androidx.wear.protolayout.modifiers.LayoutModifier visibility(androidx.wear.protolayout.modifiers.LayoutModifier, boolean staticVisibility, optional androidx.wear.protolayout.expression.DynamicBuilders.DynamicBool? dynamicVisibility);
-  }
-
-}
-
-package androidx.wear.protolayout.types {
-
-  public final class LayoutColor {
-    ctor public LayoutColor(@ColorInt int staticArgb, optional @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? dynamicArgb);
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? getDynamicArgb();
-    method public int getStaticArgb();
-    property @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor? dynamicArgb;
-    property @ColorInt public int staticArgb;
-  }
-
-  public final class LayoutColorUtil {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, @ColorInt int staticArgb);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(androidx.wear.protolayout.expression.DynamicBuilders.DynamicColor, @ColorInt long staticArgb);
-    method public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(int);
-    method public static androidx.wear.protolayout.types.LayoutColor createLayoutColor(long);
-    property public static androidx.wear.protolayout.types.LayoutColor int.argb;
-    property public static androidx.wear.protolayout.types.LayoutColor long.argb;
-  }
-
-  public final class LayoutString {
-    ctor public LayoutString(String staticValue);
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public LayoutString(String staticValue, androidx.wear.protolayout.expression.DynamicBuilders.DynamicString dynamicValue, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint layoutConstraint);
-    method public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? getDynamicValue();
-    method public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint? getLayoutConstraint();
-    method public String getStaticValue();
-    property public androidx.wear.protolayout.expression.DynamicBuilders.DynamicString? dynamicValue;
-    property public androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint? layoutConstraint;
-    property public String staticValue;
-  }
-
-  public final class LayoutStringUtil {
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint asLayoutConstraint(String, optional int alignment);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.types.LayoutString createLayoutString(androidx.wear.protolayout.expression.DynamicBuilders.DynamicString, String staticValue, androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint layoutConstraint);
-    method public static androidx.wear.protolayout.types.LayoutString createLayoutString(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint stringLayoutConstraint(String longestPattern);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public static androidx.wear.protolayout.TypeBuilders.StringLayoutConstraint stringLayoutConstraint(String longestPattern, optional int alignment);
-    property public static androidx.wear.protolayout.types.LayoutString String.layoutString;
-  }
-
-}
-
diff --git a/wear/tiles/tiles-material/api/1.5.0-beta01.txt b/wear/tiles/tiles-material/api/1.5.0-beta01.txt
deleted file mode 100644
index 85c110b..0000000
--- a/wear/tiles/tiles-material/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,298 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.material {
-
-  @Deprecated public class Button implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.Button? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ButtonColors getButtonColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public CharSequence? getContentDescription();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method @Deprecated public String? getIconContent();
-    method @Deprecated public String? getImageContent();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getSize();
-    method @Deprecated public String? getTextContent();
-  }
-
-  @Deprecated public static final class Button.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public Button.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable);
-    method @Deprecated public androidx.wear.tiles.material.Button build();
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setImageContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setTextContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setTextContent(String, int);
-  }
-
-  @Deprecated public class ButtonColors {
-    ctor @Deprecated public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
-    method @Deprecated public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
-    method @Deprecated public static androidx.wear.tiles.material.ButtonColors secondaryButtonColors(androidx.wear.tiles.material.Colors);
-  }
-
-  @Deprecated public class ButtonDefaults {
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_SIZE;
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp EXTRA_LARGE_SIZE;
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp LARGE_SIZE;
-    field @Deprecated public static final androidx.wear.tiles.material.ButtonColors PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ButtonColors SECONDARY_COLORS;
-  }
-
-  @Deprecated public class Chip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.Chip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ChipColors getChipColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public CharSequence? getContentDescription();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getHeight();
-    method @Deprecated public int getHorizontalAlignment();
-    method @Deprecated public String? getIconContent();
-    method @Deprecated public String? getPrimaryLabelContent();
-    method @Deprecated public String? getSecondaryLabelContent();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  @Deprecated public static final class Chip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public Chip.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.Chip build();
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setContentDescription(CharSequence);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setIconContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setPrimaryLabelContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setSecondaryLabelContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class ChipColors {
-    ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
-    ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getSecondaryContentColor();
-    method @Deprecated public static androidx.wear.tiles.material.ChipColors primaryChipColors(androidx.wear.tiles.material.Colors);
-    method @Deprecated public static androidx.wear.tiles.material.ChipColors secondaryChipColors(androidx.wear.tiles.material.Colors);
-  }
-
-  @Deprecated public class ChipDefaults {
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors COMPACT_PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors COMPACT_SECONDARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors SECONDARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors TITLE_PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors TITLE_SECONDARY_COLORS;
-  }
-
-  @Deprecated public class CircularProgressIndicator implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.CircularProgressIndicator? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ProgressIndicatorColors getCircularProgressIndicatorColors();
-    method @Deprecated public CharSequence? getContentDescription();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp getEndAngle();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp getProgress();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp getStartAngle();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp getStrokeWidth();
-  }
-
-  @Deprecated public static final class CircularProgressIndicator.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public CircularProgressIndicator.Builder();
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator build();
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.tiles.material.ProgressIndicatorColors);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setEndAngle(float);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStartAngle(float);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class Colors {
-    ctor @Deprecated public Colors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method @Deprecated @ColorInt public int getOnPrimary();
-    method @Deprecated @ColorInt public int getOnSurface();
-    method @Deprecated @ColorInt public int getPrimary();
-    method @Deprecated @ColorInt public int getSurface();
-    field @Deprecated public static final androidx.wear.tiles.material.Colors DEFAULT;
-  }
-
-  @Deprecated public class CompactChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.CompactChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ChipColors getChipColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public String getText();
-  }
-
-  @Deprecated public static final class CompactChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public CompactChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.CompactChip build();
-    method @Deprecated public androidx.wear.tiles.material.CompactChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
-  }
-
-  @Deprecated public class ProgressIndicatorColors {
-    ctor @Deprecated public ProgressIndicatorColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ProgressIndicatorColors(@ColorInt int, @ColorInt int);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getIndicatorColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getTrackColor();
-    method @Deprecated public static androidx.wear.tiles.material.ProgressIndicatorColors progressIndicatorColors(androidx.wear.tiles.material.Colors);
-  }
-
-  @Deprecated public class ProgressIndicatorDefaults {
-    field @Deprecated public static final androidx.wear.tiles.material.ProgressIndicatorColors DEFAULT_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH;
-    field @Deprecated public static final float GAP_END_ANGLE = 156.1f;
-    field @Deprecated public static final float GAP_START_ANGLE = -156.1f;
-  }
-
-  @Deprecated public class Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.Text? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getColor();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle getFontStyle();
-    method @Deprecated public float getLineHeight();
-    method @Deprecated public int getMaxLines();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers getModifiers();
-    method @Deprecated public int getMultilineAlignment();
-    method @Deprecated public int getOverflow();
-    method @Deprecated public String getText();
-    method @Deprecated public int getWeight();
-    method @Deprecated public boolean isItalic();
-    method @Deprecated public boolean isUnderline();
-  }
-
-  @Deprecated public static final class Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public Text.Builder(android.content.Context, String);
-    method @Deprecated public androidx.wear.tiles.material.Text build();
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setItalic(boolean);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setMultilineAlignment(int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setOverflow(int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setTypography(int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setUnderline(boolean);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setWeight(int);
-  }
-
-  @Deprecated public class TitleChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.TitleChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ChipColors getChipColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public int getHorizontalAlignment();
-    method @Deprecated public String getText();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  @Deprecated public static final class TitleChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public TitleChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip build();
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class Typography {
-    field @Deprecated public static final int TYPOGRAPHY_BODY1 = 7; // 0x7
-    field @Deprecated public static final int TYPOGRAPHY_BODY2 = 8; // 0x8
-    field @Deprecated public static final int TYPOGRAPHY_BUTTON = 9; // 0x9
-    field @Deprecated public static final int TYPOGRAPHY_CAPTION1 = 10; // 0xa
-    field @Deprecated public static final int TYPOGRAPHY_CAPTION2 = 11; // 0xb
-    field @Deprecated public static final int TYPOGRAPHY_CAPTION3 = 12; // 0xc
-    field @Deprecated public static final int TYPOGRAPHY_DISPLAY1 = 1; // 0x1
-    field @Deprecated public static final int TYPOGRAPHY_DISPLAY2 = 2; // 0x2
-    field @Deprecated public static final int TYPOGRAPHY_DISPLAY3 = 3; // 0x3
-    field @Deprecated public static final int TYPOGRAPHY_TITLE1 = 4; // 0x4
-    field @Deprecated public static final int TYPOGRAPHY_TITLE2 = 5; // 0x5
-    field @Deprecated public static final int TYPOGRAPHY_TITLE3 = 6; // 0x6
-  }
-
-}
-
-package androidx.wear.tiles.material.layouts {
-
-  @Deprecated public class EdgeContentLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.EdgeContentLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getEdgeContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-  }
-
-  @Deprecated public static final class EdgeContentLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public EdgeContentLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setEdgeContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-  }
-
-  @Deprecated public class LayoutDefaults {
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
-    field @Deprecated public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
-    field @Deprecated public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
-    field @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
-  }
-
-  @Deprecated public class MultiButtonLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getButtonContents();
-    method @Deprecated public int getFiveButtonDistribution();
-    field @Deprecated public static final int FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY = 2; // 0x2
-    field @Deprecated public static final int FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY = 1; // 0x1
-  }
-
-  @Deprecated public static final class MultiButtonLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public MultiButtonLayout.Builder();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder addButtonContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiButtonLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder setFiveButtonDistribution(int);
-  }
-
-  @Deprecated public class MultiSlotLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.MultiSlotLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public float getHorizontalSpacerWidth();
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getSlotContents();
-  }
-
-  @Deprecated public static final class MultiSlotLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public MultiSlotLayout.Builder();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder addSlotContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiSlotLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder setHorizontalSpacerWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class PrimaryLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.PrimaryLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryChipContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public float getVerticalSpacerHeight();
-  }
-
-  @Deprecated public static final class PrimaryLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public PrimaryLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryChipContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setVerticalSpacerHeight(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-}
-
diff --git a/wear/tiles/tiles-material/api/res-1.5.0-beta01.txt b/wear/tiles/tiles-material/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/tiles/tiles-material/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/wear/tiles/tiles-material/api/restricted_1.5.0-beta01.txt b/wear/tiles/tiles-material/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index 85c110b..0000000
--- a/wear/tiles/tiles-material/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,298 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.material {
-
-  @Deprecated public class Button implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.Button? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ButtonColors getButtonColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public CharSequence? getContentDescription();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method @Deprecated public String? getIconContent();
-    method @Deprecated public String? getImageContent();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getSize();
-    method @Deprecated public String? getTextContent();
-  }
-
-  @Deprecated public static final class Button.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public Button.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable);
-    method @Deprecated public androidx.wear.tiles.material.Button build();
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setButtonColors(androidx.wear.tiles.material.ButtonColors);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setContentDescription(CharSequence);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setIconContent(String, androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setImageContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setTextContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Button.Builder setTextContent(String, int);
-  }
-
-  @Deprecated public class ButtonColors {
-    ctor @Deprecated public ButtonColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ButtonColors(@ColorInt int, @ColorInt int);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
-    method @Deprecated public static androidx.wear.tiles.material.ButtonColors primaryButtonColors(androidx.wear.tiles.material.Colors);
-    method @Deprecated public static androidx.wear.tiles.material.ButtonColors secondaryButtonColors(androidx.wear.tiles.material.Colors);
-  }
-
-  @Deprecated public class ButtonDefaults {
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp recommendedIconSize(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_SIZE;
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp EXTRA_LARGE_SIZE;
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp LARGE_SIZE;
-    field @Deprecated public static final androidx.wear.tiles.material.ButtonColors PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ButtonColors SECONDARY_COLORS;
-  }
-
-  @Deprecated public class Chip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.Chip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ChipColors getChipColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public CharSequence? getContentDescription();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getCustomContent();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getHeight();
-    method @Deprecated public int getHorizontalAlignment();
-    method @Deprecated public String? getIconContent();
-    method @Deprecated public String? getPrimaryLabelContent();
-    method @Deprecated public String? getSecondaryLabelContent();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  @Deprecated public static final class Chip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public Chip.Builder(android.content.Context, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.Chip build();
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setContentDescription(CharSequence);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setCustomContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setIconContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setPrimaryLabelContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setSecondaryLabelContent(String);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.material.Chip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class ChipColors {
-    ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ChipColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int);
-    ctor @Deprecated public ChipColors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getBackgroundColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getContentColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getIconColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getSecondaryContentColor();
-    method @Deprecated public static androidx.wear.tiles.material.ChipColors primaryChipColors(androidx.wear.tiles.material.Colors);
-    method @Deprecated public static androidx.wear.tiles.material.ChipColors secondaryChipColors(androidx.wear.tiles.material.Colors);
-  }
-
-  @Deprecated public class ChipDefaults {
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors COMPACT_PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors COMPACT_SECONDARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors SECONDARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors TITLE_PRIMARY_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.material.ChipColors TITLE_SECONDARY_COLORS;
-  }
-
-  @Deprecated public class CircularProgressIndicator implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.CircularProgressIndicator? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ProgressIndicatorColors getCircularProgressIndicatorColors();
-    method @Deprecated public CharSequence? getContentDescription();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp getEndAngle();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp getProgress();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp getStartAngle();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp getStrokeWidth();
-  }
-
-  @Deprecated public static final class CircularProgressIndicator.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public CircularProgressIndicator.Builder();
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator build();
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setCircularProgressIndicatorColors(androidx.wear.tiles.material.ProgressIndicatorColors);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setContentDescription(CharSequence);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setEndAngle(float);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setProgress(@FloatRange(from=0, to=1) float);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStartAngle(float);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.material.CircularProgressIndicator.Builder setStrokeWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class Colors {
-    ctor @Deprecated public Colors(@ColorInt int, @ColorInt int, @ColorInt int, @ColorInt int);
-    method @Deprecated @ColorInt public int getOnPrimary();
-    method @Deprecated @ColorInt public int getOnSurface();
-    method @Deprecated @ColorInt public int getPrimary();
-    method @Deprecated @ColorInt public int getSurface();
-    field @Deprecated public static final androidx.wear.tiles.material.Colors DEFAULT;
-  }
-
-  @Deprecated public class CompactChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.CompactChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ChipColors getChipColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public String getText();
-  }
-
-  @Deprecated public static final class CompactChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public CompactChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.CompactChip build();
-    method @Deprecated public androidx.wear.tiles.material.CompactChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
-  }
-
-  @Deprecated public class ProgressIndicatorColors {
-    ctor @Deprecated public ProgressIndicatorColors(androidx.wear.tiles.ColorBuilders.ColorProp, androidx.wear.tiles.ColorBuilders.ColorProp);
-    ctor @Deprecated public ProgressIndicatorColors(@ColorInt int, @ColorInt int);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getIndicatorColor();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getTrackColor();
-    method @Deprecated public static androidx.wear.tiles.material.ProgressIndicatorColors progressIndicatorColors(androidx.wear.tiles.material.Colors);
-  }
-
-  @Deprecated public class ProgressIndicatorDefaults {
-    field @Deprecated public static final androidx.wear.tiles.material.ProgressIndicatorColors DEFAULT_COLORS;
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_STROKE_WIDTH;
-    field @Deprecated public static final float GAP_END_ANGLE = 156.1f;
-    field @Deprecated public static final float GAP_START_ANGLE = -156.1f;
-  }
-
-  @Deprecated public class Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.Text? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp getColor();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle getFontStyle();
-    method @Deprecated public float getLineHeight();
-    method @Deprecated public int getMaxLines();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers getModifiers();
-    method @Deprecated public int getMultilineAlignment();
-    method @Deprecated public int getOverflow();
-    method @Deprecated public String getText();
-    method @Deprecated public int getWeight();
-    method @Deprecated public boolean isItalic();
-    method @Deprecated public boolean isUnderline();
-  }
-
-  @Deprecated public static final class Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public Text.Builder(android.content.Context, String);
-    method @Deprecated public androidx.wear.tiles.material.Text build();
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setItalic(boolean);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setMultilineAlignment(int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setOverflow(int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setTypography(int);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setUnderline(boolean);
-    method @Deprecated public androidx.wear.tiles.material.Text.Builder setWeight(int);
-  }
-
-  @Deprecated public class TitleChip implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.TitleChip? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.ChipColors getChipColors();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable getClickable();
-    method @Deprecated public int getHorizontalAlignment();
-    method @Deprecated public String getText();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension getWidth();
-  }
-
-  @Deprecated public static final class TitleChip.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public TitleChip.Builder(android.content.Context, String, androidx.wear.tiles.ModifiersBuilders.Clickable, androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip build();
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setChipColors(androidx.wear.tiles.material.ChipColors);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.material.TitleChip.Builder setWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class Typography {
-    field @Deprecated public static final int TYPOGRAPHY_BODY1 = 7; // 0x7
-    field @Deprecated public static final int TYPOGRAPHY_BODY2 = 8; // 0x8
-    field @Deprecated public static final int TYPOGRAPHY_BUTTON = 9; // 0x9
-    field @Deprecated public static final int TYPOGRAPHY_CAPTION1 = 10; // 0xa
-    field @Deprecated public static final int TYPOGRAPHY_CAPTION2 = 11; // 0xb
-    field @Deprecated public static final int TYPOGRAPHY_CAPTION3 = 12; // 0xc
-    field @Deprecated public static final int TYPOGRAPHY_DISPLAY1 = 1; // 0x1
-    field @Deprecated public static final int TYPOGRAPHY_DISPLAY2 = 2; // 0x2
-    field @Deprecated public static final int TYPOGRAPHY_DISPLAY3 = 3; // 0x3
-    field @Deprecated public static final int TYPOGRAPHY_TITLE1 = 4; // 0x4
-    field @Deprecated public static final int TYPOGRAPHY_TITLE2 = 5; // 0x5
-    field @Deprecated public static final int TYPOGRAPHY_TITLE3 = 6; // 0x6
-  }
-
-}
-
-package androidx.wear.tiles.material.layouts {
-
-  @Deprecated public class EdgeContentLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.EdgeContentLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getEdgeContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-  }
-
-  @Deprecated public static final class EdgeContentLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public EdgeContentLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setEdgeContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.EdgeContentLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-  }
-
-  @Deprecated public class LayoutDefaults {
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp DEFAULT_VERTICAL_SPACER_HEIGHT;
-    field @Deprecated public static final float EDGE_CONTENT_LAYOUT_PADDING_ABOVE_MAIN_CONTENT_DP = 6.0f;
-    field @Deprecated public static final float EDGE_CONTENT_LAYOUT_PADDING_BELOW_MAIN_CONTENT_DP = 8.0f;
-    field @Deprecated public static final int MULTI_BUTTON_MAX_NUMBER = 7; // 0x7
-    field @Deprecated public static final androidx.wear.tiles.DimensionBuilders.DpProp MULTI_SLOT_LAYOUT_HORIZONTAL_SPACER_WIDTH;
-  }
-
-  @Deprecated public class MultiButtonLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.MultiButtonLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getButtonContents();
-    method @Deprecated public int getFiveButtonDistribution();
-    field @Deprecated public static final int FIVE_BUTTON_DISTRIBUTION_BOTTOM_HEAVY = 2; // 0x2
-    field @Deprecated public static final int FIVE_BUTTON_DISTRIBUTION_TOP_HEAVY = 1; // 0x1
-  }
-
-  @Deprecated public static final class MultiButtonLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public MultiButtonLayout.Builder();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder addButtonContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiButtonLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiButtonLayout.Builder setFiveButtonDistribution(int);
-  }
-
-  @Deprecated public class MultiSlotLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.MultiSlotLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public float getHorizontalSpacerWidth();
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getSlotContents();
-  }
-
-  @Deprecated public static final class MultiSlotLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public MultiSlotLayout.Builder();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder addSlotContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiSlotLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.MultiSlotLayout.Builder setHorizontalSpacerWidth(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public class PrimaryLayout implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public static androidx.wear.tiles.material.layouts.PrimaryLayout? fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryChipContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getPrimaryLabelTextContent();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getSecondaryLabelTextContent();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public float getVerticalSpacerHeight();
-  }
-
-  @Deprecated public static final class PrimaryLayout.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public PrimaryLayout.Builder(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout build();
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryChipContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setPrimaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setSecondaryLabelTextContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.material.layouts.PrimaryLayout.Builder setVerticalSpacerHeight(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-}
-
diff --git a/wear/tiles/tiles-renderer/api/1.5.0-beta01.txt b/wear/tiles/tiles-renderer/api/1.5.0-beta01.txt
deleted file mode 100644
index ac732cf..0000000
--- a/wear/tiles/tiles-renderer/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,105 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.client {
-
-  public interface TileClient {
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> requestApiVersion();
-    method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest);
-    method public default com.google.common.util.concurrent.ListenableFuture<androidx.wear.protolayout.ResourceBuilders.Resources!> requestTileResourcesAsync(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileAddedEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileEnterEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileLeaveEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileRemovedEvent();
-  }
-
-}
-
-package androidx.wear.tiles.connection {
-
-  public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
-    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
-    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
-    method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileAddedEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileEnterEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileLeaveEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileRemovedEvent();
-  }
-
-}
-
-package androidx.wear.tiles.manager {
-
-  public final class TileUiClient implements java.lang.AutoCloseable {
-    ctor public TileUiClient(android.content.Context context, android.content.ComponentName component, android.view.ViewGroup parentView);
-    method @MainThread public void close();
-    method @MainThread public void connect();
-  }
-
-}
-
-package androidx.wear.tiles.renderer {
-
-  public final class TileRenderer {
-    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
-    method public java.util.concurrent.Executor getLoadActionExecutor();
-    method public java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!> getLoadActionListener();
-    method public java.util.Map<androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!,java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!>!> getPlatformDataProviders();
-    method public int getTilesTheme();
-    method public android.content.Context getUiContext();
-    method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
-    method public com.google.common.util.concurrent.ListenableFuture<android.view.View!> inflateAsync(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
-    method public void setState(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!>);
-  }
-
-  public static final class TileRenderer.Builder {
-    ctor public TileRenderer.Builder(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
-    method public androidx.wear.tiles.renderer.TileRenderer.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!...);
-    method public androidx.wear.tiles.renderer.TileRenderer build();
-    method public androidx.wear.tiles.renderer.TileRenderer.Builder setTilesTheme(@StyleRes int);
-  }
-
-  @Deprecated public static interface TileRenderer.LoadActionListener {
-    method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
-  }
-
-}
-
-package androidx.wear.tiles.timeline {
-
-  public final class TilesTimelineCache {
-    ctor public TilesTimelineCache(androidx.wear.protolayout.TimelineBuilders.Timeline);
-    ctor @Deprecated public TilesTimelineCache(androidx.wear.tiles.TimelineBuilders.Timeline);
-    method @MainThread public androidx.wear.protolayout.TimelineBuilders.TimelineEntry? findClosestTileTimelineEntry(long);
-    method @Deprecated @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findClosestTimelineEntry(long);
-    method @MainThread public long findCurrentTimelineEntryExpiry(androidx.wear.protolayout.TimelineBuilders.TimelineEntry, long);
-    method @Deprecated @MainThread public long findCurrentTimelineEntryExpiry(androidx.wear.tiles.TimelineBuilders.TimelineEntry, long);
-    method @MainThread public androidx.wear.protolayout.TimelineBuilders.TimelineEntry? findTileTimelineEntryForTime(long);
-    method @Deprecated @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findTimelineEntryForTime(long);
-  }
-
-  public class TilesTimelineManager implements java.lang.AutoCloseable {
-    ctor public TilesTimelineManager(android.app.AlarmManager, androidx.wear.tiles.timeline.TilesTimelineManager.Clock, androidx.wear.protolayout.TimelineBuilders.Timeline, int, java.util.concurrent.Executor, androidx.wear.tiles.timeline.TilesTimelineManager.LayoutUpdateListener);
-    ctor @Deprecated public TilesTimelineManager(android.app.AlarmManager, androidx.wear.tiles.timeline.TilesTimelineManager.Clock, androidx.wear.tiles.TimelineBuilders.Timeline, int, java.util.concurrent.Executor, androidx.wear.tiles.timeline.TilesTimelineManager.Listener);
-    method public void close();
-    method public void init();
-  }
-
-  public static interface TilesTimelineManager.Clock {
-    method public long getCurrentTimeMillis();
-  }
-
-  public static interface TilesTimelineManager.LayoutUpdateListener {
-    method public void onLayoutUpdate(int, androidx.wear.protolayout.LayoutElementBuilders.Layout);
-  }
-
-  @Deprecated public static interface TilesTimelineManager.Listener {
-    method @Deprecated public void onLayoutUpdate(int, androidx.wear.tiles.LayoutElementBuilders.Layout);
-  }
-
-}
-
diff --git a/wear/tiles/tiles-renderer/api/res-1.5.0-beta01.txt b/wear/tiles/tiles-renderer/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/tiles/tiles-renderer/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/wear/tiles/tiles-renderer/api/restricted_1.5.0-beta01.txt b/wear/tiles/tiles-renderer/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index 6ebda68..0000000
--- a/wear/tiles/tiles-renderer/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,106 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.client {
-
-  public interface TileClient {
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer!> requestApiVersion();
-    method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest);
-    method public default com.google.common.util.concurrent.ListenableFuture<androidx.wear.protolayout.ResourceBuilders.Resources!> requestTileResourcesAsync(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileAddedEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileEnterEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileLeaveEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> sendOnTileRemovedEvent();
-  }
-
-}
-
-package androidx.wear.tiles.connection {
-
-  public final class DefaultTileClient implements androidx.wear.tiles.client.TileClient {
-    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, java.util.concurrent.Executor executor);
-    ctor public DefaultTileClient(android.content.Context context, android.content.ComponentName componentName, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
-    method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileAddedEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileEnterEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileLeaveEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileRemovedEvent();
-  }
-
-}
-
-package androidx.wear.tiles.manager {
-
-  public final class TileUiClient implements java.lang.AutoCloseable {
-    ctor public TileUiClient(android.content.Context context, android.content.ComponentName component, android.view.ViewGroup parentView);
-    method @MainThread public void close();
-    method @MainThread public void connect();
-  }
-
-}
-
-package androidx.wear.tiles.renderer {
-
-  public final class TileRenderer {
-    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    ctor @Deprecated public TileRenderer(android.content.Context, androidx.wear.tiles.LayoutElementBuilders.Layout, @StyleRes int, androidx.wear.tiles.ResourceBuilders.Resources, java.util.concurrent.Executor, androidx.wear.tiles.renderer.TileRenderer.LoadActionListener);
-    ctor public TileRenderer(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.List<androidx.wear.protolayout.expression.pipeline.DynamicTypeAnimator!> getAnimations();
-    method public java.util.concurrent.Executor getLoadActionExecutor();
-    method public java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!> getLoadActionListener();
-    method public java.util.Map<androidx.wear.protolayout.expression.pipeline.PlatformDataProvider!,java.util.Set<androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!>!> getPlatformDataProviders();
-    method public int getTilesTheme();
-    method public android.content.Context getUiContext();
-    method @Deprecated public android.view.View? inflate(android.view.ViewGroup);
-    method public com.google.common.util.concurrent.ListenableFuture<android.view.View!> inflateAsync(androidx.wear.protolayout.LayoutElementBuilders.Layout, androidx.wear.protolayout.ResourceBuilders.Resources, android.view.ViewGroup);
-    method public void setState(java.util.Map<androidx.wear.protolayout.expression.AppDataKey<? extends java.lang.Object!>!,androidx.wear.protolayout.expression.DynamicDataBuilders.DynamicDataValue<? extends java.lang.Object!>!>);
-  }
-
-  public static final class TileRenderer.Builder {
-    ctor public TileRenderer.Builder(android.content.Context, java.util.concurrent.Executor, java.util.function.Consumer<androidx.wear.protolayout.StateBuilders.State!>);
-    method public androidx.wear.tiles.renderer.TileRenderer.Builder addPlatformDataProvider(androidx.wear.protolayout.expression.pipeline.PlatformDataProvider, androidx.wear.protolayout.expression.PlatformDataKey<? extends java.lang.Object!>!...);
-    method public androidx.wear.tiles.renderer.TileRenderer build();
-    method public androidx.wear.tiles.renderer.TileRenderer.Builder setTilesTheme(@StyleRes int);
-  }
-
-  @Deprecated public static interface TileRenderer.LoadActionListener {
-    method @Deprecated public void onClick(androidx.wear.tiles.StateBuilders.State);
-  }
-
-}
-
-package androidx.wear.tiles.timeline {
-
-  public final class TilesTimelineCache {
-    ctor public TilesTimelineCache(androidx.wear.protolayout.TimelineBuilders.Timeline);
-    ctor @Deprecated public TilesTimelineCache(androidx.wear.tiles.TimelineBuilders.Timeline);
-    method @MainThread public androidx.wear.protolayout.TimelineBuilders.TimelineEntry? findClosestTileTimelineEntry(long);
-    method @Deprecated @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findClosestTimelineEntry(long);
-    method @MainThread public long findCurrentTimelineEntryExpiry(androidx.wear.protolayout.TimelineBuilders.TimelineEntry, long);
-    method @Deprecated @MainThread public long findCurrentTimelineEntryExpiry(androidx.wear.tiles.TimelineBuilders.TimelineEntry, long);
-    method @MainThread public androidx.wear.protolayout.TimelineBuilders.TimelineEntry? findTileTimelineEntryForTime(long);
-    method @Deprecated @MainThread public androidx.wear.tiles.TimelineBuilders.TimelineEntry? findTimelineEntryForTime(long);
-  }
-
-  public class TilesTimelineManager implements java.lang.AutoCloseable {
-    ctor public TilesTimelineManager(android.app.AlarmManager, androidx.wear.tiles.timeline.TilesTimelineManager.Clock, androidx.wear.protolayout.TimelineBuilders.Timeline, int, java.util.concurrent.Executor, androidx.wear.tiles.timeline.TilesTimelineManager.LayoutUpdateListener);
-    ctor @Deprecated public TilesTimelineManager(android.app.AlarmManager, androidx.wear.tiles.timeline.TilesTimelineManager.Clock, androidx.wear.tiles.TimelineBuilders.Timeline, int, java.util.concurrent.Executor, androidx.wear.tiles.timeline.TilesTimelineManager.Listener);
-    method public void close();
-    method public void init();
-  }
-
-  public static interface TilesTimelineManager.Clock {
-    method public long getCurrentTimeMillis();
-  }
-
-  public static interface TilesTimelineManager.LayoutUpdateListener {
-    method public void onLayoutUpdate(int, androidx.wear.protolayout.LayoutElementBuilders.Layout);
-  }
-
-  @Deprecated public static interface TilesTimelineManager.Listener {
-    method @Deprecated public void onLayoutUpdate(int, androidx.wear.tiles.LayoutElementBuilders.Layout);
-  }
-
-}
-
diff --git a/wear/tiles/tiles-renderer/dependencyAnalysis-baseline.json b/wear/tiles/tiles-renderer/dependencyAnalysis-baseline.json
index 9879f96..ea23dd1 100644
--- a/wear/tiles/tiles-renderer/dependencyAnalysis-baseline.json
+++ b/wear/tiles/tiles-renderer/dependencyAnalysis-baseline.json
@@ -28,14 +28,6 @@
     {
       "coordinates": {
         "type": "module",
-        "identifier": "androidx.test:monitor",
-        "resolvedVersion": "1.8.0-alpha01"
-      },
-      "toConfiguration": "androidTestImplementation"
-    },
-    {
-      "coordinates": {
-        "type": "module",
         "identifier": "androidx.test:rules",
         "resolvedVersion": "1.7.0-alpha01"
       },
diff --git a/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java b/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
index 45544f0..5352c51 100644
--- a/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
+++ b/wear/tiles/tiles-renderer/src/androidTest/java/androidx/wear/tiles/renderer/test/TileRendererGoldenTest.java
@@ -100,7 +100,7 @@
                     {"image_with_inline_data", false},
                     {"image_with_padding", true},
                     {"line_in_arc", false},
-                    {"line_multi_height", true},
+                    {"line_multi_height", false},
                     {"long_text", false},
                     {"mixed_language_text", false},
                     {"multi_line_text_alignment", false},
diff --git a/wear/tiles/tiles-testing/api/1.5.0-beta01.txt b/wear/tiles/tiles-testing/api/1.5.0-beta01.txt
deleted file mode 100644
index ae007dd..0000000
--- a/wear/tiles/tiles-testing/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.testing {
-
-  public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
-    ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
-    ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
-    method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileAddedEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileEnterEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileLeaveEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileRemovedEvent();
-  }
-
-}
-
diff --git a/wear/tiles/tiles-testing/api/res-1.5.0-beta01.txt b/wear/tiles/tiles-testing/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/tiles/tiles-testing/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/wear/tiles/tiles-testing/api/restricted_1.5.0-beta01.txt b/wear/tiles/tiles-testing/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index ae007dd..0000000
--- a/wear/tiles/tiles-testing/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.testing {
-
-  public final class TestTileClient<T extends androidx.wear.tiles.TileService> implements androidx.wear.tiles.client.TileClient {
-    ctor public TestTileClient(T service, java.util.concurrent.Executor executor);
-    ctor public TestTileClient(T service, kotlinx.coroutines.CoroutineScope coroutineScope, kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> requestApiVersion();
-    method @Deprecated public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources> requestResources(androidx.wear.tiles.RequestBuilders.ResourcesRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile> requestTile(androidx.wear.tiles.RequestBuilders.TileRequest requestParams);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileAddedEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileEnterEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileLeaveEvent();
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void?> sendOnTileRemovedEvent();
-  }
-
-}
-
diff --git a/wear/tiles/tiles-tooling-preview/api/1.5.0-beta01.txt b/wear/tiles/tiles-tooling-preview/api/1.5.0-beta01.txt
deleted file mode 100644
index 96cc2c0..0000000
--- a/wear/tiles/tiles-tooling-preview/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.tooling.preview {
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface Preview {
-    method public abstract String device() default androidx.wear.tooling.preview.devices.WearDevices.SMALL_ROUND;
-    method public abstract float fontScale() default 1.0;
-    method public abstract String group() default "";
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    property public abstract String device;
-    property @FloatRange(from=0.01) public abstract float fontScale;
-    property public abstract String group;
-    property public abstract String locale;
-    property public abstract String name;
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface Preview.Container {
-    method public abstract androidx.wear.tiles.tooling.preview.Preview[] value();
-    property public abstract String device;
-    property @FloatRange(from=0.01) public abstract float fontScale;
-    property public abstract String group;
-    property public abstract String locale;
-    property public abstract String name;
-  }
-
-  public final class TilePreviewData {
-    ctor public TilePreviewData(optional kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> onTileResourceRequest, optional androidx.wear.protolayout.expression.PlatformDataValues? platformDataValues, kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest);
-    ctor public TilePreviewData(optional kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> onTileResourceRequest, kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest);
-    ctor public TilePreviewData(kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest);
-    method public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> getOnTileRequest();
-    method public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> getOnTileResourceRequest();
-    method public androidx.wear.protolayout.expression.PlatformDataValues? getPlatformDataValues();
-    property public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest;
-    property public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> onTileResourceRequest;
-    property public androidx.wear.protolayout.expression.PlatformDataValues? platformDataValues;
-  }
-
-  public final class TilePreviewHelper {
-    method public static androidx.wear.tiles.TileBuilders.Tile.Builder singleTimelineEntryTileBuilder(androidx.wear.protolayout.LayoutElementBuilders.Layout layout);
-    method public static androidx.wear.tiles.TileBuilders.Tile.Builder singleTimelineEntryTileBuilder(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement layoutElement);
-    field public static final androidx.wear.tiles.tooling.preview.TilePreviewHelper INSTANCE;
-  }
-
-}
-
diff --git a/wear/tiles/tiles-tooling-preview/api/res-1.5.0-beta01.txt b/wear/tiles/tiles-tooling-preview/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/tiles/tiles-tooling-preview/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/wear/tiles/tiles-tooling-preview/api/restricted_1.5.0-beta01.txt b/wear/tiles/tiles-tooling-preview/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index 96cc2c0..0000000
--- a/wear/tiles/tiles-tooling-preview/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.tooling.preview {
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface Preview {
-    method public abstract String device() default androidx.wear.tooling.preview.devices.WearDevices.SMALL_ROUND;
-    method public abstract float fontScale() default 1.0;
-    method public abstract String group() default "";
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    property public abstract String device;
-    property @FloatRange(from=0.01) public abstract float fontScale;
-    property public abstract String group;
-    property public abstract String locale;
-    property public abstract String name;
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.ANNOTATION_CLASS, kotlin.annotation.AnnotationTarget.FUNCTION}) public static @interface Preview.Container {
-    method public abstract androidx.wear.tiles.tooling.preview.Preview[] value();
-    property public abstract String device;
-    property @FloatRange(from=0.01) public abstract float fontScale;
-    property public abstract String group;
-    property public abstract String locale;
-    property public abstract String name;
-  }
-
-  public final class TilePreviewData {
-    ctor public TilePreviewData(optional kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> onTileResourceRequest, optional androidx.wear.protolayout.expression.PlatformDataValues? platformDataValues, kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest);
-    ctor public TilePreviewData(optional kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> onTileResourceRequest, kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest);
-    ctor public TilePreviewData(kotlin.jvm.functions.Function1<? super androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest);
-    method public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> getOnTileRequest();
-    method public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> getOnTileResourceRequest();
-    method public androidx.wear.protolayout.expression.PlatformDataValues? getPlatformDataValues();
-    property public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.TileRequest,androidx.wear.tiles.TileBuilders.Tile> onTileRequest;
-    property public kotlin.jvm.functions.Function1<androidx.wear.tiles.RequestBuilders.ResourcesRequest,androidx.wear.protolayout.ResourceBuilders.Resources> onTileResourceRequest;
-    property public androidx.wear.protolayout.expression.PlatformDataValues? platformDataValues;
-  }
-
-  public final class TilePreviewHelper {
-    method public static androidx.wear.tiles.TileBuilders.Tile.Builder singleTimelineEntryTileBuilder(androidx.wear.protolayout.LayoutElementBuilders.Layout layout);
-    method public static androidx.wear.tiles.TileBuilders.Tile.Builder singleTimelineEntryTileBuilder(androidx.wear.protolayout.LayoutElementBuilders.LayoutElement layoutElement);
-    field public static final androidx.wear.tiles.tooling.preview.TilePreviewHelper INSTANCE;
-  }
-
-}
-
diff --git a/wear/tiles/tiles-tooling/api/1.5.0-beta01.txt b/wear/tiles/tiles-tooling/api/1.5.0-beta01.txt
deleted file mode 100644
index e6f50d0..0000000
--- a/wear/tiles/tiles-tooling/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1 +0,0 @@
-// Signature format: 4.0
diff --git a/wear/tiles/tiles-tooling/api/res-1.5.0-beta01.txt b/wear/tiles/tiles-tooling/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/tiles/tiles-tooling/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/wear/tiles/tiles-tooling/api/restricted_1.5.0-beta01.txt b/wear/tiles/tiles-tooling/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index dc88560..0000000
--- a/wear/tiles/tiles-tooling/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles.tooling {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TileServiceViewAdapter extends android.widget.FrameLayout {
-    ctor public TileServiceViewAdapter(android.content.Context context, android.util.AttributeSet attrs);
-    method public java.util.List<androidx.wear.protolayout.expression.pipeline.DynamicTypeAnimator> getAnimations();
-  }
-
-}
-
diff --git a/wear/tiles/tiles/api/1.5.0-beta01.txt b/wear/tiles/tiles/api/1.5.0-beta01.txt
deleted file mode 100644
index f9c99d7..0000000
--- a/wear/tiles/tiles/api/1.5.0-beta01.txt
+++ /dev/null
@@ -1,1151 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles {
-
-  @Deprecated public final class ActionBuilders {
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidIntExtra intExtra(int);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidLongExtra longExtra(long);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidStringExtra stringExtra(String);
-  }
-
-  @Deprecated public static interface ActionBuilders.Action {
-  }
-
-  @Deprecated public static interface ActionBuilders.Action.Builder {
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.Action build();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidActivity {
-    method @Deprecated public String getClassName();
-    method @Deprecated public java.util.Map<java.lang.String!,androidx.wear.tiles.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
-    method @Deprecated public String getPackageName();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidActivity.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidActivity.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder addKeyToExtraMapping(String, androidx.wear.tiles.ActionBuilders.AndroidExtra);
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setClassName(String);
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setPackageName(String);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidBooleanExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public boolean getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidBooleanExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidBooleanExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra.Builder setValue(boolean);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidDoubleExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public double getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidDoubleExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidDoubleExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra.Builder setValue(double);
-  }
-
-  @Deprecated public static interface ActionBuilders.AndroidExtra {
-  }
-
-  @Deprecated public static interface ActionBuilders.AndroidExtra.Builder {
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidExtra build();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidIntExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidIntExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidIntExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidIntExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidIntExtra.Builder setValue(int);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidLongExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public long getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidLongExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidLongExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidLongExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidLongExtra.Builder setValue(long);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidStringExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public String getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidStringExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidStringExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidStringExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidStringExtra.Builder setValue(String);
-  }
-
-  @Deprecated public static final class ActionBuilders.LaunchAction implements androidx.wear.tiles.ActionBuilders.Action {
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity? getAndroidActivity();
-  }
-
-  @Deprecated public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
-    ctor @Deprecated public ActionBuilders.LaunchAction.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LaunchAction build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.tiles.ActionBuilders.AndroidActivity);
-  }
-
-  @Deprecated public static final class ActionBuilders.LoadAction implements androidx.wear.tiles.ActionBuilders.Action {
-    method @Deprecated public androidx.wear.tiles.StateBuilders.State? getRequestState();
-  }
-
-  @Deprecated public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
-    ctor @Deprecated public ActionBuilders.LoadAction.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LoadAction build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.tiles.StateBuilders.State);
-  }
-
-  public final class ActiveTileIdentifier {
-    ctor public ActiveTileIdentifier(android.content.ComponentName, int);
-    method public android.content.ComponentName getComponentName();
-    method public int getInstanceId();
-  }
-
-  @Deprecated public final class ColorBuilders {
-    method @Deprecated public static androidx.wear.tiles.ColorBuilders.ColorProp argb(@ColorInt int);
-  }
-
-  @Deprecated public static final class ColorBuilders.ColorProp {
-    method @Deprecated @ColorInt public int getArgb();
-  }
-
-  @Deprecated public static final class ColorBuilders.ColorProp.Builder {
-    ctor @Deprecated public ColorBuilders.ColorProp.Builder();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp build();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp.Builder setArgb(@ColorInt int);
-  }
-
-  @Deprecated public final class DeviceParametersBuilders {
-    field @Deprecated public static final int DEVICE_PLATFORM_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int DEVICE_PLATFORM_WEAR_OS = 1; // 0x1
-    field @Deprecated public static final int SCREEN_SHAPE_RECT = 2; // 0x2
-    field @Deprecated public static final int SCREEN_SHAPE_ROUND = 1; // 0x1
-    field @Deprecated public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
-  }
-
-  @Deprecated public static final class DeviceParametersBuilders.DeviceParameters {
-    method @Deprecated public int getDevicePlatform();
-    method @Deprecated @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
-    method @Deprecated public int getScreenShape();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenWidthDp();
-  }
-
-  @Deprecated public static final class DeviceParametersBuilders.DeviceParameters.Builder {
-    ctor @Deprecated public DeviceParametersBuilders.DeviceParameters.Builder();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters build();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenWidthDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-  }
-
-  @Deprecated public final class DimensionBuilders {
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
-  }
-
-  @Deprecated public static interface DimensionBuilders.ContainerDimension {
-  }
-
-  @Deprecated public static interface DimensionBuilders.ContainerDimension.Builder {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension build();
-  }
-
-  @Deprecated public static final class DimensionBuilders.DegreesProp {
-    method @Deprecated public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.DegreesProp.Builder {
-    ctor @Deprecated public DimensionBuilders.DegreesProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp.Builder setValue(float);
-  }
-
-  @Deprecated public static final class DimensionBuilders.DpProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension androidx.wear.tiles.DimensionBuilders.SpacerDimension {
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.DpProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder androidx.wear.tiles.DimensionBuilders.SpacerDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.DpProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public static final class DimensionBuilders.EmProp {
-    method @Deprecated public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.EmProp.Builder {
-    ctor @Deprecated public DimensionBuilders.EmProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.EmProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.EmProp.Builder setValue(float);
-  }
-
-  @Deprecated public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension {
-  }
-
-  @Deprecated public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.ExpandedDimensionProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp build();
-  }
-
-  @Deprecated public static interface DimensionBuilders.ImageDimension {
-  }
-
-  @Deprecated public static interface DimensionBuilders.ImageDimension.Builder {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ImageDimension build();
-  }
-
-  @Deprecated public static final class DimensionBuilders.ProportionalDimensionProp implements androidx.wear.tiles.DimensionBuilders.ImageDimension {
-    method @Deprecated @IntRange(from=0) public int getAspectRatioHeight();
-    method @Deprecated @IntRange(from=0) public int getAspectRatioWidth();
-  }
-
-  @Deprecated public static final class DimensionBuilders.ProportionalDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.ProportionalDimensionProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioHeight(@IntRange(from=0) int);
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioWidth(@IntRange(from=0) int);
-  }
-
-  @Deprecated public static final class DimensionBuilders.SpProp {
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.SP) public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.SpProp.Builder {
-    ctor @Deprecated public DimensionBuilders.SpProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-  }
-
-  @Deprecated public static interface DimensionBuilders.SpacerDimension {
-  }
-
-  @Deprecated public static interface DimensionBuilders.SpacerDimension.Builder {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpacerDimension build();
-  }
-
-  @Deprecated public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension {
-  }
-
-  @Deprecated public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.WrappedDimensionProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp build();
-  }
-
-  public final class EventBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileAddEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileAddEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileAddEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileAddEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileAddEvent.Builder setTileId(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileEnterEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileEnterEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileEnterEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileEnterEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileEnterEvent.Builder setTileId(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class EventBuilders.TileInteractionEvent {
-    method public int getEventType();
-    method public int getTileId();
-    method public java.time.Instant getTimestamp();
-    field public static final int ENTER = 1; // 0x1
-    field public static final int LEAVE = 2; // 0x2
-    field public static final int UNKNOWN = 0; // 0x0
-  }
-
-  public static final class EventBuilders.TileInteractionEvent.Builder {
-    ctor public EventBuilders.TileInteractionEvent.Builder(int, int);
-    method public androidx.wear.tiles.EventBuilders.TileInteractionEvent build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.tiles.EventBuilders.TileInteractionEvent.Builder setTimestamp(java.time.Instant);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileLeaveEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileLeaveEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileLeaveEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileLeaveEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileLeaveEvent.Builder setTileId(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileRemoveEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileRemoveEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileRemoveEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileRemoveEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileRemoveEvent.Builder setTileId(int);
-  }
-
-  @Deprecated public final class LayoutElementBuilders {
-    field @Deprecated public static final int ARC_ANCHOR_CENTER = 2; // 0x2
-    field @Deprecated public static final int ARC_ANCHOR_END = 3; // 0x3
-    field @Deprecated public static final int ARC_ANCHOR_START = 1; // 0x1
-    field @Deprecated public static final int ARC_ANCHOR_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int CONTENT_SCALE_MODE_CROP = 2; // 0x2
-    field @Deprecated public static final int CONTENT_SCALE_MODE_FILL_BOUNDS = 3; // 0x3
-    field @Deprecated public static final int CONTENT_SCALE_MODE_FIT = 1; // 0x1
-    field @Deprecated public static final int CONTENT_SCALE_MODE_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int FONT_VARIANT_BODY = 2; // 0x2
-    field @Deprecated public static final int FONT_VARIANT_TITLE = 1; // 0x1
-    field @Deprecated public static final int FONT_VARIANT_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
-    field @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4
-    field @Deprecated public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
-    field @Deprecated public static final int FONT_WEIGHT_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
-    field @Deprecated public static final int HORIZONTAL_ALIGN_END = 5; // 0x5
-    field @Deprecated public static final int HORIZONTAL_ALIGN_LEFT = 1; // 0x1
-    field @Deprecated public static final int HORIZONTAL_ALIGN_RIGHT = 3; // 0x3
-    field @Deprecated public static final int HORIZONTAL_ALIGN_START = 4; // 0x4
-    field @Deprecated public static final int HORIZONTAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int SPAN_VERTICAL_ALIGN_BOTTOM = 1; // 0x1
-    field @Deprecated public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2; // 0x2
-    field @Deprecated public static final int SPAN_VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int TEXT_ALIGN_CENTER = 2; // 0x2
-    field @Deprecated public static final int TEXT_ALIGN_END = 3; // 0x3
-    field @Deprecated public static final int TEXT_ALIGN_START = 1; // 0x1
-    field @Deprecated public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
-    field @Deprecated public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
-    field @Deprecated public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
-    field @Deprecated public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
-    field @Deprecated public static final int VERTICAL_ALIGN_TOP = 1; // 0x1
-    field @Deprecated public static final int VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Arc implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp? getAnchorAngle();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp? getAnchorType();
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlign();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Arc.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Arc.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorAngle(androidx.wear.tiles.DimensionBuilders.DegreesProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAdapter implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getRotateContents();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAdapter.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcAdapter.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(boolean);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAnchorTypeProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAnchorTypeProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcAnchorTypeProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp.Builder setValue(int);
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.ArcLayoutElement {
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.ArcLayoutElement.Builder {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement build();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcLine implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcLine.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcLine.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcSpacer implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcSpacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcSpacer.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcText implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getText();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcText.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcText.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(String);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Box implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Box.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Box.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ColorFilter {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getTint();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ColorFilter.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ColorFilter.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ColorFilter build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ColorFilter.Builder setTint(androidx.wear.tiles.ColorBuilders.ColorProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Column implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Column.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Column.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ContentScaleModeProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ContentScaleModeProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ContentScaleModeProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontStyle {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getItalic();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.EmProp? getLetterSpacing();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp? getSize();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getUnderline();
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp? getVariant();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp? getWeight();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontStyle.Builder {
-    ctor @Deprecated public LayoutElementBuilders.FontStyle.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(boolean);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setLetterSpacing(androidx.wear.tiles.DimensionBuilders.EmProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setSize(androidx.wear.tiles.DimensionBuilders.SpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(boolean);
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setVariant(androidx.wear.tiles.LayoutElementBuilders.FontVariantProp);
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setVariant(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(androidx.wear.tiles.LayoutElementBuilders.FontWeightProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(int);
-  }
-
-  @Deprecated public static class LayoutElementBuilders.FontStyles {
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-  }
-
-  @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static final class LayoutElementBuilders.FontVariantProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontVariantProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.FontVariantProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontWeightProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontWeightProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.FontWeightProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.HorizontalAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.HorizontalAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.HorizontalAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Image implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ColorFilter? getColorFilter();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp? getContentScaleMode();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ImageDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ImageDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Image.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Image.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setColorFilter(androidx.wear.tiles.LayoutElementBuilders.ColorFilter);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ImageDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(String);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ImageDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Layout {
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static androidx.wear.tiles.LayoutElementBuilders.Layout? fromByteArray(byte[]);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.Layout fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getRoot();
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public byte[] toByteArray();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Layout.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Layout.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Layout build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Layout.Builder setRoot(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.LayoutElement {
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.LayoutElement.Builder {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement build();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Row implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Row.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Row.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spacer implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Spacer.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setHeight(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setWidth(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.Span {
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.Span.Builder {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Span build();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanImage implements androidx.wear.tiles.LayoutElementBuilders.Span {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp? getAlignment();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanImage.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
-    ctor @Deprecated public LayoutElementBuilders.SpanImage.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setHeight(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(String);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanText implements androidx.wear.tiles.LayoutElementBuilders.Span {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getText();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanText.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
-    ctor @Deprecated public LayoutElementBuilders.SpanText.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(String);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanVerticalAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanVerticalAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.SpanVerticalAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spannable implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.Span!> getSpans();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spannable.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Spannable.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.tiles.LayoutElementBuilders.Span);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getText();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Text.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(String);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.TextAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextOverflowProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextOverflowProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.TextOverflowProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.VerticalAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.VerticalAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.VerticalAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public final class ModifiersBuilders {
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ArcModifiers {
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ArcModifiers.Builder {
-    ctor @Deprecated public ModifiersBuilders.ArcModifiers.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Background {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Corner? getCorner();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Background.Builder {
-    ctor @Deprecated public ModifiersBuilders.Background.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background.Builder setCorner(androidx.wear.tiles.ModifiersBuilders.Corner);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Border {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Border.Builder {
-    ctor @Deprecated public ModifiersBuilders.Border.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Clickable {
-    method @Deprecated public String getId();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.Action? getOnClick();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Clickable.Builder {
-    ctor @Deprecated public ModifiersBuilders.Clickable.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setId(String);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setOnClick(androidx.wear.tiles.ActionBuilders.Action);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Corner {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getRadius();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Corner.Builder {
-    ctor @Deprecated public ModifiersBuilders.Corner.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Corner build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Corner.Builder setRadius(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ElementMetadata {
-    method @Deprecated public byte[] getTagData();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ElementMetadata.Builder {
-    ctor @Deprecated public ModifiersBuilders.ElementMetadata.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ElementMetadata build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ElementMetadata.Builder setTagData(byte[]);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Modifiers {
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background? getBackground();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border? getBorder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ElementMetadata? getMetadata();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding? getPadding();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Modifiers.Builder {
-    ctor @Deprecated public ModifiersBuilders.Modifiers.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBackground(androidx.wear.tiles.ModifiersBuilders.Background);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBorder(androidx.wear.tiles.ModifiersBuilders.Border);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setMetadata(androidx.wear.tiles.ModifiersBuilders.ElementMetadata);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setPadding(androidx.wear.tiles.ModifiersBuilders.Padding);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Padding {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getBottom();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getEnd();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getRtlAware();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getStart();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getTop();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Padding.Builder {
-    ctor @Deprecated public ModifiersBuilders.Padding.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setAll(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setBottom(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setEnd(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(boolean);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setStart(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setTop(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Semantics {
-    method @Deprecated public String getContentDescription();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Semantics.Builder {
-    ctor @Deprecated public ModifiersBuilders.Semantics.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics.Builder setContentDescription(String);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.SpanModifiers {
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.SpanModifiers.Builder {
-    ctor @Deprecated public ModifiersBuilders.SpanModifiers.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
-  }
-
-  public final class RequestBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class RequestBuilders.ResourcesRequest {
-    method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters getDeviceConfiguration();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
-    method public java.util.List<java.lang.String!> getResourceIds();
-    method public int getTileId();
-    method public String getVersion();
-  }
-
-  public static final class RequestBuilders.ResourcesRequest.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public RequestBuilders.ResourcesRequest.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder addResourceId(String);
-    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setDeviceConfiguration(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setTileId(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setVersion(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class RequestBuilders.TileRequest {
-    method public androidx.wear.protolayout.StateBuilders.State getCurrentState();
-    method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters getDeviceConfiguration();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
-    method @Deprecated public androidx.wear.tiles.StateBuilders.State? getState();
-    method public int getTileId();
-  }
-
-  public static final class RequestBuilders.TileRequest.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public RequestBuilders.TileRequest.Builder();
-    method public androidx.wear.tiles.RequestBuilders.TileRequest build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setCurrentState(androidx.wear.protolayout.StateBuilders.State);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setDeviceConfiguration(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setState(androidx.wear.tiles.StateBuilders.State);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setTileId(int);
-  }
-
-  @Deprecated public final class ResourceBuilders {
-    field @Deprecated public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
-    field @Deprecated public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
-  }
-
-  @Deprecated public static final class ResourceBuilders.AndroidImageResourceByResId {
-    method @Deprecated @DrawableRes public int getResourceId();
-  }
-
-  @Deprecated public static final class ResourceBuilders.AndroidImageResourceByResId.Builder {
-    ctor @Deprecated public ResourceBuilders.AndroidImageResourceByResId.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
-  }
-
-  @Deprecated public static final class ResourceBuilders.ImageResource {
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource? getInlineResource();
-  }
-
-  @Deprecated public static final class ResourceBuilders.ImageResource.Builder {
-    ctor @Deprecated public ResourceBuilders.ImageResource.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.ImageResource build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.tiles.ResourceBuilders.InlineImageResource);
-  }
-
-  @Deprecated public static final class ResourceBuilders.InlineImageResource {
-    method @Deprecated public byte[] getData();
-    method @Deprecated public int getFormat();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.PX) public int getHeightPx();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.PX) public int getWidthPx();
-  }
-
-  @Deprecated public static final class ResourceBuilders.InlineImageResource.Builder {
-    ctor @Deprecated public ResourceBuilders.InlineImageResource.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setData(byte[]);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setFormat(int);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setWidthPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-  }
-
-  @Deprecated public static final class ResourceBuilders.Resources {
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static androidx.wear.tiles.ResourceBuilders.Resources? fromByteArray(byte[]);
-    method @Deprecated public java.util.Map<java.lang.String!,androidx.wear.tiles.ResourceBuilders.ImageResource!> getIdToImageMapping();
-    method @Deprecated public String getVersion();
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public byte[] toByteArray();
-  }
-
-  @Deprecated public static final class ResourceBuilders.Resources.Builder {
-    ctor @Deprecated public ResourceBuilders.Resources.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.Resources.Builder addIdToImageMapping(String, androidx.wear.tiles.ResourceBuilders.ImageResource);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.Resources build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.Resources.Builder setVersion(String);
-  }
-
-  @Deprecated public final class StateBuilders {
-  }
-
-  @Deprecated public static final class StateBuilders.State {
-    method @Deprecated public String getLastClickableId();
-  }
-
-  @Deprecated public static final class StateBuilders.State.Builder {
-    ctor @Deprecated public StateBuilders.State.Builder();
-    method @Deprecated public androidx.wear.tiles.StateBuilders.State build();
-  }
-
-  public final class TileBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TileBuilders.Tile {
-    method public long getFreshnessIntervalMillis();
-    method public String getResourcesVersion();
-    method public androidx.wear.protolayout.StateBuilders.State? getState();
-    method public androidx.wear.protolayout.TimelineBuilders.Timeline? getTileTimeline();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.Timeline? getTimeline();
-  }
-
-  public static final class TileBuilders.Tile.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public TileBuilders.Tile.Builder();
-    method public androidx.wear.tiles.TileBuilders.Tile build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.TileBuilders.Tile.Builder setFreshnessIntervalMillis(long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.TileBuilders.Tile.Builder setResourcesVersion(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.tiles.TileBuilders.Tile.Builder setState(androidx.wear.protolayout.StateBuilders.State);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.TileBuilders.Tile.Builder setTileTimeline(androidx.wear.protolayout.TimelineBuilders.Timeline);
-    method @Deprecated public androidx.wear.tiles.TileBuilders.Tile.Builder setTimeline(androidx.wear.tiles.TimelineBuilders.Timeline);
-  }
-
-  public abstract class TileService extends android.app.Service {
-    ctor public TileService();
-    method public static com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.wear.tiles.ActiveTileIdentifier!>!> getActiveTilesAsync(android.content.Context, java.util.concurrent.Executor);
-    method public static androidx.wear.tiles.TileUpdateRequester getUpdater(android.content.Context);
-    method public android.os.IBinder? onBind(android.content.Intent);
-    method @MainThread protected com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> onRecentInteractionEventsAsync(java.util.List<androidx.wear.tiles.EventBuilders.TileInteractionEvent!>);
-    method @Deprecated @MainThread protected com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> onResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    method @MainThread protected void onTileAddEvent(androidx.wear.tiles.EventBuilders.TileAddEvent);
-    method @Deprecated @MainThread protected void onTileEnterEvent(androidx.wear.tiles.EventBuilders.TileEnterEvent);
-    method @Deprecated @MainThread protected void onTileLeaveEvent(androidx.wear.tiles.EventBuilders.TileLeaveEvent);
-    method @MainThread protected void onTileRemoveEvent(androidx.wear.tiles.EventBuilders.TileRemoveEvent);
-    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> onTileRequest(androidx.wear.tiles.RequestBuilders.TileRequest);
-    method @MainThread protected com.google.common.util.concurrent.ListenableFuture<androidx.wear.protolayout.ResourceBuilders.Resources!> onTileResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    field public static final String ACTION_BIND_TILE_PROVIDER = "androidx.wear.tiles.action.BIND_TILE_PROVIDER";
-    field public static final String EXTRA_CLICKABLE_ID = "androidx.wear.tiles.extra.CLICKABLE_ID";
-    field public static final String METADATA_PREVIEW_KEY = "androidx.wear.tiles.PREVIEW";
-  }
-
-  public interface TileUpdateRequester {
-    method public void requestUpdate(Class<? extends androidx.wear.tiles.TileService!>);
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface TilesExperimental {
-  }
-
-  @Deprecated public final class TimelineBuilders {
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimeInterval {
-    method @Deprecated public long getEndMillis();
-    method @Deprecated public long getStartMillis();
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimeInterval.Builder {
-    ctor @Deprecated public TimelineBuilders.TimeInterval.Builder();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval build();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setEndMillis(long);
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setStartMillis(long);
-  }
-
-  @Deprecated public static final class TimelineBuilders.Timeline {
-    method @Deprecated public static androidx.wear.tiles.TimelineBuilders.Timeline fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public java.util.List<androidx.wear.tiles.TimelineBuilders.TimelineEntry!> getTimelineEntries();
-  }
-
-  @Deprecated public static final class TimelineBuilders.Timeline.Builder {
-    ctor @Deprecated public TimelineBuilders.Timeline.Builder();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.Timeline.Builder addTimelineEntry(androidx.wear.tiles.TimelineBuilders.TimelineEntry);
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.Timeline build();
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimelineEntry {
-    method @Deprecated public static androidx.wear.tiles.TimelineBuilders.TimelineEntry fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Layout? getLayout();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval? getValidity();
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimelineEntry.Builder {
-    ctor @Deprecated public TimelineBuilders.TimelineEntry.Builder();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimelineEntry build();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setLayout(androidx.wear.tiles.LayoutElementBuilders.Layout);
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.tiles.TimelineBuilders.TimeInterval);
-  }
-
-  @Deprecated public final class TypeBuilders {
-  }
-
-  @Deprecated public static final class TypeBuilders.BoolProp {
-    method @Deprecated public boolean getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.BoolProp.Builder {
-    ctor @Deprecated public TypeBuilders.BoolProp.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp.Builder setValue(boolean);
-  }
-
-  @Deprecated public static final class TypeBuilders.FloatProp {
-    method @Deprecated public float getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.FloatProp.Builder {
-    ctor @Deprecated public TypeBuilders.FloatProp.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.FloatProp build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.FloatProp.Builder setValue(float);
-  }
-
-  @Deprecated public static final class TypeBuilders.Int32Prop {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.Int32Prop.Builder {
-    ctor @Deprecated public TypeBuilders.Int32Prop.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop.Builder setValue(int);
-  }
-
-  @Deprecated public static final class TypeBuilders.StringProp {
-    method @Deprecated public String getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.StringProp.Builder {
-    ctor @Deprecated public TypeBuilders.StringProp.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp.Builder setValue(String);
-  }
-
-}
-
diff --git a/wear/tiles/tiles/api/res-1.5.0-beta01.txt b/wear/tiles/tiles/api/res-1.5.0-beta01.txt
deleted file mode 100644
index e69de29..0000000
--- a/wear/tiles/tiles/api/res-1.5.0-beta01.txt
+++ /dev/null
diff --git a/wear/tiles/tiles/api/restricted_1.5.0-beta01.txt b/wear/tiles/tiles/api/restricted_1.5.0-beta01.txt
deleted file mode 100644
index f9c99d7..0000000
--- a/wear/tiles/tiles/api/restricted_1.5.0-beta01.txt
+++ /dev/null
@@ -1,1151 +0,0 @@
-// Signature format: 4.0
-package androidx.wear.tiles {
-
-  @Deprecated public final class ActionBuilders {
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra booleanExtra(boolean);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra doubleExtra(double);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidIntExtra intExtra(int);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidLongExtra longExtra(long);
-    method @Deprecated public static androidx.wear.tiles.ActionBuilders.AndroidStringExtra stringExtra(String);
-  }
-
-  @Deprecated public static interface ActionBuilders.Action {
-  }
-
-  @Deprecated public static interface ActionBuilders.Action.Builder {
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.Action build();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidActivity {
-    method @Deprecated public String getClassName();
-    method @Deprecated public java.util.Map<java.lang.String!,androidx.wear.tiles.ActionBuilders.AndroidExtra!> getKeyToExtraMapping();
-    method @Deprecated public String getPackageName();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidActivity.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidActivity.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder addKeyToExtraMapping(String, androidx.wear.tiles.ActionBuilders.AndroidExtra);
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setClassName(String);
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity.Builder setPackageName(String);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidBooleanExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public boolean getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidBooleanExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidBooleanExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidBooleanExtra.Builder setValue(boolean);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidDoubleExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public double getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidDoubleExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidDoubleExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidDoubleExtra.Builder setValue(double);
-  }
-
-  @Deprecated public static interface ActionBuilders.AndroidExtra {
-  }
-
-  @Deprecated public static interface ActionBuilders.AndroidExtra.Builder {
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidExtra build();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidIntExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidIntExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidIntExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidIntExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidIntExtra.Builder setValue(int);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidLongExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public long getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidLongExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidLongExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidLongExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidLongExtra.Builder setValue(long);
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidStringExtra implements androidx.wear.tiles.ActionBuilders.AndroidExtra {
-    method @Deprecated public String getValue();
-  }
-
-  @Deprecated public static final class ActionBuilders.AndroidStringExtra.Builder implements androidx.wear.tiles.ActionBuilders.AndroidExtra.Builder {
-    ctor @Deprecated public ActionBuilders.AndroidStringExtra.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidStringExtra build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidStringExtra.Builder setValue(String);
-  }
-
-  @Deprecated public static final class ActionBuilders.LaunchAction implements androidx.wear.tiles.ActionBuilders.Action {
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.AndroidActivity? getAndroidActivity();
-  }
-
-  @Deprecated public static final class ActionBuilders.LaunchAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
-    ctor @Deprecated public ActionBuilders.LaunchAction.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LaunchAction build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LaunchAction.Builder setAndroidActivity(androidx.wear.tiles.ActionBuilders.AndroidActivity);
-  }
-
-  @Deprecated public static final class ActionBuilders.LoadAction implements androidx.wear.tiles.ActionBuilders.Action {
-    method @Deprecated public androidx.wear.tiles.StateBuilders.State? getRequestState();
-  }
-
-  @Deprecated public static final class ActionBuilders.LoadAction.Builder implements androidx.wear.tiles.ActionBuilders.Action.Builder {
-    ctor @Deprecated public ActionBuilders.LoadAction.Builder();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LoadAction build();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.LoadAction.Builder setRequestState(androidx.wear.tiles.StateBuilders.State);
-  }
-
-  public final class ActiveTileIdentifier {
-    ctor public ActiveTileIdentifier(android.content.ComponentName, int);
-    method public android.content.ComponentName getComponentName();
-    method public int getInstanceId();
-  }
-
-  @Deprecated public final class ColorBuilders {
-    method @Deprecated public static androidx.wear.tiles.ColorBuilders.ColorProp argb(@ColorInt int);
-  }
-
-  @Deprecated public static final class ColorBuilders.ColorProp {
-    method @Deprecated @ColorInt public int getArgb();
-  }
-
-  @Deprecated public static final class ColorBuilders.ColorProp.Builder {
-    ctor @Deprecated public ColorBuilders.ColorProp.Builder();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp build();
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp.Builder setArgb(@ColorInt int);
-  }
-
-  @Deprecated public final class DeviceParametersBuilders {
-    field @Deprecated public static final int DEVICE_PLATFORM_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int DEVICE_PLATFORM_WEAR_OS = 1; // 0x1
-    field @Deprecated public static final int SCREEN_SHAPE_RECT = 2; // 0x2
-    field @Deprecated public static final int SCREEN_SHAPE_ROUND = 1; // 0x1
-    field @Deprecated public static final int SCREEN_SHAPE_UNDEFINED = 0; // 0x0
-  }
-
-  @Deprecated public static final class DeviceParametersBuilders.DeviceParameters {
-    method @Deprecated public int getDevicePlatform();
-    method @Deprecated @FloatRange(from=0.0, fromInclusive=false, toInclusive=false) public float getScreenDensity();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenHeightDp();
-    method @Deprecated public int getScreenShape();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public int getScreenWidthDp();
-  }
-
-  @Deprecated public static final class DeviceParametersBuilders.DeviceParameters.Builder {
-    ctor @Deprecated public DeviceParametersBuilders.DeviceParameters.Builder();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters build();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setDevicePlatform(int);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenDensity(@FloatRange(from=0.0, fromInclusive=false, toInclusive=false) float);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenHeightDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenShape(int);
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters.Builder setScreenWidthDp(@Dimension(unit=androidx.annotation.Dimension.DP) int);
-  }
-
-  @Deprecated public final class DimensionBuilders {
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DegreesProp degrees(float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.DpProp dp(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.EmProp em(int);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp expand();
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.SpProp sp(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-    method @Deprecated public static androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp wrap();
-  }
-
-  @Deprecated public static interface DimensionBuilders.ContainerDimension {
-  }
-
-  @Deprecated public static interface DimensionBuilders.ContainerDimension.Builder {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension build();
-  }
-
-  @Deprecated public static final class DimensionBuilders.DegreesProp {
-    method @Deprecated public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.DegreesProp.Builder {
-    ctor @Deprecated public DimensionBuilders.DegreesProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp.Builder setValue(float);
-  }
-
-  @Deprecated public static final class DimensionBuilders.DpProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension androidx.wear.tiles.DimensionBuilders.SpacerDimension {
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.DP) public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.DpProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder androidx.wear.tiles.DimensionBuilders.SpacerDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.DpProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.DP) float);
-  }
-
-  @Deprecated public static final class DimensionBuilders.EmProp {
-    method @Deprecated public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.EmProp.Builder {
-    ctor @Deprecated public DimensionBuilders.EmProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.EmProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.EmProp.Builder setValue(float);
-  }
-
-  @Deprecated public static final class DimensionBuilders.ExpandedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension androidx.wear.tiles.DimensionBuilders.ImageDimension {
-  }
-
-  @Deprecated public static final class DimensionBuilders.ExpandedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.ExpandedDimensionProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ExpandedDimensionProp build();
-  }
-
-  @Deprecated public static interface DimensionBuilders.ImageDimension {
-  }
-
-  @Deprecated public static interface DimensionBuilders.ImageDimension.Builder {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ImageDimension build();
-  }
-
-  @Deprecated public static final class DimensionBuilders.ProportionalDimensionProp implements androidx.wear.tiles.DimensionBuilders.ImageDimension {
-    method @Deprecated @IntRange(from=0) public int getAspectRatioHeight();
-    method @Deprecated @IntRange(from=0) public int getAspectRatioWidth();
-  }
-
-  @Deprecated public static final class DimensionBuilders.ProportionalDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ImageDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.ProportionalDimensionProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioHeight(@IntRange(from=0) int);
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ProportionalDimensionProp.Builder setAspectRatioWidth(@IntRange(from=0) int);
-  }
-
-  @Deprecated public static final class DimensionBuilders.SpProp {
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.SP) public float getValue();
-  }
-
-  @Deprecated public static final class DimensionBuilders.SpProp.Builder {
-    ctor @Deprecated public DimensionBuilders.SpProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp build();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp.Builder setValue(@Dimension(unit=androidx.annotation.Dimension.SP) float);
-  }
-
-  @Deprecated public static interface DimensionBuilders.SpacerDimension {
-  }
-
-  @Deprecated public static interface DimensionBuilders.SpacerDimension.Builder {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpacerDimension build();
-  }
-
-  @Deprecated public static final class DimensionBuilders.WrappedDimensionProp implements androidx.wear.tiles.DimensionBuilders.ContainerDimension {
-  }
-
-  @Deprecated public static final class DimensionBuilders.WrappedDimensionProp.Builder implements androidx.wear.tiles.DimensionBuilders.ContainerDimension.Builder {
-    ctor @Deprecated public DimensionBuilders.WrappedDimensionProp.Builder();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.WrappedDimensionProp build();
-  }
-
-  public final class EventBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileAddEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileAddEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileAddEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileAddEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileAddEvent.Builder setTileId(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileEnterEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileEnterEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileEnterEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileEnterEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileEnterEvent.Builder setTileId(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public static final class EventBuilders.TileInteractionEvent {
-    method public int getEventType();
-    method public int getTileId();
-    method public java.time.Instant getTimestamp();
-    field public static final int ENTER = 1; // 0x1
-    field public static final int LEAVE = 2; // 0x2
-    field public static final int UNKNOWN = 0; // 0x0
-  }
-
-  public static final class EventBuilders.TileInteractionEvent.Builder {
-    ctor public EventBuilders.TileInteractionEvent.Builder(int, int);
-    method public androidx.wear.tiles.EventBuilders.TileInteractionEvent build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=400) public androidx.wear.tiles.EventBuilders.TileInteractionEvent.Builder setTimestamp(java.time.Instant);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileLeaveEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileLeaveEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileLeaveEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileLeaveEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileLeaveEvent.Builder setTileId(int);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class EventBuilders.TileRemoveEvent {
-    method public int getTileId();
-  }
-
-  public static final class EventBuilders.TileRemoveEvent.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public EventBuilders.TileRemoveEvent.Builder();
-    method public androidx.wear.tiles.EventBuilders.TileRemoveEvent build();
-    method public androidx.wear.tiles.EventBuilders.TileRemoveEvent.Builder setTileId(int);
-  }
-
-  @Deprecated public final class LayoutElementBuilders {
-    field @Deprecated public static final int ARC_ANCHOR_CENTER = 2; // 0x2
-    field @Deprecated public static final int ARC_ANCHOR_END = 3; // 0x3
-    field @Deprecated public static final int ARC_ANCHOR_START = 1; // 0x1
-    field @Deprecated public static final int ARC_ANCHOR_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int CONTENT_SCALE_MODE_CROP = 2; // 0x2
-    field @Deprecated public static final int CONTENT_SCALE_MODE_FILL_BOUNDS = 3; // 0x3
-    field @Deprecated public static final int CONTENT_SCALE_MODE_FIT = 1; // 0x1
-    field @Deprecated public static final int CONTENT_SCALE_MODE_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int FONT_VARIANT_BODY = 2; // 0x2
-    field @Deprecated public static final int FONT_VARIANT_TITLE = 1; // 0x1
-    field @Deprecated public static final int FONT_VARIANT_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
-    field @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4
-    field @Deprecated public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
-    field @Deprecated public static final int FONT_WEIGHT_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int HORIZONTAL_ALIGN_CENTER = 2; // 0x2
-    field @Deprecated public static final int HORIZONTAL_ALIGN_END = 5; // 0x5
-    field @Deprecated public static final int HORIZONTAL_ALIGN_LEFT = 1; // 0x1
-    field @Deprecated public static final int HORIZONTAL_ALIGN_RIGHT = 3; // 0x3
-    field @Deprecated public static final int HORIZONTAL_ALIGN_START = 4; // 0x4
-    field @Deprecated public static final int HORIZONTAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int SPAN_VERTICAL_ALIGN_BOTTOM = 1; // 0x1
-    field @Deprecated public static final int SPAN_VERTICAL_ALIGN_TEXT_BASELINE = 2; // 0x2
-    field @Deprecated public static final int SPAN_VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int TEXT_ALIGN_CENTER = 2; // 0x2
-    field @Deprecated public static final int TEXT_ALIGN_END = 3; // 0x3
-    field @Deprecated public static final int TEXT_ALIGN_START = 1; // 0x1
-    field @Deprecated public static final int TEXT_ALIGN_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int TEXT_OVERFLOW_ELLIPSIZE_END = 2; // 0x2
-    field @Deprecated public static final int TEXT_OVERFLOW_TRUNCATE = 1; // 0x1
-    field @Deprecated public static final int TEXT_OVERFLOW_UNDEFINED = 0; // 0x0
-    field @Deprecated public static final int VERTICAL_ALIGN_BOTTOM = 3; // 0x3
-    field @Deprecated public static final int VERTICAL_ALIGN_CENTER = 2; // 0x2
-    field @Deprecated public static final int VERTICAL_ALIGN_TOP = 1; // 0x1
-    field @Deprecated public static final int VERTICAL_ALIGN_UNDEFINED = 0; // 0x0
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Arc implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp? getAnchorAngle();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp? getAnchorType();
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlign();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Arc.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Arc.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorAngle(androidx.wear.tiles.DimensionBuilders.DegreesProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setAnchorType(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Arc.Builder setVerticalAlign(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAdapter implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getContent();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getRotateContents();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAdapter.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcAdapter.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAdapter.Builder setRotateContents(boolean);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAnchorTypeProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcAnchorTypeProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcAnchorTypeProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcAnchorTypeProp.Builder setValue(int);
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.ArcLayoutElement {
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.ArcLayoutElement.Builder {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement build();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcLine implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcLine.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcLine.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcLine.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcSpacer implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DegreesProp? getLength();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getThickness();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcSpacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcSpacer.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setLength(androidx.wear.tiles.DimensionBuilders.DegreesProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcSpacer.Builder setThickness(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcText implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getText();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ArcText.Builder implements androidx.wear.tiles.LayoutElementBuilders.ArcLayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ArcText.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.ArcModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ArcText.Builder setText(String);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Box implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Box.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Box.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setVerticalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Box.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ColorFilter {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getTint();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ColorFilter.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ColorFilter.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ColorFilter build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ColorFilter.Builder setTint(androidx.wear.tiles.ColorBuilders.ColorProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Column implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getHorizontalAlignment();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Column.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Column.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setHorizontalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Column.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ContentScaleModeProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.ContentScaleModeProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.ContentScaleModeProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontStyle {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getItalic();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.EmProp? getLetterSpacing();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp? getSize();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getUnderline();
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp? getVariant();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp? getWeight();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontStyle.Builder {
-    ctor @Deprecated public LayoutElementBuilders.FontStyle.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setItalic(boolean);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setLetterSpacing(androidx.wear.tiles.DimensionBuilders.EmProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setSize(androidx.wear.tiles.DimensionBuilders.SpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setUnderline(boolean);
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setVariant(androidx.wear.tiles.LayoutElementBuilders.FontVariantProp);
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setVariant(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(androidx.wear.tiles.LayoutElementBuilders.FontWeightProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder setWeight(int);
-  }
-
-  @Deprecated public static class LayoutElementBuilders.FontStyles {
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder body2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder button(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder caption2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder display3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title1(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title2(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.FontStyle.Builder title3(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-  }
-
-  @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static final class LayoutElementBuilders.FontVariantProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontVariantProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.FontVariantProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontVariantProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontWeightProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.FontWeightProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.FontWeightProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontWeightProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.HorizontalAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.HorizontalAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.HorizontalAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Image implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ColorFilter? getColorFilter();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp? getContentScaleMode();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ImageDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ImageDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Image.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Image.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setColorFilter(androidx.wear.tiles.LayoutElementBuilders.ColorFilter);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(androidx.wear.tiles.LayoutElementBuilders.ContentScaleModeProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setContentScaleMode(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ImageDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setResourceId(String);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Image.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ImageDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Layout {
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static androidx.wear.tiles.LayoutElementBuilders.Layout? fromByteArray(byte[]);
-    method @Deprecated public static androidx.wear.tiles.LayoutElementBuilders.Layout fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement? getRoot();
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public byte[] toByteArray();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Layout.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Layout.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Layout build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Layout.Builder setRoot(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.LayoutElement {
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.LayoutElement.Builder {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.LayoutElement build();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Row implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.LayoutElement!> getContents();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp? getVerticalAlignment();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.ContainerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Row.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Row.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder addContent(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setHeight(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setVerticalAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Row.Builder setWidth(androidx.wear.tiles.DimensionBuilders.ContainerDimension);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spacer implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpacerDimension? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spacer.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Spacer.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setHeight(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spacer.Builder setWidth(androidx.wear.tiles.DimensionBuilders.SpacerDimension);
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.Span {
-  }
-
-  @Deprecated public static interface LayoutElementBuilders.Span.Builder {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Span build();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanImage implements androidx.wear.tiles.LayoutElementBuilders.Span {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp? getAlignment();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getHeight();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getResourceId();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanImage.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
-    ctor @Deprecated public LayoutElementBuilders.SpanImage.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setHeight(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setResourceId(String);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanImage.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanText implements androidx.wear.tiles.LayoutElementBuilders.Span {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getText();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanText.Builder implements androidx.wear.tiles.LayoutElementBuilders.Span.Builder {
-    ctor @Deprecated public LayoutElementBuilders.SpanText.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.SpanModifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanText.Builder setText(String);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanVerticalAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.SpanVerticalAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.SpanVerticalAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.SpanVerticalAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spannable implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp? getMultilineAlignment();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method @Deprecated public java.util.List<androidx.wear.tiles.LayoutElementBuilders.Span!> getSpans();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Spannable.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Spannable.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder addSpan(androidx.wear.tiles.LayoutElementBuilders.Span);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMaxLines(@IntRange(from=1) int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.HorizontalAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setMultilineAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Spannable.Builder setOverflow(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Text implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement {
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.FontStyle? getFontStyle();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.SpProp? getLineHeight();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop? getMaxLines();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers? getModifiers();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp? getMultilineAlignment();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp? getOverflow();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp? getText();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.Text.Builder implements androidx.wear.tiles.LayoutElementBuilders.LayoutElement.Builder {
-    ctor @Deprecated public LayoutElementBuilders.Text.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setFontStyle(androidx.wear.tiles.LayoutElementBuilders.FontStyle);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setLineHeight(androidx.wear.tiles.DimensionBuilders.SpProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(androidx.wear.tiles.TypeBuilders.Int32Prop);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMaxLines(@IntRange(from=1) int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setModifiers(androidx.wear.tiles.ModifiersBuilders.Modifiers);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setMultilineAlignment(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setOverflow(int);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(androidx.wear.tiles.TypeBuilders.StringProp);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Text.Builder setText(String);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.TextAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextOverflowProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.TextOverflowProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.TextOverflowProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.TextOverflowProp.Builder setValue(int);
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.VerticalAlignmentProp {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class LayoutElementBuilders.VerticalAlignmentProp.Builder {
-    ctor @Deprecated public LayoutElementBuilders.VerticalAlignmentProp.Builder();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp build();
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.VerticalAlignmentProp.Builder setValue(int);
-  }
-
-  @Deprecated public final class ModifiersBuilders {
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ArcModifiers {
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ArcModifiers.Builder {
-    ctor @Deprecated public ModifiersBuilders.ArcModifiers.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ArcModifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Background {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Corner? getCorner();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Background.Builder {
-    ctor @Deprecated public ModifiersBuilders.Background.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background.Builder setCorner(androidx.wear.tiles.ModifiersBuilders.Corner);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Border {
-    method @Deprecated public androidx.wear.tiles.ColorBuilders.ColorProp? getColor();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getWidth();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Border.Builder {
-    ctor @Deprecated public ModifiersBuilders.Border.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border.Builder setColor(androidx.wear.tiles.ColorBuilders.ColorProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border.Builder setWidth(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Clickable {
-    method @Deprecated public String getId();
-    method @Deprecated public androidx.wear.tiles.ActionBuilders.Action? getOnClick();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Clickable.Builder {
-    ctor @Deprecated public ModifiersBuilders.Clickable.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setId(String);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable.Builder setOnClick(androidx.wear.tiles.ActionBuilders.Action);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Corner {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getRadius();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Corner.Builder {
-    ctor @Deprecated public ModifiersBuilders.Corner.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Corner build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Corner.Builder setRadius(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ElementMetadata {
-    method @Deprecated public byte[] getTagData();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.ElementMetadata.Builder {
-    ctor @Deprecated public ModifiersBuilders.ElementMetadata.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ElementMetadata build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ElementMetadata.Builder setTagData(byte[]);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Modifiers {
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Background? getBackground();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Border? getBorder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.ElementMetadata? getMetadata();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding? getPadding();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics? getSemantics();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Modifiers.Builder {
-    ctor @Deprecated public ModifiersBuilders.Modifiers.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBackground(androidx.wear.tiles.ModifiersBuilders.Background);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setBorder(androidx.wear.tiles.ModifiersBuilders.Border);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setMetadata(androidx.wear.tiles.ModifiersBuilders.ElementMetadata);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setPadding(androidx.wear.tiles.ModifiersBuilders.Padding);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Modifiers.Builder setSemantics(androidx.wear.tiles.ModifiersBuilders.Semantics);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Padding {
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getBottom();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getEnd();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp? getRtlAware();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getStart();
-    method @Deprecated public androidx.wear.tiles.DimensionBuilders.DpProp? getTop();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Padding.Builder {
-    ctor @Deprecated public ModifiersBuilders.Padding.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setAll(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setBottom(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setEnd(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(androidx.wear.tiles.TypeBuilders.BoolProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setRtlAware(boolean);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setStart(androidx.wear.tiles.DimensionBuilders.DpProp);
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Padding.Builder setTop(androidx.wear.tiles.DimensionBuilders.DpProp);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Semantics {
-    method @Deprecated public String getContentDescription();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.Semantics.Builder {
-    ctor @Deprecated public ModifiersBuilders.Semantics.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Semantics.Builder setContentDescription(String);
-  }
-
-  @Deprecated public static final class ModifiersBuilders.SpanModifiers {
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.Clickable? getClickable();
-  }
-
-  @Deprecated public static final class ModifiersBuilders.SpanModifiers.Builder {
-    ctor @Deprecated public ModifiersBuilders.SpanModifiers.Builder();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers build();
-    method @Deprecated public androidx.wear.tiles.ModifiersBuilders.SpanModifiers.Builder setClickable(androidx.wear.tiles.ModifiersBuilders.Clickable);
-  }
-
-  public final class RequestBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class RequestBuilders.ResourcesRequest {
-    method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters getDeviceConfiguration();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
-    method public java.util.List<java.lang.String!> getResourceIds();
-    method public int getTileId();
-    method public String getVersion();
-  }
-
-  public static final class RequestBuilders.ResourcesRequest.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public RequestBuilders.ResourcesRequest.Builder();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder addResourceId(String);
-    method public androidx.wear.tiles.RequestBuilders.ResourcesRequest build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setDeviceConfiguration(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setTileId(int);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.ResourcesRequest.Builder setVersion(String);
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class RequestBuilders.TileRequest {
-    method public androidx.wear.protolayout.StateBuilders.State getCurrentState();
-    method public androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters getDeviceConfiguration();
-    method @Deprecated public androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters? getDeviceParameters();
-    method @Deprecated public androidx.wear.tiles.StateBuilders.State? getState();
-    method public int getTileId();
-  }
-
-  public static final class RequestBuilders.TileRequest.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public RequestBuilders.TileRequest.Builder();
-    method public androidx.wear.tiles.RequestBuilders.TileRequest build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setCurrentState(androidx.wear.protolayout.StateBuilders.State);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setDeviceConfiguration(androidx.wear.protolayout.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setDeviceParameters(androidx.wear.tiles.DeviceParametersBuilders.DeviceParameters);
-    method @Deprecated public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setState(androidx.wear.tiles.StateBuilders.State);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.RequestBuilders.TileRequest.Builder setTileId(int);
-  }
-
-  @Deprecated public final class ResourceBuilders {
-    field @Deprecated public static final int IMAGE_FORMAT_RGB_565 = 1; // 0x1
-    field @Deprecated public static final int IMAGE_FORMAT_UNDEFINED = 0; // 0x0
-  }
-
-  @Deprecated public static final class ResourceBuilders.AndroidImageResourceByResId {
-    method @Deprecated @DrawableRes public int getResourceId();
-  }
-
-  @Deprecated public static final class ResourceBuilders.AndroidImageResourceByResId.Builder {
-    ctor @Deprecated public ResourceBuilders.AndroidImageResourceByResId.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId.Builder setResourceId(@DrawableRes int);
-  }
-
-  @Deprecated public static final class ResourceBuilders.ImageResource {
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId? getAndroidResourceByResId();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource? getInlineResource();
-  }
-
-  @Deprecated public static final class ResourceBuilders.ImageResource.Builder {
-    ctor @Deprecated public ResourceBuilders.ImageResource.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.ImageResource build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setAndroidResourceByResId(androidx.wear.tiles.ResourceBuilders.AndroidImageResourceByResId);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.ImageResource.Builder setInlineResource(androidx.wear.tiles.ResourceBuilders.InlineImageResource);
-  }
-
-  @Deprecated public static final class ResourceBuilders.InlineImageResource {
-    method @Deprecated public byte[] getData();
-    method @Deprecated public int getFormat();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.PX) public int getHeightPx();
-    method @Deprecated @Dimension(unit=androidx.annotation.Dimension.PX) public int getWidthPx();
-  }
-
-  @Deprecated public static final class ResourceBuilders.InlineImageResource.Builder {
-    ctor @Deprecated public ResourceBuilders.InlineImageResource.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setData(byte[]);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setFormat(int);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setHeightPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.InlineImageResource.Builder setWidthPx(@Dimension(unit=androidx.annotation.Dimension.PX) int);
-  }
-
-  @Deprecated public static final class ResourceBuilders.Resources {
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public static androidx.wear.tiles.ResourceBuilders.Resources? fromByteArray(byte[]);
-    method @Deprecated public java.util.Map<java.lang.String!,androidx.wear.tiles.ResourceBuilders.ImageResource!> getIdToImageMapping();
-    method @Deprecated public String getVersion();
-    method @Deprecated @SuppressCompatibility @androidx.wear.tiles.TilesExperimental public byte[] toByteArray();
-  }
-
-  @Deprecated public static final class ResourceBuilders.Resources.Builder {
-    ctor @Deprecated public ResourceBuilders.Resources.Builder();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.Resources.Builder addIdToImageMapping(String, androidx.wear.tiles.ResourceBuilders.ImageResource);
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.Resources build();
-    method @Deprecated public androidx.wear.tiles.ResourceBuilders.Resources.Builder setVersion(String);
-  }
-
-  @Deprecated public final class StateBuilders {
-  }
-
-  @Deprecated public static final class StateBuilders.State {
-    method @Deprecated public String getLastClickableId();
-  }
-
-  @Deprecated public static final class StateBuilders.State.Builder {
-    ctor @Deprecated public StateBuilders.State.Builder();
-    method @Deprecated public androidx.wear.tiles.StateBuilders.State build();
-  }
-
-  public final class TileBuilders {
-  }
-
-  @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public static final class TileBuilders.Tile {
-    method public long getFreshnessIntervalMillis();
-    method public String getResourcesVersion();
-    method public androidx.wear.protolayout.StateBuilders.State? getState();
-    method public androidx.wear.protolayout.TimelineBuilders.Timeline? getTileTimeline();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.Timeline? getTimeline();
-  }
-
-  public static final class TileBuilders.Tile.Builder {
-    ctor @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public TileBuilders.Tile.Builder();
-    method public androidx.wear.tiles.TileBuilders.Tile build();
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.TileBuilders.Tile.Builder setFreshnessIntervalMillis(long);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.TileBuilders.Tile.Builder setResourcesVersion(String);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=200) public androidx.wear.tiles.TileBuilders.Tile.Builder setState(androidx.wear.protolayout.StateBuilders.State);
-    method @androidx.wear.protolayout.expression.RequiresSchemaVersion(major=1, minor=0) public androidx.wear.tiles.TileBuilders.Tile.Builder setTileTimeline(androidx.wear.protolayout.TimelineBuilders.Timeline);
-    method @Deprecated public androidx.wear.tiles.TileBuilders.Tile.Builder setTimeline(androidx.wear.tiles.TimelineBuilders.Timeline);
-  }
-
-  public abstract class TileService extends android.app.Service {
-    ctor public TileService();
-    method public static com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.wear.tiles.ActiveTileIdentifier!>!> getActiveTilesAsync(android.content.Context, java.util.concurrent.Executor);
-    method public static androidx.wear.tiles.TileUpdateRequester getUpdater(android.content.Context);
-    method public android.os.IBinder? onBind(android.content.Intent);
-    method @MainThread protected com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> onRecentInteractionEventsAsync(java.util.List<androidx.wear.tiles.EventBuilders.TileInteractionEvent!>);
-    method @Deprecated @MainThread protected com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.ResourceBuilders.Resources!> onResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    method @MainThread protected void onTileAddEvent(androidx.wear.tiles.EventBuilders.TileAddEvent);
-    method @Deprecated @MainThread protected void onTileEnterEvent(androidx.wear.tiles.EventBuilders.TileEnterEvent);
-    method @Deprecated @MainThread protected void onTileLeaveEvent(androidx.wear.tiles.EventBuilders.TileLeaveEvent);
-    method @MainThread protected void onTileRemoveEvent(androidx.wear.tiles.EventBuilders.TileRemoveEvent);
-    method @MainThread protected abstract com.google.common.util.concurrent.ListenableFuture<androidx.wear.tiles.TileBuilders.Tile!> onTileRequest(androidx.wear.tiles.RequestBuilders.TileRequest);
-    method @MainThread protected com.google.common.util.concurrent.ListenableFuture<androidx.wear.protolayout.ResourceBuilders.Resources!> onTileResourcesRequest(androidx.wear.tiles.RequestBuilders.ResourcesRequest);
-    field public static final String ACTION_BIND_TILE_PROVIDER = "androidx.wear.tiles.action.BIND_TILE_PROVIDER";
-    field public static final String EXTRA_CLICKABLE_ID = "androidx.wear.tiles.extra.CLICKABLE_ID";
-    field public static final String METADATA_PREVIEW_KEY = "androidx.wear.tiles.PREVIEW";
-  }
-
-  public interface TileUpdateRequester {
-    method public void requestUpdate(Class<? extends androidx.wear.tiles.TileService!>);
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public @interface TilesExperimental {
-  }
-
-  @Deprecated public final class TimelineBuilders {
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimeInterval {
-    method @Deprecated public long getEndMillis();
-    method @Deprecated public long getStartMillis();
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimeInterval.Builder {
-    ctor @Deprecated public TimelineBuilders.TimeInterval.Builder();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval build();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setEndMillis(long);
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval.Builder setStartMillis(long);
-  }
-
-  @Deprecated public static final class TimelineBuilders.Timeline {
-    method @Deprecated public static androidx.wear.tiles.TimelineBuilders.Timeline fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public java.util.List<androidx.wear.tiles.TimelineBuilders.TimelineEntry!> getTimelineEntries();
-  }
-
-  @Deprecated public static final class TimelineBuilders.Timeline.Builder {
-    ctor @Deprecated public TimelineBuilders.Timeline.Builder();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.Timeline.Builder addTimelineEntry(androidx.wear.tiles.TimelineBuilders.TimelineEntry);
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.Timeline build();
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimelineEntry {
-    method @Deprecated public static androidx.wear.tiles.TimelineBuilders.TimelineEntry fromLayoutElement(androidx.wear.tiles.LayoutElementBuilders.LayoutElement);
-    method @Deprecated public androidx.wear.tiles.LayoutElementBuilders.Layout? getLayout();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimeInterval? getValidity();
-  }
-
-  @Deprecated public static final class TimelineBuilders.TimelineEntry.Builder {
-    ctor @Deprecated public TimelineBuilders.TimelineEntry.Builder();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimelineEntry build();
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setLayout(androidx.wear.tiles.LayoutElementBuilders.Layout);
-    method @Deprecated public androidx.wear.tiles.TimelineBuilders.TimelineEntry.Builder setValidity(androidx.wear.tiles.TimelineBuilders.TimeInterval);
-  }
-
-  @Deprecated public final class TypeBuilders {
-  }
-
-  @Deprecated public static final class TypeBuilders.BoolProp {
-    method @Deprecated public boolean getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.BoolProp.Builder {
-    ctor @Deprecated public TypeBuilders.BoolProp.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.BoolProp.Builder setValue(boolean);
-  }
-
-  @Deprecated public static final class TypeBuilders.FloatProp {
-    method @Deprecated public float getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.FloatProp.Builder {
-    ctor @Deprecated public TypeBuilders.FloatProp.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.FloatProp build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.FloatProp.Builder setValue(float);
-  }
-
-  @Deprecated public static final class TypeBuilders.Int32Prop {
-    method @Deprecated public int getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.Int32Prop.Builder {
-    ctor @Deprecated public TypeBuilders.Int32Prop.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.Int32Prop.Builder setValue(int);
-  }
-
-  @Deprecated public static final class TypeBuilders.StringProp {
-    method @Deprecated public String getValue();
-  }
-
-  @Deprecated public static final class TypeBuilders.StringProp.Builder {
-    ctor @Deprecated public TypeBuilders.StringProp.Builder();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp build();
-    method @Deprecated public androidx.wear.tiles.TypeBuilders.StringProp.Builder setValue(String);
-  }
-
-}
-
diff --git a/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/PhoneTypeHelperTest.kt b/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/PhoneTypeHelperTest.kt
index 080f45f..57cc0e9 100644
--- a/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/PhoneTypeHelperTest.kt
+++ b/wear/wear-phone-interactions/src/test/java/androidx/wear/phone/interactions/PhoneTypeHelperTest.kt
@@ -150,6 +150,7 @@
             .isEqualTo(PhoneTypeHelper.DEVICE_TYPE_UNKNOWN)
     }
 
+    @Test
     @Config(sdk = [Build.VERSION_CODES.UPSIDE_DOWN_CAKE])
     fun testGetDeviceType_returnsAndroid_onUWithGreaterTargetSdk() {
         Settings.Global.putInt(
diff --git a/webkit/webkit/api/current.txt b/webkit/webkit/api/current.txt
index 72f140a..c1e111d 100644
--- a/webkit/webkit/api/current.txt
+++ b/webkit/webkit/api/current.txt
@@ -24,20 +24,6 @@
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_LISTENER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void postMessage(String);
   }
 
-  @SuppressCompatibility @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public interface Navigation {
-    method public boolean didCommit();
-    method public boolean didCommitErrorPage();
-    method public androidx.webkit.Page? getPage();
-    method public int getStatusCode();
-    method public boolean isBack();
-    method public boolean isForward();
-    method public boolean isHistory();
-    method public boolean isReload();
-    method public boolean isRestore();
-    method public boolean isSameDocument();
-    method public boolean wasInitiatedByPage();
-  }
-
   @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public class NoVarySearchHeader {
     method @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public static androidx.webkit.NoVarySearchHeader alwaysVaryHeader();
     method @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public static androidx.webkit.NoVarySearchHeader neverVaryExcept(boolean, java.util.List<java.lang.String!>);
@@ -54,9 +40,6 @@
     method public void onResult(T!);
   }
 
-  @SuppressCompatibility @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public interface Page {
-  }
-
   @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public class PrefetchException extends java.lang.Exception {
     ctor public PrefetchException();
     ctor public PrefetchException(String);
@@ -314,19 +297,6 @@
     method public void onMessage(androidx.webkit.WebMessagePortCompat, androidx.webkit.WebMessageCompat?);
   }
 
-  @SuppressCompatibility @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public interface WebNavigationClient {
-    method public void onFirstContentfulPaint(androidx.webkit.Page);
-    method public void onNavigationCompleted(androidx.webkit.Navigation);
-    method public void onNavigationRedirected(androidx.webkit.Navigation);
-    method public void onNavigationStarted(androidx.webkit.Navigation);
-    method public void onPageDeleted(androidx.webkit.Page);
-    method public void onPageDomContentLoadedEventFired(androidx.webkit.Page);
-    method public void onPageLoadEventFired(androidx.webkit.Page);
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public static @interface WebNavigationClient.ExperimentalNavigationCallback {
-  }
-
   public abstract class WebResourceErrorCompat {
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_RESOURCE_ERROR_GET_DESCRIPTION, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract CharSequence getDescription();
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_RESOURCE_ERROR_GET_CODE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract int getErrorCode();
@@ -444,7 +414,6 @@
     method @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_PRIVACY_POLICY_URL, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
     method @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_VARIATIONS_HEADER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static String getVariationsHeader();
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_WEB_CHROME_CLIENT, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static android.webkit.WebChromeClient? getWebChromeClient(android.webkit.WebView);
-    method @SuppressCompatibility @RequiresFeature(name=androidx.webkit.WebViewFeature.NAVIGATION_CALLBACK_BASIC, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public static androidx.webkit.WebNavigationClient getWebNavigationClient(android.webkit.WebView);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_WEB_VIEW_CLIENT, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static android.webkit.WebViewClient getWebViewClient(android.webkit.WebView);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_WEB_VIEW_RENDERER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static androidx.webkit.WebViewRenderProcess? getWebViewRenderProcess(android.webkit.WebView);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static androidx.webkit.WebViewRenderProcessClient? getWebViewRenderProcessClient(android.webkit.WebView);
@@ -462,7 +431,6 @@
     method @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ALLOWLIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingAllowlist(java.util.Set<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
     method @Deprecated @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_WHITELIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
     method @SuppressCompatibility @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.CACHE_PROVIDER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @androidx.webkit.WebViewCompat.ExperimentalCacheProvider public static void setShouldCacheProvider(boolean);
-    method @SuppressCompatibility @RequiresFeature(name=androidx.webkit.WebViewFeature.NAVIGATION_CALLBACK_BASIC, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public static void setWebNavigationClient(android.webkit.WebView, androidx.webkit.WebNavigationClient);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static void setWebViewRenderProcessClient(android.webkit.WebView, androidx.webkit.WebViewRenderProcessClient?);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
     method @Deprecated @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.START_SAFE_BROWSING, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean!>?);
@@ -516,7 +484,6 @@
     field public static final String MULTI_PROCESS = "MULTI_PROCESS";
     field public static final String MULTI_PROFILE = "MULTI_PROFILE";
     field public static final String MUTE_AUDIO = "MUTE_AUDIO";
-    field public static final String NAVIGATION_CALLBACK_BASIC = "WEB_VIEW_NAVIGATION_CLIENT_BASIC_USAGE";
     field public static final String OFF_SCREEN_PRERASTER = "OFF_SCREEN_PRERASTER";
     field public static final String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
     field @SuppressCompatibility @androidx.webkit.WebViewCompat.ExperimentalUrlPrerender public static final String PRERENDER_WITH_URL = "PRERENDER_URL_V2";
diff --git a/webkit/webkit/api/restricted_current.txt b/webkit/webkit/api/restricted_current.txt
index 72f140a..c1e111d 100644
--- a/webkit/webkit/api/restricted_current.txt
+++ b/webkit/webkit/api/restricted_current.txt
@@ -24,20 +24,6 @@
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_MESSAGE_LISTENER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract void postMessage(String);
   }
 
-  @SuppressCompatibility @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public interface Navigation {
-    method public boolean didCommit();
-    method public boolean didCommitErrorPage();
-    method public androidx.webkit.Page? getPage();
-    method public int getStatusCode();
-    method public boolean isBack();
-    method public boolean isForward();
-    method public boolean isHistory();
-    method public boolean isReload();
-    method public boolean isRestore();
-    method public boolean isSameDocument();
-    method public boolean wasInitiatedByPage();
-  }
-
   @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public class NoVarySearchHeader {
     method @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public static androidx.webkit.NoVarySearchHeader alwaysVaryHeader();
     method @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public static androidx.webkit.NoVarySearchHeader neverVaryExcept(boolean, java.util.List<java.lang.String!>);
@@ -54,9 +40,6 @@
     method public void onResult(T!);
   }
 
-  @SuppressCompatibility @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public interface Page {
-  }
-
   @SuppressCompatibility @androidx.webkit.Profile.ExperimentalUrlPrefetch public class PrefetchException extends java.lang.Exception {
     ctor public PrefetchException();
     ctor public PrefetchException(String);
@@ -314,19 +297,6 @@
     method public void onMessage(androidx.webkit.WebMessagePortCompat, androidx.webkit.WebMessageCompat?);
   }
 
-  @SuppressCompatibility @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public interface WebNavigationClient {
-    method public void onFirstContentfulPaint(androidx.webkit.Page);
-    method public void onNavigationCompleted(androidx.webkit.Navigation);
-    method public void onNavigationRedirected(androidx.webkit.Navigation);
-    method public void onNavigationStarted(androidx.webkit.Navigation);
-    method public void onPageDeleted(androidx.webkit.Page);
-    method public void onPageDomContentLoadedEventFired(androidx.webkit.Page);
-    method public void onPageLoadEventFired(androidx.webkit.Page);
-  }
-
-  @SuppressCompatibility @RequiresOptIn(level=androidx.annotation.RequiresOptIn.Level.ERROR) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD}) public static @interface WebNavigationClient.ExperimentalNavigationCallback {
-  }
-
   public abstract class WebResourceErrorCompat {
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_RESOURCE_ERROR_GET_DESCRIPTION, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract CharSequence getDescription();
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_RESOURCE_ERROR_GET_CODE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public abstract int getErrorCode();
@@ -444,7 +414,6 @@
     method @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_PRIVACY_POLICY_URL, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
     method @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_VARIATIONS_HEADER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static String getVariationsHeader();
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_WEB_CHROME_CLIENT, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static android.webkit.WebChromeClient? getWebChromeClient(android.webkit.WebView);
-    method @SuppressCompatibility @RequiresFeature(name=androidx.webkit.WebViewFeature.NAVIGATION_CALLBACK_BASIC, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public static androidx.webkit.WebNavigationClient getWebNavigationClient(android.webkit.WebView);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_WEB_VIEW_CLIENT, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static android.webkit.WebViewClient getWebViewClient(android.webkit.WebView);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.GET_WEB_VIEW_RENDERER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static androidx.webkit.WebViewRenderProcess? getWebViewRenderProcess(android.webkit.WebView);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static androidx.webkit.WebViewRenderProcessClient? getWebViewRenderProcessClient(android.webkit.WebView);
@@ -462,7 +431,6 @@
     method @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_ALLOWLIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingAllowlist(java.util.Set<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
     method @Deprecated @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.SAFE_BROWSING_WHITELIST, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void setSafeBrowsingWhitelist(java.util.List<java.lang.String!>, android.webkit.ValueCallback<java.lang.Boolean!>?);
     method @SuppressCompatibility @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.CACHE_PROVIDER, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @androidx.webkit.WebViewCompat.ExperimentalCacheProvider public static void setShouldCacheProvider(boolean);
-    method @SuppressCompatibility @RequiresFeature(name=androidx.webkit.WebViewFeature.NAVIGATION_CALLBACK_BASIC, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread @androidx.webkit.WebNavigationClient.ExperimentalNavigationCallback public static void setWebNavigationClient(android.webkit.WebView, androidx.webkit.WebNavigationClient);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static void setWebViewRenderProcessClient(android.webkit.WebView, androidx.webkit.WebViewRenderProcessClient?);
     method @RequiresFeature(name=androidx.webkit.WebViewFeature.WEB_VIEW_RENDERER_CLIENT_BASIC_USAGE, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") @UiThread public static void setWebViewRenderProcessClient(android.webkit.WebView, java.util.concurrent.Executor, androidx.webkit.WebViewRenderProcessClient);
     method @Deprecated @AnyThread @RequiresFeature(name=androidx.webkit.WebViewFeature.START_SAFE_BROWSING, enforcement="androidx.webkit.WebViewFeature#isFeatureSupported") public static void startSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean!>?);
@@ -516,7 +484,6 @@
     field public static final String MULTI_PROCESS = "MULTI_PROCESS";
     field public static final String MULTI_PROFILE = "MULTI_PROFILE";
     field public static final String MUTE_AUDIO = "MUTE_AUDIO";
-    field public static final String NAVIGATION_CALLBACK_BASIC = "WEB_VIEW_NAVIGATION_CLIENT_BASIC_USAGE";
     field public static final String OFF_SCREEN_PRERASTER = "OFF_SCREEN_PRERASTER";
     field public static final String POST_WEB_MESSAGE = "POST_WEB_MESSAGE";
     field @SuppressCompatibility @androidx.webkit.WebViewCompat.ExperimentalUrlPrerender public static final String PRERENDER_WITH_URL = "PRERENDER_URL_V2";
diff --git a/webkit/webkit/proguard-rules.pro b/webkit/webkit/proguard-rules.pro
index 36f4099..c40d32a 100644
--- a/webkit/webkit/proguard-rules.pro
+++ b/webkit/webkit/proguard-rules.pro
@@ -19,8 +19,4 @@
 # depends on this name.
 -keepnames public class androidx.webkit.ProcessGlobalConfig {
     private static final *** sProcessGlobalConfig;
-}
-
--keepclassmembers class androidx.webkit.internal.PageImpl {
-    private final org.chromium.support_lib_boundary.WebViewPageBoundaryInterface mPageBoundaryInterface;
 }
\ No newline at end of file
diff --git a/webkit/webkit/src/main/java/androidx/webkit/Navigation.java b/webkit/webkit/src/main/java/androidx/webkit/Navigation.java
deleted file mode 100644
index 796e461..0000000
--- a/webkit/webkit/src/main/java/androidx/webkit/Navigation.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2025 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.webkit;
-
-import android.os.Bundle;
-import android.webkit.WebView;
-
-import org.jspecify.annotations.Nullable;
-
-/**
- * The Navigation instance passed by the navigation callbacks.
- * <p>
- * The same object will be used by the relevant callbacks for the same navigation,
- * allowing the instance itself to be used as a key/ID to connect the callbacks for
- * the same navigations.
- */
[email protected]
-public interface Navigation {
-    /**
-     * Returns the Page that the navigation commits into.
-     * <p>
-     * Note: This method will initially return {@code null} when navigation begins.
-     * If the navigation successfully commits a page, this method will return the corresponding
-     * {@link Page} object. This could be a newly created {@link Page} or a previously seen
-     * {@link Page} in the case of BFCache (Back/Forward Cache).
-     * <p>
-     * Note: Once this method returns a non-null {@link Page} object for a
-     * specific navigation, it will always return the same {@link Page} object for that navigation.
-     * <p>
-     *
-     * @return The {@link Page} object, or {@code null} if the navigation does not commit or
-     * result in a Page
-     * (e.g., <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204">204</a>
-     * /download).
-     */
-    @Nullable
-    Page getPage();
-
-    /**
-     * Indicates whether the navigation is initiated by the page/renderer (e.g., link clicks, JS
-     * script)
-     * instead of the browser/app (e.g., loadUrl calls).
-     *
-     * @return True if page-initiated, false otherwise.
-     */
-    boolean wasInitiatedByPage();
-
-    /**
-     * Indicates whether the navigation is a same-document navigation.
-     *
-     * @return True if same-document, false otherwise.
-     */
-    boolean isSameDocument();
-
-    /**
-     * Indicates whether the navigation is a reload navigation.
-     *
-     * @return True if reload, false otherwise.
-     */
-    boolean isReload();
-
-    /**
-     * Indicates whether the navigation is a history navigation.
-     *
-     * @return True if history, false otherwise.
-     */
-    boolean isHistory();
-
-    /**
-     * Indicates whether the navigation is a history back navigation.
-     *
-     * @return True if back navigation, false otherwise.
-     */
-    boolean isBack();
-
-    /**
-     * Indicates whether the navigation is a history forward navigation.
-     *
-     * @return True if forward navigation, false otherwise.
-     */
-    boolean isForward();
-
-    /**
-     * Indicates whether the navigation committed (i.e., did not get aborted/return 204/etc).
-     *
-     * @return True if committed, false otherwise.
-     */
-    boolean didCommit();
-
-    /**
-     * Indicates whether the navigation committed an error page.
-     *
-     * @return True if an error page was committed, false otherwise.
-     */
-    boolean didCommitErrorPage();
-
-    /**
-     * Returns the status code received by the navigation.
-     *
-     * @return The HTTP status code.
-     */
-    int getStatusCode();
-
-    /**
-     * Indicates whether the navigation is a restore navigation after calling
-     * {@link WebView#restoreState(Bundle)}.
-     *
-     * @return True if session restore, false otherwise.
-     */
-    boolean isRestore();
-
-}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/Page.java b/webkit/webkit/src/main/java/androidx/webkit/Page.java
deleted file mode 100644
index 92f65ad..0000000
--- a/webkit/webkit/src/main/java/androidx/webkit/Page.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2025 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.webkit;
-
-/**
- * This class serves solely as a key for Page-associated data.
- * The instance itself functions as the key/identifier.
- * <p>
- * While this interface is currently empty, it may be expanded on in the future.
- * For example, it could be enhanced to expose lifecycle state information.
- */
[email protected]
-public interface Page { }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebNavigationClient.java b/webkit/webkit/src/main/java/androidx/webkit/WebNavigationClient.java
deleted file mode 100644
index fa53a7a..0000000
--- a/webkit/webkit/src/main/java/androidx/webkit/WebNavigationClient.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright 2025 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.webkit;
-
-import androidx.annotation.RequiresOptIn;
-
-import org.jspecify.annotations.NonNull;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Page identification and lifecycle APIs. This class provides callbacks to identify the
- * different stages of navigation.
- * For more information about the navigation lifecycle, please see the
- * <a href="https://docs.google.com/presentation/d/1YVqDmbXI0cllpfXD7TuewiexDNZYfwk6fRdmoXJbBlM">Life of a Navigation Presentation</a>.
- * <p>
- * Note: These navigation callbacks only fire for navigations happening on the main frame.
- * <p>
- * Navigation lifecycle events:
- * <ul>
- * <li>{@code onNavigationStarted}</li>
- * <li>Potentially zero or more {@code onNavigationRedirected} events</li>
- * <li>{@code onNavigationCompleted}</li>
- * <li>If the navigation commits and is not a same-document navigation, potentially any
- * combination and order of zero or one of each of:
- * <ul>
- * <li>{@code onPageLoadEvent}</li>
- * <li>{@code onPageDomContentLoaded}</li>
- * <li>{@code onFirstContentfulPaint}</li>
- * </ul>
- * </li>
- * </ul>
- */
[email protected]
-public interface WebNavigationClient {
-    /**
-     * Fired when a navigation starts, including same-document navigations.
-     * <p>
-     * Note: These navigation callbacks only fire for navigations happening on the main frame.
-     *
-     * @param navigation The Navigation object representing the started navigation.
-     */
-    void onNavigationStarted(@NonNull Navigation navigation);
-
-    /**
-     * Fired when a navigation is redirected.
-     *
-     * @param navigation The Navigation object representing the redirected navigation.
-     */
-    void onNavigationRedirected(@NonNull Navigation navigation);
-
-    /**
-     * Fired when a navigation completes.
-     * <p>
-     * The navigation might not have actually committed (e.g., results in 204/download/cancelled).
-     *
-     * @param navigation The Navigation object representing the completed navigation.
-     */
-    void onNavigationCompleted(@NonNull Navigation navigation);
-
-    /**
-     * Fired when any Page is evicted/destroyed. This can occur immediately
-     * on navigation, or later if the page is BFCached and subsequently evicted.
-     *
-     * @param page The Page that was evicted or destroyed.
-     */
-    void onPageDeleted(@NonNull Page page);
-
-    /**
-     * Fired when the `window.load` event is fired for the current page.
-     *
-     * @param page The Page for which the `window.load` event fired.
-     */
-    void onPageLoadEventFired(@NonNull Page page);
-
-    /**
-     * Fired when the `DOMContentLoaded` event is fired for the current page.
-     *
-     * @param page The Page for which the `DOMContentLoaded` event fired.
-     */
-    void onPageDomContentLoadedEventFired(@NonNull Page page);
-
-    /**
-     * Fired when the page achieves "First Contentful Paint".
-     *
-     * <p>See <a href="https://web.dev/articles/fcp">First Contentful Paint (FCP)</a>
-     * for a definition.</p>
-     *
-     * @param page The Page for which the First Contentful Paint occurred.
-     */
-    void onFirstContentfulPaint(@NonNull Page page);
-
-    /**
-     * Denotes {@link Navigation}, {@link Page} and {@link WebNavigationClient} API surfaces are
-     * experimental.
-     * <p>
-     * It may change without warning and should not be relied upon for non-experimental purposes.
-     */
-    @Retention(RetentionPolicy.CLASS)
-    @Target({ElementType.METHOD, ElementType.TYPE, ElementType.FIELD})
-    @RequiresOptIn(level = RequiresOptIn.Level.ERROR)
-    @interface ExperimentalNavigationCallback {
-    }
-}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java b/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
index 2b34514..951a5a2 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebViewCompat.java
@@ -1459,12 +1459,11 @@
      * {@link WebView#saveState(Bundle)} and the returned state can be restored through
      * {@link WebView#restoreState(Bundle)}.
      *
-     * @param webView             the {@link WebView} whose state is to be saved.
-     * @param outState            the {@link Bundle} to store the state in.
-     * @param maxSizeBytes        the maximum size (in bytes) that the returned state can be. If the
-     *                            WebView contains more state, history entries further back will
-     *                            not be
-     *                            saved.
+     * @param webView the {@link WebView} whose state is to be saved.
+     * @param outState the {@link Bundle} to store the state in.
+     * @param maxSizeBytes the maximum size (in bytes) that the returned state can be. If the
+     *                     WebView contains more state, history entries further back will not be
+     *                     saved.
      * @param includeForwardState whether to include entries that can only be reached through going
      *                            forward in history (such as through {@link WebView#goForward()}.
      *                            Some apps don't give the user a way to go forward, so won't need
@@ -1517,51 +1516,6 @@
         }
     }
 
-    /**
-     * Sets the {@link WebNavigationClient} for the given {@link WebView}.
-     *
-     * @param webView The {@link WebView} to set the client for.
-     * @param client  The {@link WebNavigationClient} to set.
-     * @throws UnsupportedOperationException if the
-     *                                       {@link WebViewFeature#NAVIGATION_CALLBACK_BASIC}
-     *                                       feature is not supported.
-     */
-    @RequiresFeature(name = WebViewFeature.NAVIGATION_CALLBACK_BASIC,
-            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
-    @UiThread
-    @WebNavigationClient.ExperimentalNavigationCallback
-    public static void setWebNavigationClient(@NonNull WebView webView,
-            @NonNull WebNavigationClient client) {
-        ApiFeature.NoFramework feature = WebViewFeatureInternal.NAVIGATION_CALLBACK_BASIC;
-        if (feature.isSupportedByWebView()) {
-            getProvider(webView).setWebNavigationClient(client);
-        } else {
-            throw WebViewFeatureInternal.getUnsupportedOperationException();
-        }
-    }
-
-    /**
-     * Gets the {@link WebNavigationClient} currently set for the given {@link WebView}.
-     *
-     * @param webView The {@link WebView} to get the client from.
-     * @return The {@link WebNavigationClient} currently set, or {@code null} if none is set.
-     * @throws UnsupportedOperationException if the
-     *                                       {@link WebViewFeature#NAVIGATION_CALLBACK_BASIC}
-     *                                       feature is not supported.
-     */
-    @RequiresFeature(name = WebViewFeature.NAVIGATION_CALLBACK_BASIC,
-            enforcement = "androidx.webkit.WebViewFeature#isFeatureSupported")
-    @UiThread
-    @WebNavigationClient.ExperimentalNavigationCallback
-    public static @NonNull WebNavigationClient getWebNavigationClient(@NonNull WebView webView) {
-        ApiFeature.NoFramework feature = WebViewFeatureInternal.NAVIGATION_CALLBACK_BASIC;
-        if (feature.isSupportedByWebView()) {
-            return getProvider(webView).getWebNavigationClient();
-        } else {
-            throw WebViewFeatureInternal.getUnsupportedOperationException();
-        }
-    }
-
     private static WebViewProviderFactory getFactory() {
         return WebViewGlueCommunicator.getFactory();
     }
diff --git a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
index 8072fcb..eb06a9d2 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/WebViewFeature.java
@@ -120,7 +120,6 @@
             DELETE_BROWSING_DATA,
             PRERENDER_WITH_URL,
             SAVE_STATE,
-            NAVIGATION_CALLBACK_BASIC,
             CACHE_PROVIDER,
     })
     @Retention(RetentionPolicy.SOURCE)
@@ -378,7 +377,7 @@
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers
      * {@link WebMessagePortCompat#setWebMessageCallback(
-     *WebMessagePortCompat.WebMessageCallbackCompat)}, and
+     * WebMessagePortCompat.WebMessageCallbackCompat)}, and
      * {@link WebMessagePortCompat#setWebMessageCallback(Handler,
      * WebMessagePortCompat.WebMessageCallbackCompat)}.
      */
@@ -678,25 +677,6 @@
     public static final String SAVE_STATE = "SAVE_STATE";
 
     /**
-     * Feature for {@link WebViewFeature#isFeatureSupported(String)}.
-     * This feature covers {@link WebViewCompat#getWebNavigationClient(WebView)};
-     * This feature covers
-     * {@link WebViewCompat#setWebNavigationClient(WebView, WebNavigationClient)};
-     * This feature covers {@link Navigation#didCommitErrorPage()}.
-     * This feature covers {@link Navigation#getPage()}.
-     * This feature covers {@link Navigation#isBack()}.
-     * This feature covers {@link Navigation#isForward()}.
-     * This feature covers {@link Navigation#isHistory()}.
-     * This feature covers {@link Navigation#isRestore()}.
-     * This feature covers {@link Navigation#isReload()}.
-     * This feature covers {@link Navigation#wasInitiatedByPage()}.
-     * This feature covers {@link Navigation#isSameDocument()}.
-     * This feature covers {@link Navigation#didCommit()}.
-     * This feature covers the initial version of {@link Page}.
-     */
-    public static final String NAVIGATION_CALLBACK_BASIC = "WEB_VIEW_NAVIGATION_CLIENT_BASIC_USAGE";
-
-    /**
      * Feature for {@link #isFeatureSupported(String)}.
      * This feature covers {@link WebViewCompat#setShouldCacheProvider(boolean)}.
      */
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/NavigationAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/NavigationAdapter.java
deleted file mode 100644
index 10aea5c..0000000
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/NavigationAdapter.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright 2025 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.webkit.internal;
-
-import androidx.webkit.Navigation;
-import androidx.webkit.Page;
-
-import org.chromium.support_lib_boundary.WebViewNavigationBoundaryInterface;
-import org.chromium.support_lib_boundary.WebViewPageBoundaryInterface;
-import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;
-import org.jspecify.annotations.NonNull;
-import org.jspecify.annotations.Nullable;
-
-public class NavigationAdapter implements Navigation {
-    WebViewNavigationBoundaryInterface mImpl;
-    PageImpl mPage;
-
-    public NavigationAdapter(@NonNull WebViewNavigationBoundaryInterface impl) {
-        mImpl = impl;
-    }
-
-    @Override
-    public @Nullable Page getPage() {
-        if (mImpl.getPage() == null) return null;
-        // Once the Page is non-null, it won't change so there's no need to do an extra casting.
-        if (mPage == null) {
-            WebViewPageBoundaryInterface boundaryInterface =
-                    BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                            WebViewPageBoundaryInterface.class, mImpl.getPage());
-            mPage = new PageImpl(boundaryInterface);
-        }
-        return mPage;
-    }
-
-
-    @Override
-    public boolean wasInitiatedByPage() {
-        return mImpl.wasInitiatedByPage();
-    }
-
-    @Override
-    public boolean isSameDocument() {
-        return mImpl.isSameDocument();
-    }
-
-    @Override
-    public boolean isReload() {
-        return mImpl.isReload();
-    }
-
-    @Override
-    public boolean isHistory() {
-        return mImpl.isHistory();
-    }
-
-    @Override
-    public boolean isRestore() {
-        return mImpl.isRestore();
-    }
-
-    @Override
-    public boolean isBack() {
-        return mImpl.isBack();
-    }
-
-    @Override
-    public boolean isForward() {
-        return mImpl.isForward();
-    }
-
-    @Override
-    public boolean didCommit() {
-        return mImpl.didCommit();
-    }
-
-    @Override
-    public boolean didCommitErrorPage() {
-        return mImpl.didCommitErrorPage();
-    }
-
-    @Override
-    public int getStatusCode() {
-        return mImpl.getStatusCode();
-    }
-
-}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/PageImpl.java b/webkit/webkit/src/main/java/androidx/webkit/internal/PageImpl.java
deleted file mode 100644
index 3c20689..0000000
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/PageImpl.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2025 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.webkit.internal;
-
-import androidx.webkit.Page;
-
-import org.chromium.support_lib_boundary.WebViewPageBoundaryInterface;
-import org.jspecify.annotations.NonNull;
-
-public class PageImpl implements Page {
-    private final WebViewPageBoundaryInterface mPageBoundaryInterface;
-
-    public PageImpl(@NonNull WebViewPageBoundaryInterface impl) {
-        mPageBoundaryInterface = impl;
-    }
-
-}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebNavigationClientAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebNavigationClientAdapter.java
deleted file mode 100644
index b49659d..0000000
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebNavigationClientAdapter.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2025 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.webkit.internal;
-
-
-import androidx.webkit.WebNavigationClient;
-
-import org.chromium.support_lib_boundary.WebViewNavigationBoundaryInterface;
-import org.chromium.support_lib_boundary.WebViewNavigationClientBoundaryInterface;
-import org.chromium.support_lib_boundary.WebViewPageBoundaryInterface;
-import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;
-import org.chromium.support_lib_boundary.util.Features;
-import org.jspecify.annotations.NonNull;
-import org.jspecify.annotations.Nullable;
-
-import java.lang.reflect.InvocationHandler;
-
-/**
- * Adapter between {@link WebNavigationClient} and
- * {@link WebViewNavigationClientBoundaryInterface}. It handles the delegation for callback
- * triggers.
- */
-public class WebNavigationClientAdapter implements
-        WebViewNavigationClientBoundaryInterface {
-    WebNavigationClient mWebNavigationClient;
-
-    public WebNavigationClientAdapter(@NonNull WebNavigationClient client) {
-        mWebNavigationClient = client;
-    }
-
-    public @Nullable WebNavigationClient getWebNavigationClient() {
-        return mWebNavigationClient;
-    }
-
-    @Override
-    public void onNavigationStarted(@NonNull InvocationHandler navigation) {
-        WebViewNavigationBoundaryInterface boundaryInterface =
-                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                        WebViewNavigationBoundaryInterface.class, navigation);
-
-        mWebNavigationClient.onNavigationStarted(
-                (NavigationAdapter) boundaryInterface.getOrCreatePeer(
-                        () -> new NavigationAdapter(boundaryInterface)));
-    }
-
-    @Override
-    public void onNavigationRedirected(@NonNull InvocationHandler navigation) {
-        WebViewNavigationBoundaryInterface boundaryInterface =
-                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                        WebViewNavigationBoundaryInterface.class, navigation);
-
-        mWebNavigationClient.onNavigationRedirected(
-                (NavigationAdapter) boundaryInterface.getOrCreatePeer(
-                        () -> new NavigationAdapter(boundaryInterface)));
-    }
-
-    @Override
-    public void onNavigationCompleted(@NonNull InvocationHandler navigation) {
-        WebViewNavigationBoundaryInterface boundaryInterface =
-                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                        WebViewNavigationBoundaryInterface.class, navigation);
-
-        mWebNavigationClient.onNavigationCompleted(
-                (NavigationAdapter) boundaryInterface.getOrCreatePeer(
-                        () -> new NavigationAdapter(boundaryInterface)));
-    }
-
-    @Override
-    public void onPageDeleted(@NonNull InvocationHandler page) {
-        final WebViewPageBoundaryInterface boundaryInterface =
-                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                        WebViewPageBoundaryInterface.class, page);
-        mWebNavigationClient.onPageDeleted((PageImpl) boundaryInterface.getOrCreatePeer(
-                () -> new PageImpl(boundaryInterface)));
-    }
-
-    @Override
-    public void onPageLoadEventFired(@NonNull InvocationHandler page) {
-        final WebViewPageBoundaryInterface boundaryInterface =
-                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                        WebViewPageBoundaryInterface.class, page);
-        mWebNavigationClient.onPageLoadEventFired((PageImpl) boundaryInterface.getOrCreatePeer(
-                () -> new PageImpl(boundaryInterface)));
-    }
-
-    @Override
-    public void onPageDOMContentLoadedEventFired(@NonNull InvocationHandler page) {
-        final WebViewPageBoundaryInterface boundaryInterface =
-                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                        WebViewPageBoundaryInterface.class, page);
-        mWebNavigationClient.onPageDomContentLoadedEventFired(
-                (PageImpl) boundaryInterface.getOrCreatePeer(
-                        () -> new PageImpl(boundaryInterface)));
-    }
-
-    @Override
-    public void onFirstContentfulPaint(@NonNull InvocationHandler page) {
-        final WebViewPageBoundaryInterface boundaryInterface =
-                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
-                        WebViewPageBoundaryInterface.class, page);
-        mWebNavigationClient.onFirstContentfulPaint((PageImpl) boundaryInterface.getOrCreatePeer(
-                () -> new PageImpl(boundaryInterface)));
-    }
-
-    @NonNull
-    @Override
-    public String[] getSupportedFeatures() {
-        return new String[]{Features.WEB_VIEW_NAVIGATION_CLIENT_BASIC_USAGE};
-    }
-}
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
index a7036f3..459f7eb 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewFeatureInternal.java
@@ -30,9 +30,7 @@
 
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
-import androidx.webkit.Navigation;
 import androidx.webkit.OutcomeReceiverCompat;
-import androidx.webkit.Page;
 import androidx.webkit.PrerenderOperationCallback;
 import androidx.webkit.Profile;
 import androidx.webkit.ProfileStore;
@@ -46,7 +44,6 @@
 import androidx.webkit.TracingController;
 import androidx.webkit.WebMessageCompat;
 import androidx.webkit.WebMessagePortCompat;
-import androidx.webkit.WebNavigationClient;
 import androidx.webkit.WebResourceErrorCompat;
 import androidx.webkit.WebResourceRequestCompat;
 import androidx.webkit.WebViewClientCompat;
@@ -115,7 +112,7 @@
 
     /**
      * This feature covers {@link androidx.webkit.WebViewCompat#setSafeBrowsingWhitelist(
-     *java.util.List, ValueCallback)}, plumbing through the deprecated boundary interface.
+     * java.util.List, ValueCallback)}, plumbing through the deprecated boundary interface.
      *
      * <p>Don't use this value directly. This exists only so
      * {@link WebViewFeatureInternal#isSupported(String)} supports the <b>deprecated</b> public
@@ -131,7 +128,7 @@
 
     /**
      * This feature covers {@link androidx.webkit.WebViewCompat#setSafeBrowsingWhitelist(
-     *java.util.List, ValueCallback)}, plumbing through the new boundary interface.
+     * java.util.List, ValueCallback)}, plumbing through the new boundary interface.
      *
      * <p>Don't use this value directly. This exists only so
      * {@link WebViewFeatureInternal#isSupported(String)} supports the <b>deprecated</b> public
@@ -437,7 +434,6 @@
     public static final ApiFeature.T ALGORITHMIC_DARKENING =
             new ApiFeature.T(WebViewFeature.ALGORITHMIC_DARKENING, Features.ALGORITHMIC_DARKENING) {
                 private final Pattern mVersionPattern = Pattern.compile("\\A\\d+");
-
                 @Override
                 public boolean isSupportedByWebView() {
                     boolean supported = super.isSupportedByWebView();
@@ -554,6 +550,7 @@
      * This feature covers
      * {@link androidx.webkit.WebSettingsCompat#setUserAgentMetadata(WebSettings, androidx.webkit.UserAgentMetadata)} and
      * {@link androidx.webkit.WebSettingsCompat#getUserAgentMetadata(WebSettings)}.
+     *
      */
     public static final ApiFeature.NoFramework USER_AGENT_METADATA =
             new ApiFeature.NoFramework(WebViewFeature.USER_AGENT_METADATA,
@@ -719,16 +716,6 @@
 
     /**
      * Feature for {@link WebViewFeature#isFeatureSupported(String)}.
-     * This feature covers {@link WebNavigationClient} and all methods within.
-     * This feature covers basic methods in {@link Navigation}.
-     * This feature covers basic version of {@link Page}.
-     */
-    public static final ApiFeature.NoFramework NAVIGATION_CALLBACK_BASIC =
-            new ApiFeature.NoFramework(WebViewFeature.NAVIGATION_CALLBACK_BASIC,
-                    Features.WEB_VIEW_NAVIGATION_CLIENT_BASIC_USAGE);
-
-    /**
-     * Feature for {@link WebViewFeature#isFeatureSupported(String)}.
      * This feature covers {@link WebViewCompat#setShouldCacheProvider(boolean)}.
      */
     public static final ApiFeature.NoFramework CACHE_PROVIDER =
@@ -764,7 +751,7 @@
      * defined in {@code internalFeatures}.
      *
      * @throws RuntimeException if {@code publicFeatureValue} is not matched in
-     *                          {@code internalFeatures}
+     *      {@code internalFeatures}
      */
     @VisibleForTesting
     public static <T extends ConditionallySupportedFeature> boolean isSupported(
@@ -790,7 +777,7 @@
      * defined in {@code internalFeatures}.
      *
      * @throws RuntimeException if {@code publicFeatureValue} is not matched in
-     *                          {@code internalFeatures}
+     *      {@code internalFeatures}
      */
     @VisibleForTesting
     public static boolean isStartupFeatureSupported(
diff --git a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
index 0afc680..4f9fffe 100644
--- a/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
+++ b/webkit/webkit/src/main/java/androidx/webkit/internal/WebViewProviderAdapter.java
@@ -32,7 +32,6 @@
 import androidx.webkit.SpeculativeLoadingParameters;
 import androidx.webkit.WebMessageCompat;
 import androidx.webkit.WebMessagePortCompat;
-import androidx.webkit.WebNavigationClient;
 import androidx.webkit.WebViewCompat;
 import androidx.webkit.WebViewRenderProcess;
 import androidx.webkit.WebViewRenderProcessClient;
@@ -264,28 +263,4 @@
             boolean includeForwardState) {
         mImpl.saveState(outState, maxSizeBytes, includeForwardState);
     }
-
-    /**
-     * Adapter method for {@link WebViewCompat#saveState(WebView, Bundle, int, boolean)}.
-     */
-    @UiThread
-    public void setWebNavigationClient(
-            @NonNull WebNavigationClient client) {
-        InvocationHandler clientBoundaryInterface =
-                BoundaryInterfaceReflectionUtil.createInvocationHandlerFor(
-                        new WebNavigationClientAdapter(client));
-        mImpl.setWebViewNavigationClient(clientBoundaryInterface);
-    }
-
-    /**
-     * Adapter method for {@link WebViewCompat#getWebN(WebView, Bundle, int, boolean)}.
-     */
-    @UiThread
-    public @NonNull WebNavigationClient getWebNavigationClient() {
-        InvocationHandler client = mImpl.getWebViewNavigationClient();
-        if (client == null) return null;
-        return ((WebNavigationClientAdapter)
-                BoundaryInterfaceReflectionUtil.getDelegateFromInvocationHandler(
-                        client)).getWebNavigationClient();
-    }
 }
diff --git a/window/extensions/extensions/api/current.txt b/window/extensions/extensions/api/current.txt
index b47fdb3..8c45b062 100644
--- a/window/extensions/extensions/api/current.txt
+++ b/window/extensions/extensions/api/current.txt
@@ -66,7 +66,6 @@
     method public default boolean pinTopActivityStack(int, androidx.window.extensions.embedding.SplitPinRule);
     method public default void registerActivityStackCallback(java.util.concurrent.Executor, androidx.window.extensions.core.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.ActivityStack!>!>);
     method public default void setActivityStackAttributesCalculator(androidx.window.extensions.core.util.function.Function<androidx.window.extensions.embedding.ActivityStackAttributesCalculatorParams!,androidx.window.extensions.embedding.ActivityStackAttributes!>);
-    method public default void setAutoSaveEmbeddingState(boolean);
     method public default void setEmbeddedActivityWindowInfoCallback(java.util.concurrent.Executor, androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.embedding.EmbeddedActivityWindowInfo!>);
     method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
     method @Deprecated public default android.app.ActivityOptions setLaunchingActivityStack(android.app.ActivityOptions, android.os.IBinder);
@@ -140,35 +139,14 @@
     method @ColorInt public int getColor();
   }
 
-  public final class AnimationParams {
-    method public androidx.window.extensions.embedding.AnimationBackground getAnimationBackground();
-    method @AnimRes public int getChangeAnimationResId();
-    method @AnimRes public int getCloseAnimationResId();
-    method @AnimRes public int getOpenAnimationResId();
-    field @AnimRes public static final int DEFAULT_ANIMATION_RESOURCES_ID = -1; // 0xffffffff
-  }
-
-  public static final class AnimationParams.Builder {
-    ctor public AnimationParams.Builder();
-    method public androidx.window.extensions.embedding.AnimationParams build();
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setAnimationBackground(androidx.window.extensions.embedding.AnimationBackground);
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setChangeAnimationResId(@AnimRes int);
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setCloseAnimationResId(@AnimRes int);
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setOpenAnimationResId(@AnimRes int);
-  }
-
   public final class DividerAttributes {
     method @ColorInt public int getDividerColor();
     method public int getDividerType();
     method public float getPrimaryMaxRatio();
     method public float getPrimaryMinRatio();
-    method @ColorInt public int getPrimaryVeilColor();
-    method @ColorInt public int getSecondaryVeilColor();
     method @Dimension public int getWidthDp();
-    method public boolean isDraggingToFullscreenAllowed();
     field public static final int DIVIDER_TYPE_DRAGGABLE = 2; // 0x2
     field public static final int DIVIDER_TYPE_FIXED = 1; // 0x1
-    field public static final int DIVIDER_VEIL_COLOR_DEFAULT = 0; // 0x0
     field public static final float RATIO_SYSTEM_DEFAULT = -1.0f;
     field public static final int WIDTH_SYSTEM_DEFAULT = -1; // 0xffffffff
   }
@@ -178,11 +156,8 @@
     ctor public DividerAttributes.Builder(int);
     method public androidx.window.extensions.embedding.DividerAttributes build();
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setDividerColor(@ColorInt int);
-    method public androidx.window.extensions.embedding.DividerAttributes.Builder setDraggingToFullscreenAllowed(boolean);
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setPrimaryMaxRatio(float);
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setPrimaryMinRatio(float);
-    method public androidx.window.extensions.embedding.DividerAttributes.Builder setPrimaryVeilColor(@ColorInt int);
-    method public androidx.window.extensions.embedding.DividerAttributes.Builder setSecondaryVeilColor(@ColorInt int);
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setWidthDp(@Dimension int);
   }
 
@@ -204,8 +179,7 @@
   }
 
   public class SplitAttributes {
-    method @Deprecated public androidx.window.extensions.embedding.AnimationBackground getAnimationBackground();
-    method public androidx.window.extensions.embedding.AnimationParams getAnimationParams();
+    method public androidx.window.extensions.embedding.AnimationBackground getAnimationBackground();
     method public androidx.window.extensions.embedding.DividerAttributes? getDividerAttributes();
     method public int getLayoutDirection();
     method public androidx.window.extensions.embedding.SplitAttributes.SplitType getSplitType();
@@ -216,8 +190,7 @@
     ctor public SplitAttributes.Builder();
     ctor public SplitAttributes.Builder(androidx.window.extensions.embedding.SplitAttributes);
     method public androidx.window.extensions.embedding.SplitAttributes build();
-    method @Deprecated public androidx.window.extensions.embedding.SplitAttributes.Builder setAnimationBackground(androidx.window.extensions.embedding.AnimationBackground);
-    method public androidx.window.extensions.embedding.SplitAttributes.Builder setAnimationParams(androidx.window.extensions.embedding.AnimationParams);
+    method public androidx.window.extensions.embedding.SplitAttributes.Builder setAnimationBackground(androidx.window.extensions.embedding.AnimationBackground);
     method public androidx.window.extensions.embedding.SplitAttributes.Builder setDividerAttributes(androidx.window.extensions.embedding.DividerAttributes?);
     method public androidx.window.extensions.embedding.SplitAttributes.Builder setLayoutDirection(int);
     method public androidx.window.extensions.embedding.SplitAttributes.Builder setSplitType(androidx.window.extensions.embedding.SplitAttributes.SplitType);
@@ -394,7 +367,6 @@
   public interface WindowLayoutComponent {
     method @Deprecated public void addWindowLayoutInfoListener(android.app.Activity, java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
     method public default void addWindowLayoutInfoListener(@UiContext android.content.Context, androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
-    method public default androidx.window.extensions.layout.WindowLayoutInfo getCurrentWindowLayoutInfo(@UiContext android.content.Context);
     method public default androidx.window.extensions.layout.SupportedWindowFeatures getSupportedWindowFeatures();
     method public default void removeWindowLayoutInfoListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
     method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
diff --git a/window/extensions/extensions/api/restricted_current.txt b/window/extensions/extensions/api/restricted_current.txt
index b47fdb3..8c45b062 100644
--- a/window/extensions/extensions/api/restricted_current.txt
+++ b/window/extensions/extensions/api/restricted_current.txt
@@ -66,7 +66,6 @@
     method public default boolean pinTopActivityStack(int, androidx.window.extensions.embedding.SplitPinRule);
     method public default void registerActivityStackCallback(java.util.concurrent.Executor, androidx.window.extensions.core.util.function.Consumer<java.util.List<androidx.window.extensions.embedding.ActivityStack!>!>);
     method public default void setActivityStackAttributesCalculator(androidx.window.extensions.core.util.function.Function<androidx.window.extensions.embedding.ActivityStackAttributesCalculatorParams!,androidx.window.extensions.embedding.ActivityStackAttributes!>);
-    method public default void setAutoSaveEmbeddingState(boolean);
     method public default void setEmbeddedActivityWindowInfoCallback(java.util.concurrent.Executor, androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.embedding.EmbeddedActivityWindowInfo!>);
     method public void setEmbeddingRules(java.util.Set<androidx.window.extensions.embedding.EmbeddingRule!>);
     method @Deprecated public default android.app.ActivityOptions setLaunchingActivityStack(android.app.ActivityOptions, android.os.IBinder);
@@ -140,35 +139,14 @@
     method @ColorInt public int getColor();
   }
 
-  public final class AnimationParams {
-    method public androidx.window.extensions.embedding.AnimationBackground getAnimationBackground();
-    method @AnimRes public int getChangeAnimationResId();
-    method @AnimRes public int getCloseAnimationResId();
-    method @AnimRes public int getOpenAnimationResId();
-    field @AnimRes public static final int DEFAULT_ANIMATION_RESOURCES_ID = -1; // 0xffffffff
-  }
-
-  public static final class AnimationParams.Builder {
-    ctor public AnimationParams.Builder();
-    method public androidx.window.extensions.embedding.AnimationParams build();
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setAnimationBackground(androidx.window.extensions.embedding.AnimationBackground);
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setChangeAnimationResId(@AnimRes int);
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setCloseAnimationResId(@AnimRes int);
-    method public androidx.window.extensions.embedding.AnimationParams.Builder setOpenAnimationResId(@AnimRes int);
-  }
-
   public final class DividerAttributes {
     method @ColorInt public int getDividerColor();
     method public int getDividerType();
     method public float getPrimaryMaxRatio();
     method public float getPrimaryMinRatio();
-    method @ColorInt public int getPrimaryVeilColor();
-    method @ColorInt public int getSecondaryVeilColor();
     method @Dimension public int getWidthDp();
-    method public boolean isDraggingToFullscreenAllowed();
     field public static final int DIVIDER_TYPE_DRAGGABLE = 2; // 0x2
     field public static final int DIVIDER_TYPE_FIXED = 1; // 0x1
-    field public static final int DIVIDER_VEIL_COLOR_DEFAULT = 0; // 0x0
     field public static final float RATIO_SYSTEM_DEFAULT = -1.0f;
     field public static final int WIDTH_SYSTEM_DEFAULT = -1; // 0xffffffff
   }
@@ -178,11 +156,8 @@
     ctor public DividerAttributes.Builder(int);
     method public androidx.window.extensions.embedding.DividerAttributes build();
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setDividerColor(@ColorInt int);
-    method public androidx.window.extensions.embedding.DividerAttributes.Builder setDraggingToFullscreenAllowed(boolean);
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setPrimaryMaxRatio(float);
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setPrimaryMinRatio(float);
-    method public androidx.window.extensions.embedding.DividerAttributes.Builder setPrimaryVeilColor(@ColorInt int);
-    method public androidx.window.extensions.embedding.DividerAttributes.Builder setSecondaryVeilColor(@ColorInt int);
     method public androidx.window.extensions.embedding.DividerAttributes.Builder setWidthDp(@Dimension int);
   }
 
@@ -204,8 +179,7 @@
   }
 
   public class SplitAttributes {
-    method @Deprecated public androidx.window.extensions.embedding.AnimationBackground getAnimationBackground();
-    method public androidx.window.extensions.embedding.AnimationParams getAnimationParams();
+    method public androidx.window.extensions.embedding.AnimationBackground getAnimationBackground();
     method public androidx.window.extensions.embedding.DividerAttributes? getDividerAttributes();
     method public int getLayoutDirection();
     method public androidx.window.extensions.embedding.SplitAttributes.SplitType getSplitType();
@@ -216,8 +190,7 @@
     ctor public SplitAttributes.Builder();
     ctor public SplitAttributes.Builder(androidx.window.extensions.embedding.SplitAttributes);
     method public androidx.window.extensions.embedding.SplitAttributes build();
-    method @Deprecated public androidx.window.extensions.embedding.SplitAttributes.Builder setAnimationBackground(androidx.window.extensions.embedding.AnimationBackground);
-    method public androidx.window.extensions.embedding.SplitAttributes.Builder setAnimationParams(androidx.window.extensions.embedding.AnimationParams);
+    method public androidx.window.extensions.embedding.SplitAttributes.Builder setAnimationBackground(androidx.window.extensions.embedding.AnimationBackground);
     method public androidx.window.extensions.embedding.SplitAttributes.Builder setDividerAttributes(androidx.window.extensions.embedding.DividerAttributes?);
     method public androidx.window.extensions.embedding.SplitAttributes.Builder setLayoutDirection(int);
     method public androidx.window.extensions.embedding.SplitAttributes.Builder setSplitType(androidx.window.extensions.embedding.SplitAttributes.SplitType);
@@ -394,7 +367,6 @@
   public interface WindowLayoutComponent {
     method @Deprecated public void addWindowLayoutInfoListener(android.app.Activity, java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
     method public default void addWindowLayoutInfoListener(@UiContext android.content.Context, androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
-    method public default androidx.window.extensions.layout.WindowLayoutInfo getCurrentWindowLayoutInfo(@UiContext android.content.Context);
     method public default androidx.window.extensions.layout.SupportedWindowFeatures getSupportedWindowFeatures();
     method public default void removeWindowLayoutInfoListener(androidx.window.extensions.core.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
     method @Deprecated public void removeWindowLayoutInfoListener(java.util.function.Consumer<androidx.window.extensions.layout.WindowLayoutInfo!>);
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
index 24f0fa6..3ba69ff 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityEmbeddingComponent.java
@@ -446,25 +446,4 @@
         throw new UnsupportedOperationException("This method must not be called unless there is a"
                 + " corresponding override implementation on the device.");
     }
-
-    /**
-     * Sets whether to auto save the embedding state to the system, which can be used to restore the
-     * app embedding state once the app process is restarted (if applicable).
-     *
-     * The embedding state is not saved by default, in which case the embedding state and the
-     * embedded activities are removed once the app process is killed.
-     *
-     * **Note** that the applications should set the {@link EmbeddingRule}s using
-     * {@link #setEmbeddingRules} when the application is initializing, such as configured in
-     * [android.app.Application.onCreate], in order to allow the library to restore the state
-     * properly. Otherwise, the state may not be restored and the activities may not be started
-     * and layout as expected.
-     *
-     * @param saveEmbeddingState whether to save the embedding state.
-     */
-    @RequiresVendorApiLevel(level = 8)
-    default void setAutoSaveEmbeddingState(boolean saveEmbeddingState) {
-        throw new UnsupportedOperationException("This method must not be called unless there is a"
-                + " corresponding override implementation on the device.");
-    }
 }
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java
index 3d3c2e9e..20fac75 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/ActivityRule.java
@@ -153,6 +153,6 @@
     @Override
     public @NonNull String toString() {
         return "ActivityRule{mTag=" + getTag()
-                + ", mShouldAlwaysExpand=" + mShouldAlwaysExpand + '}';
+                + "mShouldAlwaysExpand=" + mShouldAlwaysExpand + '}';
     }
 }
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/AnimationParams.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/AnimationParams.java
deleted file mode 100644
index 4390b9d..0000000
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/AnimationParams.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright 2024 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.window.extensions.embedding;
-
-import android.content.res.Resources;
-
-import androidx.annotation.AnimRes;
-import androidx.window.extensions.RequiresVendorApiLevel;
-
-import org.jspecify.annotations.NonNull;
-
-import java.util.Objects;
-
-/**
- * A class to represent the animation parameters to use while animating embedding activity
- * containers.
- *
- * @see SplitAttributes.Builder#setAnimationParams
- */
-public final class AnimationParams {
-
-    /**
-     * The default value for animation resources ID, which means to use the system default
-     * animation.
-     */
-    @RequiresVendorApiLevel(level = 7)
-    @SuppressWarnings("ResourceType") // Use as a hint to use the system default animation.
-    @AnimRes
-    public static final int DEFAULT_ANIMATION_RESOURCES_ID = 0xFFFFFFFF;
-
-    private final @NonNull AnimationBackground mAnimationBackground;
-
-    @AnimRes
-    private final int mOpenAnimationResId;
-
-    @AnimRes
-    private final int mCloseAnimationResId;
-
-    @AnimRes
-    private final int mChangeAnimationResId;
-
-    /**
-     * Creates an instance of this {@code AnimationParams}.
-     *
-     * @param animationBackground   The {@link AnimationBackground} to use for the animation
-     *                              involving this {@code AnimationParams} object.
-     * @param openAnimationResId    The animation resources ID from the "android" package to use for
-     *                              open transitions.
-     * @param closeAnimationResId   The animation resources ID from the "android" package to use for
-     *                              close transitions.
-     * @param changeAnimationResId  The animation resources ID from the "android" package to use for
-     *                              change (resize or move) transitions.
-     */
-    private AnimationParams(@NonNull AnimationBackground animationBackground,
-            @AnimRes int openAnimationResId, @AnimRes int closeAnimationResId,
-            @AnimRes int changeAnimationResId) {
-        mAnimationBackground = animationBackground;
-        mOpenAnimationResId = openAnimationResId;
-        mCloseAnimationResId = closeAnimationResId;
-        mChangeAnimationResId = changeAnimationResId;
-    }
-
-    /**
-     * Returns the {@link AnimationBackground} to use for the background during the animation.
-     */
-    @RequiresVendorApiLevel(level = 7)
-    public @NonNull AnimationBackground getAnimationBackground() {
-        return mAnimationBackground;
-    }
-
-    /**
-     * Gets the open animation.
-     *
-     * @return the open animation transition resources ID from the "android" package.
-     */
-    @RequiresVendorApiLevel(level = 7)
-    @AnimRes
-    public int getOpenAnimationResId() {
-        return mOpenAnimationResId;
-    }
-
-    /**
-     * Gets the close animation.
-     *
-     * @return the close animation transition resources ID from the "android" package.
-     */
-    @RequiresVendorApiLevel(level = 7)
-    @AnimRes
-    public int getCloseAnimationResId() {
-        return mCloseAnimationResId;
-    }
-
-    /**
-     * Gets the change (resize or move) animation.
-     *
-     * @return the change (resize or move) animation transition resources ID from the "android"
-     * package.
-     */
-    @RequiresVendorApiLevel(level = 7)
-    @AnimRes
-    public int getChangeAnimationResId() {
-        return mChangeAnimationResId;
-    }
-
-    /**
-     * Builder for creating an instance of {@link AnimationParams}.
-     *
-     * - The default animation background is to use the current theme window background color.
-     * - The default animation resources ID's for transitions is the system default.
-     */
-    public static final class Builder {
-        private @NonNull AnimationBackground mAnimationBackground =
-                AnimationBackground.ANIMATION_BACKGROUND_DEFAULT;
-
-        @AnimRes
-        private int mOpenAnimationResId = DEFAULT_ANIMATION_RESOURCES_ID;
-
-        @AnimRes
-        private int mCloseAnimationResId = DEFAULT_ANIMATION_RESOURCES_ID;
-
-        @AnimRes
-        private int mChangeAnimationResId = DEFAULT_ANIMATION_RESOURCES_ID;
-
-        /** Creates a new {@link AnimationParams.Builder} to create {@link AnimationParams}. */
-        @RequiresVendorApiLevel(level = 7)
-        public Builder() {
-        }
-
-        /**
-         * Sets the {@link AnimationBackground} to use for the background during the animation.
-         * The default value is {@link AnimationBackground#ANIMATION_BACKGROUND_DEFAULT}, which
-         * means to use the current theme window background color.
-         *
-         * @param background An {@link AnimationBackground} to be used for the animation.
-         * @return this {@code Builder}.
-         */
-        @RequiresVendorApiLevel(level = 7)
-        public AnimationParams.@NonNull Builder setAnimationBackground(
-                @NonNull AnimationBackground background) {
-            mAnimationBackground = background;
-            return this;
-        }
-
-        /**
-         * Sets the open animation.
-         * Use {@link #DEFAULT_ANIMATION_RESOURCES_ID} for the system default animation.
-         * Use {@code 0} or {@link Resources#ID_NULL} for no animation.
-         *
-         * @param resId The resources ID to set from the "android" package.
-         * @return this {@code Builder}.
-         */
-        @RequiresVendorApiLevel(level = 7)
-        public AnimationParams.@NonNull Builder setOpenAnimationResId(@AnimRes int resId) {
-            mOpenAnimationResId = resId;
-            return this;
-        }
-
-        /**
-         * Sets the close animation.
-         * Use {@link #DEFAULT_ANIMATION_RESOURCES_ID} for the system default animation.
-         * Use {@code 0} or {@link Resources#ID_NULL} for no animation.
-         *
-         * @param resId The resources ID to set from the "android" package.
-         * @return this {@code Builder}.
-         */
-        @RequiresVendorApiLevel(level = 7)
-        public AnimationParams.@NonNull Builder setCloseAnimationResId(@AnimRes int resId) {
-            mCloseAnimationResId = resId;
-            return this;
-        }
-
-        /**
-         * Sets the change (resize or move) animation.
-         * Use {@link #DEFAULT_ANIMATION_RESOURCES_ID} for the system default animation.
-         * Use {@code 0} or {@link Resources#ID_NULL} for no animation.
-         *
-         * @param resId The resources ID to set from the "android" package.
-         * @return this {@code Builder}.
-         */
-        @RequiresVendorApiLevel(level = 7)
-        public AnimationParams.@NonNull Builder setChangeAnimationResId(@AnimRes int resId) {
-            mChangeAnimationResId = resId;
-            return this;
-        }
-
-        /**
-         * Builds a {@link AnimationParams} instance with the attributes
-         * specified by {@link #setAnimationBackground(AnimationBackground)},
-         * {@link #setOpenAnimationResId(int)}, {@link #setCloseAnimationResId(int)},
-         * and {@link #setChangeAnimationResId(int)}.
-         *
-         * @return the new {@code AnimationParams} instance.
-         */
-        @RequiresVendorApiLevel(level = 7)
-        public @NonNull AnimationParams build() {
-            return new AnimationParams(mAnimationBackground, mOpenAnimationResId,
-                    mCloseAnimationResId, mChangeAnimationResId);
-        }
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof AnimationParams)) return false;
-        AnimationParams that = (AnimationParams) o;
-        return mAnimationBackground.equals(that.mAnimationBackground)
-                && mOpenAnimationResId == that.mOpenAnimationResId
-                && mCloseAnimationResId == that.mCloseAnimationResId
-                && mChangeAnimationResId == that.mChangeAnimationResId;
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(mAnimationBackground, mOpenAnimationResId, mCloseAnimationResId,
-                mChangeAnimationResId);
-    }
-
-    @Override
-    public @NonNull String toString() {
-        return AnimationParams.class.getSimpleName() + "{"
-                + "animationBackground=" + mAnimationBackground
-                + ", openAnimation=" + mOpenAnimationResId
-                + ", closeAnimation=" + mCloseAnimationResId
-                + ", changeAnimation=" + mChangeAnimationResId
-                + "}";
-    }
-}
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/DividerAttributes.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/DividerAttributes.java
index c50e045..9f01b7b 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/DividerAttributes.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/DividerAttributes.java
@@ -70,15 +70,6 @@
      */
     public static final int WIDTH_SYSTEM_DEFAULT = -1;
 
-    /**
-     * The default value for the veil color. When used, the activity window background color will be
-     * used.
-     *
-     * @see #getPrimaryVeilColor()
-     * @see #getSecondaryVeilColor()
-     */
-    public static final int DIVIDER_VEIL_COLOR_DEFAULT = Color.TRANSPARENT;
-
     /** The {@link DividerType}. */
     private final @DividerType int mDividerType;
 
@@ -93,13 +84,6 @@
      * the system will choose a default value based on the display size and form factor. Will only
      * be used when the divider type is {@link #DIVIDER_TYPE_DRAGGABLE}.
      *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code true}, the user is allowed to drag
-     * beyond this ratio, and when dragging is finished, the system will choose to either fully
-     * expand the secondary container or move the divider back to this ratio.
-     *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code false}, the user is not allowed to
-     * drag beyond this ratio.
-     *
      * @see SplitAttributes.SplitType.RatioSplitType#getRatio()
      */
     private final float mPrimaryMinRatio;
@@ -109,13 +93,6 @@
      * the system will choose a default value based on the display size and form factor. Will only
      * be used when the divider type is {@link #DIVIDER_TYPE_DRAGGABLE}.
      *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code true}, the user is allowed to drag
-     * beyond this ratio, and when dragging is finished, the system will choose to either fully
-     * expand the primary container or move the divider back to this ratio.
-     *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code false}, the user is not allowed to
-     * drag beyond this ratio.
-     *
      * @see SplitAttributes.SplitType.RatioSplitType#getRatio()
      */
     private final float mPrimaryMaxRatio;
@@ -123,15 +100,6 @@
     /** The color of the divider. */
     private final @ColorInt int mDividerColor;
 
-    /** Whether it is allowed to expand a container to full screen by dragging the divider. */
-    private final boolean mIsDraggingToFullscreenAllowed;
-
-    /** The veil color of the primary container while dragging. */
-    private final @ColorInt int mPrimaryVeilColor;
-
-    /** The veil color of the secondary container while dragging. */
-    private final @ColorInt int mSecondaryVeilColor;
-
     /**
      * Constructor of {@link DividerAttributes}.
      *
@@ -140,14 +108,6 @@
      * @param primaryMinRatio               the min split ratio for the primary container.
      * @param primaryMaxRatio               the max split ratio for the primary container.
      * @param dividerColor                  the color of the divider.
-     * @param isDraggingToFullscreenAllowed whether it is allowed to expand a container to full
-     *                                      screen by dragging the divider.
-     * @param primaryVeilColor              the veil color of the primary container while dragging.
-     *                                      If {@link #DIVIDER_VEIL_COLOR_DEFAULT}, activity window
-     *                                      background color is used.
-     * @param secondaryVeilColor            the veil color of the secondary container while
-     *                                      dragging. If {@link #DIVIDER_VEIL_COLOR_DEFAULT},
-     *                                      activity window background color is used.
      * @throws IllegalStateException if the provided values are invalid.
      */
     private DividerAttributes(
@@ -155,10 +115,7 @@
             @Dimension int widthDp,
             float primaryMinRatio,
             float primaryMaxRatio,
-            @ColorInt int dividerColor,
-            boolean isDraggingToFullscreenAllowed,
-            @ColorInt int primaryVeilColor,
-            @ColorInt int secondaryVeilColor) {
+            @ColorInt int dividerColor) {
         if (dividerType == DIVIDER_TYPE_FIXED
                 && (primaryMinRatio != RATIO_SYSTEM_DEFAULT
                 || primaryMaxRatio != RATIO_SYSTEM_DEFAULT)) {
@@ -166,13 +123,6 @@
                     "primaryMinRatio and primaryMaxRatio must be RATIO_SYSTEM_DEFAULT for "
                             + "DIVIDER_TYPE_FIXED.");
         }
-        if (dividerType == DIVIDER_TYPE_FIXED
-                && (primaryVeilColor != DIVIDER_VEIL_COLOR_DEFAULT
-                || secondaryVeilColor != DIVIDER_VEIL_COLOR_DEFAULT)) {
-            throw new IllegalStateException(
-                    "primaryVeilColor and secondaryVeilColor must be unset for"
-                            + "DIVIDER_TYPE_FIXED.");
-        }
         if (primaryMinRatio != RATIO_SYSTEM_DEFAULT && primaryMaxRatio != RATIO_SYSTEM_DEFAULT
                 && primaryMinRatio > primaryMaxRatio) {
             throw new IllegalStateException(
@@ -183,9 +133,6 @@
         mPrimaryMinRatio = primaryMinRatio;
         mPrimaryMaxRatio = primaryMaxRatio;
         mDividerColor = dividerColor;
-        mIsDraggingToFullscreenAllowed = isDraggingToFullscreenAllowed;
-        mPrimaryVeilColor = primaryVeilColor;
-        mSecondaryVeilColor = secondaryVeilColor;
     }
 
     /**
@@ -214,13 +161,6 @@
      * based on the display size and form factor. Will only be used when the divider type is
      * {@link #DIVIDER_TYPE_DRAGGABLE}.
      *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code true}, the user is allowed to drag
-     * beyond this ratio, and when dragging is finished, the system will choose to either fully
-     * expand the secondary container or move the divider back to this ratio.
-     *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code false}, the user is not allowed to
-     * drag beyond this ratio.
-     *
      * @see SplitAttributes.SplitType.RatioSplitType#getRatio()
      */
     @RequiresVendorApiLevel(level = 6)
@@ -234,13 +174,6 @@
      * based on the display size and form factor. Will only be used when the divider type is
      * {@link #DIVIDER_TYPE_DRAGGABLE}.
      *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code true}, the user is allowed to drag
-     * beyond this ratio, and when dragging is finished, the system will choose to either fully
-     * expand the primary container or move the divider back to this ratio.
-     *
-     * If {@link #isDraggingToFullscreenAllowed()} is {@code false}, the user is not allowed to
-     * drag beyond this ratio.
-     *
      * @see SplitAttributes.SplitType.RatioSplitType#getRatio()
      */
     @RequiresVendorApiLevel(level = 6)
@@ -254,33 +187,6 @@
         return mDividerColor;
     }
 
-    /**
-     * Returns whether it is allowed to expand a container to full screen by dragging the
-     * divider. Default is {@code true}.
-     */
-    @RequiresVendorApiLevel(level = 7)
-    public boolean isDraggingToFullscreenAllowed() {
-        return mIsDraggingToFullscreenAllowed;
-    }
-
-    /**
-     * Returns the veil color of the primary container. {@link #DIVIDER_VEIL_COLOR_DEFAULT}
-     * indicates that activity window background color should be used.
-     */
-    @RequiresVendorApiLevel(level = 8)
-    public @ColorInt int getPrimaryVeilColor() {
-        return mPrimaryVeilColor;
-    }
-
-    /**
-     * Returns the veil color of the secondary container. {@link #DIVIDER_VEIL_COLOR_DEFAULT}
-     * indicates that activity window background color should be used.
-     */
-    @RequiresVendorApiLevel(level = 8)
-    public @ColorInt int getSecondaryVeilColor() {
-        return mSecondaryVeilColor;
-    }
-
     @Override
     public boolean equals(@Nullable Object obj) {
         if (this == obj) return true;
@@ -290,16 +196,12 @@
                 && mWidthDp == other.mWidthDp
                 && mPrimaryMinRatio == other.mPrimaryMinRatio
                 && mPrimaryMaxRatio == other.mPrimaryMaxRatio
-                && mDividerColor == other.mDividerColor
-                && mIsDraggingToFullscreenAllowed == other.mIsDraggingToFullscreenAllowed
-                && mPrimaryVeilColor == other.mPrimaryVeilColor
-                && mSecondaryVeilColor == other.mSecondaryVeilColor;
+                && mDividerColor == other.mDividerColor;
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(mDividerType, mWidthDp, mPrimaryMinRatio, mPrimaryMaxRatio,
-                mIsDraggingToFullscreenAllowed, mPrimaryVeilColor, mSecondaryVeilColor);
+        return Objects.hash(mDividerType, mWidthDp, mPrimaryMinRatio, mPrimaryMaxRatio);
     }
 
     @Override
@@ -310,9 +212,6 @@
                 + ", minPrimaryRatio=" + mPrimaryMinRatio
                 + ", maxPrimaryRatio=" + mPrimaryMaxRatio
                 + ", dividerColor=" + mDividerColor
-                + ", isDraggingToFullscreenAllowed=" + mIsDraggingToFullscreenAllowed
-                + ", mPrimaryVeilColor=" + mPrimaryVeilColor
-                + ", mSecondaryVeilColor=" + mSecondaryVeilColor
                 + "}";
     }
 
@@ -329,12 +228,6 @@
 
         private @ColorInt int mDividerColor = Color.BLACK;
 
-        private boolean mIsDraggingToFullscreenAllowed = false;
-
-        private @ColorInt int mPrimaryVeilColor = DIVIDER_VEIL_COLOR_DEFAULT;
-
-        private @ColorInt int  mSecondaryVeilColor = DIVIDER_VEIL_COLOR_DEFAULT;
-
         /**
          * The {@link DividerAttributes} builder constructor.
          *
@@ -360,9 +253,6 @@
             mPrimaryMinRatio = original.mPrimaryMinRatio;
             mPrimaryMaxRatio = original.mPrimaryMaxRatio;
             mDividerColor = original.mDividerColor;
-            mIsDraggingToFullscreenAllowed = original.mIsDraggingToFullscreenAllowed;
-            mPrimaryVeilColor = original.mPrimaryVeilColor;
-            mSecondaryVeilColor = original.mSecondaryVeilColor;
         }
 
         /**
@@ -387,13 +277,6 @@
          * on the display size and form factor. Will only be used when the divider type is
          * {@link #DIVIDER_TYPE_DRAGGABLE}.
          *
-         * If {@link #isDraggingToFullscreenAllowed()} is {@code true}, the user is allowed to drag
-         * beyond this ratio, and when dragging is finished, the system will choose to either fully
-         * expand the secondary container or move the divider back to this ratio.
-         *
-         * If {@link #isDraggingToFullscreenAllowed()} is {@code false}, the user is not allowed to
-         * drag beyond this ratio.
-         *
          * @param primaryMinRatio the min ratio for the primary container. Must be in range
          *                        [0.0, 1.0) or {@link #RATIO_SYSTEM_DEFAULT}.
          * @throws IllegalArgumentException if the provided value is invalid.
@@ -416,13 +299,6 @@
          * based on the display size and form factor. Will only be used when the divider type is
          * {@link #DIVIDER_TYPE_DRAGGABLE}.
          *
-         * If {@link #isDraggingToFullscreenAllowed()} is {@code true}, the user is allowed to drag
-         * beyond this ratio, and when dragging is finished, the system will choose to either fully
-         * expand the primary container or move the divider back to this ratio.
-         *
-         * If {@link #isDraggingToFullscreenAllowed()} is {@code false}, the user is not allowed to
-         * drag beyond this ratio.
-         *
          * @param primaryMaxRatio the max ratio for the primary container. Must be in range
          *                        (0.0, 1.0] or {@link #RATIO_SYSTEM_DEFAULT}.
          * @throws IllegalArgumentException if the provided value is invalid.
@@ -441,8 +317,7 @@
 
         /**
          * Sets the color of the divider. If not set, the default color {@link Color#BLACK} is
-         * used. Only the RGB components are used and the alpha value is ignored and always
-         * considered as fully opaque.
+         * used.
          */
         @RequiresVendorApiLevel(level = 6)
         public @NonNull Builder setDividerColor(@ColorInt int dividerColor) {
@@ -451,53 +326,6 @@
         }
 
         /**
-         * Sets whether it is allowed to expand a container to full screen by dragging the divider.
-         * Default is {@code true}.
-         */
-        @RequiresVendorApiLevel(level = 7)
-        public @NonNull Builder setDraggingToFullscreenAllowed(
-                boolean isDraggingToFullscreenAllowed) {
-            mIsDraggingToFullscreenAllowed = isDraggingToFullscreenAllowed;
-            return this;
-        }
-
-        /**
-         * Sets the veil color of the primary container. Solid color veils are used to cover
-         * activity content while dragging.
-         *
-         * The default value is {@link #DIVIDER_VEIL_COLOR_DEFAULT}.
-         *
-         * @param color the veil color for the primary container. If the value equals to
-         *              {@link #DIVIDER_VEIL_COLOR_DEFAULT}, activity window
-         *              background color is used. If {@link Color#TRANSPARENT} is used, it is
-         *              treated as {@link #DIVIDER_VEIL_COLOR_DEFAULT}. Only the RGB components are
-         *              used and the alpha value is ignored and always considered as fully opaque.
-         */
-        @RequiresVendorApiLevel(level = 8)
-        public @NonNull Builder setPrimaryVeilColor(@ColorInt int color) {
-            mPrimaryVeilColor = color;
-            return this;
-        }
-
-        /**
-         * Sets the veil color of the secondary container. Solid color veils are used to cover
-         * activity content while dragging.
-         *
-         * The default value is {@link #DIVIDER_VEIL_COLOR_DEFAULT}.
-         *
-         * @param color the veil color for the secondary container. If the value equals to
-         *              {@link #DIVIDER_VEIL_COLOR_DEFAULT}, activity window
-         *              background color is used. If {@link Color#TRANSPARENT} is used, it is
-         *              treated as {@link #DIVIDER_VEIL_COLOR_DEFAULT}. Only the RGB components are
-         *              used and the alpha value is ignored and always considered as fully opaque.
-         */
-        @RequiresVendorApiLevel(level = 8)
-        public @NonNull Builder setSecondaryVeilColor(@ColorInt int color) {
-            mSecondaryVeilColor = color;
-            return this;
-        }
-
-        /**
          * Builds a {@link DividerAttributes} instance.
          *
          * @return a {@link DividerAttributes} instance.
@@ -506,8 +334,7 @@
         @RequiresVendorApiLevel(level = 6)
         public @NonNull DividerAttributes build() {
             return new DividerAttributes(mDividerType, mWidthDp, mPrimaryMinRatio,
-                    mPrimaryMaxRatio, mDividerColor, mIsDraggingToFullscreenAllowed,
-                    mPrimaryVeilColor, mSecondaryVeilColor);
+                    mPrimaryMaxRatio, mDividerColor);
         }
     }
 }
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java
index 8101f86..163b6c7 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/embedding/SplitAttributes.java
@@ -66,7 +66,7 @@
  *
  * @see SplitAttributes.SplitType
  * @see SplitAttributes.LayoutDirection
- * @see AnimationParams
+ * @see AnimationBackground
  */
 @RequiresVendorApiLevel(level = 2)
 public class SplitAttributes {
@@ -371,7 +371,7 @@
 
     private final @NonNull SplitType mSplitType;
 
-    private final @NonNull AnimationParams mAnimationParams;
+    private final @NonNull AnimationBackground mAnimationBackground;
 
     private final @NonNull WindowAttributes mWindowAttributes;
 
@@ -386,8 +386,9 @@
      * @param layoutDirection     The layout direction of the split, such as left to
      *                            right or top to bottom. See
      *                            {@link SplitAttributes.LayoutDirection}.
-     * @param animationParams     The {@link AnimationParams} to use for the during animation
-     *                            of the split involving this {@code SplitAttributes} object.
+     * @param animationBackground The {@link AnimationBackground} to use for the during animation
+     *                            of the split involving this {@code SplitAttributes} object if the
+     *                            animation requires a background.
      * @param attributes          The {@link WindowAttributes} of the split, such as dim area
      *                            behavior.
      * @param dividerAttributes   The {@link DividerAttributes}. If {@code null}, no divider is
@@ -396,13 +397,13 @@
     SplitAttributes(
             @NonNull SplitType splitType,
             @ExtLayoutDirection int layoutDirection,
-            @NonNull AnimationParams animationParams,
+            @NonNull AnimationBackground animationBackground,
             @NonNull WindowAttributes attributes,
             @Nullable DividerAttributes dividerAttributes
     ) {
         mSplitType = splitType;
         mLayoutDirection = layoutDirection;
-        mAnimationParams = animationParams;
+        mAnimationBackground = animationBackground;
         mWindowAttributes = attributes;
         mDividerAttributes = dividerAttributes;
     }
@@ -427,23 +428,12 @@
     }
 
     /**
-     * @deprecated Use {@link #getAnimationParams()} starting with vendor API level 7. Only used if
-     * {@link #getAnimationParams()} can't be called on vendor API level 5 and 6.
+     * Returns the {@link AnimationBackground} to use for the background during the
+     * animation of the split involving this {@code SplitAttributes} object.
      */
-    @RequiresVendorApiLevel(level = 5, deprecatedSince = 7)
-    @Deprecated
-    @SuppressWarnings("Deprecation")
+    @RequiresVendorApiLevel(level = 5)
     public @NonNull AnimationBackground getAnimationBackground() {
-        return mAnimationParams.getAnimationBackground();
-    }
-
-    /**
-     * Returns the {@link AnimationParams} to use during the animation of the split involving
-     * this {@code SplitAttributes} object.
-     */
-    @RequiresVendorApiLevel(level = 7)
-    public @NonNull AnimationParams getAnimationParams() {
-        return mAnimationParams;
+        return mAnimationBackground;
     }
 
     /**
@@ -473,7 +463,8 @@
         @ExtLayoutDirection
         private int mLayoutDirection = LOCALE;
 
-        private @NonNull AnimationParams mAnimationParams = new AnimationParams.Builder().build();
+        private @NonNull AnimationBackground mAnimationBackground =
+                AnimationBackground.ANIMATION_BACKGROUND_DEFAULT;
 
         private @NonNull WindowAttributes mWindowAttributes =
                 new WindowAttributes(DIM_AREA_ON_TASK);
@@ -493,7 +484,7 @@
         public Builder(@NonNull SplitAttributes original) {
             mSplitType = original.mSplitType;
             mLayoutDirection = original.mLayoutDirection;
-            mAnimationParams = original.mAnimationParams;
+            mAnimationBackground = original.mAnimationBackground;
             mWindowAttributes = original.mWindowAttributes;
             mDividerAttributes = original.mDividerAttributes;
         }
@@ -536,29 +527,20 @@
         }
 
         /**
-         * @deprecated Use {@link #setAnimationParams(AnimationParams)} starting with vendor API
-         * level 7. Only used if {@link #setAnimationParams(AnimationParams)} can't be called on
-         * vendor API level 5 and 6.
-         */
-        @RequiresVendorApiLevel(level = 5, deprecatedSince = 7)
-        @Deprecated
-        @SuppressWarnings("Deprecation")
-        public @NonNull Builder setAnimationBackground(@NonNull AnimationBackground background) {
-            mAnimationParams =
-                    new AnimationParams.Builder().setAnimationBackground(background).build();
-            return this;
-        }
-
-        /**
-         * Sets the {@link AnimationParams} to use during the animation of the split involving this
-         * {@code SplitAttributes} object.
+         * Sets the {@link AnimationBackground} to use for the background during the
+         * animation of the split involving this {@code SplitAttributes} object
+         * if the animation requires a background.
          *
-         * @param params The {@link AnimationParams} to be used for the animation of the split.
+         * The default value is {@link AnimationBackground#ANIMATION_BACKGROUND_DEFAULT}, which
+         * means to use the current theme window background color.
+         *
+         * @param background An {@link AnimationBackground} to be used for the animation of the
+         *                   split.
          * @return This {@code Builder}.
          */
-        @RequiresVendorApiLevel(level = 7)
-        public @NonNull Builder setAnimationParams(@NonNull AnimationParams params) {
-            mAnimationParams = params;
+        @RequiresVendorApiLevel(level = 5)
+        public @NonNull Builder setAnimationBackground(@NonNull AnimationBackground background) {
+            mAnimationBackground = background;
             return this;
         }
 
@@ -587,12 +569,12 @@
         /**
          * Builds a {@link SplitAttributes} instance with the attributes
          * specified by {@link #setSplitType}, {@link #setLayoutDirection}, and
-         * {@link #setAnimationParams}.
+         * {@link #setAnimationBackground}.
          *
          * @return The new {@code SplitAttributes} instance.
          */
         public @NonNull SplitAttributes build() {
-            return new SplitAttributes(mSplitType, mLayoutDirection, mAnimationParams,
+            return new SplitAttributes(mSplitType, mLayoutDirection, mAnimationBackground,
                     mWindowAttributes, mDividerAttributes);
         }
     }
@@ -603,14 +585,14 @@
         if (!(o instanceof SplitAttributes)) return false;
         SplitAttributes that = (SplitAttributes) o;
         return mLayoutDirection == that.mLayoutDirection && mSplitType.equals(that.mSplitType)
-                && Objects.equals(mAnimationParams, that.mAnimationParams)
+                && mAnimationBackground.equals(that.mAnimationBackground)
                 && mWindowAttributes.equals(that.mWindowAttributes)
                 && Objects.equals(mDividerAttributes, that.mDividerAttributes);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(mLayoutDirection, mSplitType, mAnimationParams, mWindowAttributes,
+        return Objects.hash(mLayoutDirection, mSplitType, mAnimationBackground, mWindowAttributes,
                 mDividerAttributes);
     }
 
@@ -619,7 +601,7 @@
         return SplitAttributes.class.getSimpleName() + "{"
                 + "layoutDir=" + layoutDirectionToString()
                 + ", splitType=" + mSplitType
-                + ", animationParams=" + mAnimationParams
+                + ", animationBackground=" + mAnimationBackground
                 + ", windowAttributes=" + mWindowAttributes
                 + ", dividerAttributes=" + mDividerAttributes
                 + "}";
diff --git a/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java b/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java
index ca2faf0..bbc3f51 100644
--- a/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java
+++ b/window/extensions/extensions/src/main/java/androidx/window/extensions/layout/WindowLayoutComponent.java
@@ -109,25 +109,4 @@
         throw new UnsupportedOperationException("This method will not be called unless there is a"
                 + " corresponding override implementation on the device");
     }
-
-    /**
-     * Returns the current {@link WindowLayoutInfo} for the given {@link Context}.
-     * <p>
-     * This API provides a convenient way to access the current {@link WindowLayoutInfo} without
-     * registering a listener via {@link #addWindowLayoutInfoListener(Context, Consumer)}. It
-     * simplifies the retrieval of {@link WindowLayoutInfo} in scenarios like
-     * {@link Activity#onCreate(Bundle)}.
-     *
-     * @param context a {@link Context} that corresponds to a window or an area on the screen.
-     *                This can be an {@link Activity}, a {@link Context} created with
-     *                {@link Context#createWindowContext(Display, int, Bundle)}, or an
-     *                {@link android.inputmethodservice.InputMethodService}.
-     * @return the current {@link WindowLayoutInfo} for the given {@link Context}.
-     */
-    @RequiresVendorApiLevel(level = 9)
-    default @NonNull WindowLayoutInfo getCurrentWindowLayoutInfo(
-            @UiContext @NonNull Context context) {
-        throw new UnsupportedOperationException("This method will not be called unless there is a"
-                + " corresponding override implementation on the device");
-    }
 }
diff --git a/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/DividerAttributesTest.java b/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/DividerAttributesTest.java
index 5ba0207..71805a9 100644
--- a/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/DividerAttributesTest.java
+++ b/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/DividerAttributesTest.java
@@ -25,8 +25,6 @@
 
 import static org.junit.Assert.assertThrows;
 
-import android.graphics.Color;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -43,10 +41,6 @@
         assertThat(defaultAttrs.getWidthDp()).isEqualTo(WIDTH_SYSTEM_DEFAULT);
         assertThat(defaultAttrs.getPrimaryMinRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
         assertThat(defaultAttrs.getPrimaryMaxRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
-        assertThat(defaultAttrs.getPrimaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
-        assertThat(defaultAttrs.getSecondaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
     }
 
     @Test
@@ -59,10 +53,7 @@
         assertThat(dividerAttributes1.getWidthDp()).isEqualTo(20);
         assertThat(dividerAttributes1.getPrimaryMinRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
         assertThat(dividerAttributes1.getPrimaryMaxRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
-        assertThat(dividerAttributes1.getPrimaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
-        assertThat(dividerAttributes1.getSecondaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
+
         final DividerAttributes dividerAttributes2 =
                 new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
                         .setWidthDp(20)
@@ -73,10 +64,6 @@
         assertThat(dividerAttributes2.getWidthDp()).isEqualTo(20);
         assertThat(dividerAttributes2.getPrimaryMinRatio()).isEqualTo(0.2f);
         assertThat(dividerAttributes2.getPrimaryMaxRatio()).isEqualTo(0.8f);
-        assertThat(dividerAttributes2.getPrimaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
-        assertThat(dividerAttributes2.getSecondaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
 
         final DividerAttributes dividerAttributes3 =
                 new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
@@ -86,10 +73,6 @@
         assertThat(dividerAttributes3.getWidthDp()).isEqualTo(20);
         assertThat(dividerAttributes3.getPrimaryMinRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
         assertThat(dividerAttributes3.getPrimaryMaxRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
-        assertThat(dividerAttributes3.getPrimaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
-        assertThat(dividerAttributes3.getSecondaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
 
         final DividerAttributes dividerAttributes4 =
                 new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
@@ -100,10 +83,6 @@
         assertThat(dividerAttributes4.getWidthDp()).isEqualTo(20);
         assertThat(dividerAttributes4.getPrimaryMinRatio()).isEqualTo(0.2f);
         assertThat(dividerAttributes4.getPrimaryMaxRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
-        assertThat(dividerAttributes4.getPrimaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
-        assertThat(dividerAttributes4.getSecondaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
 
         final DividerAttributes dividerAttributes5 =
                 new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
@@ -114,23 +93,6 @@
         assertThat(dividerAttributes5.getWidthDp()).isEqualTo(20);
         assertThat(dividerAttributes5.getPrimaryMinRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
         assertThat(dividerAttributes5.getPrimaryMaxRatio()).isEqualTo(0.2f);
-        assertThat(dividerAttributes5.getPrimaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
-        assertThat(dividerAttributes5.getSecondaryVeilColor()).isEqualTo(
-                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT);
-
-        final DividerAttributes dividerAttributes6 =
-                new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
-                        .setWidthDp(20)
-                        .setPrimaryVeilColor(Color.BLUE)
-                        .setSecondaryVeilColor(Color.GREEN)
-                        .build();
-        assertThat(dividerAttributes6.getDividerType()).isEqualTo(DIVIDER_TYPE_DRAGGABLE);
-        assertThat(dividerAttributes6.getWidthDp()).isEqualTo(20);
-        assertThat(dividerAttributes6.getPrimaryMinRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
-        assertThat(dividerAttributes6.getPrimaryMaxRatio()).isEqualTo(RATIO_SYSTEM_DEFAULT);
-        assertThat(dividerAttributes6.getPrimaryVeilColor()).isEqualTo(Color.BLUE);
-        assertThat(dividerAttributes6.getSecondaryVeilColor()).isEqualTo(Color.GREEN);
     }
 
     @Test
@@ -154,30 +116,8 @@
                         .setWidthDp(20)
                         .build();
 
-        final DividerAttributes dividerAttributes4 =
-                new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
-                        .setWidthDp(20)
-                        .setPrimaryMinRatio(0.2f)
-                        .setPrimaryMaxRatio(0.8f)
-                        .setPrimaryVeilColor(
-                                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT)
-                        .setSecondaryVeilColor(
-                                DividerAttributes.DIVIDER_VEIL_COLOR_DEFAULT)
-                        .build();
-
-        final DividerAttributes dividerAttributes5 =
-                new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
-                        .setWidthDp(20)
-                        .setPrimaryMinRatio(0.2f)
-                        .setPrimaryMaxRatio(0.8f)
-                        .setPrimaryVeilColor(Color.BLUE)
-                        .setSecondaryVeilColor(Color.GREEN)
-                        .build();
-
         assertThat(dividerAttributes1).isEqualTo(dividerAttributes2);
         assertThat(dividerAttributes1).isNotEqualTo(dividerAttributes3);
-        assertThat(dividerAttributes1).isEqualTo(dividerAttributes4);
-        assertThat(dividerAttributes1).isNotEqualTo(dividerAttributes5);
     }
 
     @Test
@@ -192,22 +132,6 @@
         );
 
         assertThrows(
-                "Must not set primary veil color for DIVIDER_TYPE_FIXED",
-                IllegalStateException.class,
-                () -> new DividerAttributes.Builder(DIVIDER_TYPE_FIXED)
-                        .setPrimaryVeilColor(Color.BLUE)
-                        .build()
-        );
-
-        assertThrows(
-                "Must not set primary veil color for DIVIDER_TYPE_FIXED",
-                IllegalStateException.class,
-                () -> new DividerAttributes.Builder(DIVIDER_TYPE_FIXED)
-                        .setSecondaryVeilColor(Color.BLUE)
-                        .build()
-        );
-
-        assertThrows(
                 "Min ratio must be less than or equal to max ratio",
                 IllegalStateException.class,
                 () -> new DividerAttributes.Builder(DIVIDER_TYPE_DRAGGABLE)
diff --git a/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/SplitAttributesTest.java b/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/SplitAttributesTest.java
index f8daaf2..160adb8 100644
--- a/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/SplitAttributesTest.java
+++ b/window/extensions/extensions/src/test/java/androidx/window/extensions/embedding/SplitAttributesTest.java
@@ -34,51 +34,30 @@
 public class SplitAttributesTest {
     @Test
     public void testSplitAttributesEquals() {
-        final AnimationParams animParams1 =
-                new AnimationParams.Builder()
-                        .setAnimationBackground(AnimationBackground.ANIMATION_BACKGROUND_DEFAULT)
-                        .setOpenAnimationResId(AnimationParams.DEFAULT_ANIMATION_RESOURCES_ID)
-                        .build();
         final SplitAttributes attrs1 = new SplitAttributes.Builder()
                 .setSplitType(splitEqually())
                 .setLayoutDirection(LayoutDirection.LOCALE)
-                .setAnimationParams(animParams1)
+                .setAnimationBackground(AnimationBackground.ANIMATION_BACKGROUND_DEFAULT)
                 .build();
-        final AnimationParams animParams2 =
-                new AnimationParams.Builder()
-                        .setAnimationBackground(AnimationBackground.ANIMATION_BACKGROUND_DEFAULT)
-                        .setOpenAnimationResId(AnimationParams.DEFAULT_ANIMATION_RESOURCES_ID)
-                        .build();
         final SplitAttributes attrs2 = new SplitAttributes.Builder()
                 .setSplitType(new SplitAttributes.SplitType.HingeSplitType(splitEqually()))
                 .setLayoutDirection(LayoutDirection.LOCALE)
-                .setAnimationParams(animParams2)
+                .setAnimationBackground(AnimationBackground.ANIMATION_BACKGROUND_DEFAULT)
                 .build();
-        final AnimationParams animParams3 =
-                new AnimationParams.Builder()
-                        .setAnimationBackground(AnimationBackground.ANIMATION_BACKGROUND_DEFAULT)
-                        .setOpenAnimationResId(AnimationParams.DEFAULT_ANIMATION_RESOURCES_ID)
-                        .build();
         final SplitAttributes attrs3 = new SplitAttributes.Builder()
                 .setSplitType(new SplitAttributes.SplitType.HingeSplitType(splitEqually()))
                 .setLayoutDirection(LayoutDirection.TOP_TO_BOTTOM)
-                .setAnimationParams(animParams3)
+                .setAnimationBackground(AnimationBackground.ANIMATION_BACKGROUND_DEFAULT)
                 .build();
-        final AnimationParams animParams4and5 =
-                new AnimationParams.Builder()
-                        .setAnimationBackground(
-                                AnimationBackground.createColorBackground(Color.BLUE))
-                        .setOpenAnimationResId(android.R.anim.fade_in)
-                        .build();
         final SplitAttributes attrs4 = new SplitAttributes.Builder()
                 .setSplitType(new SplitAttributes.SplitType.HingeSplitType(splitEqually()))
                 .setLayoutDirection(LayoutDirection.TOP_TO_BOTTOM)
-                .setAnimationParams(animParams4and5)
+                .setAnimationBackground(AnimationBackground.createColorBackground(Color.BLUE))
                 .build();
         final SplitAttributes attrs5 = new SplitAttributes.Builder()
                 .setSplitType(new SplitAttributes.SplitType.HingeSplitType(splitEqually()))
                 .setLayoutDirection(LayoutDirection.TOP_TO_BOTTOM)
-                .setAnimationParams(animParams4and5)
+                .setAnimationBackground(AnimationBackground.createColorBackground(Color.BLUE))
                 .build();
 
         assertNotEquals(attrs1, attrs2);
@@ -99,11 +78,10 @@
 
     @Test
     public void testSplitAttributesEqualsUsingBuilderFromExistingInstance() {
-        final AnimationParams animParamsDefault = new AnimationParams.Builder().build();
         final SplitAttributes attrs1 = new SplitAttributes.Builder()
                 .setSplitType(splitEqually())
                 .setLayoutDirection(LayoutDirection.LOCALE)
-                .setAnimationParams(animParamsDefault)
+                .setAnimationBackground(AnimationBackground.ANIMATION_BACKGROUND_DEFAULT)
                 .build();
         final SplitAttributes attrs2 = new SplitAttributes.Builder(attrs1).build();
         assertEquals(attrs1, attrs2);
diff --git a/window/integration-tests/macrobenchmark-target/build.gradle b/window/integration-tests/macrobenchmark-target/build.gradle
index 7b29663..71c5952 100644
--- a/window/integration-tests/macrobenchmark-target/build.gradle
+++ b/window/integration-tests/macrobenchmark-target/build.gradle
@@ -42,7 +42,7 @@
     implementation(libs.constraintLayout)
     implementation(libs.kotlinStdlib)
     implementation(libs.material)
-    implementation("androidx.activity:activity:1.10.1")
+    implementation(project(":activity:activity-ktx"))
     implementation(project(":profileinstaller:profileinstaller"))
     implementation(project(":window:window-java"))
 }
diff --git a/window/window-core/src/commonMain/kotlin/androidx/window/core/layout/WindowSizeClass.kt b/window/window-core/src/commonMain/kotlin/androidx/window/core/layout/WindowSizeClass.kt
index 2d27bb2..c70b393 100644
--- a/window/window-core/src/commonMain/kotlin/androidx/window/core/layout/WindowSizeClass.kt
+++ b/window/window-core/src/commonMain/kotlin/androidx/window/core/layout/WindowSizeClass.kt
@@ -195,7 +195,7 @@
 
         /**
          * The recommended breakpoints for window size classes. This includes all the breakpoints
-         * from [BREAKPOINTS_V1] plus new breakpoints to account for the Large and Extra Large width
+         * from [BREAKPOINTS_V1] plus new breakpoints to account for Large and Extra Large width
          * breakpoints.
          *
          * @sample androidx.window.core.samples.layout.calculateWindowSizeClass
diff --git a/window/window-demos/demo/src/main/AndroidManifest.xml b/window/window-demos/demo/src/main/AndroidManifest.xml
index f2ab6a6..214ca2d 100644
--- a/window/window-demos/demo/src/main/AndroidManifest.xml
+++ b/window/window-demos/demo/src/main/AndroidManifest.xml
@@ -344,10 +344,10 @@
             android:taskAffinity="androidx.window.demo.overlay_activity_affinity" />
         <!-- endregion Overlay features -->
 
-        <!-- region WindowLayoutInfo and display configuration callbacks -->
-        <!-- The demo app shows how to get WindowLayoutInfo and display configuration update from different system callbacks. -->
+        <!-- region Display configuration callbacks -->
+        <!-- The demo app to show display configuration from different system callbacks. -->
         <activity
-            android:name=".layout.WindowStateCallbackActivity"
+            android:name=".coresdk.WindowStateCallbackActivity"
             android:exported="true"
             android:label="Window State Callbacks"
             android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|colorMode|density|touchscreen"
@@ -357,17 +357,7 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <!-- The demo app shows how to get WindowLayoutInfo with the Java-supported API. -->
-        <activity
-            android:name=".layout.WindowInfoJavaApiDemoActivity"
-            android:exported="true"
-            android:label="Window Info Java Api Demo">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-        <!-- endregion WindowLayoutInfo and display configuration callbacks -->
+        <!-- endregion Display configuration callbacks -->
 
         <!-- region Activity embedding initializer -->
         <provider android:name="androidx.startup.InitializationProvider"
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateCallbackActivity.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateCallbackActivity.kt
similarity index 88%
rename from window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateCallbackActivity.kt
rename to window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateCallbackActivity.kt
index e606436..5e71bee 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateCallbackActivity.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateCallbackActivity.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2024 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,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.window.demo.layout
+package androidx.window.demo.coresdk
 
 import android.content.ComponentCallbacks
 import android.content.Context
@@ -32,7 +32,6 @@
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.repeatOnLifecycle
-import androidx.window.WindowSdkExtensions
 import androidx.window.demo.R
 import androidx.window.demo.common.DemoTheme
 import androidx.window.layout.WindowInfoTracker
@@ -43,7 +42,6 @@
 /** Activity to show display configuration from different system callbacks. */
 class WindowStateCallbackActivity : ComponentActivity() {
     private val viewModel: WindowStateViewModel by viewModels()
-    private val extensionVersion = WindowSdkExtensions.getInstance().extensionVersion
 
     /**
      * [DisplayManager]s from `Activity` and `Application` are updated from different resource
@@ -126,24 +124,14 @@
         applicationDisplayManager.registerDisplayListener(applicationDisplayListener, handler)
         activityDisplayManager.registerDisplayListener(activityDisplayListener, handler)
         application.registerComponentCallbacks(applicationComponentCallback)
-
-        val tracker = WindowInfoTracker.getOrCreate(this)
-        val getterValue: Any =
-            if (extensionVersion >= 9) {
-                tracker.getCurrentWindowLayoutInfo(this)
-            } else {
-                "WindowLayoutInfo getter is not available on this device. " +
-                    "The WM extension version must be at least 9, " +
-                    "but this device has version $extensionVersion."
-            }
-        onWindowStateCallbackInvoked(R.string.window_layout_info_getter_title, getterValue)
-
         // Collect windowInfo when STARTED and stop when STOPPED.
         lifecycleScope.launch(Dispatchers.Main) {
             lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
-                tracker.windowLayoutInfo(this@WindowStateCallbackActivity).collect { info ->
-                    onWindowStateCallbackInvoked(R.string.window_layout_info_flow_title, info)
-                }
+                WindowInfoTracker.getOrCreate(this@WindowStateCallbackActivity)
+                    .windowLayoutInfo(this@WindowStateCallbackActivity)
+                    .collect { info ->
+                        onWindowStateCallbackInvoked(R.string.display_feature_title, info)
+                    }
             }
         }
     }
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateScreen.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateScreen.kt
similarity index 99%
rename from window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateScreen.kt
rename to window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateScreen.kt
index f695595..3ff2766 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateScreen.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateScreen.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.window.demo.layout
+package androidx.window.demo.coresdk
 
 import android.graphics.Rect
 import android.view.Surface.ROTATION_0
@@ -144,7 +144,7 @@
                 activityDisplayBounds = Rect(0, 0, 2208, 1840),
             ),
             WindowState(
-                name = stringResource(R.string.window_layout_info_flow_title),
+                name = stringResource(R.string.display_feature_title),
                 applicationDisplayBounds = Rect(0, 0, 960, 2142),
                 activityDisplayBounds = Rect(0, 0, 960, 2142),
             ),
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateViewModel.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateViewModel.kt
similarity index 98%
rename from window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateViewModel.kt
rename to window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateViewModel.kt
index 1ab278b..3ecab868 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowStateViewModel.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/coresdk/WindowStateViewModel.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.window.demo.layout
+package androidx.window.demo.coresdk
 
 import android.graphics.Rect
 import android.view.Surface.ROTATION_0
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt
index b5b677a..2325804 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/DemoActivityEmbeddingController.kt
@@ -20,7 +20,6 @@
 import androidx.annotation.GuardedBy
 import androidx.window.demo.embedding.OverlayActivityBase.Companion.DEFAULT_OVERLAY_ATTRIBUTES
 import androidx.window.embedding.EmbeddingAnimationBackground
-import androidx.window.embedding.EmbeddingAnimationParams
 import androidx.window.embedding.OverlayAttributes
 import androidx.window.embedding.SplitAttributes
 import java.util.concurrent.atomic.AtomicBoolean
@@ -63,15 +62,6 @@
 
     @GuardedBy("lock") private var animationBackgroundLocked = EmbeddingAnimationBackground.DEFAULT
 
-    @GuardedBy("lock")
-    private var openAnimationLocked = EmbeddingAnimationParams.AnimationSpec.DEFAULT
-
-    @GuardedBy("lock")
-    private var closeAnimationLocked = EmbeddingAnimationParams.AnimationSpec.DEFAULT
-
-    @GuardedBy("lock")
-    private var changeAnimationLocked = EmbeddingAnimationParams.AnimationSpec.DEFAULT
-
     internal var animationBackground: EmbeddingAnimationBackground
         get() {
             lock.withLock {
@@ -82,36 +72,6 @@
             lock.withLock { animationBackgroundLocked = value }
         }
 
-    internal var openAnimation: EmbeddingAnimationParams.AnimationSpec
-        get() {
-            lock.withLock {
-                return openAnimationLocked
-            }
-        }
-        set(value) {
-            lock.withLock { openAnimationLocked = value }
-        }
-
-    internal var closeAnimation: EmbeddingAnimationParams.AnimationSpec
-        get() {
-            lock.withLock {
-                return closeAnimationLocked
-            }
-        }
-        set(value) {
-            lock.withLock { closeAnimationLocked = value }
-        }
-
-    internal var changeAnimation: EmbeddingAnimationParams.AnimationSpec
-        get() {
-            lock.withLock {
-                return changeAnimationLocked
-            }
-        }
-        set(value) {
-            lock.withLock { changeAnimationLocked = value }
-        }
-
     internal var overlayAttributes: OverlayAttributes
         get() {
             lock.withLock {
@@ -152,13 +112,5 @@
                 EmbeddingAnimationBackground.createColorBackground(Color.GREEN),
                 EmbeddingAnimationBackground.createColorBackground(Color.YELLOW)
             )
-
-        /** Animation spec constants. */
-        val ANIMATION_SPEC_TEXTS = arrayOf("DEFAULT", "JUMP_CUT")
-        val ANIMATION_SPEC_VALUES =
-            arrayOf(
-                EmbeddingAnimationParams.AnimationSpec.DEFAULT,
-                EmbeddingAnimationParams.AnimationSpec.JUMP_CUT
-            )
     }
 }
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
index 4fd53cf..162392a 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/ExampleWindowInitializer.kt
@@ -36,7 +36,6 @@
 import androidx.window.demo.embedding.SplitDeviceStateActivityBase.Companion.TAG_SHOW_LAYOUT_FOLLOWING_HINGE_WHEN_SEPARATING
 import androidx.window.embedding.ActivityEmbeddingController
 import androidx.window.embedding.EmbeddingAnimationParams
-import androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec
 import androidx.window.embedding.EmbeddingBounds
 import androidx.window.embedding.EmbeddingConfiguration
 import androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior.Companion.ON_TASK
@@ -116,12 +115,11 @@
         val isBookMode = windowLayoutInfo.isBookMode()
         val config = params.parentConfiguration
         val shouldReversed = tag?.contains(SUFFIX_REVERSED) ?: false
-        // Always use the Demo app specified animation background.
+        // Make a copy of the default splitAttributes, but replace the animation background
+        // to what is configured in the Demo app.
+        val animationBackground = demoActivityEmbeddingController.animationBackground
         val animationParams =
-            EmbeddingAnimationParams.Builder()
-                .setAnimationBackground(demoActivityEmbeddingController.animationBackground)
-                .setDemoAppAnimations(params.defaultSplitAttributes.animationParams)
-                .build()
+            EmbeddingAnimationParams.Builder().setAnimationBackground(animationBackground).build()
         val defaultSplitAttributes =
             SplitAttributes.Builder()
                 .setLayoutDirection(params.defaultSplitAttributes.layoutDirection)
@@ -269,27 +267,6 @@
         }
     }
 
-    private fun EmbeddingAnimationParams.Builder.setDemoAppAnimations(
-        params: EmbeddingAnimationParams
-    ): EmbeddingAnimationParams.Builder {
-        // Replace the transition animations with what is configured in the Demo app if the default
-        // splitAttributes' transition animations are applicable (all configured to default).
-        val useDemoAppAnimations =
-            params.openAnimation == AnimationSpec.DEFAULT &&
-                params.closeAnimation == AnimationSpec.DEFAULT &&
-                params.changeAnimation == AnimationSpec.DEFAULT
-        if (useDemoAppAnimations) {
-            setOpenAnimation(demoActivityEmbeddingController.openAnimation)
-            setCloseAnimation(demoActivityEmbeddingController.closeAnimation)
-            setChangeAnimation(demoActivityEmbeddingController.changeAnimation)
-        } else {
-            setOpenAnimation(params.openAnimation)
-            setCloseAnimation(params.closeAnimation)
-            setChangeAnimation(params.changeAnimation)
-        }
-        return this
-    }
-
     private fun sampleOverlayAttributesCalculator(
         params: OverlayAttributesCalculatorParams
     ): OverlayAttributes =
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityBase.java b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityBase.java
index e45d8f0..1e5f958 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityBase.java
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityBase.java
@@ -50,8 +50,6 @@
 import androidx.window.embedding.DividerAttributes.DraggableDividerAttributes;
 import androidx.window.embedding.DividerAttributes.FixedDividerAttributes;
 import androidx.window.embedding.EmbeddedActivityWindowInfo;
-import androidx.window.embedding.EmbeddingAnimationParams;
-import androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec;
 import androidx.window.embedding.EmbeddingRule;
 import androidx.window.embedding.RuleController;
 import androidx.window.embedding.SplitAttributes;
@@ -233,7 +231,6 @@
         ActivityRule configE = getRuleFor(SplitActivityE.class);
         mRecyclerViewBindingData.fullscreenECheckBox.setChecked(
                 configE != null && configE.getAlwaysExpand());
-
         mUpdatingConfigs = false;
     }
 
@@ -462,16 +459,6 @@
             setCheckedChanged(mRecyclerViewBindingData.draggableDividerCheckBox);
         }
 
-        if (extensionVersion < 7) {
-            mRecyclerViewBindingData.openAnimationJumpCutCheckBox.setVisible(false);
-            mRecyclerViewBindingData.closeAnimationJumpCutCheckBox.setVisible(false);
-            mRecyclerViewBindingData.changeAnimationJumpCutCheckBox.setVisible(false);
-        } else {
-            setCheckedChanged(mRecyclerViewBindingData.openAnimationJumpCutCheckBox);
-            setCheckedChanged(mRecyclerViewBindingData.closeAnimationJumpCutCheckBox);
-            setCheckedChanged(mRecyclerViewBindingData.changeAnimationJumpCutCheckBox);
-        }
-
         // Listen for split configuration checkboxes to update the rules before launching
         // activities.
         setCheckedChanged(
@@ -494,6 +481,7 @@
                         mRecyclerViewBindingData.useStickyPlaceholderCheckBox.setChecked(false);
                     }
                 });
+
         setCheckedChanged(mRecyclerViewBindingData.splitMainCheckBox);
         setCheckedChanged(mRecyclerViewBindingData.useStickyPlaceholderCheckBox);
         setCheckedChanged(mRecyclerViewBindingData.finishBCCheckBox);
@@ -544,7 +532,6 @@
                 dividerAttributes =
                         new DraggableDividerAttributes.Builder()
                                 .setWidthDp(1)
-                                .setDraggingToFullscreenAllowed(true)
                                 .build();
             } else {
                 dividerAttributes = new FixedDividerAttributes.Builder().setWidthDp(1).build();
@@ -553,24 +540,10 @@
             dividerAttributes = DividerAttributes.NO_DIVIDER;
         }
 
-        final EmbeddingAnimationParams.Builder animationParamsBuilder =
-                new EmbeddingAnimationParams.Builder();
-        if (mRecyclerViewBindingData.openAnimationJumpCutCheckBox.isChecked()) {
-            animationParamsBuilder.setOpenAnimation(AnimationSpec.JUMP_CUT);
-        }
-        if (mRecyclerViewBindingData.closeAnimationJumpCutCheckBox.isChecked()) {
-            animationParamsBuilder.setCloseAnimation(AnimationSpec.JUMP_CUT);
-        }
-        if (mRecyclerViewBindingData.changeAnimationJumpCutCheckBox.isChecked()) {
-            animationParamsBuilder.setChangeAnimation(AnimationSpec.JUMP_CUT);
-        }
-        final EmbeddingAnimationParams animationParams = animationParamsBuilder.build();
-
         final SplitAttributes defaultSplitAttributes =
                 new SplitAttributes.Builder()
                         .setSplitType(SplitAttributes.SplitType.ratio(SPLIT_RATIO))
                         .setDividerAttributes(dividerAttributes)
-                        .setAnimationParams(animationParams)
                         .build();
 
         if (mRecyclerViewBindingData.splitMainCheckBox.isChecked()) {
@@ -596,12 +569,6 @@
 
         mRecyclerViewBindingData.draggableDividerCheckBox.setEnabled(
                 mRecyclerViewBindingData.dividerCheckBox.isChecked());
-        final boolean isEnabled = mRecyclerViewBindingData.splitMainCheckBox.isChecked();
-        mRecyclerViewBindingData.openAnimationJumpCutCheckBox.setEnabled(isEnabled);
-        mRecyclerViewBindingData.closeAnimationJumpCutCheckBox.setEnabled(
-                mRecyclerViewBindingData.splitMainCheckBox.isChecked());
-        mRecyclerViewBindingData.changeAnimationJumpCutCheckBox.setEnabled(
-                mRecyclerViewBindingData.splitMainCheckBox.isChecked());
 
         if (mRecyclerViewBindingData.usePlaceholderCheckBox.isChecked()) {
             // Split B with placeholder.
@@ -699,7 +666,7 @@
 
     /** Updates the status label that says when an activity is embedded. */
     private void updateEmbeddedStatus(boolean isEmbedded) {
-        mRecyclerViewBindingData.embeddedBoundsTextView.setVisible(isEmbedded);
+        mRecyclerViewBindingData.embeddedStatusTextView.setVisible(isEmbedded);
     }
 
     private void updateEmbeddedWindowInfo(@NonNull EmbeddedActivityWindowInfo info) {
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityDetail.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityDetail.kt
index 483b683..7e79b83 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityDetail.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityDetail.kt
@@ -18,7 +18,6 @@
 
 import android.content.Intent
 import android.graphics.Color
-import android.graphics.drawable.ColorDrawable
 import android.os.Bundle
 import android.widget.TextView
 import androidx.window.demo.common.EdgeToEdgeActivity
@@ -32,15 +31,13 @@
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
-        val color = Color.parseColor("#fff3e0")
         viewBinding = ActivitySplitActivityListDetailLayoutBinding.inflate(layoutInflater)
-        viewBinding.rootSplitActivityLayout.setBackgroundColor(color)
+        viewBinding.rootSplitActivityLayout.setBackgroundColor(Color.parseColor("#fff3e0"))
         setContentView(viewBinding.root)
         itemDetailTextView = viewBinding.itemDetailText
 
         itemDetailTextView.text = intent.getStringExtra(EXTRA_SELECTED_ITEM)
 
-        window.setBackgroundDrawable(ColorDrawable(color))
         window.decorView.setOnFocusChangeListener { _, focus ->
             itemDetailTextView.text = "${itemDetailTextView.text} focus=$focus"
         }
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityList.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityList.kt
index 6cf85b2..d7e1cf4 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityList.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityList.kt
@@ -18,7 +18,6 @@
 
 import android.content.Intent
 import android.graphics.Color
-import android.graphics.drawable.ColorDrawable
 import android.os.Bundle
 import android.view.View
 import android.widget.TextView
@@ -38,15 +37,11 @@
 open class SplitActivityList : EdgeToEdgeActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-
-        val color = Color.parseColor("#e0f7fa")
         viewBinding = ActivitySplitActivityListLayoutBinding.inflate(layoutInflater)
         setContentView(viewBinding.root)
-        viewBinding.root.setBackgroundColor(color)
+        viewBinding.root.setBackgroundColor(Color.parseColor("#e0f7fa"))
         val splitController = SplitController.getInstance(this)
 
-        window.setBackgroundDrawable(ColorDrawable(color))
-
         lifecycleScope.launch {
             // The block passed to repeatOnLifecycle is executed when the lifecycle
             // is at least STARTED and is cancelled when the lifecycle is STOPPED.
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewAdapter.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewAdapter.kt
index 6e45ebb..9abedcf 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewAdapter.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewAdapter.kt
@@ -105,7 +105,6 @@
 
         fun bind(item: Item) {
             binding.itemCheckbox.visibility = if (item.isVisible) View.VISIBLE else View.GONE
-            binding.itemCheckbox.setOnCheckedChangeListener(null)
             binding.itemCheckbox.isChecked = item.isChecked
             binding.itemCheckbox.setOnCheckedChangeListener { _, isChecked ->
                 item.isChecked = isChecked
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewBindingData.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewBindingData.kt
index 242632b..aa868a6 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewBindingData.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitActivityRecyclerViewBindingData.kt
@@ -23,7 +23,7 @@
  * corresponding views in each item.
  */
 class SplitActivityRecyclerViewBindingData {
-    class Item(
+    data class Item(
         val type: Int,
         val withDivider: Boolean = false,
     ) {
@@ -93,6 +93,12 @@
     }
 
     @JvmField
+    val embeddedStatusTextView =
+        Item(Item.TYPE_TEXT).apply {
+            text = "Activity is embedded"
+            isVisible = false
+        }
+    @JvmField
     val embeddedBoundsTextView =
         Item(Item.TYPE_TEXT).apply {
             text = "Embedded bounds not available"
@@ -188,13 +194,11 @@
 
     fun getItems() =
         listOf(
+            embeddedStatusTextView,
             embeddedBoundsTextView,
             splitMainCheckBox,
             dividerCheckBox,
             draggableDividerCheckBox,
-            openAnimationJumpCutCheckBox,
-            closeAnimationJumpCutCheckBox,
-            changeAnimationJumpCutCheckBox,
             launchBButton,
             usePlaceholderCheckBox,
             useStickyPlaceholderCheckBox,
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesToggleMainActivity.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesToggleMainActivity.kt
index 1ef955d..588b87c 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesToggleMainActivity.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesToggleMainActivity.kt
@@ -440,15 +440,6 @@
             R.id.animation_background_dropdown ->
                 demoActivityEmbeddingController.animationBackground =
                     DemoActivityEmbeddingController.ANIMATION_BACKGROUND_VALUES[position]
-            R.id.open_animation_dropdown ->
-                demoActivityEmbeddingController.openAnimation =
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_VALUES[position]
-            R.id.close_animation_dropdown ->
-                demoActivityEmbeddingController.closeAnimation =
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_VALUES[position]
-            R.id.change_animation_dropdown ->
-                demoActivityEmbeddingController.changeAnimation =
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_VALUES[position]
         }
         activityEmbeddingController.invalidateVisibleActivityStacks()
     }
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesTogglePrimaryActivity.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesTogglePrimaryActivity.kt
index 38587a7..3544ddfd 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesTogglePrimaryActivity.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitAttributesTogglePrimaryActivity.kt
@@ -83,45 +83,6 @@
             animationBackgroundDropdown.onItemSelectedListener = this
         }
 
-        // Animation transitions
-        if (WindowSdkExtensions.getInstance().extensionVersion >= 7) {
-            val openAnimationDropdown = viewBinding.openAnimationDropdown
-            openAnimationDropdown.visibility = View.VISIBLE
-            viewBinding.openAnimationDivider.visibility = View.VISIBLE
-            viewBinding.openAnimationTextView.visibility = View.VISIBLE
-            openAnimationDropdown.adapter =
-                ArrayAdapter(
-                    this,
-                    android.R.layout.simple_spinner_dropdown_item,
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_TEXTS
-                )
-            openAnimationDropdown.onItemSelectedListener = this
-
-            val closeAnimationDropdown = viewBinding.closeAnimationDropdown
-            closeAnimationDropdown.visibility = View.VISIBLE
-            viewBinding.closeAnimationDivider.visibility = View.VISIBLE
-            viewBinding.closeAnimationTextView.visibility = View.VISIBLE
-            closeAnimationDropdown.adapter =
-                ArrayAdapter(
-                    this,
-                    android.R.layout.simple_spinner_dropdown_item,
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_TEXTS
-                )
-            closeAnimationDropdown.onItemSelectedListener = this
-
-            val changeAnimationDropdown = viewBinding.changeAnimationDropdown
-            changeAnimationDropdown.visibility = View.VISIBLE
-            viewBinding.changeAnimationDivider.visibility = View.VISIBLE
-            viewBinding.changeAnimationTextView.visibility = View.VISIBLE
-            changeAnimationDropdown.adapter =
-                ArrayAdapter(
-                    this,
-                    android.R.layout.simple_spinner_dropdown_item,
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_TEXTS
-                )
-            changeAnimationDropdown.onItemSelectedListener = this
-        }
-
         lifecycleScope.launch {
             // The block passed to repeatOnLifecycle is executed when the lifecycle
             // is at least STARTED and is cancelled when the lifecycle is STOPPED.
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
index ff94d18..04ca1a5b 100644
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
+++ b/window/window-demos/demo/src/main/java/androidx/window/demo/embedding/SplitDeviceStateActivityBase.kt
@@ -143,46 +143,6 @@
             animationBackgroundDropdown.onItemSelectedListener = this
         }
 
-        // Animation transitions
-        if (WindowSdkExtensions.getInstance().extensionVersion >= 7 && componentName == activityA) {
-            // Show on only the primary activity.
-            val openAnimationDropdown = viewBinding.openAnimationDropdown
-            openAnimationDropdown.visibility = View.VISIBLE
-            viewBinding.openAnimationDivider.visibility = View.VISIBLE
-            viewBinding.openAnimationTextView.visibility = View.VISIBLE
-            openAnimationDropdown.adapter =
-                ArrayAdapter(
-                    this,
-                    android.R.layout.simple_spinner_dropdown_item,
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_TEXTS
-                )
-            openAnimationDropdown.onItemSelectedListener = this
-
-            val closeAnimationDropdown = viewBinding.closeAnimationDropdown
-            closeAnimationDropdown.visibility = View.VISIBLE
-            viewBinding.closeAnimationDivider.visibility = View.VISIBLE
-            viewBinding.closeAnimationTextView.visibility = View.VISIBLE
-            closeAnimationDropdown.adapter =
-                ArrayAdapter(
-                    this,
-                    android.R.layout.simple_spinner_dropdown_item,
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_TEXTS
-                )
-            closeAnimationDropdown.onItemSelectedListener = this
-
-            val changeAnimationDropdown = viewBinding.changeAnimationDropdown
-            changeAnimationDropdown.visibility = View.VISIBLE
-            viewBinding.changeAnimationDivider.visibility = View.VISIBLE
-            viewBinding.changeAnimationTextView.visibility = View.VISIBLE
-            changeAnimationDropdown.adapter =
-                ArrayAdapter(
-                    this,
-                    android.R.layout.simple_spinner_dropdown_item,
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_TEXTS
-                )
-            changeAnimationDropdown.onItemSelectedListener = this
-        }
-
         lifecycleScope.launch {
             // The block passed to repeatOnLifecycle is executed when the lifecycle
             // is at least STARTED and is cancelled when the lifecycle is STOPPED.
@@ -236,20 +196,8 @@
     }
 
     override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
-        when (parent?.id) {
-            R.id.animation_background_dropdown ->
-                demoActivityEmbeddingController.animationBackground =
-                    DemoActivityEmbeddingController.ANIMATION_BACKGROUND_VALUES[position]
-            R.id.open_animation_dropdown ->
-                demoActivityEmbeddingController.openAnimation =
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_VALUES[position]
-            R.id.close_animation_dropdown ->
-                demoActivityEmbeddingController.closeAnimation =
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_VALUES[position]
-            R.id.change_animation_dropdown ->
-                demoActivityEmbeddingController.changeAnimation =
-                    DemoActivityEmbeddingController.ANIMATION_SPEC_VALUES[position]
-        }
+        demoActivityEmbeddingController.animationBackground =
+            DemoActivityEmbeddingController.ANIMATION_BACKGROUND_VALUES[position]
         updateSplitPairRuleWithRadioButtonId(lastCheckedRuleId)
     }
 
@@ -328,9 +276,6 @@
                 .setAnimationParams(
                     EmbeddingAnimationParams.Builder()
                         .setAnimationBackground(demoActivityEmbeddingController.animationBackground)
-                        .setOpenAnimation(demoActivityEmbeddingController.openAnimation)
-                        .setCloseAnimation(demoActivityEmbeddingController.closeAnimation)
-                        .setChangeAnimation(demoActivityEmbeddingController.changeAnimation)
                         .build()
                 )
                 .build()
@@ -384,9 +329,6 @@
                 .setAnimationParams(
                     EmbeddingAnimationParams.Builder()
                         .setAnimationBackground(demoActivityEmbeddingController.animationBackground)
-                        .setOpenAnimation(demoActivityEmbeddingController.openAnimation)
-                        .setCloseAnimation(demoActivityEmbeddingController.closeAnimation)
-                        .setChangeAnimation(demoActivityEmbeddingController.changeAnimation)
                         .build()
                 )
                 .build()
diff --git a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowInfoJavaApiDemoActivity.java b/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowInfoJavaApiDemoActivity.java
deleted file mode 100644
index 9abc1a5..0000000
--- a/window/window-demos/demo/src/main/java/androidx/window/demo/layout/WindowInfoJavaApiDemoActivity.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2024 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.window.demo.layout;
-
-import android.os.Bundle;
-import android.util.Log;
-import android.widget.TextView;
-
-import androidx.core.content.ContextCompat;
-import androidx.core.util.Consumer;
-import androidx.window.WindowSdkExtensions;
-import androidx.window.demo.common.EdgeToEdgeActivity;
-import androidx.window.demo.databinding.ActivityLayoutWindowInfoJavaApiDemoLayoutBinding;
-import androidx.window.java.layout.WindowInfoTrackerCallbackAdapter;
-import androidx.window.layout.WindowInfoTracker;
-import androidx.window.layout.WindowLayoutInfo;
-
-import org.jspecify.annotations.NonNull;
-import org.jspecify.annotations.Nullable;
-
-/** Activity to show how to get WindowLayoutInfo with the Java-supported API. */
-public class WindowInfoJavaApiDemoActivity extends EdgeToEdgeActivity {
-    // Logcat tag length must be <= 23 characters.
-    private static final String TAG = "WinInfoJavaApiDemo";
-
-    private @NonNull WindowInfoTrackerCallbackAdapter mWindowInfoTrackerCallbackAdapter;
-    private @NonNull TextView mWindowLayoutInfoGetterValue;
-    private @NonNull TextView mWindowLayoutInfoFlowValue;
-
-    /** The Window Manager extension version available on this device. */
-    private final int mExtensionVersion = WindowSdkExtensions.getInstance().getExtensionVersion();
-
-    /** WindowLayoutInfoListener callback. */
-    private final Consumer<WindowLayoutInfo> mWindowLayoutInfoChangedConsumer =
-            this::onWindowLayoutInfoUpdated;
-
-    @Override
-    public void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        final ActivityLayoutWindowInfoJavaApiDemoLayoutBinding viewBinding =
-                ActivityLayoutWindowInfoJavaApiDemoLayoutBinding.inflate(getLayoutInflater());
-        setContentView(viewBinding.getRoot());
-        mWindowLayoutInfoGetterValue = viewBinding.windowLayoutInfoGetterValue;
-        mWindowLayoutInfoFlowValue = viewBinding.windowLayoutInfoFlowValue;
-
-        final WindowInfoTracker tracker = WindowInfoTracker.getOrCreate(this);
-        if (mExtensionVersion >= 9) {
-            mWindowLayoutInfoGetterValue.setText(
-                    tracker.getCurrentWindowLayoutInfo(this).toString());
-        } else {
-            mWindowLayoutInfoGetterValue.setText(
-                    "WindowLayoutInfo getter is not available on this device. "
-                            + "The WM extension version must be at least 9, "
-                            + "but this device has version " + mExtensionVersion + ".");
-        }
-
-        mWindowInfoTrackerCallbackAdapter = new WindowInfoTrackerCallbackAdapter(tracker);
-        mWindowInfoTrackerCallbackAdapter.addWindowLayoutInfoListener(
-                this, Runnable::run, this::onWindowLayoutInfoUpdated);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        if (mWindowInfoTrackerCallbackAdapter != null) {
-            mWindowInfoTrackerCallbackAdapter.addWindowLayoutInfoListener(
-                    this, Runnable::run, mWindowLayoutInfoChangedConsumer);
-        }
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        if (mWindowInfoTrackerCallbackAdapter != null) {
-            mWindowInfoTrackerCallbackAdapter.removeWindowLayoutInfoListener(
-                    mWindowLayoutInfoChangedConsumer);
-        }
-    }
-
-    private void onWindowLayoutInfoUpdated(@NonNull WindowLayoutInfo windowLayoutInfo) {
-        Log.d(TAG, "onWindowLayoutInfoUpdated: " + windowLayoutInfo);
-        ContextCompat.getMainExecutor(this).execute(
-                () -> mWindowLayoutInfoFlowValue.setText(windowLayoutInfo.toString()));
-    }
-}
diff --git a/window/window-demos/demo/src/main/res/layout/activity_layout_window_info_java_api_demo_layout.xml b/window/window-demos/demo/src/main/res/layout/activity_layout_window_info_java_api_demo_layout.xml
deleted file mode 100644
index 7638404..0000000
--- a/window/window-demos/demo/src/main/res/layout/activity_layout_window_info_java_api_demo_layout.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  Copyright 2024 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.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="5dp"
-        android:text="@string/window_layout_info_getter_title"
-        android:textStyle="bold" />
-
-    <TextView
-        android:id="@+id/window_layout_info_getter_value"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="10dp"
-        android:text="@string/window_state_placeholder" />
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="5dp"
-        android:text="@string/window_layout_info_flow_title"
-        android:textStyle="bold" />
-
-    <TextView
-        android:id="@+id/window_layout_info_flow_value"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="10dp"
-        android:text="@string/window_state_placeholder" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/window/window-demos/demo/src/main/res/layout/activity_split_attributes_toggle_primary_activity.xml b/window/window-demos/demo/src/main/res/layout/activity_split_attributes_toggle_primary_activity.xml
index 6acd57f..c4e0ef7 100644
--- a/window/window-demos/demo/src/main/res/layout/activity_split_attributes_toggle_primary_activity.xml
+++ b/window/window-demos/demo/src/main/res/layout/activity_split_attributes_toggle_primary_activity.xml
@@ -217,81 +217,6 @@
             android:spinnerMode="dropdown"
             android:visibility="gone"/>
 
-        <!-- Dropdown for open animation transition -->
-
-        <View
-            android:id="@+id/open_animation_divider"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginBottom="10dp"
-            android:background="#AAAAAA"
-            android:visibility="gone"/>
-
-        <TextView
-            android:id="@+id/open_animation_text_view"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/current_open_animation"
-            android:visibility="gone"/>
-
-        <Spinner
-            android:id="@+id/open_animation_dropdown"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:spinnerMode="dropdown"
-            android:visibility="gone"/>
-
-        <!-- Dropdown for close animation transition -->
-
-        <View
-            android:id="@+id/close_animation_divider"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginBottom="10dp"
-            android:background="#AAAAAA"
-            android:visibility="gone"/>
-
-        <TextView
-            android:id="@+id/close_animation_text_view"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/current_close_animation"
-            android:visibility="gone"/>
-
-        <Spinner
-            android:id="@+id/close_animation_dropdown"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:spinnerMode="dropdown"
-            android:visibility="gone"/>
-
-        <!-- Dropdown for change animation transition -->
-
-        <View
-            android:id="@+id/change_animation_divider"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginBottom="10dp"
-            android:background="#AAAAAA"
-            android:visibility="gone"/>
-
-        <TextView
-            android:id="@+id/change_animation_text_view"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/current_change_animation"
-            android:visibility="gone"/>
-
-        <Spinner
-            android:id="@+id/change_animation_dropdown"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:spinnerMode="dropdown"
-            android:visibility="gone"/>
-
         <View
             android:id="@+id/finish_secondary_activities_divider"
             android:layout_width="match_parent"
diff --git a/window/window-demos/demo/src/main/res/layout/activity_split_device_state_layout.xml b/window/window-demos/demo/src/main/res/layout/activity_split_device_state_layout.xml
index 4d6e260..4bd1b21 100644
--- a/window/window-demos/demo/src/main/res/layout/activity_split_device_state_layout.xml
+++ b/window/window-demos/demo/src/main/res/layout/activity_split_device_state_layout.xml
@@ -168,81 +168,6 @@
             android:spinnerMode="dropdown"
             android:visibility="gone"/>
 
-        <!-- Dropdown for open animation transition -->
-
-        <View
-            android:id="@+id/open_animation_divider"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginBottom="10dp"
-            android:background="#AAAAAA"
-            android:visibility="gone"/>
-
-        <TextView
-            android:id="@+id/open_animation_text_view"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/current_open_animation"
-            android:visibility="gone"/>
-
-        <Spinner
-            android:id="@+id/open_animation_dropdown"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:spinnerMode="dropdown"
-            android:visibility="gone"/>
-
-        <!-- Dropdown for close animation transition -->
-
-        <View
-            android:id="@+id/close_animation_divider"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginBottom="10dp"
-            android:background="#AAAAAA"
-            android:visibility="gone"/>
-
-        <TextView
-            android:id="@+id/close_animation_text_view"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/current_close_animation"
-            android:visibility="gone"/>
-
-        <Spinner
-            android:id="@+id/close_animation_dropdown"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:spinnerMode="dropdown"
-            android:visibility="gone"/>
-
-        <!-- Dropdown for change animation transition -->
-
-        <View
-            android:id="@+id/change_animation_divider"
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginBottom="10dp"
-            android:background="#AAAAAA"
-            android:visibility="gone"/>
-
-        <TextView
-            android:id="@+id/change_animation_text_view"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/current_change_animation"
-            android:visibility="gone"/>
-
-        <Spinner
-            android:id="@+id/change_animation_dropdown"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:spinnerMode="dropdown"
-            android:visibility="gone"/>
-
         <Button
             android:id="@+id/launch_activity_to_side"
             android:layout_width="wrap_content"
diff --git a/window/window-demos/demo/src/main/res/values/strings.xml b/window/window-demos/demo/src/main/res/values/strings.xml
index c29ba3b..357ce1c 100644
--- a/window/window-demos/demo/src/main/res/values/strings.xml
+++ b/window/window-demos/demo/src/main/res/values/strings.xml
@@ -51,9 +51,6 @@
     <string name="rear_display_description">Demo of observing to WindowAreaStatus and enabling/disabling RearDisplay mode</string>
     <string name="current_split_attributes">Current SplitAttributes:</string>>
     <string name="current_animation_background">Current Animation Background:</string>>
-    <string name="current_open_animation">Current Open Animation:</string>>
-    <string name="current_close_animation">Current Close Animation:</string>>
-    <string name="current_change_animation">Current Change Animation:</string>>
     <string name="test_ime">Test IME</string>
     <string name="test_ime_button_clear">Clear Logs</string>
     <string name="test_ime_button_close">Close Test IME</string>
@@ -71,8 +68,7 @@
     <string name="activity_display_listener_title">Activity DisplayListener#onDisplayChanged</string>
     <string name="application_configuration_title">Application#onConfigurationChanged</string>
     <string name="activity_configuration_title">Activity#onConfigurationChanged</string>
-    <string name="window_layout_info_getter_title">WindowInfoTracker#getCurrentWindowLayoutInfo</string>
-    <string name="window_layout_info_flow_title">WindowInfoTracker#windowLayoutInfo</string>
+    <string name="display_feature_title">WindowInfoTracker#windowLayoutInfo</string>
     <string name="timestamp_title">Timestamp:</string>
     <string name="application_display_rotation_title">Application Display Rotation:</string>
     <string name="activity_display_rotation_title">Activity Display Rotation:</string>
diff --git a/window/window-demos/demo/src/main/res/xml/main_split_config.xml b/window/window-demos/demo/src/main/res/xml/main_split_config.xml
index fb4facd..7576a23 100644
--- a/window/window-demos/demo/src/main/res/xml/main_split_config.xml
+++ b/window/window-demos/demo/src/main/res/xml/main_split_config.xml
@@ -30,8 +30,7 @@
             window:embeddingDividerColor="@color/colorAccent"
             window:embeddingDividerWidthDp="1"
             window:dragRangeMinRatio="0.2"
-            window:dragRangeMaxRatio="0.8"
-            window:isDraggingToFullscreenAllowed="true" />
+            window:dragRangeMaxRatio="0.8" />
     </SplitPairRule>
 
     <SplitPlaceholderRule
@@ -45,8 +44,7 @@
             window:embeddingDividerColor="@color/colorAccent"
             window:embeddingDividerWidthDp="0"
             window:dragRangeMinRatio="0.2"
-            window:dragRangeMaxRatio="0.8"
-            window:isDraggingToFullscreenAllowed="true" />
+            window:dragRangeMaxRatio="0.8" />
     </SplitPlaceholderRule>
 
     <!-- Rules for SplitImeActivityMain -->
diff --git a/window/window/api/current.txt b/window/window/api/current.txt
index dc16ea0..09d411c 100644
--- a/window/window/api/current.txt
+++ b/window/window/api/current.txt
@@ -223,9 +223,7 @@
 
   public static final class DividerAttributes.DraggableDividerAttributes extends androidx.window.embedding.DividerAttributes {
     method public androidx.window.embedding.DividerAttributes.DragRange getDragRange();
-    method public boolean isDraggingToFullscreenAllowed();
     property public androidx.window.embedding.DividerAttributes.DragRange dragRange;
-    property public boolean isDraggingToFullscreenAllowed;
   }
 
   @androidx.window.RequiresWindowSdkExtension(version=6) public static final class DividerAttributes.DraggableDividerAttributes.Builder {
@@ -234,7 +232,6 @@
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes build();
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setColor(@ColorInt int color);
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setDragRange(androidx.window.embedding.DividerAttributes.DragRange dragRange);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setDraggingToFullscreenAllowed(boolean allowed);
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setWidthDp(@IntRange(from=androidx.window.embedding.DividerAttributes.WIDTH_SYSTEM_DEFAULT.toLong()) int widthDp);
   }
 
@@ -276,33 +273,13 @@
 
   public final class EmbeddingAnimationParams {
     method public androidx.window.embedding.EmbeddingAnimationBackground getAnimationBackground();
-    method public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec getChangeAnimation();
-    method public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec getCloseAnimation();
-    method public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec getOpenAnimation();
     property public androidx.window.embedding.EmbeddingAnimationBackground animationBackground;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec changeAnimation;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec closeAnimation;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec openAnimation;
-  }
-
-  public static final class EmbeddingAnimationParams.AnimationSpec {
-    field public static final androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec.Companion Companion;
-    field public static final androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec DEFAULT;
-    field public static final androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec JUMP_CUT;
-  }
-
-  public static final class EmbeddingAnimationParams.AnimationSpec.Companion {
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec DEFAULT;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec JUMP_CUT;
   }
 
   public static final class EmbeddingAnimationParams.Builder {
     ctor public EmbeddingAnimationParams.Builder();
     method public androidx.window.embedding.EmbeddingAnimationParams build();
     method @androidx.window.RequiresWindowSdkExtension(version=5) public androidx.window.embedding.EmbeddingAnimationParams.Builder setAnimationBackground(androidx.window.embedding.EmbeddingAnimationBackground background);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.EmbeddingAnimationParams.Builder setChangeAnimation(androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec spec);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.EmbeddingAnimationParams.Builder setCloseAnimation(androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec spec);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.EmbeddingAnimationParams.Builder setOpenAnimation(androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec spec);
   }
 
   public final class EmbeddingAspectRatio {
@@ -320,15 +297,12 @@
 
   public final class EmbeddingConfiguration {
     method public androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior getDimAreaBehavior();
-    method public boolean isAutoSaveEmbeddingState();
     property public androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior dimAreaBehavior;
-    property public boolean isAutoSaveEmbeddingState;
   }
 
   public static final class EmbeddingConfiguration.Builder {
     ctor public EmbeddingConfiguration.Builder();
     method public androidx.window.embedding.EmbeddingConfiguration build();
-    method @androidx.window.RequiresWindowSdkExtension(version=8) public androidx.window.embedding.EmbeddingConfiguration.Builder setAutoSaveEmbeddingState(boolean saveState);
     method @androidx.window.RequiresWindowSdkExtension(version=5) public androidx.window.embedding.EmbeddingConfiguration.Builder setDimAreaBehavior(androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior area);
   }
 
@@ -661,7 +635,6 @@
   }
 
   public interface WindowInfoTracker {
-    method @androidx.window.RequiresWindowSdkExtension(version=9) public default androidx.window.layout.WindowLayoutInfo getCurrentWindowLayoutInfo(@UiContext android.content.Context context);
     method public static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
     method @androidx.window.RequiresWindowSdkExtension(version=6) public default java.util.List<androidx.window.layout.SupportedPosture> getSupportedPostures();
     method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
diff --git a/window/window/api/res-current.txt b/window/window/api/res-current.txt
index 8d9de80..7dced15 100644
--- a/window/window/api/res-current.txt
+++ b/window/window/api/res-current.txt
@@ -11,7 +11,6 @@
 attr finishPrimaryWithPlaceholder
 attr finishPrimaryWithSecondary
 attr finishSecondaryWithPrimary
-attr isDraggingToFullscreenAllowed
 attr placeholderActivityName
 attr primaryActivityName
 attr secondaryActivityAction
diff --git a/window/window/api/restricted_current.txt b/window/window/api/restricted_current.txt
index c0b1fbe..c936de5 100644
--- a/window/window/api/restricted_current.txt
+++ b/window/window/api/restricted_current.txt
@@ -224,9 +224,7 @@
 
   public static final class DividerAttributes.DraggableDividerAttributes extends androidx.window.embedding.DividerAttributes {
     method public androidx.window.embedding.DividerAttributes.DragRange getDragRange();
-    method public boolean isDraggingToFullscreenAllowed();
     property public androidx.window.embedding.DividerAttributes.DragRange dragRange;
-    property public boolean isDraggingToFullscreenAllowed;
   }
 
   @androidx.window.RequiresWindowSdkExtension(version=6) public static final class DividerAttributes.DraggableDividerAttributes.Builder {
@@ -235,7 +233,6 @@
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes build();
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setColor(@ColorInt int color);
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setDragRange(androidx.window.embedding.DividerAttributes.DragRange dragRange);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setDraggingToFullscreenAllowed(boolean allowed);
     method @androidx.window.RequiresWindowSdkExtension(version=6) public androidx.window.embedding.DividerAttributes.DraggableDividerAttributes.Builder setWidthDp(@IntRange(from=androidx.window.embedding.DividerAttributes.WIDTH_SYSTEM_DEFAULT.toLong()) int widthDp);
   }
 
@@ -277,33 +274,13 @@
 
   public final class EmbeddingAnimationParams {
     method public androidx.window.embedding.EmbeddingAnimationBackground getAnimationBackground();
-    method public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec getChangeAnimation();
-    method public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec getCloseAnimation();
-    method public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec getOpenAnimation();
     property public androidx.window.embedding.EmbeddingAnimationBackground animationBackground;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec changeAnimation;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec closeAnimation;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec openAnimation;
-  }
-
-  public static final class EmbeddingAnimationParams.AnimationSpec {
-    field public static final androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec.Companion Companion;
-    field public static final androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec DEFAULT;
-    field public static final androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec JUMP_CUT;
-  }
-
-  public static final class EmbeddingAnimationParams.AnimationSpec.Companion {
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec DEFAULT;
-    property public androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec JUMP_CUT;
   }
 
   public static final class EmbeddingAnimationParams.Builder {
     ctor public EmbeddingAnimationParams.Builder();
     method public androidx.window.embedding.EmbeddingAnimationParams build();
     method @androidx.window.RequiresWindowSdkExtension(version=5) public androidx.window.embedding.EmbeddingAnimationParams.Builder setAnimationBackground(androidx.window.embedding.EmbeddingAnimationBackground background);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.EmbeddingAnimationParams.Builder setChangeAnimation(androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec spec);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.EmbeddingAnimationParams.Builder setCloseAnimation(androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec spec);
-    method @androidx.window.RequiresWindowSdkExtension(version=7) public androidx.window.embedding.EmbeddingAnimationParams.Builder setOpenAnimation(androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec spec);
   }
 
   public final class EmbeddingAspectRatio {
@@ -375,15 +352,12 @@
 
   public final class EmbeddingConfiguration {
     method public androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior getDimAreaBehavior();
-    method public boolean isAutoSaveEmbeddingState();
     property public androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior dimAreaBehavior;
-    property public boolean isAutoSaveEmbeddingState;
   }
 
   public static final class EmbeddingConfiguration.Builder {
     ctor public EmbeddingConfiguration.Builder();
     method public androidx.window.embedding.EmbeddingConfiguration build();
-    method @androidx.window.RequiresWindowSdkExtension(version=8) public androidx.window.embedding.EmbeddingConfiguration.Builder setAutoSaveEmbeddingState(boolean saveState);
     method @androidx.window.RequiresWindowSdkExtension(version=5) public androidx.window.embedding.EmbeddingConfiguration.Builder setDimAreaBehavior(androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior area);
   }
 
@@ -788,7 +762,6 @@
   }
 
   public interface WindowInfoTracker {
-    method @androidx.window.RequiresWindowSdkExtension(version=9) public default androidx.window.layout.WindowLayoutInfo getCurrentWindowLayoutInfo(@UiContext android.content.Context context);
     method public static androidx.window.layout.WindowInfoTracker getOrCreate(android.content.Context context);
     method @androidx.window.RequiresWindowSdkExtension(version=6) public default java.util.List<androidx.window.layout.SupportedPosture> getSupportedPostures();
     method public kotlinx.coroutines.flow.Flow<androidx.window.layout.WindowLayoutInfo> windowLayoutInfo(android.app.Activity activity);
diff --git a/window/window/build.gradle b/window/window/build.gradle
index 82894b51..206291a 100644
--- a/window/window/build.gradle
+++ b/window/window/build.gradle
@@ -58,7 +58,7 @@
     implementation(project(":window:window-core"))
 
     def extensions_core_version = "androidx.window.extensions.core:core:1.0.0"
-    def extensions_version = project(":window:extensions:extensions")
+    def extensions_version = "androidx.window.extensions:extensions:1.4.0"
     // A compile only dependency on extensions.core so that other libraries do not expose it
     // transitively.
     compileOnly(extensions_core_version)
diff --git a/window/window/dependencyAnalysis-baseline.json b/window/window/dependencyAnalysis-baseline.json
index 49554b3..fed829e 100644
--- a/window/window/dependencyAnalysis-baseline.json
+++ b/window/window/dependencyAnalysis-baseline.json
@@ -54,6 +54,22 @@
     {
       "coordinates": {
         "type": "module",
+        "identifier": "androidx.window.extensions:extensions",
+        "resolvedVersion": "1.4.0"
+      },
+      "fromConfiguration": "androidTestImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
+        "identifier": "androidx.window.extensions:extensions",
+        "resolvedVersion": "1.4.0"
+      },
+      "fromConfiguration": "testImplementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
         "identifier": "com.google.guava:guava",
         "resolvedVersion": "33.3.1-jre"
       },
@@ -104,20 +120,6 @@
     {
       "coordinates": {
         "type": "project",
-        "identifier": ":window:extensions:extensions"
-      },
-      "fromConfiguration": "androidTestImplementation"
-    },
-    {
-      "coordinates": {
-        "type": "project",
-        "identifier": ":window:extensions:extensions"
-      },
-      "fromConfiguration": "testImplementation"
-    },
-    {
-      "coordinates": {
-        "type": "project",
         "identifier": ":window:sidecar:sidecar"
       },
       "fromConfiguration": "androidTestImplementation"
diff --git a/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt b/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
index 7126476..eb7c311 100644
--- a/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
+++ b/window/window/samples/src/main/java/androidx.window.samples.embedding/SplitAttributesCalculatorSamples.kt
@@ -60,14 +60,13 @@
                         SplitAttributes.LayoutDirection.LOCALE
                     }
                 )
-                // Optionally set the animation background and change transition animation to use
-                // when switching between vertical and horizontal
+                // Optionally set the animation background to use when switching between
+                // vertical and horizontal
                 .setAnimationParams(
                     EmbeddingAnimationParams.Builder()
                         .setAnimationBackground(
                             EmbeddingAnimationBackground.createColorBackground(Color.GRAY)
                         )
-                        .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
@@ -79,14 +78,13 @@
             SplitAttributes.Builder()
                 .setSplitType(SPLIT_TYPE_EQUAL)
                 .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
-                // Optionally set the animation background and change transition animation to use
-                // when switching between vertical and horizontal
+                // Optionally set the animation background to use when switching between
+                // vertical and horizontal
                 .setAnimationParams(
                     EmbeddingAnimationParams.Builder()
                         .setAnimationBackground(
                             EmbeddingAnimationBackground.createColorBackground(Color.GRAY)
                         )
-                        .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
@@ -107,28 +105,26 @@
         return@setSplitAttributesCalculator if (parentConfiguration.screenWidthDp >= 600) {
             builder
                 .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
-                // Optionally set the animation background and change transition animation to use
-                // when switching between vertical and horizontal
+                // Optionally set the animation background to use when switching between
+                // vertical and horizontal
                 .setAnimationParams(
                     EmbeddingAnimationParams.Builder()
                         .setAnimationBackground(
                             EmbeddingAnimationBackground.createColorBackground(Color.GRAY)
                         )
-                        .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
         } else if (parentConfiguration.screenHeightDp >= 600) {
             builder
                 .setLayoutDirection(SplitAttributes.LayoutDirection.TOP_TO_BOTTOM)
-                // Optionally set the animation background and change transition animation to use
-                // when switching between vertical and horizontal
+                // Optionally set the animation background to use when switching between
+                // vertical and horizontal
                 .setAnimationParams(
                     EmbeddingAnimationParams.Builder()
                         .setAnimationBackground(
                             EmbeddingAnimationBackground.createColorBackground(Color.GRAY)
                         )
-                        .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
index b360898..afe4ef6 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/EmbeddingAdapterTest.kt
@@ -17,16 +17,9 @@
 package androidx.window.embedding
 
 import android.app.Activity
-import android.content.res.Configuration
-import android.content.res.Resources
 import android.graphics.Color
-import android.graphics.Rect
 import android.os.Binder
-import android.os.Build
 import android.os.IBinder
-import android.view.WindowInsets
-import android.view.WindowMetrics
-import androidx.annotation.RequiresApi
 import androidx.window.WindowSdkExtensions
 import androidx.window.WindowTestUtils
 import androidx.window.core.PredicateAdapter
@@ -38,15 +31,12 @@
 import androidx.window.extensions.embedding.ActivityStack as OEMActivityStack
 import androidx.window.extensions.embedding.ActivityStack.Token as OEMActivityStackToken
 import androidx.window.extensions.embedding.AnimationBackground as OEMEmbeddingAnimationBackground
-import androidx.window.extensions.embedding.AnimationParams as OEMEmbeddingAnimationParams
 import androidx.window.extensions.embedding.DividerAttributes as OEMDividerAttributes
 import androidx.window.extensions.embedding.SplitAttributes as OEMSplitAttributes
 import androidx.window.extensions.embedding.SplitAttributes.LayoutDirection.TOP_TO_BOTTOM
 import androidx.window.extensions.embedding.SplitAttributes.SplitType.RatioSplitType
-import androidx.window.extensions.embedding.SplitAttributesCalculatorParams as OEMSplitAttributesCalculatorParams
 import androidx.window.extensions.embedding.SplitInfo as OEMSplitInfo
 import androidx.window.extensions.embedding.SplitInfo.Token as OEMSplitInfoToken
-import androidx.window.extensions.layout.WindowLayoutInfo
 import org.junit.Assert.assertEquals
 import org.junit.Assume.assumeTrue
 import org.junit.Before
@@ -340,75 +330,19 @@
     }
 
     @Test
-    fun testTranslateAnimationBackgroundWithApiLevel7() {
-        WindowTestUtils.assumeAtLeastWindowExtensionVersion(7)
+    fun testTranslateAnimationBackgroundWithApiLevel5() {
+        WindowTestUtils.assumeAtLeastWindowExtensionVersion(5)
 
         val colorBackground = EmbeddingAnimationBackground.createColorBackground(Color.BLUE)
-        val animationParamsWithColorBackground =
-            EmbeddingAnimationParams.Builder().setAnimationBackground(colorBackground).build()
         val splitAttributesWithColorBackground =
-            SplitAttributes.Builder().setAnimationParams(animationParamsWithColorBackground).build()
-        val defaultAnimationParams = EmbeddingAnimationParams.Builder().build()
-        val splitAttributesWithDefaultBackground =
-            SplitAttributes.Builder().setAnimationParams(defaultAnimationParams).build()
-
-        val extensionsColorBackground =
-            OEMEmbeddingAnimationBackground.createColorBackground(Color.BLUE)
-        val extensionAnimationParamsWithColorBackground =
-            OEMEmbeddingAnimationParams.Builder()
-                .setAnimationBackground(extensionsColorBackground)
-                .build()
-        val extensionsSplitAttributesWithColorBackground =
-            OEMSplitAttributes.Builder()
-                .setAnimationParams(extensionAnimationParamsWithColorBackground)
-                .build()
-
-        val extensionAnimationParamsWithDefaultBackground =
-            OEMEmbeddingAnimationParams.Builder()
-                .setAnimationBackground(
-                    OEMEmbeddingAnimationBackground.ANIMATION_BACKGROUND_DEFAULT
+            SplitAttributes.Builder()
+                .setAnimationParams(
+                    EmbeddingAnimationParams.Builder()
+                        .setAnimationBackground(colorBackground)
+                        .build()
                 )
                 .build()
-        val extensionsSplitAttributesWithDefaultBackground =
-            OEMSplitAttributes.Builder()
-                .setAnimationParams(extensionAnimationParamsWithDefaultBackground)
-                .build()
-
-        // Translate from Window to Extensions
-        assertEquals(
-            extensionsSplitAttributesWithColorBackground,
-            adapter.translateSplitAttributes(splitAttributesWithColorBackground)
-        )
-        assertEquals(
-            extensionsSplitAttributesWithDefaultBackground,
-            adapter.translateSplitAttributes(splitAttributesWithDefaultBackground)
-        )
-
-        // Translate from Extensions to Window
-        assertEquals(
-            splitAttributesWithColorBackground,
-            adapter.translate(extensionsSplitAttributesWithColorBackground)
-        )
-        assertEquals(
-            splitAttributesWithDefaultBackground,
-            adapter.translate(extensionsSplitAttributesWithDefaultBackground)
-        )
-    }
-
-    @Test
-    @Suppress("DEPRECATION")
-    fun testTranslateAnimationBackgroundWithApiLevel5And6() {
-        WindowTestUtils.assumeAtLeastWindowExtensionVersion(5)
-        WindowTestUtils.assumeBeforeWindowExtensionVersion(7)
-
-        val colorBackground = EmbeddingAnimationBackground.createColorBackground(Color.BLUE)
-        val animationParamsWithColorBackground =
-            EmbeddingAnimationParams.Builder().setAnimationBackground(colorBackground).build()
-        val splitAttributesWithColorBackground =
-            SplitAttributes.Builder().setAnimationParams(animationParamsWithColorBackground).build()
-        val defaultAnimationParams = EmbeddingAnimationParams.Builder().build()
-        val splitAttributesWithDefaultBackground =
-            SplitAttributes.Builder().setAnimationParams(defaultAnimationParams).build()
+        val splitAttributesWithDefaultBackground = SplitAttributes.Builder().build()
 
         val extensionsColorBackground =
             OEMEmbeddingAnimationBackground.createColorBackground(Color.BLUE)
@@ -443,19 +377,20 @@
     }
 
     @Test
-    @Suppress("DEPRECATION")
     fun testTranslateAnimationBackgroundBeforeApiLevel5() {
         WindowTestUtils.assumeAtLeastWindowExtensionVersion(2)
         WindowTestUtils.assumeBeforeWindowExtensionVersion(5)
 
         val colorBackground = EmbeddingAnimationBackground.createColorBackground(Color.BLUE)
-        val animationParamsWithColorBackground =
-            EmbeddingAnimationParams.Builder().setAnimationBackground(colorBackground).build()
         val splitAttributesWithColorBackground =
-            SplitAttributes.Builder().setAnimationParams(animationParamsWithColorBackground).build()
-        val defaultAnimationParams = EmbeddingAnimationParams.Builder().build()
-        val splitAttributesWithDefaultBackground =
-            SplitAttributes.Builder().setAnimationParams(defaultAnimationParams).build()
+            SplitAttributes.Builder()
+                .setAnimationParams(
+                    EmbeddingAnimationParams.Builder()
+                        .setAnimationBackground(colorBackground)
+                        .build()
+                )
+                .build()
+        val splitAttributesWithDefaultBackground = SplitAttributes.Builder().build()
 
         // No difference after translate before API level 5
         assertEquals(
@@ -464,81 +399,6 @@
         )
     }
 
-    @Test
-    fun testTranslateAnimationSpecWithApiLevel7() {
-        WindowTestUtils.assumeAtLeastWindowExtensionVersion(7)
-
-        val animationParamsWithJumpCut =
-            EmbeddingAnimationParams.Builder()
-                .setOpenAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                .setCloseAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                .build()
-        val splitAttributesWithJumpCutAnimationParams =
-            SplitAttributes.Builder().setAnimationParams(animationParamsWithJumpCut).build()
-        val defaultAnimationParams = EmbeddingAnimationParams.Builder().build()
-        val splitAttributesWithDefaultAnimationParams =
-            SplitAttributes.Builder().setAnimationParams(defaultAnimationParams).build()
-
-        val extensionsAnimationParamsWithJumpCut =
-            OEMEmbeddingAnimationParams.Builder()
-                .setOpenAnimationResId(Resources.ID_NULL)
-                .setCloseAnimationResId(Resources.ID_NULL)
-                .setChangeAnimationResId(Resources.ID_NULL)
-                .build()
-        val extensionsSplitAttributesWithJumpCutAnimationParams =
-            OEMSplitAttributes.Builder()
-                .setAnimationParams(extensionsAnimationParamsWithJumpCut)
-                .build()
-        val oemDefaultAnimationParams = OEMEmbeddingAnimationParams.Builder().build()
-        val extensionsSplitAttributesWithDefaultAnimationParams =
-            OEMSplitAttributes.Builder().setAnimationParams(oemDefaultAnimationParams).build()
-
-        // Translate from Window to Extensions
-        assertEquals(
-            extensionsSplitAttributesWithJumpCutAnimationParams,
-            adapter.translateSplitAttributes(splitAttributesWithJumpCutAnimationParams)
-        )
-        assertEquals(
-            extensionsSplitAttributesWithDefaultAnimationParams,
-            adapter.translateSplitAttributes(splitAttributesWithDefaultAnimationParams)
-        )
-
-        // Translate from Extensions to Window
-        assertEquals(
-            splitAttributesWithJumpCutAnimationParams,
-            adapter.translate(extensionsSplitAttributesWithJumpCutAnimationParams)
-        )
-        assertEquals(
-            splitAttributesWithDefaultAnimationParams,
-            adapter.translate(extensionsSplitAttributesWithDefaultAnimationParams)
-        )
-    }
-
-    @Test
-    fun testTranslateAnimationSpecBeforeApiLevel7() {
-        WindowTestUtils.assumeAtLeastWindowExtensionVersion(2)
-        WindowTestUtils.assumeBeforeWindowExtensionVersion(7)
-
-        val animationParamsWithJumpCut =
-            EmbeddingAnimationParams.Builder()
-                .setOpenAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                .setCloseAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                .build()
-        val splitAttributesWithJumpCutAnimationParams =
-            SplitAttributes.Builder().setAnimationParams(animationParamsWithJumpCut).build()
-        val defaultAnimationParams = EmbeddingAnimationParams.Builder().build()
-        val splitAttributesWithDefaultAnimationParams =
-            SplitAttributes.Builder().setAnimationParams(defaultAnimationParams).build()
-
-        // No difference after translate before API level 7
-        assertEquals(
-            adapter.translateSplitAttributes(splitAttributesWithJumpCutAnimationParams),
-            adapter.translateSplitAttributes(splitAttributesWithDefaultAnimationParams)
-        )
-    }
-
     @OptIn(androidx.window.core.ExperimentalWindowApi::class)
     @Test
     fun testTranslateEmbeddingConfigurationToWindowAttributes() {
@@ -569,65 +429,8 @@
                 .setDividerColor(Color.GRAY)
                 .build()
 
-        assertEquals(
-            oemDividerAttributes,
-            adapter.translateToOemDividerAttributes(dividerAttributes)
-        )
-        assertEquals(
-            dividerAttributes,
-            adapter.translateToJetpackDividerAttributes(oemDividerAttributes)
-        )
-    }
-
-    @Test
-    fun testTranslateDividerAttributes_dragToFullscreen() {
-        WindowTestUtils.assumeAtLeastWindowExtensionVersion(7)
-        val dividerAttributes =
-            DraggableDividerAttributes.Builder()
-                .setWidthDp(20)
-                .setDragRange(SplitRatioDragRange(0.3f, 0.7f))
-                .setColor(Color.GRAY)
-                .setDraggingToFullscreenAllowed(true)
-                .build()
-        val oemDividerAttributes =
-            OEMDividerAttributes.Builder(OEMDividerAttributes.DIVIDER_TYPE_DRAGGABLE)
-                .setWidthDp(20)
-                .setPrimaryMinRatio(0.3f)
-                .setPrimaryMaxRatio(0.7f)
-                .setDividerColor(Color.GRAY)
-                .setDraggingToFullscreenAllowed(true)
-                .build()
-
-        val dividerAttributes2 =
-            DraggableDividerAttributes.Builder()
-                .setWidthDp(20)
-                .setDragRange(SplitRatioDragRange(0.3f, 0.7f))
-                .setColor(Color.GRAY)
-                .build()
-        val oemDividerAttributes2 =
-            OEMDividerAttributes.Builder(OEMDividerAttributes.DIVIDER_TYPE_DRAGGABLE)
-                .setWidthDp(20)
-                .setPrimaryMinRatio(0.3f)
-                .setPrimaryMaxRatio(0.7f)
-                .setDividerColor(Color.GRAY)
-                .build()
-
-        assertEquals(
-            oemDividerAttributes,
-            adapter.translateToOemDividerAttributes(dividerAttributes)
-        )
-        assertEquals(
-            dividerAttributes,
-            adapter.translateToJetpackDividerAttributes(oemDividerAttributes)
-        )
-        assertEquals(
-            oemDividerAttributes2,
-            adapter.translateToOemDividerAttributes(dividerAttributes2)
-        )
-        assertEquals(
-            dividerAttributes2,
-            adapter.translateToJetpackDividerAttributes(oemDividerAttributes2)
-        )
+        assertEquals(oemDividerAttributes, adapter.translateDividerAttributes(dividerAttributes))
+        assertEquals(dividerAttributes, adapter.translateDividerAttributes(oemDividerAttributes))
     }
 
     @Test
@@ -641,14 +444,8 @@
                 .setDividerColor(Color.GRAY)
                 .build()
 
-        assertEquals(
-            oemDividerAttributes,
-            adapter.translateToOemDividerAttributes(dividerAttributes)
-        )
-        assertEquals(
-            dividerAttributes,
-            adapter.translateToJetpackDividerAttributes(oemDividerAttributes)
-        )
+        assertEquals(oemDividerAttributes, adapter.translateDividerAttributes(dividerAttributes))
+        assertEquals(dividerAttributes, adapter.translateDividerAttributes(oemDividerAttributes))
     }
 
     @Test
@@ -664,14 +461,8 @@
                 .setDividerColor(Color.GRAY)
                 .build()
 
-        assertEquals(
-            oemDividerAttributes,
-            adapter.translateToOemDividerAttributes(dividerAttributes),
-        )
-        assertEquals(
-            dividerAttributes,
-            adapter.translateToJetpackDividerAttributes(oemDividerAttributes),
-        )
+        assertEquals(oemDividerAttributes, adapter.translateDividerAttributes(dividerAttributes))
+        assertEquals(dividerAttributes, adapter.translateDividerAttributes(oemDividerAttributes))
     }
 
     @Test
@@ -688,10 +479,7 @@
                 .setDividerColor(Color.GRAY)
                 .build()
 
-        assertEquals(
-            oemDividerAttributes,
-            adapter.translateToOemDividerAttributes(dividerAttributes),
-        )
+        assertEquals(oemDividerAttributes, adapter.translateDividerAttributes(dividerAttributes))
     }
 
     @Test
@@ -700,33 +488,8 @@
         val dividerAttributes = DividerAttributes.NO_DIVIDER
         val oemDividerAttributes = null
 
-        assertEquals(
-            oemDividerAttributes,
-            adapter.translateToOemDividerAttributes(dividerAttributes)
-        )
-        assertEquals(
-            dividerAttributes,
-            adapter.translateToJetpackDividerAttributes(oemDividerAttributes)
-        )
-    }
-
-    @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-    @Test
-    fun testAutoGeneratedTag_removedFromSplitAttributesCalculatorParams() {
-        assumeTrue(Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
-
-        val oemCalculatorParams =
-            mock<OEMSplitAttributesCalculatorParams>().apply {
-                whenever(parentWindowMetrics)
-                    .thenReturn(WindowMetrics(Rect(), WindowInsets.Builder().build(), 320F))
-                whenever(parentConfiguration).thenReturn(Configuration())
-                whenever(parentWindowLayoutInfo).thenReturn(mock<WindowLayoutInfo>())
-                whenever(defaultSplitAttributes).thenReturn(OEMSplitAttributes.Builder().build())
-                whenever(areDefaultConstraintsSatisfied()).thenReturn(true)
-                whenever(splitRuleTag).thenReturn(EmbeddingAdapter.RULE_TAG_PREFIX + "0001")
-            }
-
-        assertEquals(null, adapter.translate(oemCalculatorParams).splitRuleTag)
+        assertEquals(oemDividerAttributes, adapter.translateDividerAttributes(dividerAttributes))
+        assertEquals(dividerAttributes, adapter.translateDividerAttributes(oemDividerAttributes))
     }
 
     private fun createTestOEMSplitInfo(
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/RuleParserTests.kt b/window/window/src/androidTest/java/androidx/window/embedding/RuleParserTests.kt
index 67970ff..bf5b019 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/RuleParserTests.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/RuleParserTests.kt
@@ -143,9 +143,6 @@
                         .setAnimationBackground(
                             EmbeddingAnimationBackground.createColorBackground(Color.BLUE)
                         )
-                        .setOpenAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                        .setCloseAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                        .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
@@ -189,7 +186,6 @@
             DividerAttributes.DraggableDividerAttributes.Builder()
                 .setWidthDp(1)
                 .setColor(expectedDividerColor.toInt())
-                .setDraggingToFullscreenAllowed(true)
                 .setDragRange(DividerAttributes.DragRange.SplitRatioDragRange(0.2f, 0.8f))
                 .build()
 
@@ -324,9 +320,6 @@
                                 application.resources.getColor(R.color.testColor, null)
                             )
                         )
-                        .setOpenAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                        .setCloseAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
-                        .setChangeAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
diff --git a/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt b/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
index cea283c..42e58df 100644
--- a/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/embedding/SafeActivityEmbeddingComponentProviderTest.kt
@@ -69,8 +69,6 @@
                     in 3..4 -> assertTrue(safeProvider.hasValidVendorApiLevel3())
                     5 -> assertTrue(safeProvider.hasValidVendorApiLevel5())
                     6 -> assertTrue(safeProvider.hasValidVendorApiLevel6())
-                    7 -> assertTrue(safeProvider.hasValidVendorApiLevel7())
-                    8 -> assertTrue(safeProvider.hasValidVendorApiLevel8())
                 }
             }
         } catch (e: UnsupportedOperationException) {
diff --git a/window/window/src/androidTest/java/androidx/window/layout/WindowInfoTrackerImplTest.kt b/window/window/src/androidTest/java/androidx/window/layout/WindowInfoTrackerImplTest.kt
index 1b6ee44..30c985d 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/WindowInfoTrackerImplTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/WindowInfoTrackerImplTest.kt
@@ -29,9 +29,6 @@
 import androidx.window.WindowTestUtils
 import androidx.window.WindowTestUtils.Companion.assumeAtLeastWindowExtensionVersion
 import androidx.window.WindowTestUtils.Companion.assumeBeforeWindowExtensionVersion
-import androidx.window.core.Bounds
-import androidx.window.layout.FoldingFeature.State.Companion.FLAT
-import androidx.window.layout.HardwareFoldingFeature.Type.Companion.HINGE
 import androidx.window.layout.adapter.WindowBackend
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.TruthJUnit.assume
@@ -182,61 +179,8 @@
         }
     }
 
-    @Test
-    fun testGetCurrentWindowLayoutInfo_throwsBeforeApi9() {
-        assumeBeforeWindowExtensionVersion(9)
-        activityScenario.scenario.onActivity { testActivity ->
-            assertFailsWith<UnsupportedOperationException> {
-                tracker.getCurrentWindowLayoutInfo(testActivity)
-            }
-        }
-    }
-
-    @Test
-    fun testGetCurrentWindowLayoutInfo_nonUiContext_throwsError() {
-        assumeAtLeastWindowExtensionVersion(9)
-        val context: Context = ApplicationProvider.getApplicationContext()
-        val tracker = WindowInfoTracker.getOrCreate(context)
-
-        assertFailsWith<IllegalArgumentException> { tracker.getCurrentWindowLayoutInfo(context) }
-    }
-
-    @Test
-    fun testGetCurrentWindowLayoutInfo_activityAsContext() {
-        assumeAtLeastWindowExtensionVersion(9)
-        activityScenario.scenario.onActivity { testActivity ->
-            val displayFeature: DisplayFeature =
-                HardwareFoldingFeature(Bounds(0, 0, 100, 200), HINGE, FLAT)
-            val currentWindowLayoutInfo = WindowLayoutInfo(listOf(displayFeature))
-            val fakeBackend = FakeWindowBackend(currentWindowLayoutInfo = currentWindowLayoutInfo)
-            val tracker =
-                WindowInfoTrackerImpl(windowMetricsCalculator, fakeBackend, windowSdkExtensions)
-
-            assertThat(tracker.getCurrentWindowLayoutInfo(testActivity))
-                .isEqualTo(currentWindowLayoutInfo)
-        }
-    }
-
-    @Test
-    @RequiresApi(Build.VERSION_CODES.R)
-    fun testGetCurrentWindowLayoutInfo_overlayWindowAsContext() {
-        assume().that(Build.VERSION.SDK_INT).isAtLeast(Build.VERSION_CODES.R)
-        assumeAtLeastWindowExtensionVersion(9)
-        val displayFeature: DisplayFeature =
-            HardwareFoldingFeature(Bounds(0, 0, 100, 200), HINGE, FLAT)
-        val currentWindowLayoutInfo = WindowLayoutInfo(listOf(displayFeature))
-        val fakeBackend = FakeWindowBackend(currentWindowLayoutInfo = currentWindowLayoutInfo)
-        val tracker =
-            WindowInfoTrackerImpl(windowMetricsCalculator, fakeBackend, windowSdkExtensions)
-        val windowContext = WindowTestUtils.createOverlayWindowContext()
-
-        assertThat(tracker.getCurrentWindowLayoutInfo(windowContext))
-            .isEqualTo(currentWindowLayoutInfo)
-    }
-
     private class FakeWindowBackend(
-        override val supportedPostures: List<SupportedPosture> = emptyList(),
-        val currentWindowLayoutInfo: WindowLayoutInfo = WindowLayoutInfo(emptyList()),
+        override val supportedPostures: List<SupportedPosture> = emptyList()
     ) : WindowBackend {
         val consumers = mutableMapOf<Consumer<WindowLayoutInfo>, Executor>()
 
@@ -255,7 +199,5 @@
         override fun unregisterLayoutChangeCallback(callback: Consumer<WindowLayoutInfo>) {
             consumers.remove(callback)
         }
-
-        override fun getCurrentWindowLayoutInfo(context: Context) = currentWindowLayoutInfo
     }
 }
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendTest.kt
index 63885e9..e4f0e55 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendTest.kt
@@ -679,51 +679,6 @@
         assertEquals(listOf(SupportedPosture.TABLETOP), actual)
     }
 
-    @Test
-    fun testGetCurrentWindowLayoutInfo_throwsBeforeApi9() {
-        assumeBeforeWindowExtensionVersion(9)
-        val component = FakeWindowComponent()
-        val backend = ExtensionWindowBackend.newInstance(component, consumerAdapter)
-
-        activityScenario.scenario.onActivity { activity ->
-            assertThrows(UnsupportedOperationException::class.java) {
-                backend.getCurrentWindowLayoutInfo(activity)
-            }
-        }
-    }
-
-    @Test
-    fun testGetCurrentWindowLayoutInfo_activityContext_returnsWindowLayoutInfo() {
-        assumeAtLeastWindowExtensionVersion(9)
-        activityScenario.scenario.onActivity { activity ->
-            val windowLayoutInfoFromActivity = newTestOEMWindowLayoutInfo(activity)
-            val expected = translate(activity, windowLayoutInfoFromActivity)
-            val component =
-                FakeWindowComponent(currentWindowLayoutInfo = windowLayoutInfoFromActivity)
-            val backend = ExtensionWindowBackend.newInstance(component, consumerAdapter)
-
-            val actual = backend.getCurrentWindowLayoutInfo(activity)
-
-            assertEquals(expected, actual)
-        }
-    }
-
-    @Test
-    @RequiresApi(Build.VERSION_CODES.R)
-    fun testGetCurrentWindowLayoutInfo_overlayWindowContext_returnsWindowLayoutInfo() {
-        assumeTrue(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
-        assumeAtLeastWindowExtensionVersion(9)
-        val windowContext = WindowTestUtils.createOverlayWindowContext()
-        val windowLayoutInfoFromContext = newTestOEMWindowLayoutInfo(windowContext)
-        val expected = translate(windowContext, windowLayoutInfoFromContext)
-        val component = FakeWindowComponent(currentWindowLayoutInfo = windowLayoutInfoFromContext)
-        val backend = ExtensionWindowBackend.newInstance(component, consumerAdapter)
-
-        val actual = backend.getCurrentWindowLayoutInfo(windowContext)
-
-        assertEquals(expected, actual)
-    }
-
     internal companion object {
         private fun newTestOEMWindowLayoutInfo(activity: Activity): OEMWindowLayoutInfo {
             val bounds =
@@ -776,10 +731,8 @@
         }
     }
 
-    private class FakeWindowComponent(
-        private val windowFeatures: SupportedWindowFeatures? = null,
-        private val currentWindowLayoutInfo: OEMWindowLayoutInfo = OEMWindowLayoutInfo(emptyList()),
-    ) : WindowLayoutComponent {
+    private class FakeWindowComponent(private val windowFeatures: SupportedWindowFeatures? = null) :
+        WindowLayoutComponent {
 
         val consumers = mutableListOf<JavaConsumer<OEMWindowLayoutInfo>>()
         val oemConsumers = mutableListOf<OEMConsumer<OEMWindowLayoutInfo>>()
@@ -814,10 +767,6 @@
                 )
         }
 
-        override fun getCurrentWindowLayoutInfo(context: Context): OEMWindowLayoutInfo {
-            return currentWindowLayoutInfo
-        }
-
         @SuppressLint("NewApi")
         fun emit(info: OEMWindowLayoutInfo) {
             if (ExtensionsUtil.safeVendorApiLevel < 2) {
diff --git a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt
index 886098a..8daf9752 100644
--- a/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt
+++ b/window/window/src/androidTest/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackendTest.kt
@@ -205,13 +205,6 @@
         backend.supportedPostures
     }
 
-    @Test(expected = UnsupportedOperationException::class)
-    fun testGetCurrentWindowLayoutInfo_throws() {
-        val interfaceCompat = SwitchOnUnregisterExtensionInterfaceCompat()
-        val backend = SidecarWindowBackend(interfaceCompat)
-        backend.getCurrentWindowLayoutInfo(context)
-    }
-
     internal companion object {
         private fun newTestWindowLayoutInfo(): WindowLayoutInfo {
             val feature1: DisplayFeature = HardwareFoldingFeature(Bounds(0, 2, 3, 4), HINGE, FLAT)
diff --git a/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider.xml b/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider.xml
index 34af511..cf01e39 100644
--- a/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider.xml
+++ b/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider.xml
@@ -49,7 +49,6 @@
             window:embeddingDividerColor="#112233"
             window:embeddingDividerWidthDp="1"
             window:dragRangeMinRatio="0.2"
-            window:dragRangeMaxRatio="0.8"
-            window:isDraggingToFullscreenAllowed="true" />
+            window:dragRangeMaxRatio="0.8" />
     </SplitPairRule>
 </resources>
\ No newline at end of file
diff --git a/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider_error.xml b/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider_error.xml
index f2ef599..468cd2a 100644
--- a/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider_error.xml
+++ b/window/window/src/androidTest/res/xml/test_split_config_custom_split_pair_rule_with_divider_error.xml
@@ -24,7 +24,6 @@
         <DividerAttributes
             window:embeddingDividerType="fixed"
             window:dragRangeMinRatio="0.2"
-            window:dragRangeMaxRatio="0.8"
-            window:isDraggingToFullscreenAllowed="true" />
+            window:dragRangeMaxRatio="0.8" />
     </SplitPairRule>
 </resources>
\ No newline at end of file
diff --git a/window/window/src/androidTest/res/xml/test_split_config_split_pair_rule_horizontal_layout.xml b/window/window/src/androidTest/res/xml/test_split_config_split_pair_rule_horizontal_layout.xml
index 8778c51..5e75a12 100644
--- a/window/window/src/androidTest/res/xml/test_split_config_split_pair_rule_horizontal_layout.xml
+++ b/window/window/src/androidTest/res/xml/test_split_config_split_pair_rule_horizontal_layout.xml
@@ -23,10 +23,7 @@
         window:splitMinHeightDp="600"
         window:splitMinSmallestWidthDp="0"
         window:splitLayoutDirection="topToBottom"
-        window:animationBackgroundColor="#0000FF"
-        window:splitOpenAnimation="jumpCut"
-        window:splitCloseAnimation="jumpCut"
-        window:splitChangeAnimation="jumpCut">
+        window:animationBackgroundColor="#0000FF">
         <SplitPairFilter
             window:primaryActivityName="A"
             window:secondaryActivityName="B"/>
diff --git a/window/window/src/androidTest/res/xml/test_split_config_split_placeholder_horizontal_layout.xml b/window/window/src/androidTest/res/xml/test_split_config_split_placeholder_horizontal_layout.xml
index ac79a56..df0871f 100644
--- a/window/window/src/androidTest/res/xml/test_split_config_split_placeholder_horizontal_layout.xml
+++ b/window/window/src/androidTest/res/xml/test_split_config_split_placeholder_horizontal_layout.xml
@@ -24,10 +24,7 @@
         window:splitMinHeightDp="600"
         window:splitMinSmallestWidthDp="0"
         window:splitLayoutDirection="bottomToTop"
-        window:animationBackgroundColor="@color/testColor"
-        window:splitOpenAnimation="jumpCut"
-        window:splitCloseAnimation="jumpCut"
-        window:splitChangeAnimation="jumpCut">
+        window:animationBackgroundColor="@color/testColor">
         <ActivityFilter
             window:activityName="androidx.window.sample.embedding.SplitActivityList"/>
     </SplitPlaceholderRule>
diff --git a/window/window/src/main/java/androidx/window/embedding/DividerAttributes.kt b/window/window/src/main/java/androidx/window/embedding/DividerAttributes.kt
index e4ea800..78e46e52 100644
--- a/window/window/src/main/java/androidx/window/embedding/DividerAttributes.kt
+++ b/window/window/src/main/java/androidx/window/embedding/DividerAttributes.kt
@@ -133,10 +133,6 @@
      * @property dragRange the range that a divider is allowed to be dragged. When the user drags
      *   the divider beyond this range, the system will choose to either fully expand the container
      *   or move the divider back into the range.
-     * @property isDraggingToFullscreenAllowed if `true`, the user is allowed to drag beyond the
-     *   specified range temporarily, and when dragging is finished, the system will choose to
-     *   either fully expand the larger container or move the divider back to the range limit.
-     *   Default to `false`.
      * @see SplitAttributes.Builder.setDividerAttributes
      */
     class DraggableDividerAttributes
@@ -145,29 +141,22 @@
         @IntRange(from = WIDTH_SYSTEM_DEFAULT.toLong()) widthDp: Int = WIDTH_SYSTEM_DEFAULT,
         @ColorInt color: Int = COLOR_SYSTEM_DEFAULT,
         val dragRange: DragRange = DragRange.DRAG_RANGE_SYSTEM_DEFAULT,
-        val isDraggingToFullscreenAllowed: Boolean = false,
     ) : DividerAttributes(widthDp, color) {
 
         override fun equals(other: Any?): Boolean {
             if (this === other) return true
             if (other !is DraggableDividerAttributes) return false
-            return widthDp == other.widthDp &&
-                color == other.color &&
-                dragRange == other.dragRange &&
-                isDraggingToFullscreenAllowed == other.isDraggingToFullscreenAllowed
+            return widthDp == other.widthDp && color == other.color && dragRange == other.dragRange
         }
 
-        override fun hashCode(): Int =
-            (((widthDp * 31 + color) * 31 + dragRange.hashCode()) * 31 +
-                isDraggingToFullscreenAllowed.hashCode())
+        override fun hashCode(): Int = (widthDp * 31 + color) * 31 + dragRange.hashCode()
 
         override fun toString(): String =
-            DraggableDividerAttributes::class.java.simpleName +
+            DividerAttributes::class.java.simpleName +
                 "{" +
                 "width=$widthDp, " +
                 "color=$color, " +
-                "primaryContainerDragRange=$dragRange, " +
-                "isDraggingToFullscreenAllowed=$isDraggingToFullscreenAllowed" +
+                "primaryContainerDragRange=$dragRange" +
                 "}"
 
         /**
@@ -184,8 +173,6 @@
 
             private var dragRange: DragRange = DragRange.DRAG_RANGE_SYSTEM_DEFAULT
 
-            private var isDraggingToFullscreenAllowed: Boolean = false
-
             /**
              * The [DraggableDividerAttributes] builder constructor initialized by an existing
              * [DraggableDividerAttributes].
@@ -197,7 +184,6 @@
                 widthDp = original.widthDp
                 dragRange = original.dragRange
                 color = original.color
-                isDraggingToFullscreenAllowed = original.isDraggingToFullscreenAllowed
             }
 
             /**
@@ -243,34 +229,6 @@
             @RequiresWindowSdkExtension(6)
             fun setDragRange(dragRange: DragRange): Builder = apply { this.dragRange = dragRange }
 
-            /**
-             * Sets whether dragging to full screen is allowed.
-             *
-             * If `true`, the user is allowed to drag beyond the specified range temporarily. When
-             * dragging is finished, if the dragging position is below the
-             * [DragRange.SplitRatioDragRange.minRatio] or the default min ratio in
-             * [DragRange.DRAG_RANGE_SYSTEM_DEFAULT], the system will choose to either fully expand
-             * the secondary container or move the divider back to the range limit; if the dragging
-             * position is above the [DragRange.SplitRatioDragRange.maxRatio] or the default max
-             * ratio in [DragRange.DRAG_RANGE_SYSTEM_DEFAULT], the system will choose to either
-             * fully expand the primary container or move the divider back to the range limit.
-             *
-             * When the primary container is fully expanded, the secondary container is dismissed.
-             * When the secondary container is fully expanded, the primary container is hidden
-             * behind the secondary container, and the drag handle is displayed on the edge to allow
-             * the user to drag and bring back the primary container.
-             *
-             * Default to `false`.
-             *
-             * This is only supported on devices with Window SDK extensions version 7 and above. For
-             * devices with Window SDK extensions below version 7, dragging to fullscreen is always
-             * disabled.
-             */
-            @RequiresWindowSdkExtension(7)
-            fun setDraggingToFullscreenAllowed(allowed: Boolean): Builder = apply {
-                this.isDraggingToFullscreenAllowed = allowed
-            }
-
             /** Builds a [DividerAttributes] instance. */
             @RequiresWindowSdkExtension(6)
             fun build(): DraggableDividerAttributes =
@@ -278,7 +236,6 @@
                     widthDp = widthDp,
                     color = color,
                     dragRange = dragRange,
-                    isDraggingToFullscreenAllowed = isDraggingToFullscreenAllowed,
                 )
         }
     }
@@ -370,9 +327,6 @@
         val NO_DIVIDER =
             object : DividerAttributes() {
                 override fun toString(): String = "NO_DIVIDER"
-
-                // Override #hashCode to return consistent value every time.
-                @Suppress("EqualsAndHashCode") override fun hashCode(): Int = toString().hashCode()
             }
 
         /** Specifies a fixed divider. Used by the XML rule parser and must match attrs.xml. */
@@ -394,17 +348,13 @@
             color: Int,
             dragRangeMinRatio: Float,
             dragRangeMaxRatio: Float,
-            isDraggingToFullscreenAllowed: Boolean,
         ): DividerAttributes {
             return when (type) {
                 TYPE_VALUE_FIXED ->
                     FixedDividerAttributes.Builder().setWidthDp(widthDp).setColor(color).build()
                 TYPE_VALUE_DRAGGABLE -> {
                     val builder =
-                        DraggableDividerAttributes.Builder()
-                            .setWidthDp(widthDp)
-                            .setColor(color)
-                            .setDraggingToFullscreenAllowed(isDraggingToFullscreenAllowed)
+                        DraggableDividerAttributes.Builder().setWidthDp(widthDp).setColor(color)
                     if (
                         dragRangeMinRatio == DRAG_RANGE_VALUE_UNSPECIFIED ||
                             dragRangeMaxRatio == DRAG_RANGE_VALUE_UNSPECIFIED
@@ -427,7 +377,6 @@
             type: Int,
             hasDragRangeMinRatio: Boolean,
             hasDragRangeMaxRatio: Boolean,
-            hasIsDraggingToFullscreenAllowed: Boolean,
         ) {
             if (type == TYPE_VALUE_DRAGGABLE) {
                 return
@@ -442,11 +391,6 @@
                     "Fixed divider does not allow attribute dragRangeMaxRatio!"
                 )
             }
-            if (hasIsDraggingToFullscreenAllowed) {
-                throw IllegalArgumentException(
-                    "Fixed divider does not allow attribute isDraggingToFullscreenAllowed!"
-                )
-            }
         }
 
         private fun validateWidth(widthDp: Int) = run {
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
index 33eb587..c700fdc 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingAdapter.kt
@@ -20,7 +20,6 @@
 import android.app.Activity
 import android.content.Context
 import android.content.Intent
-import android.content.res.Resources
 import android.os.Binder
 import android.util.LayoutDirection
 import android.util.Log
@@ -51,7 +50,6 @@
 import androidx.window.extensions.embedding.ActivityRule.Builder as ActivityRuleBuilder
 import androidx.window.extensions.embedding.ActivityStack as OEMActivityStack
 import androidx.window.extensions.embedding.AnimationBackground as OEMEmbeddingAnimationBackground
-import androidx.window.extensions.embedding.AnimationParams as OEMEmbeddingAnimationParams
 import androidx.window.extensions.embedding.DividerAttributes as OEMDividerAttributes
 import androidx.window.extensions.embedding.DividerAttributes.RATIO_SYSTEM_DEFAULT
 import androidx.window.extensions.embedding.EmbeddingRule as OEMEmbeddingRule
@@ -121,7 +119,6 @@
     internal fun translate(activityStacks: List<OEMActivityStack>): List<ActivityStack> =
         activityStacks.map(this::translate)
 
-    @Suppress("DEPRECATION") // To compat with device with extension versions 5 and 6.
     internal fun translate(splitAttributes: OEMSplitAttributes): SplitAttributes {
         val builder =
             SplitAttributes.Builder()
@@ -146,44 +143,25 @@
                             )
                     }
                 )
-        if (extensionVersion in 5..6) {
-            val animationParams =
-                EmbeddingAnimationParams.Builder()
-                    .setAnimationBackground(
-                        translateToJetpackAnimationBackground(splitAttributes.animationBackground)
-                    )
-                    .build()
-            builder.setAnimationParams(animationParams)
-        }
-        if (extensionVersion >= 7) {
-            val animationParams =
-                EmbeddingAnimationParams.Builder()
-                    .setAnimationBackground(
-                        translateToJetpackAnimationBackground(
-                            splitAttributes.animationParams.animationBackground
+        if (extensionVersion >= 5) {
+            val animationBackground = splitAttributes.animationBackground
+            builder.setAnimationParams(
+                if (animationBackground is OEMEmbeddingAnimationBackground.ColorBackground) {
+                    EmbeddingAnimationParams.Builder()
+                        .setAnimationBackground(
+                            EmbeddingAnimationBackground.createColorBackground(
+                                animationBackground.color
+                            )
                         )
-                    )
-                    .setOpenAnimation(
-                        translateToJetpackAnimationSpec(
-                            splitAttributes.animationParams.openAnimationResId
-                        )
-                    )
-                    .setCloseAnimation(
-                        translateToJetpackAnimationSpec(
-                            splitAttributes.animationParams.closeAnimationResId
-                        )
-                    )
-                    .setChangeAnimation(
-                        translateToJetpackAnimationSpec(
-                            splitAttributes.animationParams.changeAnimationResId
-                        )
-                    )
-                    .build()
-            builder.setAnimationParams(animationParams)
+                        .build()
+                } else {
+                    EmbeddingAnimationParams.Builder().build()
+                }
+            )
         }
         if (extensionVersion >= 6) {
             builder.setDividerAttributes(
-                translateToJetpackDividerAttributes(splitAttributes.dividerAttributes)
+                translateDividerAttributes(splitAttributes.dividerAttributes)
             )
         }
         return builder.build()
@@ -232,9 +210,7 @@
         val windowLayoutInfo = params.parentWindowLayoutInfo
         val defaultSplitAttributes = params.defaultSplitAttributes
         val areDefaultConstraintsSatisfied = params.areDefaultConstraintsSatisfied()
-        val splitRuleTag =
-            if (params.splitRuleTag == null || isTagGenerated(params.splitRuleTag!!)) null
-            else params.splitRuleTag
+        val splitRuleTag = params.splitRuleTag
         val density =
             DensityCompatHelper.getInstance().density(taskConfiguration, taskWindowMetrics)
         val windowMetrics =
@@ -294,7 +270,9 @@
                     )
                     .setShouldClearTop(rule.clearTop)
 
-            builder.setTag(tag ?: generateTag(rule))
+            if (tag != null) {
+                builder.setTag(tag)
+            }
             return builder.build()
         }
     }
@@ -313,12 +291,13 @@
             )
         builder.setSticky(splitPinRule.isSticky)
         val tag = splitPinRule.tag
-        builder.setTag(tag ?: generateTag(splitPinRule))
+        if (tag != null) {
+            builder.setTag(tag)
+        }
         return builder.build()
     }
 
     @OptIn(ExperimentalWindowApi::class)
-    @Suppress("DEPRECATION") // To compat with device with extension versions 5 and 6.
     fun translateSplitAttributes(splitAttributes: SplitAttributes): OEMSplitAttributes {
         require(extensionVersion >= 2)
         // To workaround the "unused" error in ktlint. It is necessary to translate SplitAttributes
@@ -340,40 +319,17 @@
                     }
                 )
         if (extensionVersion >= 5) {
-            builder.setWindowAttributes(translateWindowAttributes())
-        }
-        if (extensionVersion in 5..6) {
-            builder.setAnimationBackground(
-                translateToOemAnimationBackground(
-                    splitAttributes.animationParams.animationBackground
+            builder
+                .setWindowAttributes(translateWindowAttributes())
+                .setAnimationBackground(
+                    translateAnimationBackground(
+                        splitAttributes.animationParams.animationBackground
+                    )
                 )
-            )
-        }
-        if (extensionVersion >= 7) {
-            val animationParams =
-                OEMEmbeddingAnimationParams.Builder()
-                    .setAnimationBackground(
-                        translateToOemAnimationBackground(
-                            splitAttributes.animationParams.animationBackground
-                        )
-                    )
-                    .setOpenAnimationResId(
-                        translateToOemAnimationResId(splitAttributes.animationParams.openAnimation)
-                    )
-                    .setCloseAnimationResId(
-                        translateToOemAnimationResId(splitAttributes.animationParams.closeAnimation)
-                    )
-                    .setChangeAnimationResId(
-                        translateToOemAnimationResId(
-                            splitAttributes.animationParams.changeAnimation
-                        )
-                    )
-                    .build()
-            builder.setAnimationParams(animationParams)
         }
         if (extensionVersion >= 6) {
             builder.setDividerAttributes(
-                translateToOemDividerAttributes(splitAttributes.dividerAttributes)
+                translateDividerAttributes(splitAttributes.dividerAttributes)
             )
         }
         return builder.build()
@@ -445,7 +401,9 @@
                     .setFinishPrimaryWithPlaceholder(
                         translateFinishBehavior(rule.finishPrimaryWithPlaceholder)
                     )
-            builder.setTag(tag ?: generateTag(rule))
+            if (tag != null) {
+                builder.setTag(tag)
+            }
             return builder.build()
         }
     }
@@ -477,7 +435,9 @@
                 ActivityRuleBuilder(activityPredicate, intentPredicate)
                     .setShouldAlwaysExpand(rule.alwaysExpand)
             val tag = rule.tag
-            builder.setTag(tag ?: generateTag(rule))
+            if (tag != null) {
+                builder.setTag(tag)
+            }
             return builder.build()
         }
     }
@@ -497,8 +457,7 @@
             .toSet()
     }
 
-    @RequiresWindowSdkExtension(5)
-    private fun translateToOemAnimationBackground(
+    private fun translateAnimationBackground(
         animationBackground: EmbeddingAnimationBackground
     ): OEMEmbeddingAnimationBackground {
         WindowSdkExtensions.getInstance().requireExtensionVersion(5)
@@ -509,46 +468,8 @@
         }
     }
 
-    @RequiresWindowSdkExtension(5)
-    private fun translateToJetpackAnimationBackground(
-        animationBackground: OEMEmbeddingAnimationBackground
-    ): EmbeddingAnimationBackground {
-        WindowSdkExtensions.getInstance().requireExtensionVersion(5)
-        return if (animationBackground is OEMEmbeddingAnimationBackground.ColorBackground) {
-            EmbeddingAnimationBackground.createColorBackground(animationBackground.color)
-        } else {
-            EmbeddingAnimationBackground.DEFAULT
-        }
-    }
-
-    @RequiresWindowSdkExtension(7)
-    private fun translateToOemAnimationResId(
-        animationSpec: EmbeddingAnimationParams.AnimationSpec
-    ): Int {
-        WindowSdkExtensions.getInstance().requireExtensionVersion(7)
-        return if (animationSpec == EmbeddingAnimationParams.AnimationSpec.JUMP_CUT) {
-            Resources.ID_NULL
-        } else {
-            OEMEmbeddingAnimationParams.DEFAULT_ANIMATION_RESOURCES_ID
-        }
-    }
-
-    @RequiresWindowSdkExtension(7)
-    private fun translateToJetpackAnimationSpec(
-        animationResId: Int
-    ): EmbeddingAnimationParams.AnimationSpec {
-        WindowSdkExtensions.getInstance().requireExtensionVersion(7)
-        return if (animationResId == Resources.ID_NULL) {
-            EmbeddingAnimationParams.AnimationSpec.JUMP_CUT
-        } else {
-            EmbeddingAnimationParams.AnimationSpec.DEFAULT
-        }
-    }
-
     @RequiresWindowSdkExtension(6)
-    fun translateToOemDividerAttributes(
-        dividerAttributes: DividerAttributes
-    ): OEMDividerAttributes? {
+    fun translateDividerAttributes(dividerAttributes: DividerAttributes): OEMDividerAttributes? {
         WindowSdkExtensions.getInstance().requireExtensionVersion(6)
         if (dividerAttributes === DividerAttributes.NO_DIVIDER) {
             return null
@@ -566,17 +487,14 @@
                 )
                 .setDividerColor(dividerAttributes.color)
                 .setWidthDp(dividerAttributes.widthDp)
-        if (dividerAttributes is DraggableDividerAttributes) {
-            if (dividerAttributes.dragRange is SplitRatioDragRange) {
-                builder
-                    .setPrimaryMinRatio(dividerAttributes.dragRange.minRatio)
-                    .setPrimaryMaxRatio(dividerAttributes.dragRange.maxRatio)
-            }
-            if (extensionVersion >= 7) {
-                builder.setDraggingToFullscreenAllowed(
-                    dividerAttributes.isDraggingToFullscreenAllowed
-                )
-            }
+
+        if (
+            dividerAttributes is DraggableDividerAttributes &&
+                dividerAttributes.dragRange is SplitRatioDragRange
+        ) {
+            builder
+                .setPrimaryMinRatio(dividerAttributes.dragRange.minRatio)
+                .setPrimaryMaxRatio(dividerAttributes.dragRange.maxRatio)
         }
         if (extensionVersion == 7 && dividerAttributes.widthDp == 0) {
             // A known compatibility issue causes incorrect rendering of 0-width divider in
@@ -587,9 +505,7 @@
     }
 
     @RequiresWindowSdkExtension(6)
-    fun translateToJetpackDividerAttributes(
-        oemDividerAttributes: OEMDividerAttributes?
-    ): DividerAttributes {
+    fun translateDividerAttributes(oemDividerAttributes: OEMDividerAttributes?): DividerAttributes {
         WindowSdkExtensions.getInstance().requireExtensionVersion(6)
         if (oemDividerAttributes == null) {
             return DividerAttributes.NO_DIVIDER
@@ -616,9 +532,6 @@
                                 oemDividerAttributes.primaryMaxRatio,
                             )
                     )
-                    .setDraggingToFullscreenAllowed(
-                        extensionVersion >= 7 && oemDividerAttributes.isDraggingToFullscreenAllowed
-                    )
                     .build()
             // Default to DividerType.FIXED
             else -> {
@@ -836,20 +749,10 @@
     internal companion object {
         private val TAG = EmbeddingAdapter::class.simpleName
 
-        val RULE_TAG_PREFIX = "ae-gen:"
-
         /**
          * The default token of [SplitInfo], which provides compatibility for device prior to vendor
          * API level 3
          */
         val INVALID_SPLIT_INFO_TOKEN = Binder()
-
-        fun generateTag(rule: EmbeddingRule): String =
-            RULE_TAG_PREFIX + Integer.toHexString(rule.hashCode())
-
-        fun isTagGenerated(tag: String): Boolean {
-            val subTag = tag.removePrefix(RULE_TAG_PREFIX)
-            return subTag != tag && subTag.toIntOrNull(16) != null
-        }
     }
 }
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationBackground.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationBackground.kt
index f3ab751..64a354f 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationBackground.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationBackground.kt
@@ -59,9 +59,6 @@
     private class DefaultBackground : EmbeddingAnimationBackground() {
 
         override fun toString() = "DefaultBackground"
-
-        // Override #hashCode to return consistent value every time.
-        @Suppress("EqualsAndHashCode") override fun hashCode() = toString().hashCode()
     }
 
     /** Methods that create various [EmbeddingAnimationBackground]. */
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationParams.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationParams.kt
index 48e6dd3..1495f52 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationParams.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingAnimationParams.kt
@@ -16,9 +16,7 @@
 
 package androidx.window.embedding
 
-import androidx.annotation.IntRange
 import androidx.window.RequiresWindowSdkExtension
-import androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec.Companion.DEFAULT
 
 /**
  * Parameters to be used for window transition animations for embedding activities.
@@ -26,12 +24,6 @@
  * @property animationBackground the animation background to use during the animation of the split
  *   involving this `EmbeddingAnimationParams` object if the animation requires a background. The
  *   default is to use the current theme window background color.
- * @property openAnimation the animation spec to use for open transitions (when starting/entering an
- *   activity or when an activity moves to front).
- * @property closeAnimation the animation spec to use for close transitions (when finishing/exiting
- *   an activity or when an activity moves to back).
- * @property changeAnimation the animation spec to use for change transitions (when an activity
- *   resizes or moves).
  * @see Builder
  * @see SplitAttributes.animationParams
  * @see EmbeddingAnimationBackground
@@ -41,59 +33,7 @@
 class EmbeddingAnimationParams
 private constructor(
     val animationBackground: EmbeddingAnimationBackground = EmbeddingAnimationBackground.DEFAULT,
-    val openAnimation: AnimationSpec = DEFAULT,
-    val closeAnimation: AnimationSpec = DEFAULT,
-    val changeAnimation: AnimationSpec = DEFAULT,
 ) {
-
-    /** The animation to use when an activity transitions (e.g. open, close, or change). */
-    class AnimationSpec
-    private constructor(
-        /**
-         * The unique integer value for the `splitAnimationSpec`. This can be used as an enum value
-         * when defining `splitAnimationSpec` attributes in XML.
-         */
-        internal val value: Int,
-    ) {
-
-        /**
-         * A string representation of this `AnimationSpec`.
-         *
-         * @return the string representation of the object.
-         */
-        override fun toString(): String =
-            when (value) {
-                0 -> "DEFAULT"
-                1 -> "JUMP_CUT"
-                else -> "Unknown value: $value"
-            }
-
-        override fun equals(other: Any?): Boolean {
-            if (other === this) return true
-            if (other !is AnimationSpec) return false
-            return value == other.value
-        }
-
-        override fun hashCode(): Int = value * 31
-
-        /** Properties and methods. */
-        companion object {
-            /** Specifies the default animation defined by the system. */
-            @JvmField val DEFAULT = AnimationSpec(0)
-            /** Specifies an animation with zero duration. */
-            @JvmField val JUMP_CUT = AnimationSpec(1)
-
-            /** Returns `AnimationSpec` with the given integer `value`. */
-            @JvmStatic
-            internal fun getAnimationSpecFromValue(@IntRange(from = 0, to = 1) value: Int) =
-                when (value) {
-                    DEFAULT.value -> DEFAULT
-                    JUMP_CUT.value -> JUMP_CUT
-                    else -> throw IllegalArgumentException("Undefined value:$value")
-                }
-        }
-    }
-
     /**
      * Returns a hash code for this `EmbeddingAnimationParams` object.
      *
@@ -101,9 +41,6 @@
      */
     override fun hashCode(): Int {
         var result = animationBackground.hashCode()
-        result = result * 31 + openAnimation.hashCode()
-        result = result * 31 + closeAnimation.hashCode()
-        result = result * 31 + changeAnimation.hashCode()
         return result
     }
 
@@ -116,10 +53,7 @@
     override fun equals(other: Any?): Boolean {
         if (this === other) return true
         if (other !is EmbeddingAnimationParams) return false
-        return animationBackground == other.animationBackground &&
-            openAnimation == other.openAnimation &&
-            closeAnimation == other.closeAnimation &&
-            changeAnimation == other.changeAnimation
+        return animationBackground == other.animationBackground
     }
 
     /**
@@ -129,15 +63,11 @@
      */
     override fun toString(): String =
         "${EmbeddingAnimationParams::class.java.simpleName}:" +
-            "{animationBackground=$animationBackground, openAnimation=$openAnimation, " +
-            "closeAnimation=$closeAnimation, changeAnimation=$changeAnimation }"
+            "{animationBackground=$animationBackground }"
 
     /** Builder for creating an instance of [EmbeddingAnimationParams]. */
     class Builder {
         private var animationBackground = EmbeddingAnimationBackground.DEFAULT
-        private var openAnimation = DEFAULT
-        private var closeAnimation = DEFAULT
-        private var changeAnimation = DEFAULT
 
         /**
          * Sets the animation background.
@@ -157,59 +87,11 @@
         }
 
         /**
-         * Sets the open animation.
-         *
-         * The default is to use the system animation.
-         *
-         * This can be supported only if the Window Extensions version of the target device is
-         * equals or higher than required API level. Otherwise, it would be no-op.
-         *
-         * @param spec the animation transition spec
-         * @return this `Builder`.
-         */
-        @RequiresWindowSdkExtension(7)
-        fun setOpenAnimation(spec: AnimationSpec): Builder = apply { this.openAnimation = spec }
-
-        /**
-         * Sets the close animation.
-         *
-         * The default is to use the system animation.
-         *
-         * This can be supported only if the Window Extensions version of the target device is
-         * equals or higher than required API level. Otherwise, it would be no-op.
-         *
-         * @param spec the animation transition spec
-         * @return this `Builder`.
-         */
-        @RequiresWindowSdkExtension(7)
-        fun setCloseAnimation(spec: AnimationSpec): Builder = apply { this.closeAnimation = spec }
-
-        /**
-         * Sets the change (resize or move) animation.
-         *
-         * The default is to use the system animation.
-         *
-         * This can be supported only if the Window Extensions version of the target device is
-         * equals or higher than required API level. Otherwise, it would be no-op.
-         *
-         * @param spec the animation spec
-         * @return this `Builder`.
-         */
-        @RequiresWindowSdkExtension(7)
-        fun setChangeAnimation(spec: AnimationSpec): Builder = apply { this.changeAnimation = spec }
-
-        /**
          * Builds an `EmbeddingAnimationParams` instance with the attributes specified by the
          * builder's setters.
          *
          * @return the new `EmbeddingAnimationParams` instance.
          */
-        fun build(): EmbeddingAnimationParams =
-            EmbeddingAnimationParams(
-                animationBackground,
-                openAnimation,
-                closeAnimation,
-                changeAnimation
-            )
+        fun build(): EmbeddingAnimationParams = EmbeddingAnimationParams(animationBackground)
     }
 }
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
index 2abbe2e..eaabe8b 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingCompat.kt
@@ -178,16 +178,6 @@
         adapter.embeddingConfiguration = embeddingConfig
         setDefaultSplitAttributeCalculatorIfNeeded()
 
-        if (windowSdkExtensions.extensionVersion >= 8) {
-            // TODO(b/289875940): remove the try-catch block once handled by the reflection guard
-            try {
-                embeddingExtension.setAutoSaveEmbeddingState(
-                    embeddingConfig.isAutoSaveEmbeddingState
-                )
-            } catch (e: Throwable) {
-                Log.w(TAG, "#setAutoSaveEmbeddingState failed", e)
-            }
-        }
         embeddingExtension.invalidateTopVisibleSplitAttributes()
     }
 
diff --git a/window/window/src/main/java/androidx/window/embedding/EmbeddingConfiguration.kt b/window/window/src/main/java/androidx/window/embedding/EmbeddingConfiguration.kt
index dc22255..0b9402a 100644
--- a/window/window/src/main/java/androidx/window/embedding/EmbeddingConfiguration.kt
+++ b/window/window/src/main/java/androidx/window/embedding/EmbeddingConfiguration.kt
@@ -23,15 +23,11 @@
  * Configurations of Activity Embedding environment that defines how the embedded Activities behave.
  *
  * @property dimAreaBehavior The requested dim area behavior.
- * @property isAutoSaveEmbeddingState Is auto-save embedding state enabled.
  * @see Builder
  * @see ActivityEmbeddingController.setEmbeddingConfiguration
  */
 class EmbeddingConfiguration
-private constructor(
-    val dimAreaBehavior: DimAreaBehavior = DimAreaBehavior.UNDEFINED,
-    val isAutoSaveEmbeddingState: Boolean = false
-) {
+private constructor(val dimAreaBehavior: DimAreaBehavior = DimAreaBehavior.UNDEFINED) {
     /**
      * The area of dimming to apply.
      *
@@ -88,23 +84,18 @@
         if (other !is EmbeddingConfiguration) return false
 
         if (dimAreaBehavior != other.dimAreaBehavior) return false
-        if (isAutoSaveEmbeddingState != other.isAutoSaveEmbeddingState) return false
         return true
     }
 
     override fun hashCode(): Int {
-        var result = dimAreaBehavior.hashCode()
-        result = 31 * result + isAutoSaveEmbeddingState.hashCode()
-        return result
+        return dimAreaBehavior.hashCode()
     }
 
-    override fun toString(): String =
-        "EmbeddingConfiguration{dimArea=$dimAreaBehavior, saveState=$isAutoSaveEmbeddingState}"
+    override fun toString(): String = "EmbeddingConfiguration{$dimAreaBehavior}"
 
     /** Builder for creating an instance of [EmbeddingConfiguration]. */
     class Builder {
         private var mDimAreaBehavior = DimAreaBehavior.UNDEFINED
-        private var mSaveEmbeddingState: Boolean = false
 
         /**
          * Sets the dim area behavior. By default, the [DimAreaBehavior.UNDEFINED] is used if not
@@ -121,35 +112,10 @@
         fun setDimAreaBehavior(area: DimAreaBehavior): Builder = apply { mDimAreaBehavior = area }
 
         /**
-         * Sets whether to auto save the embedding state to the system, which can be used to restore
-         * the app embedding state once the app process is restarted (if applicable).
-         *
-         * The embedding state is not saved by default, in which case the embedding state and the
-         * embedded activities are removed once the app process is killed.
-         *
-         * **Note** that the applications should set the [EmbeddingRule]s using
-         * [RuleController.setRules] when the application is initializing, such as configured in
-         * [androidx.startup.Initializer] or in [android.app.Application.onCreate], in order to
-         * allow the library to restore the state properly. Otherwise, the state may not be restored
-         * and the activities may not be started and layout as expected.
-         *
-         * This can be supported only if the Window Extensions version of the target device is
-         * equals or higher than required API level. Otherwise, it would be no-op on a target device
-         * that has lower API level.
-         *
-         * @param saveState whether to save the embedding state
-         */
-        @RequiresWindowSdkExtension(8)
-        fun setAutoSaveEmbeddingState(saveState: Boolean): Builder = apply {
-            mSaveEmbeddingState = saveState
-        }
-
-        /**
          * Builds a[EmbeddingConfiguration] instance.
          *
          * @return The new [EmbeddingConfiguration] instance.
          */
-        fun build(): EmbeddingConfiguration =
-            EmbeddingConfiguration(mDimAreaBehavior, mSaveEmbeddingState)
+        fun build(): EmbeddingConfiguration = EmbeddingConfiguration(mDimAreaBehavior)
     }
 }
diff --git a/window/window/src/main/java/androidx/window/embedding/RuleParser.kt b/window/window/src/main/java/androidx/window/embedding/RuleParser.kt
index 1ad58a5..43b8c6641 100644
--- a/window/window/src/main/java/androidx/window/embedding/RuleParser.kt
+++ b/window/window/src/main/java/androidx/window/embedding/RuleParser.kt
@@ -28,7 +28,6 @@
 import androidx.window.embedding.DividerAttributes.Companion.TYPE_VALUE_FIXED
 import androidx.window.embedding.DividerAttributes.Companion.WIDTH_SYSTEM_DEFAULT
 import androidx.window.embedding.DividerAttributes.Companion.validateXmlDividerAttributes
-import androidx.window.embedding.EmbeddingAnimationParams.AnimationSpec.Companion.DEFAULT
 import androidx.window.embedding.EmbeddingAspectRatio.Companion.buildAspectRatioFromValue
 import androidx.window.embedding.SplitAttributes.LayoutDirection.Companion.LOCALE
 import androidx.window.embedding.SplitRule.FinishBehavior.Companion.ALWAYS
@@ -205,43 +204,23 @@
             val clearTop = typedArray.getBoolean(R.styleable.SplitPairRule_clearTop, false)
             val animationBackgroundColor =
                 typedArray.getColor(R.styleable.SplitPairRule_animationBackgroundColor, 0)
-            val openAnimation =
-                typedArray.getInt(R.styleable.SplitPairRule_splitOpenAnimation, DEFAULT.value)
-            val closeAnimation =
-                typedArray.getInt(R.styleable.SplitPairRule_splitCloseAnimation, DEFAULT.value)
-            val changeAnimation =
-                typedArray.getInt(R.styleable.SplitPairRule_splitChangeAnimation, DEFAULT.value)
             typedArray.recycle()
 
-            val animationParams =
-                EmbeddingAnimationParams.Builder()
-                    .setAnimationBackground(
-                        EmbeddingAnimationBackground.buildFromValue(animationBackgroundColor)
-                    )
-                    .setOpenAnimation(
-                        EmbeddingAnimationParams.AnimationSpec.getAnimationSpecFromValue(
-                            openAnimation
-                        )
-                    )
-                    .setCloseAnimation(
-                        EmbeddingAnimationParams.AnimationSpec.getAnimationSpecFromValue(
-                            closeAnimation
-                        )
-                    )
-                    .setChangeAnimation(
-                        EmbeddingAnimationParams.AnimationSpec.getAnimationSpecFromValue(
-                            changeAnimation
-                        )
-                    )
-                    .build()
-
             val defaultAttrs =
                 SplitAttributes.Builder()
                     .setSplitType(SplitAttributes.SplitType.buildSplitTypeFromValue(ratio))
                     .setLayoutDirection(
                         SplitAttributes.LayoutDirection.getLayoutDirectionFromValue(layoutDir)
                     )
-                    .setAnimationParams(animationParams)
+                    .setAnimationParams(
+                        EmbeddingAnimationParams.Builder()
+                            .setAnimationBackground(
+                                EmbeddingAnimationBackground.buildFromValue(
+                                    animationBackgroundColor
+                                )
+                            )
+                            .build()
+                    )
                     .build()
 
             SplitPairRule.Builder(emptySet())
@@ -318,52 +297,23 @@
                 )
             val animationBackgroundColor =
                 typedArray.getColor(R.styleable.SplitPlaceholderRule_animationBackgroundColor, 0)
-            val openAnimation =
-                typedArray.getInt(
-                    R.styleable.SplitPlaceholderRule_splitOpenAnimation,
-                    DEFAULT.value
-                )
-            val closeAnimation =
-                typedArray.getInt(
-                    R.styleable.SplitPlaceholderRule_splitCloseAnimation,
-                    DEFAULT.value
-                )
-            val changeAnimation =
-                typedArray.getInt(
-                    R.styleable.SplitPlaceholderRule_splitChangeAnimation,
-                    DEFAULT.value
-                )
             typedArray.recycle()
 
-            val animationParams =
-                EmbeddingAnimationParams.Builder()
-                    .setAnimationBackground(
-                        EmbeddingAnimationBackground.buildFromValue(animationBackgroundColor)
-                    )
-                    .setOpenAnimation(
-                        EmbeddingAnimationParams.AnimationSpec.getAnimationSpecFromValue(
-                            openAnimation
-                        )
-                    )
-                    .setCloseAnimation(
-                        EmbeddingAnimationParams.AnimationSpec.getAnimationSpecFromValue(
-                            closeAnimation
-                        )
-                    )
-                    .setChangeAnimation(
-                        EmbeddingAnimationParams.AnimationSpec.getAnimationSpecFromValue(
-                            changeAnimation
-                        )
-                    )
-                    .build()
-
             val defaultAttrs =
                 SplitAttributes.Builder()
                     .setSplitType(SplitAttributes.SplitType.buildSplitTypeFromValue(ratio))
                     .setLayoutDirection(
                         SplitAttributes.LayoutDirection.getLayoutDirectionFromValue(layoutDir)
                     )
-                    .setAnimationParams(animationParams)
+                    .setAnimationParams(
+                        EmbeddingAnimationParams.Builder()
+                            .setAnimationBackground(
+                                EmbeddingAnimationBackground.buildFromValue(
+                                    animationBackgroundColor
+                                )
+                            )
+                            .build()
+                    )
                     .build()
             val packageName = context.applicationContext.packageName
             val placeholderActivityClassName =
@@ -442,7 +392,6 @@
                 type,
                 hasValue(R.styleable.DividerAttributes_dragRangeMinRatio),
                 hasValue(R.styleable.DividerAttributes_dragRangeMaxRatio),
-                hasValue(R.styleable.DividerAttributes_isDraggingToFullscreenAllowed),
             )
 
             val widthDp =
@@ -459,15 +408,12 @@
                     R.styleable.DividerAttributes_dragRangeMaxRatio,
                     DRAG_RANGE_VALUE_UNSPECIFIED
                 )
-            val isDraggingToFullscreenAllowed =
-                getBoolean(R.styleable.DividerAttributes_isDraggingToFullscreenAllowed, false)
             return@parseDividerAttributes DividerAttributes.createDividerAttributes(
                 type,
                 widthDp,
                 color,
                 dragRangeMinRatio,
                 dragRangeMaxRatio,
-                isDraggingToFullscreenAllowed
             )
         }
     }
diff --git a/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
index 535a255..61492a9 100644
--- a/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SafeActivityEmbeddingComponentProvider.kt
@@ -27,7 +27,6 @@
 import androidx.window.SafeWindowExtensionsProvider
 import androidx.window.WindowSdkExtensions
 import androidx.window.core.ConsumerAdapter
-import androidx.window.embedding.EmbeddingConfiguration.DimAreaBehavior
 import androidx.window.extensions.WindowExtensions
 import androidx.window.extensions.core.util.function.Consumer
 import androidx.window.extensions.core.util.function.Function
@@ -38,7 +37,6 @@
 import androidx.window.extensions.embedding.ActivityStackAttributes
 import androidx.window.extensions.embedding.ActivityStackAttributesCalculatorParams
 import androidx.window.extensions.embedding.AnimationBackground
-import androidx.window.extensions.embedding.AnimationParams
 import androidx.window.extensions.embedding.DividerAttributes
 import androidx.window.extensions.embedding.EmbeddedActivityWindowInfo
 import androidx.window.extensions.embedding.ParentContainerInfo
@@ -94,9 +92,7 @@
             2 -> hasValidVendorApiLevel2()
             in 3..4 -> hasValidVendorApiLevel3() // No additional API in 4.
             5 -> hasValidVendorApiLevel5()
-            6 -> hasValidVendorApiLevel6()
-            7 -> hasValidVendorApiLevel7()
-            in 8..Int.MAX_VALUE -> hasValidVendorApiLevel8()
+            in 6..Int.MAX_VALUE -> hasValidVendorApiLevel6()
             else -> false
         }
     }
@@ -210,7 +206,6 @@
      * - [ActivityStack.Token]
      * - [WindowAttributes]
      * - [SplitInfo.Token]
-     * - [EmbeddingConfiguration.Builder.setDimAreaBehavior]
      */
     @VisibleForTesting
     internal fun hasValidVendorApiLevel5(): Boolean =
@@ -224,8 +219,7 @@
             isClassAnimationBackgroundValid() &&
             isClassActivityStackTokenValid() &&
             isClassWindowAttributesValid() &&
-            isClassSplitInfoTokenValid() &&
-            isClassEmbeddingConfigurationBuilderApi5Valid()
+            isClassSplitInfoTokenValid()
 
     /**
      * Vendor API level 6 includes the following methods:
@@ -251,35 +245,6 @@
             isClassDividerAttributesBuilderValid()
 
     /**
-     * Vendor API level 7 includes the following methods:
-     * - [SplitAttributes.getAnimationParams]
-     * - [SplitAttributes.Builder.setAnimationParams]
-     * - [DividerAttributes.isDraggingToFullscreenAllowed]
-     * - [DividerAttributes.Builder.setDraggingToFullscreenAllowed] and following classes:
-     * - [AnimationParams]
-     * - [AnimationParams.Builder]
-     */
-    @VisibleForTesting
-    internal fun hasValidVendorApiLevel7(): Boolean =
-        hasValidVendorApiLevel6() &&
-            isMethodGetAnimationParamsValid() &&
-            isMethodSetAnimationParamsValid() &&
-            isMethodIsDraggingToFullscreenAllowedValid() &&
-            isMethodSetDraggingToFullscreenAllowedValid() &&
-            isClassAnimationParamsValid() &&
-            isClassAnimationParamsBuilderValid()
-
-    /**
-     * Vendor API level 8 includes the following methods:
-     * - [EmbeddingConfiguration.Builder.setAutoSaveEmbeddingState]
-     */
-    @VisibleForTesting
-    internal fun hasValidVendorApiLevel8(): Boolean =
-        // TODO(b/289875940): adding #isClassEmbeddingConfigurationBuilderApi8Valid() when API
-        //                    finalized.
-        hasValidVendorApiLevel7()
-
-    /**
      * Overlay features includes the following methods:
      * - [ActivityEmbeddingComponent.clearActivityStackAttributesCalculator]
      * - [ActivityEmbeddingComponent.getActivityStackToken]
@@ -862,20 +827,6 @@
             createFromBinder.isPublic && createFromBinder.doesReturn(splitInfoTokenClass)
         }
 
-    private fun isClassEmbeddingConfigurationBuilderApi5Valid(): Boolean =
-        validateReflection("Class EmbeddingConfiguration.Builder is not valid") {
-            val EmbeddingConfigurationBuilderClass = EmbeddingConfiguration.Builder::class.java
-            val setAutoSaveEmbeddingStateMethod =
-                EmbeddingConfigurationBuilderClass.getMethod(
-                    "setDimAreaBehavior",
-                    DimAreaBehavior::class.java
-                )
-            setAutoSaveEmbeddingStateMethod.isPublic &&
-                setAutoSaveEmbeddingStateMethod.doesReturn(
-                    EmbeddingConfiguration.Builder::class.java
-                )
-        }
-
     /** Vendor API level 6 validation methods */
     private fun isMethodGetEmbeddedActivityWindowInfoValid(): Boolean =
         validateReflection(
@@ -999,112 +950,6 @@
                 setDividerColorMethod.doesReturn(DividerAttributes.Builder::class.java)
         }
 
-    /** Vendor API level 7 validation methods */
-    private fun isMethodGetAnimationParamsValid(): Boolean =
-        validateReflection("SplitAttributes#getAnimationParams is not valid") {
-            val splitAttributesClass = SplitAttributes::class.java
-            val getAnimationParamsMethod = splitAttributesClass.getMethod("getAnimationParams")
-            getAnimationParamsMethod.isPublic &&
-                getAnimationParamsMethod.doesReturn(AnimationParams::class.java)
-        }
-
-    private fun isMethodSetAnimationParamsValid(): Boolean =
-        validateReflection("SplitAttributes#setAnimationParams is not valid") {
-            val splitAttributesBuilderClass = SplitAttributes.Builder::class.java
-            val setAnimationParamsMethod =
-                splitAttributesBuilderClass.getMethod(
-                    "setAnimationParams",
-                    AnimationParams::class.java
-                )
-            setAnimationParamsMethod.isPublic &&
-                setAnimationParamsMethod.doesReturn(SplitAttributes.Builder::class.java)
-        }
-
-    private fun isMethodIsDraggingToFullscreenAllowedValid(): Boolean =
-        validateReflection("DividerAttributes#isDraggingToFullscreenAllowed is not valid") {
-            val dividerAttributesClass = DividerAttributes::class.java
-            val getDividerTypeMethod =
-                dividerAttributesClass.getMethod("isDraggingToFullscreenAllowed")
-            getDividerTypeMethod.isPublic && getDividerTypeMethod.doesReturn(Boolean::class.java)
-        }
-
-    private fun isMethodSetDraggingToFullscreenAllowedValid(): Boolean =
-        validateReflection(
-            "DividerAttributes.Builder#setDraggingToFullscreenAllowed is not valid"
-        ) {
-            val dividerAttributesBuilderClass = DividerAttributes.Builder::class.java
-            val setDividerColorMethod =
-                dividerAttributesBuilderClass.getMethod(
-                    "setDraggingToFullscreenAllowed",
-                    Boolean::class.java
-                )
-            setDividerColorMethod.isPublic &&
-                setDividerColorMethod.doesReturn(DividerAttributes.Builder::class.java)
-        }
-
-    private fun isClassAnimationParamsValid(): Boolean =
-        validateReflection("Class AnimationParams is not valid") {
-            val animationParamsClass = AnimationParams::class.java
-            val animationResourcesIdDefaultField =
-                animationParamsClass.getDeclaredField("DEFAULT_ANIMATION_RESOURCES_ID")
-            val getAnimationBackgroundMethod =
-                animationParamsClass.getMethod("getAnimationBackground")
-            val getOpenAnimationResIdMethod =
-                animationParamsClass.getMethod("getOpenAnimationResId")
-            val getCloseAnimationResIdMethod =
-                animationParamsClass.getMethod("getCloseAnimationResId")
-            val getChangeAnimationResIdMethod =
-                animationParamsClass.getMethod("getChangeAnimationResId")
-            animationResourcesIdDefaultField.isPublic &&
-                getAnimationBackgroundMethod.isPublic &&
-                getAnimationBackgroundMethod.doesReturn(AnimationBackground::class.java) &&
-                getOpenAnimationResIdMethod.isPublic &&
-                getOpenAnimationResIdMethod.doesReturn(Int::class.java) &&
-                getCloseAnimationResIdMethod.isPublic &&
-                getCloseAnimationResIdMethod.doesReturn(Int::class.java) &&
-                getChangeAnimationResIdMethod.isPublic &&
-                getChangeAnimationResIdMethod.doesReturn(Int::class.java)
-        }
-
-    private fun isClassAnimationParamsBuilderValid(): Boolean =
-        validateReflection("Class AnimationParams.Builder is not valid") {
-            val animationParamsBuilderClass = AnimationParams.Builder::class.java
-            val setAnimationBackgroundMethod =
-                animationParamsBuilderClass.getMethod(
-                    "setAnimationBackground",
-                    AnimationBackground::class.java
-                )
-            val setOpenAnimationResIdMethod =
-                animationParamsBuilderClass.getMethod("setOpenAnimationResId", Int::class.java)
-            val setCloseAnimationResIdMethod =
-                animationParamsBuilderClass.getMethod("setCloseAnimationResId", Int::class.java)
-            val setChangeAnimationResIdMethod =
-                animationParamsBuilderClass.getMethod("setChangeAnimationResId", Int::class.java)
-            setAnimationBackgroundMethod.isPublic &&
-                setAnimationBackgroundMethod.doesReturn(AnimationParams.Builder::class.java) &&
-                setOpenAnimationResIdMethod.isPublic &&
-                setOpenAnimationResIdMethod.doesReturn(AnimationParams.Builder::class.java) &&
-                setCloseAnimationResIdMethod.isPublic &&
-                setCloseAnimationResIdMethod.doesReturn(AnimationParams.Builder::class.java) &&
-                setChangeAnimationResIdMethod.isPublic &&
-                setChangeAnimationResIdMethod.doesReturn(AnimationParams.Builder::class.java)
-        }
-
-    /** Vendor API level 8 validation methods */
-    private fun isClassEmbeddingConfigurationBuilderApi8Valid(): Boolean =
-        validateReflection("Class EmbeddingConfiguration.Builder is not valid") {
-            val EmbeddingConfigurationBuilderClass = EmbeddingConfiguration.Builder::class.java
-            val setAutoSaveEmbeddingStateMethod =
-                EmbeddingConfigurationBuilderClass.getMethod(
-                    "setAutoSaveEmbeddingState",
-                    Boolean::class.java
-                )
-            setAutoSaveEmbeddingStateMethod.isPublic &&
-                setAutoSaveEmbeddingStateMethod.doesReturn(
-                    EmbeddingConfiguration.Builder::class.java
-                )
-        }
-
     /** Overlay features validation methods */
     private fun isActivityStackGetTagValid(): Boolean =
         validateReflection("ActivityStack#getTag is not valid") {
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt b/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
index 4c28e21..7348fcb 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitAttributes.kt
@@ -54,15 +54,17 @@
  *   the primary and secondary containers.
  * @property layoutDirection The layout direction of the parent window split. The default is based
  *   on locale value.
- * @property animationParams The animation params to specify the animation transitions of the split
+ * @property animationParams The animation params to specify the animation background of the split
  *   involving this `SplitAttributes` object. The default is to use the current theme window
- *   background color and system transitions.
+ *   background color.
  * @property dividerAttributes The [DividerAttributes] for this split. Defaults to
  *   [DividerAttributes.NO_DIVIDER], which means no divider is requested.
  * @see Builder
  * @see SplitAttributes.SplitType
  * @see SplitAttributes.LayoutDirection
- * @see EmbeddingAnimationParams
+ * @see EmbeddingAnimationBackground
+ * @see EmbeddingAnimationBackground.createColorBackground
+ * @see EmbeddingAnimationBackground.DEFAULT
  */
 class SplitAttributes
 private constructor(
@@ -239,17 +241,6 @@
          */
         override fun toString(): String = description
 
-        override fun equals(other: Any?): Boolean {
-            if (other === this) return true
-            if (other !is LayoutDirection) return false
-            return description == other.description && value == other.value
-        }
-
-        override fun hashCode(): Int {
-            var result = description.hashCode()
-            return 31 * result + value
-        }
-
         /** Non-public properties and methods. */
         companion object {
             /**
@@ -384,8 +375,7 @@
      * Builder for creating an instance of [SplitAttributes].
      * - The default split type is an equal split between primary and secondary containers.
      * - The default layout direction is based on locale.
-     * - The default animation params is to use the current theme window background color and system
-     *   transitions.
+     * - The default animation background color is to use the current theme window background color.
      * - The default divider attributes is not to use divider.
      */
     class Builder() {
@@ -398,7 +388,7 @@
         internal constructor(original: SplitAttributes) : this() {
             this.setSplitType(original.splitType)
                 .setLayoutDirection(original.layoutDirection)
-                .setAnimationParams(original.animationParams)
+                .setAnimationParams(animationParams)
                 .setDividerAttributes(original.dividerAttributes)
         }
 
@@ -428,19 +418,20 @@
 
         /**
          * Sets the animation params to use during animation of the split involving this
-         * `SplitAttributes` object if the animation requires a background color or non-default
-         * transitions.
+         * `SplitAttributes` object if the animation requires a background.
+         *
+         * The default is to use the current theme window background color.
          *
          * [EmbeddingAnimationParams] can be supported only if the Window Extensions version of the
          * target device is equals or higher than required API level. Otherwise, it would be no-op
          * when setting the [EmbeddingAnimationParams] on a target device that has lower API level.
          *
-         * @param params the animation params.
-         * @return this `Builder`.
+         * @param params The animation params.
+         * @return This `Builder`.
          */
         @RequiresWindowSdkExtension(5)
         fun setAnimationParams(params: EmbeddingAnimationParams): Builder = apply {
-            this.animationParams = params
+            animationParams = params
         }
 
         /**
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt b/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt
index d37863e..30c5661 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitPlaceholderRule.kt
@@ -326,7 +326,7 @@
         if (other !is SplitPlaceholderRule) return false
         if (!super.equals(other)) return false
 
-        if (!placeholderIntent.filterEquals(other.placeholderIntent)) return false
+        if (placeholderIntent != other.placeholderIntent) return false
         if (isSticky != other.isSticky) return false
         if (finishPrimaryWithPlaceholder != other.finishPrimaryWithPlaceholder) return false
         if (filters != other.filters) return false
@@ -336,7 +336,7 @@
 
     override fun hashCode(): Int {
         var result = super.hashCode()
-        result = 31 * result + placeholderIntent.filterHashCode()
+        result = 31 * result + placeholderIntent.hashCode()
         result = 31 * result + isSticky.hashCode()
         result = 31 * result + finishPrimaryWithPlaceholder.hashCode()
         result = 31 * result + filters.hashCode()
diff --git a/window/window/src/main/java/androidx/window/embedding/SplitRule.kt b/window/window/src/main/java/androidx/window/embedding/SplitRule.kt
index 383aed3..393862c 100644
--- a/window/window/src/main/java/androidx/window/embedding/SplitRule.kt
+++ b/window/window/src/main/java/androidx/window/embedding/SplitRule.kt
@@ -196,13 +196,6 @@
     ) {
         override fun toString(): String = description
 
-        // Override #hashCode to return consistent value every time.
-        @Suppress("EqualsAndHashCode")
-        override fun hashCode(): Int {
-            var result = description.hashCode()
-            return 31 * result + value
-        }
-
         companion object {
             /** Never finish the associated container. */
             @JvmField val NEVER = FinishBehavior("NEVER", 0)
diff --git a/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt b/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt
index 321800b..755b83e 100644
--- a/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt
+++ b/window/window/src/main/java/androidx/window/layout/WindowInfoTracker.kt
@@ -115,29 +115,6 @@
             throw NotImplementedError("Method was not implemented.")
         }
 
-    /**
-     * Returns the current [WindowLayoutInfo] for the given [context].
-     *
-     * This API provides a convenient way to access the current [WindowLayoutInfo]. It can be used
-     * after the [context] associated window has been created, such as [Activity.onCreate]. Calling
-     * it before that will return an empty info.
-     *
-     * For apps that need to update layout UI based on the [WindowLayoutInfo], it should also listen
-     * to [windowLayoutInfo] for any changes later.
-     *
-     * @param context a [UiContext] such as an [Activity], an [InputMethodService], or an instance
-     *   created via [Context.createWindowContext] that listens to configuration changes.
-     * @return the current [WindowLayoutInfo] for the given [context]. If the [context] is not
-     *   associated with a window, returns an empty [WindowLayoutInfo].
-     * @throws UnsupportedOperationException if [WindowSdkExtensions.extensionVersion] is less
-     *   than 9.
-     * @throws IllegalArgumentException when [context] is not an [UiContext].
-     * @throws NotImplementedError when this method has no supporting implementation.
-     */
-    @RequiresWindowSdkExtension(version = 9)
-    fun getCurrentWindowLayoutInfo(@UiContext context: Context): WindowLayoutInfo =
-        throw NotImplementedError("Method was not implemented.")
-
     companion object {
 
         private val DEBUG = false
diff --git a/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt b/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt
index 2397287..d73f44a 100644
--- a/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt
+++ b/window/window/src/main/java/androidx/window/layout/WindowInfoTrackerImpl.kt
@@ -69,9 +69,4 @@
             windowSdkExtensions.requireExtensionVersion(6)
             return windowBackend.supportedPostures
         }
-
-    override fun getCurrentWindowLayoutInfo(@UiContext context: Context): WindowLayoutInfo {
-        windowSdkExtensions.requireExtensionVersion(9)
-        return windowBackend.getCurrentWindowLayoutInfo(context)
-    }
 }
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt b/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt
index 88a2421..127fbaa 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/WindowBackend.kt
@@ -17,7 +17,6 @@
 
 import android.app.Activity
 import android.content.Context
-import android.inputmethodservice.InputMethodService
 import androidx.annotation.RestrictTo
 import androidx.annotation.UiContext
 import androidx.core.util.Consumer
@@ -62,21 +61,4 @@
     @RequiresWindowSdkExtension(version = 6)
     @get:RequiresWindowSdkExtension(version = 6)
     val supportedPostures: List<SupportedPosture>
-
-    /**
-     * Returns the current [WindowLayoutInfo] for the given [Context].
-     *
-     * This API provides a convenient way to access the current [WindowLayoutInfo] without
-     * registering a listener via [registerLayoutChangeCallback]. It simplifies the retrieval of
-     * [WindowLayoutInfo] in scenarios like [Activity.onCreate].
-     *
-     * @param context a [Context] that corresponds to a window or an area on the screen. This can be
-     *   an [Activity], a [Context] created with [Context.createWindowContext], or an
-     *   [InputMethodService].
-     * @return the current [WindowLayoutInfo] for the given [Context].
-     * @throws UnsupportedOperationException if the Window SDK extension version is less than 9.
-     * @throws IllegalArgumentException when [context] is not an [UiContext].
-     */
-    @RequiresWindowSdkExtension(version = 9)
-    fun getCurrentWindowLayoutInfo(@UiContext context: Context): WindowLayoutInfo
 }
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackend.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackend.kt
index e4c2cfa..9d53488 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackend.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackend.kt
@@ -42,7 +42,6 @@
         fun newInstance(component: WindowLayoutComponent, adapter: ConsumerAdapter): WindowBackend {
             val safeVendorApiLevel = ExtensionsUtil.safeVendorApiLevel
             return when {
-                safeVendorApiLevel >= 9 -> ExtensionWindowBackendApi9(component, adapter)
                 safeVendorApiLevel >= 6 -> ExtensionWindowBackendApi6(component, adapter)
                 safeVendorApiLevel >= 2 -> ExtensionWindowBackendApi2(component, adapter)
                 safeVendorApiLevel == 1 -> ExtensionWindowBackendApi1(component, adapter)
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi0.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi0.kt
index 6cbfeda..72b4c87 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi0.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi0.kt
@@ -23,7 +23,7 @@
 import androidx.window.layout.adapter.WindowBackend
 import java.util.concurrent.Executor
 
-internal open class ExtensionWindowBackendApi0 : WindowBackend {
+internal class ExtensionWindowBackendApi0 : WindowBackend {
 
     override fun registerLayoutChangeCallback(
         context: Context,
@@ -38,8 +38,8 @@
     }
 
     override val supportedPostures: List<SupportedPosture>
-        get() = throw UnsupportedOperationException("Extensions version must be at least 6")
-
-    override fun getCurrentWindowLayoutInfo(context: Context): WindowLayoutInfo =
-        throw UnsupportedOperationException("Extensions version must be at least 9")
+        get() =
+            throw UnsupportedOperationException(
+                "supportedPostures is only supported on Window SDK 6."
+            )
 }
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi1.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi1.kt
index 1de6f28..33c53a7 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi1.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi1.kt
@@ -22,20 +22,20 @@
 import androidx.annotation.UiContext
 import androidx.annotation.VisibleForTesting
 import androidx.core.util.Consumer
-import androidx.window.RequiresWindowSdkExtension
 import androidx.window.core.ConsumerAdapter
 import androidx.window.extensions.layout.WindowLayoutComponent
 import androidx.window.extensions.layout.WindowLayoutInfo as OEMWindowLayoutInfo
+import androidx.window.layout.SupportedPosture
 import androidx.window.layout.WindowLayoutInfo
+import androidx.window.layout.adapter.WindowBackend
 import java.util.concurrent.Executor
 import java.util.concurrent.locks.ReentrantLock
 import kotlin.concurrent.withLock
 
-@RequiresWindowSdkExtension(version = 1)
 internal open class ExtensionWindowBackendApi1(
     val component: WindowLayoutComponent,
     private val consumerAdapter: ConsumerAdapter
-) : ExtensionWindowBackendApi0() {
+) : WindowBackend {
 
     private val globalLock = ReentrantLock()
 
@@ -126,4 +126,7 @@
             listenerToContext.isEmpty() &&
             consumerToToken.isEmpty())
     }
+
+    override val supportedPostures: List<SupportedPosture>
+        get() = throw UnsupportedOperationException("Extensions version must be at least 6")
 }
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi2.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi2.kt
index 8fb5501..0a20ba9 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi2.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi2.kt
@@ -22,7 +22,6 @@
 import androidx.annotation.UiContext
 import androidx.annotation.VisibleForTesting
 import androidx.core.util.Consumer
-import androidx.window.RequiresWindowSdkExtension
 import androidx.window.core.ConsumerAdapter
 import androidx.window.extensions.layout.WindowLayoutComponent
 import androidx.window.layout.WindowLayoutInfo
@@ -30,7 +29,6 @@
 import java.util.concurrent.locks.ReentrantLock
 import kotlin.concurrent.withLock
 
-@RequiresWindowSdkExtension(version = 2)
 internal open class ExtensionWindowBackendApi2(
     component: WindowLayoutComponent,
     adapter: ConsumerAdapter
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi6.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi6.kt
index 27562bf..ee9ff3cb8 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi6.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi6.kt
@@ -22,7 +22,7 @@
 import androidx.window.layout.SupportedPosture
 
 @RequiresWindowSdkExtension(version = 6)
-internal open class ExtensionWindowBackendApi6(
+internal class ExtensionWindowBackendApi6(
     component: WindowLayoutComponent,
     adapter: ConsumerAdapter
 ) : ExtensionWindowBackendApi2(component, adapter) {
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi9.kt b/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi9.kt
deleted file mode 100644
index 76d1dcc..0000000
--- a/window/window/src/main/java/androidx/window/layout/adapter/extensions/ExtensionWindowBackendApi9.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2024 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.window.layout.adapter.extensions
-
-import android.content.Context
-import androidx.window.RequiresWindowSdkExtension
-import androidx.window.core.ConsumerAdapter
-import androidx.window.extensions.layout.WindowLayoutComponent
-import androidx.window.layout.WindowLayoutInfo
-
-@RequiresWindowSdkExtension(version = 9)
-internal open class ExtensionWindowBackendApi9(
-    component: WindowLayoutComponent,
-    adapter: ConsumerAdapter,
-) : ExtensionWindowBackendApi6(component, adapter) {
-    override fun getCurrentWindowLayoutInfo(context: Context): WindowLayoutInfo =
-        ExtensionsWindowLayoutInfoAdapter.translate(
-            context,
-            info = component.getCurrentWindowLayoutInfo(context),
-        )
-}
diff --git a/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt b/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt
index 3244cce..31ee16f 100644
--- a/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt
+++ b/window/window/src/main/java/androidx/window/layout/adapter/sidecar/SidecarWindowBackend.kt
@@ -131,9 +131,6 @@
     override val supportedPostures: List<SupportedPosture>
         get() = throw UnsupportedOperationException("Must be called from extensions.")
 
-    override fun getCurrentWindowLayoutInfo(context: Context): WindowLayoutInfo =
-        throw UnsupportedOperationException("Must be called from extensions.")
-
     /**
      * Checks if there are no more registered callbacks left for the activity and inform extension
      * if needed.
diff --git a/window/window/src/main/res/values/attrs.xml b/window/window/src/main/res/values/attrs.xml
index 1a5c29e..7f6b59e 100644
--- a/window/window/src/main/res/values/attrs.xml
+++ b/window/window/src/main/res/values/attrs.xml
@@ -51,31 +51,6 @@
          The default is to use the current theme's windowBackground. Any non-opaque color will be
          treated the same as default. -->
     <attr name="animationBackgroundColor" format="color" />
-    <!-- An attribute for Activity Embedding rules.
-     Defines the open animation transition spec for the Activity Embedding split. -->
-    <attr name="splitOpenAnimation" format="enum">
-        <!-- The default animation specified by the system. -->
-        <enum name="systemDefault" value="0" />
-        <!-- An animation with zero duration. -->
-        <enum name="jumpCut" value="1" />
-    </attr>
-    <!-- An attribute for Activity Embedding rules.
-     Defines the close animation transition spec for the Activity Embedding split. -->
-    <attr name="splitCloseAnimation" format="enum">
-        <!-- The default animation specified by the system. -->
-        <enum name="systemDefault" value="0" />
-        <!-- An animation with zero duration. -->
-        <enum name="jumpCut" value="1" />
-    </attr>
-    <!-- An attribute for Activity Embedding rules.
-         Defines the change (resize or move) animation transition spec for the Activity Embedding
-         split. -->
-    <attr name="splitChangeAnimation" format="enum">
-        <!-- The default animation specified by the system. -->
-        <enum name="systemDefault" value="0" />
-        <!-- An animation with zero duration. -->
-        <enum name="jumpCut" value="1" />
-    </attr>
 
     <!-- An attribute for Activity Embedding rules.
          The smallest value of width of the parent Task bounds when the split should be used, in DP.
@@ -186,9 +161,6 @@
         <attr name="splitLayoutDirection"/>
         <attr name="tag"/>
         <attr name="animationBackgroundColor"/>
-        <attr name="splitOpenAnimation"/>
-        <attr name="splitCloseAnimation"/>
-        <attr name="splitChangeAnimation"/>
     </declare-styleable>
 
     <!-- Attributes that are read when parsing a <SplitPlaceholderRule> tag, which defines the split
@@ -215,9 +187,6 @@
         <attr name="splitLayoutDirection"/>
         <attr name="tag"/>
         <attr name="animationBackgroundColor"/>
-        <attr name="splitOpenAnimation"/>
-        <attr name="splitCloseAnimation"/>
-        <attr name="splitChangeAnimation"/>
     </declare-styleable>
 
     <!-- Attributes that are read when parsing an <ActivityRule> tag, which defines the layout
@@ -296,11 +265,5 @@
              This attribute is only allowed for a draggable divider and an exception is thrown
              otherwise. See DividerAttributes.DragRange for more details. -->
         <attr name="dragRangeMaxRatio" format="float" />
-        <!-- if true, the user is allowed to drag beyond the specified range temporarily, and when
-             dragging is finished, the system will choose to either fully expand the larger
-             container or move the divider back to the range limit. This only takes effect for
-             extensions version 7 and above. This attribute is only allowed for a draggable divider
-             and an exception is thrown otherwise. Default value is false. -->
-        <attr name="isDraggingToFullscreenAllowed" format="boolean" />
     </declare-styleable>
 </resources>
\ No newline at end of file
diff --git a/window/window/src/main/res/values/public.xml b/window/window/src/main/res/values/public.xml
index 9c381bf..d05d4dd 100644
--- a/window/window/src/main/res/values/public.xml
+++ b/window/window/src/main/res/values/public.xml
@@ -44,5 +44,4 @@
     <public name="embeddingDividerColor" type="attr" />
     <public name="dragRangeMinRatio" type="attr" />
     <public name="dragRangeMaxRatio" type="attr" />
-    <public name="isDraggingToFullscreenAllowed" type="attr" />
 </resources>
\ No newline at end of file
diff --git a/window/window/src/test/java/androidx/window/embedding/ActivityRuleTest.kt b/window/window/src/test/java/androidx/window/embedding/ActivityRuleTest.kt
index 3666e7b..3ef53e3 100644
--- a/window/window/src/test/java/androidx/window/embedding/ActivityRuleTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/ActivityRuleTest.kt
@@ -59,10 +59,6 @@
 
         assertEquals(firstRule, secondRule)
         assertEquals(firstRule.hashCode(), secondRule.hashCode())
-
-        // The hashCode should be consistent to the predetermined value.
-        // Note that the value should be updated whenever hashCode calculation is changed.
-        assertEquals(-883899860, firstRule.hashCode())
     }
 
     /**
diff --git a/window/window/src/test/java/androidx/window/embedding/DividerAttributesTest.kt b/window/window/src/test/java/androidx/window/embedding/DividerAttributesTest.kt
index 1676367..dbca076 100644
--- a/window/window/src/test/java/androidx/window/embedding/DividerAttributesTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/DividerAttributesTest.kt
@@ -43,8 +43,6 @@
                 .setWidthDp(DividerAttributes.WIDTH_SYSTEM_DEFAULT)
                 .setDragRange(DRAG_RANGE_SYSTEM_DEFAULT)
                 .build()
-        val attrs5 =
-            DraggableDividerAttributes.Builder(attrs4).setDraggingToFullscreenAllowed(true).build()
 
         assertNotEquals(attrs1, attrs2)
         assertNotEquals(attrs1.hashCode(), attrs2.hashCode())
@@ -55,9 +53,6 @@
         assertNotEquals(attrs3, attrs4)
         assertNotEquals(attrs3.hashCode(), attrs4.hashCode())
 
-        assertNotEquals(attrs4, attrs5)
-        assertNotEquals(attrs4.hashCode(), attrs5.hashCode())
-
         // attrs2 and attrs4 must be equal because attrs4 uses default values.
         assertEquals(attrs2, attrs4)
         assertEquals(attrs2.hashCode(), attrs4.hashCode())
@@ -70,13 +65,11 @@
                 .setWidthDp(20)
                 .setDragRange(SplitRatioDragRange(0.3f, 0.7f))
                 .setColor(Color.GRAY)
-                .setDraggingToFullscreenAllowed(true)
                 .build()
 
         assertEquals(20, attrs.widthDp)
         assertEquals(SplitRatioDragRange(0.3f, 0.7f), attrs.dragRange)
         assertEquals(Color.GRAY, attrs.color)
-        assertEquals(true, attrs.isDraggingToFullscreenAllowed)
     }
 
     @Test
@@ -86,7 +79,6 @@
         assertEquals(DividerAttributes.WIDTH_SYSTEM_DEFAULT, attrs.widthDp)
         assertEquals(DRAG_RANGE_SYSTEM_DEFAULT, attrs.dragRange)
         assertEquals(Color.BLACK, attrs.color)
-        assertEquals(false, attrs.isDraggingToFullscreenAllowed)
     }
 
     @Test
diff --git a/window/window/src/test/java/androidx/window/embedding/SplitAttributesTest.kt b/window/window/src/test/java/androidx/window/embedding/SplitAttributesTest.kt
index 9eef488..49cd022 100644
--- a/window/window/src/test/java/androidx/window/embedding/SplitAttributesTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/SplitAttributesTest.kt
@@ -64,7 +64,6 @@
                 .setAnimationBackground(
                     EmbeddingAnimationBackground.createColorBackground(Color.GREEN)
                 )
-                .setCloseAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                 .build()
         val attrs4 =
             SplitAttributes.Builder()
diff --git a/window/window/src/test/java/androidx/window/embedding/SplitPairRuleTest.kt b/window/window/src/test/java/androidx/window/embedding/SplitPairRuleTest.kt
index 3cd22b9..fbf1295 100644
--- a/window/window/src/test/java/androidx/window/embedding/SplitPairRuleTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/SplitPairRuleTest.kt
@@ -20,14 +20,9 @@
 import android.graphics.Color
 import android.graphics.Rect
 import androidx.window.core.ActivityComponentInfo
-import androidx.window.embedding.DividerAttributes.Companion.NO_DIVIDER
-import androidx.window.embedding.EmbeddingAspectRatio.Companion.ALWAYS_ALLOW
-import androidx.window.embedding.SplitAttributes.SplitType.Companion.SPLIT_TYPE_HINGE
-import androidx.window.embedding.SplitAttributes.SplitType.Companion.ratio
 import androidx.window.embedding.SplitRule.Companion.SPLIT_MAX_ASPECT_RATIO_LANDSCAPE_DEFAULT
 import androidx.window.embedding.SplitRule.Companion.SPLIT_MAX_ASPECT_RATIO_PORTRAIT_DEFAULT
 import androidx.window.embedding.SplitRule.Companion.SPLIT_MIN_DIMENSION_DP_DEFAULT
-import androidx.window.embedding.SplitRule.FinishBehavior.Companion.ADJACENT
 import androidx.window.embedding.SplitRule.FinishBehavior.Companion.ALWAYS
 import androidx.window.embedding.SplitRule.FinishBehavior.Companion.NEVER
 import junit.framework.TestCase
@@ -67,48 +62,10 @@
     @Test
     fun equalsImpliesHashCode() {
         val filter = SplitPairFilter(ComponentName("a", "b"), ComponentName("c", "d"), "ACTION")
-        val firstRule =
-            SplitPairRule.Builder(setOf(filter))
-                .setClearTop(true)
-                .setDefaultSplitAttributes(
-                    SplitAttributes.Builder()
-                        .setSplitType(SPLIT_TYPE_HINGE)
-                        .setDividerAttributes(NO_DIVIDER)
-                        .setAnimationParams(EmbeddingAnimationParams.Builder().build())
-                        .build()
-                )
-                .setMinWidthDp(100)
-                .setMinHeightDp(100)
-                .setMinSmallestWidthDp(100)
-                .setFinishPrimaryWithSecondary(ADJACENT)
-                .setFinishSecondaryWithPrimary(ADJACENT)
-                .setMaxAspectRatioInLandscape(ALWAYS_ALLOW)
-                .setMaxAspectRatioInPortrait(ALWAYS_ALLOW)
-                .build()
-        val secondRule =
-            SplitPairRule.Builder(setOf(filter))
-                .setClearTop(true)
-                .setDefaultSplitAttributes(
-                    SplitAttributes.Builder()
-                        .setSplitType(SPLIT_TYPE_HINGE)
-                        .setDividerAttributes(NO_DIVIDER)
-                        .setAnimationParams(EmbeddingAnimationParams.Builder().build())
-                        .build()
-                )
-                .setMinWidthDp(100)
-                .setMinHeightDp(100)
-                .setMinSmallestWidthDp(100)
-                .setFinishPrimaryWithSecondary(ADJACENT)
-                .setFinishSecondaryWithPrimary(ADJACENT)
-                .setMaxAspectRatioInLandscape(ALWAYS_ALLOW)
-                .setMaxAspectRatioInPortrait(ALWAYS_ALLOW)
-                .build()
+        val firstRule = SplitPairRule.Builder(setOf(filter)).build()
+        val secondRule = SplitPairRule.Builder(setOf(filter)).build()
         assertEquals(firstRule, secondRule)
         assertEquals(firstRule.hashCode(), secondRule.hashCode())
-
-        // The hashCode should be consistent to the predetermined value.
-        // Note that the value should be updated whenever hashCode calculation is changed.
-        assertEquals(-1740043078, firstRule.hashCode())
     }
 
     /*------------------------------Builder Test------------------------------*/
@@ -151,7 +108,6 @@
                         .setAnimationBackground(
                             EmbeddingAnimationBackground.createColorBackground(Color.GREEN)
                         )
-                        .setCloseAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
diff --git a/window/window/src/test/java/androidx/window/embedding/SplitPinRuleTest.kt b/window/window/src/test/java/androidx/window/embedding/SplitPinRuleTest.kt
deleted file mode 100644
index f513051..0000000
--- a/window/window/src/test/java/androidx/window/embedding/SplitPinRuleTest.kt
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2024 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.window.embedding
-
-import androidx.window.embedding.SplitRule.Companion.SPLIT_MAX_ASPECT_RATIO_LANDSCAPE_DEFAULT
-import androidx.window.embedding.SplitRule.Companion.SPLIT_MAX_ASPECT_RATIO_PORTRAIT_DEFAULT
-import androidx.window.embedding.SplitRule.Companion.SPLIT_MIN_DIMENSION_DP_DEFAULT
-import junit.framework.TestCase
-import org.junit.Assert.assertEquals
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.robolectric.RobolectricTestRunner
-
-/** Unit test for [SplitPinRule] to check the construction is correct by using it's builder. */
-@RunWith(RobolectricTestRunner::class)
-class SplitPinRuleTest {
-
-    /*------------------------------Class Test------------------------------*/
-    /** Test hashcode and equals are properly calculated for 2 equal [SplitPinRule] */
-    @Test
-    fun equalsImpliesHashCode() {
-        val firstRule = SplitPinRule.Builder().setSticky(true).build()
-        val secondRule = SplitPinRule.Builder().setSticky(true).build()
-        assertEquals(firstRule, secondRule)
-        assertEquals(firstRule.hashCode(), secondRule.hashCode())
-
-        // The hashCode should be consistent to the predetermined value.
-        // Note that the value should be updated whenever hashCode calculation is changed.
-        assertEquals(1678620995, firstRule.hashCode())
-    }
-
-    /*------------------------------Builder Test------------------------------*/
-    /**
-     * Verifies that default params are set correctly when creating [SplitPinRule] with a builder.
-     */
-    @Test
-    fun testDefaults_SplitPinRule_Builder() {
-        val rule = SplitPinRule.Builder().build()
-        val expectedSplitLayout =
-            SplitAttributes.Builder()
-                .setSplitType(SplitAttributes.SplitType.ratio(0.5f))
-                .setLayoutDirection(SplitAttributes.LayoutDirection.LOCALE)
-                .setAnimationParams(EmbeddingAnimationParams.Builder().build())
-                .build()
-
-        TestCase.assertNull(rule.tag)
-        assertEquals(SPLIT_MIN_DIMENSION_DP_DEFAULT, rule.minWidthDp)
-        assertEquals(SPLIT_MIN_DIMENSION_DP_DEFAULT, rule.minHeightDp)
-        assertEquals(SPLIT_MIN_DIMENSION_DP_DEFAULT, rule.minSmallestWidthDp)
-        assertEquals(SPLIT_MAX_ASPECT_RATIO_PORTRAIT_DEFAULT, rule.maxAspectRatioInPortrait)
-        assertEquals(SPLIT_MAX_ASPECT_RATIO_LANDSCAPE_DEFAULT, rule.maxAspectRatioInLandscape)
-        assertEquals(false, rule.isSticky)
-        assertEquals(expectedSplitLayout, rule.defaultSplitAttributes)
-    }
-}
diff --git a/window/window/src/test/java/androidx/window/embedding/SplitPlaceHolderRuleTest.kt b/window/window/src/test/java/androidx/window/embedding/SplitPlaceHolderRuleTest.kt
index 8387206..82228b4 100644
--- a/window/window/src/test/java/androidx/window/embedding/SplitPlaceHolderRuleTest.kt
+++ b/window/window/src/test/java/androidx/window/embedding/SplitPlaceHolderRuleTest.kt
@@ -46,14 +46,11 @@
     @Test
     fun equalsImpliesHashCode() {
         val filter = ActivityFilter(ActivityComponentInfo("a", "b"), "ACTION")
-        val firstRule = SplitPlaceholderRule.Builder(setOf(filter), Intent()).build()
-        val secondRule = SplitPlaceholderRule.Builder(setOf(filter), Intent()).build()
+        val placeholderIntent = Intent()
+        val firstRule = SplitPlaceholderRule.Builder(setOf(filter), placeholderIntent).build()
+        val secondRule = SplitPlaceholderRule.Builder(setOf(filter), placeholderIntent).build()
         assertEquals(firstRule, secondRule)
         assertEquals(firstRule.hashCode(), secondRule.hashCode())
-
-        // The hashCode should be consistent to the predetermined value.
-        // Note that the value should be updated whenever hashCode calculation is changed.
-        assertEquals(1986646852, firstRule.hashCode())
     }
 
     /*------------------------------Builder Test------------------------------*/
@@ -101,7 +98,6 @@
                         .setAnimationBackground(
                             EmbeddingAnimationBackground.createColorBackground(Color.GREEN)
                         )
-                        .setCloseAnimation(EmbeddingAnimationParams.AnimationSpec.JUMP_CUT)
                         .build()
                 )
                 .build()
diff --git a/xr/arcore/arcore/api/restricted_current.txt b/xr/arcore/arcore/api/restricted_current.txt
index 4cd1cb1..a93bf64 100644
--- a/xr/arcore/arcore/api/restricted_current.txt
+++ b/xr/arcore/arcore/api/restricted_current.txt
@@ -62,13 +62,11 @@
   }
 
   public static final class Hand.State {
-    ctor public Hand.State(androidx.xr.runtime.internal.TrackingState trackingState, java.nio.ByteBuffer handJointsBuffer);
+    ctor public Hand.State(boolean isActive, java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> handJoints);
     method public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> getHandJoints();
-    method public java.nio.ByteBuffer getHandJointsBuffer();
-    method public androidx.xr.runtime.internal.TrackingState getTrackingState();
+    method public boolean isActive();
     property public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> handJoints;
-    property public java.nio.ByteBuffer handJointsBuffer;
-    property public androidx.xr.runtime.internal.TrackingState trackingState;
+    property public boolean isActive;
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class HitResult {
diff --git a/xr/arcore/arcore/dependencyAnalysis-baseline.json b/xr/arcore/arcore/dependencyAnalysis-baseline.json
index d56eaba..ae26508 100644
--- a/xr/arcore/arcore/dependencyAnalysis-baseline.json
+++ b/xr/arcore/arcore/dependencyAnalysis-baseline.json
@@ -4,6 +4,14 @@
     {
       "coordinates": {
         "type": "module",
+        "identifier": "androidx.annotation:annotation",
+        "resolvedVersion": "1.8.1"
+      },
+      "fromConfiguration": "implementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
         "identifier": "androidx.appcompat:appcompat",
         "resolvedVersion": "1.2.0"
       },
diff --git a/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Anchor.kt b/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Anchor.kt
index 3573ca9..2f3e814 100644
--- a/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Anchor.kt
+++ b/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Anchor.kt
@@ -43,7 +43,7 @@
 ) : Updatable {
     public companion object {
         /**
-         * Creates and attaches an [Anchor] at the given [pose].
+         * Creates an [Anchor] at the given [pose].
          *
          * @param session the [Session] that is used to create the anchor.
          * @param pose the [Pose] that describes the location and orientation of the anchor.
@@ -74,8 +74,8 @@
 
         /**
          * Loads an [Anchor] from local storage, using the given [uuid]. The anchor will attempt to
-         * be attached in the same physical location as the anchor that was previously persisted.
-         * The [uuid] should be the return value of a previous call to [persist].
+         * be in the same physical location as the anchor that was previously persisted. The [uuid]
+         * should be the return value of a previous call to [persist].
          */
         @JvmStatic
         public fun load(session: Session, uuid: UUID): AnchorCreateResult {
diff --git a/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Hand.kt b/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Hand.kt
index adfb1ee..6edddc0 100644
--- a/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Hand.kt
+++ b/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Hand.kt
@@ -20,10 +20,6 @@
 import androidx.xr.runtime.Session
 import androidx.xr.runtime.internal.Hand as RuntimeHand
 import androidx.xr.runtime.math.Pose
-import androidx.xr.runtime.math.Quaternion
-import androidx.xr.runtime.math.Vector3
-import java.nio.ByteBuffer
-import java.nio.ByteOrder
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.asStateFlow
@@ -68,98 +64,32 @@
     /**
      * The representation of the current state of [Hand].
      *
-     * @param trackingState the current [TrackingState] of the hand.
-     * @param handJointsBuffer the [ByteBuffer] containing the pose of each joint in the hand.
+     * @property isActive whether the hand is currently being tracked.
+     * @property handJoints the current pose of each joint in the hand.
      */
     public class State(
-        public val trackingState: TrackingState,
-        public val handJointsBuffer: ByteBuffer,
+        public val isActive: Boolean,
+        public val handJoints: Map<HandJointType, Pose>,
     ) {
-
-        private class JointsMap(
-            val trackingState: TrackingState,
-            val handJointsBuffer: ByteBuffer
-        ) : Map<HandJointType, Pose> {
-            override val entries: Set<Map.Entry<HandJointType, Pose>>
-                get() =
-                    if (trackingState == TrackingState.Tracking) {
-                        RuntimeHand.parseHandJoint(trackingState, handJointsBuffer).entries.toSet()
-                    } else {
-                        emptySet()
-                    }
-
-            override val keys: Set<HandJointType>
-                get() =
-                    if (trackingState == TrackingState.Tracking) HandJointType.values().toSet()
-                    else emptySet()
-
-            override val size: Int
-                get() = keys.size
-
-            override val values: Collection<Pose>
-                get() = entries.map { it.value }
-
-            override fun containsKey(key: HandJointType): Boolean {
-                return keys.contains(key)
-            }
-
-            override fun containsValue(value: Pose): Boolean {
-                return values.contains(value)
-            }
-
-            override fun get(key: HandJointType): Pose? =
-                if (trackingState == TrackingState.Tracking) locateHandJointFromBuffer(key)
-                else null
-
-            override fun isEmpty(): Boolean {
-                return trackingState != TrackingState.Tracking
-            }
-
-            private fun locateHandJointFromBuffer(handJointType: HandJointType): Pose {
-                val buffer = handJointsBuffer.duplicate().order(ByteOrder.nativeOrder())
-                val bytePerPose = 7 * 4
-                val byteOffset = handJointType.ordinal * bytePerPose
-                buffer.position(byteOffset)
-                val qx = buffer.float
-                val qy = buffer.float
-                val qz = buffer.float
-                val qw = buffer.float
-                val px = buffer.float
-                val py = buffer.float
-                val pz = buffer.float
-                return Pose(Vector3(px, py, pz), Quaternion(qx, qy, qz, qw))
-            }
-        }
-
-        /**
-         * Returns the current pose of each joint in the hand.
-         *
-         * @return a map of [HandJointType] to [Pose] representing the current pose of each joint in
-         *   the hand.
-         */
-        public val handJoints: Map<HandJointType, Pose> = JointsMap(trackingState, handJointsBuffer)
-
         override fun equals(other: Any?): Boolean {
             if (this === other) return true
             if (other !is State) return false
-            return trackingState == other.trackingState &&
-                handJointsBuffer == other.handJointsBuffer
+            return isActive == other.isActive && handJoints == other.handJoints
         }
 
         override fun hashCode(): Int {
-            var result = trackingState.hashCode()
-            result = 31 * result + handJointsBuffer.hashCode()
+            var result = isActive.hashCode()
+            result = 31 * result + handJoints.hashCode()
             return result
         }
     }
 
-    private val _state =
-        MutableStateFlow<State>(State(TrackingState.Paused, ByteBuffer.allocate(0)))
+    private val _state = MutableStateFlow<State>(State(isActive = false, handJoints = emptyMap()))
     /** The current [State] of this hand. */
     public val state: StateFlow<State> = _state.asStateFlow()
 
     override suspend fun update() {
-        _state.emit(State(runtimeHand.trackingState, runtimeHand.handJointsBuffer))
+        _state.emit(State(isActive = runtimeHand.isActive, handJoints = runtimeHand.handJoints))
     }
 
     override fun equals(other: Any?): Boolean {
diff --git a/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Plane.kt b/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Plane.kt
index 6c3026b..1a2bab9 100644
--- a/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Plane.kt
+++ b/xr/arcore/arcore/src/main/kotlin/androidx/xr/arcore/Plane.kt
@@ -64,8 +64,7 @@
      * @property centerPose The pose of the center of the detected plane.
      * @property extents The dimensions of the detected plane.
      * @property subsumedBy If this plane has been subsumed, returns the plane this plane was merged
-     *   into. If the subsuming plane is also subsumed by another plane, this plane will continue to
-     *   be subsumed by the former.
+     *   into.
      * @property vertices The 2D vertices of a convex polygon approximating the detected plane.
      */
     public class State(
diff --git a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/AnchorTest.kt b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/AnchorTest.kt
index ff85685..ca32265 100644
--- a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/AnchorTest.kt
+++ b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/AnchorTest.kt
@@ -51,7 +51,7 @@
     @get:Rule
     val grantPermissionRule =
         GrantPermissionRule.grant(
-            "android.permission.SCENE_UNDERSTANDING_COARSE",
+            "android.permission.SCENE_UNDERSTANDING",
             "android.permission.HAND_TRACKING",
         )
 
diff --git a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/HandTest.kt b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/HandTest.kt
index 6c25b34..dac2a58 100644
--- a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/HandTest.kt
+++ b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/HandTest.kt
@@ -29,8 +29,6 @@
 import androidx.xr.runtime.testing.FakeRuntimeAnchor
 import androidx.xr.runtime.testing.FakeRuntimeHand
 import com.google.common.truth.Truth.assertThat
-import java.nio.ByteBuffer
-import java.nio.ByteOrder
 import kotlinx.coroutines.CoroutineDispatcher
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.runBlocking
@@ -48,8 +46,6 @@
 @RunWith(AndroidJUnit4::class)
 class HandTest {
 
-    private val handJointBufferSize: Int = 728
-    private val tolerance = 1e-4f
     private lateinit var xrResourcesManager: XrResourcesManager
     private lateinit var testDispatcher: TestDispatcher
     private lateinit var testScope: TestScope
@@ -58,7 +54,7 @@
     @get:Rule
     val grantPermissionRule =
         GrantPermissionRule.grant(
-            "android.permission.SCENE_UNDERSTANDING_COARSE",
+            "android.permission.SCENE_UNDERSTANDING",
             "android.permission.HAND_TRACKING",
         )
 
@@ -81,34 +77,19 @@
             runTest(testDispatcher) {
                 val perceptionManager = session.runtime.perceptionManager as FakePerceptionManager
                 check(Hand.left(session) != null)
-                check(Hand.left(session)!!.state.value.trackingState != TrackingState.Tracking)
+                check(Hand.left(session)!!.state.value.isActive == false)
                 check(Hand.left(session)!!.state.value.handJoints.isEmpty())
 
                 val leftRuntimeHand = perceptionManager.leftHand!! as FakeRuntimeHand
-                leftRuntimeHand.trackingState = TrackingState.Tracking
-                val expectedHandJoints: Map<HandJointType, Pose> =
-                    HandJointType.values().associate { joint ->
-                        val i = joint.ordinal.toFloat()
-                        joint to
-                            Pose(
-                                Vector3(i + 0.5f, i + 0.6f, i + 0.7f),
-                                Quaternion(i + 0.1f, i + 0.2f, i + 0.3f, i + 0.4f),
-                            )
-                    }
-                leftRuntimeHand.handJointsBuffer = generateTestBuffer(expectedHandJoints)
+                val leftHandPose =
+                    Pose(Vector3(1.0f, 2.0f, 3.0f), Quaternion(1.0f, 2.0f, 3.0f, 4.0f))
+                leftRuntimeHand.isActive = true
+                leftRuntimeHand.handJoints = mapOf(HandJointType.PALM to leftHandPose)
                 awaitNewCoreState(session, testScope)
 
-                assertThat(Hand.left(session)!!.state.value.trackingState)
-                    .isEqualTo(TrackingState.Tracking)
-                for (jointType in HandJointType.values()) {
-                    val leftHandJoints = Hand.left(session)!!.state.value.handJoints
-                    assertThat(leftHandJoints[jointType]!!.translation)
-                        .isEqualTo(expectedHandJoints[jointType]!!.translation)
-                    assertRotationEquals(
-                        leftHandJoints[jointType]!!.rotation,
-                        expectedHandJoints[jointType]!!.rotation,
-                    )
-                }
+                assertThat(Hand.left(session)!!.state.value.isActive).isEqualTo(true)
+                assertThat(Hand.left(session)!!.state.value.handJoints)
+                    .containsEntry(HandJointType.PALM, leftHandPose)
             }
         }
 
@@ -118,34 +99,19 @@
             runTest(testDispatcher) {
                 val perceptionManager = session.runtime.perceptionManager as FakePerceptionManager
                 check(Hand.right(session) != null)
-                check(Hand.right(session)!!.state.value.trackingState != TrackingState.Tracking)
+                check(Hand.right(session)!!.state.value.isActive == false)
                 check(Hand.right(session)!!.state.value.handJoints.isEmpty())
 
                 val rightRuntimeHand = perceptionManager.rightHand!! as FakeRuntimeHand
-                rightRuntimeHand.trackingState = TrackingState.Tracking
-                val expectedHandJoints: Map<HandJointType, Pose> =
-                    HandJointType.values().associate { joint ->
-                        val i = joint.ordinal.toFloat()
-                        joint to
-                            Pose(
-                                Vector3(i + 0.5f, i + 0.6f, i + 0.7f),
-                                Quaternion(i + 0.1f, i + 0.2f, i + 0.3f, i + 0.4f),
-                            )
-                    }
-                rightRuntimeHand.handJointsBuffer = generateTestBuffer(expectedHandJoints)
+                val rightHandPose =
+                    Pose(Vector3(1.0f, 2.0f, 3.0f), Quaternion(1.0f, 2.0f, 3.0f, 4.0f))
+                rightRuntimeHand.isActive = true
+                rightRuntimeHand.handJoints = mapOf(HandJointType.PALM to rightHandPose)
                 awaitNewCoreState(session, testScope)
 
-                assertThat(Hand.right(session)!!.state.value.trackingState)
-                    .isEqualTo(TrackingState.Tracking)
-                for (jointType in HandJointType.values()) {
-                    val rightHandJoints = Hand.right(session)!!.state.value.handJoints
-                    assertThat(rightHandJoints[jointType]!!.translation)
-                        .isEqualTo(expectedHandJoints[jointType]!!.translation)
-                    assertRotationEquals(
-                        rightHandJoints[jointType]!!.rotation,
-                        expectedHandJoints[jointType]!!.rotation,
-                    )
-                }
+                assertThat(Hand.right(session)!!.state.value.isActive).isEqualTo(true)
+                assertThat(Hand.right(session)!!.state.value.handJoints)
+                    .containsEntry(HandJointType.PALM, rightHandPose)
             }
         }
 
@@ -153,32 +119,16 @@
     fun update_stateMachesRuntimeHand() = runBlocking {
         val runtimeHand = FakeRuntimeHand()
         val underTest = Hand(runtimeHand)
-        check(underTest.state.value.trackingState != TrackingState.Tracking)
+        check(underTest.state.value.isActive.equals(false))
         check(underTest.state.value.handJoints.isEmpty())
 
-        runtimeHand.trackingState = TrackingState.Tracking
-        val expectedHandJoints: Map<HandJointType, Pose> =
-            HandJointType.values().associate { joint ->
-                val i = joint.ordinal.toFloat()
-                joint to
-                    Pose(
-                        Vector3(i + 0.5f, i + 0.6f, i + 0.7f),
-                        Quaternion(i + 0.1f, i + 0.2f, i + 0.3f, i + 0.4f),
-                    )
-            }
-        runtimeHand.handJointsBuffer = generateTestBuffer(expectedHandJoints)
+        runtimeHand.isActive = true
+        val pose = Pose(Vector3(1.0f, 2.0f, 3.0f), Quaternion(1.0f, 2.0f, 3.0f, 4.0f))
+        runtimeHand.handJoints = mapOf(HandJointType.PALM to pose)
         underTest.update()
 
-        assertThat(underTest.state.value.trackingState).isEqualTo(TrackingState.Tracking)
-        for (jointType in HandJointType.values()) {
-            val handJoints = underTest.state.value.handJoints
-            assertThat(handJoints[jointType]!!.translation)
-                .isEqualTo(expectedHandJoints[jointType]!!.translation)
-            assertRotationEquals(
-                handJoints[jointType]!!.rotation,
-                expectedHandJoints[jointType]!!.rotation,
-            )
-        }
+        assertThat(underTest.state.value.isActive).isEqualTo(true)
+        assertThat(underTest.state.value.handJoints).containsEntry(HandJointType.PALM, pose)
     }
 
     private fun createTestSessionAndRunTest(
@@ -202,30 +152,4 @@
         testScope.advanceUntilIdle()
         session.pause()
     }
-
-    fun generateTestBuffer(handJoints: Map<HandJointType, Pose>): ByteBuffer {
-        val buffer = ByteBuffer.allocate(handJointBufferSize).order(ByteOrder.nativeOrder())
-
-        repeat(26) {
-            val handJointType = HandJointType.values()[it]
-            val handJointPose = handJoints[handJointType]!!
-            buffer.putFloat(handJointPose.rotation.x)
-            buffer.putFloat(handJointPose.rotation.y)
-            buffer.putFloat(handJointPose.rotation.z)
-            buffer.putFloat(handJointPose.rotation.w)
-            buffer.putFloat(handJointPose.translation.x)
-            buffer.putFloat(handJointPose.translation.y)
-            buffer.putFloat(handJointPose.translation.z)
-        }
-
-        buffer.flip()
-        return buffer
-    }
-
-    fun assertRotationEquals(actual: Quaternion, expected: Quaternion) {
-        assertThat(actual.x).isWithin(tolerance).of(expected.x)
-        assertThat(actual.y).isWithin(tolerance).of(expected.y)
-        assertThat(actual.z).isWithin(tolerance).of(expected.z)
-        assertThat(actual.w).isWithin(tolerance).of(expected.w)
-    }
 }
diff --git a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/InteractionTest.kt b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/InteractionTest.kt
index 333848c..22841e7 100644
--- a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/InteractionTest.kt
+++ b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/InteractionTest.kt
@@ -51,7 +51,7 @@
     @get:Rule
     val grantPermissionRule =
         GrantPermissionRule.grant(
-            "android.permission.SCENE_UNDERSTANDING_COARSE",
+            "android.permission.SCENE_UNDERSTANDING",
             "android.permission.HAND_TRACKING",
         )
 
diff --git a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PerceptionStateExtenderTest.kt b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PerceptionStateExtenderTest.kt
index 43bbdbc..29934fd 100644
--- a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PerceptionStateExtenderTest.kt
+++ b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PerceptionStateExtenderTest.kt
@@ -30,8 +30,6 @@
 import androidx.xr.runtime.testing.FakeRuntimeHand
 import androidx.xr.runtime.testing.FakeRuntimePlane
 import com.google.common.truth.Truth.assertThat
-import java.nio.ByteBuffer
-import java.nio.ByteOrder
 import kotlin.test.assertFailsWith
 import kotlin.time.Duration.Companion.milliseconds
 import kotlin.time.TestTimeSource
@@ -44,8 +42,6 @@
 @RunWith(AndroidJUnit4::class)
 class PerceptionStateExtenderTest {
 
-    private val handJointBufferSize: Int = 728
-    private val tolerance = 1e-4f
     private lateinit var fakeRuntime: FakeRuntime
     private lateinit var timeSource: TestTimeSource
     private lateinit var underTest: PerceptionStateExtender
@@ -143,59 +139,31 @@
         underTest.extend(coreState)
         check(coreState.perceptionState!!.leftHand != null)
         check(coreState.perceptionState!!.rightHand != null)
-        check(
-            coreState.perceptionState!!.leftHand!!.state.value.trackingState !=
-                TrackingState.Tracking
-        )
+        check(coreState.perceptionState!!.leftHand!!.state.value.isActive == false)
         check(coreState.perceptionState!!.leftHand!!.state.value.handJoints.isEmpty())
-        check(
-            coreState.perceptionState!!.rightHand!!.state.value.trackingState !=
-                TrackingState.Tracking
-        )
+        check(coreState.perceptionState!!.rightHand!!.state.value.isActive == false)
         check(coreState.perceptionState!!.rightHand!!.state.value.handJoints.isEmpty())
 
         // act
         timeSource += 10.milliseconds
-        val handJoints: Map<HandJointType, Pose> =
-            HandJointType.values().associate { joint ->
-                val i = joint.ordinal.toFloat()
-                joint to
-                    Pose(
-                        Vector3(i + 0.5f, i + 0.6f, i + 0.7f),
-                        Quaternion(i + 0.1f, i + 0.2f, i + 0.3f, i + 0.4f),
-                    )
-            }
-
         val leftRuntimeHand = fakeRuntime.perceptionManager.leftHand!! as FakeRuntimeHand
         val rightRuntimeHand = fakeRuntime.perceptionManager.rightHand!! as FakeRuntimeHand
-        leftRuntimeHand.trackingState = TrackingState.Tracking
-        leftRuntimeHand.handJointsBuffer = generateTestBuffer(handJoints)
-        rightRuntimeHand.trackingState = TrackingState.Tracking
-        rightRuntimeHand.handJointsBuffer = generateTestBuffer(handJoints)
+        val leftHandPose = Pose(Vector3(1.0f, 2.0f, 3.0f), Quaternion(1.0f, 2.0f, 3.0f, 4.0f))
+        val rightHandPose = Pose(Vector3(3.0f, 2.0f, 1.0f), Quaternion(4.0f, 3.0f, 2.0f, 1.0f))
+        leftRuntimeHand.isActive = true
+        leftRuntimeHand.handJoints = mapOf(HandJointType.PALM to leftHandPose)
+        rightRuntimeHand.isActive = true
+        rightRuntimeHand.handJoints = mapOf(HandJointType.PALM to rightHandPose)
         val coreState2 = CoreState(timeSource.markNow())
         underTest.extend(coreState2)
 
         // assert
-        assertThat(coreState2.perceptionState!!.leftHand!!.state.value.trackingState)
-            .isEqualTo(TrackingState.Tracking)
-        assertThat(coreState2.perceptionState!!.rightHand!!.state.value.trackingState)
-            .isEqualTo(TrackingState.Tracking)
-        for (jointType in HandJointType.values()) {
-            val leftHandJoints = coreState2.perceptionState!!.leftHand!!.state.value.handJoints
-            val rightHandJoints = coreState2.perceptionState!!.rightHand!!.state.value.handJoints
-            assertThat(leftHandJoints[jointType]!!.translation)
-                .isEqualTo(handJoints[jointType]!!.translation)
-            assertRotationEquals(
-                leftHandJoints[jointType]!!.rotation,
-                handJoints[jointType]!!.rotation
-            )
-            assertThat(rightHandJoints[jointType]!!.translation)
-                .isEqualTo(handJoints[jointType]!!.translation)
-            assertRotationEquals(
-                rightHandJoints[jointType]!!.rotation,
-                handJoints[jointType]!!.rotation
-            )
-        }
+        assertThat(coreState2.perceptionState!!.leftHand!!.state.value.isActive).isEqualTo(true)
+        assertThat(coreState2.perceptionState!!.leftHand!!.state.value.handJoints)
+            .containsEntry(HandJointType.PALM, leftHandPose)
+        assertThat(coreState2.perceptionState!!.rightHand!!.state.value.isActive).isEqualTo(true)
+        assertThat(coreState2.perceptionState!!.rightHand!!.state.value.handJoints)
+            .containsEntry(HandJointType.PALM, rightHandPose)
     }
 
     @Test
@@ -243,30 +211,4 @@
                 throw IllegalArgumentException("Unsupported trackable type: ${trackable.javaClass}")
         }
     }
-
-    fun generateTestBuffer(handJoints: Map<HandJointType, Pose>): ByteBuffer {
-        val buffer = ByteBuffer.allocate(handJointBufferSize).order(ByteOrder.nativeOrder())
-
-        repeat(26) {
-            val handJointType = HandJointType.values()[it]
-            val handJointPose = handJoints[handJointType]!!
-            buffer.putFloat(handJointPose.rotation.x)
-            buffer.putFloat(handJointPose.rotation.y)
-            buffer.putFloat(handJointPose.rotation.z)
-            buffer.putFloat(handJointPose.rotation.w)
-            buffer.putFloat(handJointPose.translation.x)
-            buffer.putFloat(handJointPose.translation.y)
-            buffer.putFloat(handJointPose.translation.z)
-        }
-
-        buffer.flip()
-        return buffer
-    }
-
-    fun assertRotationEquals(actual: Quaternion, expected: Quaternion) {
-        assertThat(actual.x).isWithin(tolerance).of(expected.x)
-        assertThat(actual.y).isWithin(tolerance).of(expected.y)
-        assertThat(actual.z).isWithin(tolerance).of(expected.z)
-        assertThat(actual.w).isWithin(tolerance).of(expected.w)
-    }
 }
diff --git a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PlaneTest.kt b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PlaneTest.kt
index 79392db..aa2bd8a 100644
--- a/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PlaneTest.kt
+++ b/xr/arcore/arcore/src/test/kotlin/androidx/xr/arcore/PlaneTest.kt
@@ -59,7 +59,7 @@
     @get:Rule
     val grantPermissionRule =
         GrantPermissionRule.grant(
-            "android.permission.SCENE_UNDERSTANDING_COARSE",
+            "android.permission.SCENE_UNDERSTANDING",
             "android.permission.HAND_TRACKING",
         )
 
diff --git a/xr/arcore/integration-tests/whitebox/build.gradle b/xr/arcore/integration-tests/whitebox/build.gradle
index abb32e3..0791ab2 100644
--- a/xr/arcore/integration-tests/whitebox/build.gradle
+++ b/xr/arcore/integration-tests/whitebox/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.KotlinTarget
 import androidx.build.SoftwareType
@@ -77,8 +76,6 @@
     implementation("androidx.compose.runtime:runtime:1.7.5")
     implementation("androidx.compose.ui:ui:1.7.5")
     implementation("androidx.lifecycle:lifecycle-runtime:2.8.7")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/common/SessionLifecycleHelper.kt b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/common/SessionLifecycleHelper.kt
index aab4ed6..87d8402 100644
--- a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/common/SessionLifecycleHelper.kt
+++ b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/common/SessionLifecycleHelper.kt
@@ -22,6 +22,7 @@
 import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions
+import androidx.activity.result.registerForActivityResult
 import androidx.lifecycle.DefaultLifecycleObserver
 import androidx.lifecycle.LifecycleOwner
 import androidx.xr.runtime.Session
@@ -34,17 +35,25 @@
  * Observer class to manage the lifecycle of the Jetpack XR Runtime Session based on the lifecycle
  * owner (activity).
  */
-class SessionLifecycleHelper(val activity: ComponentActivity) : DefaultLifecycleObserver {
+class SessionLifecycleHelper(
+    internal val onCreateCallback: (Session) -> Unit,
+    internal val onResumeCallback: (() -> Unit)? = null,
+    internal val beforePauseCallback: (() -> Unit)? = null,
+) : DefaultLifecycleObserver {
 
     internal lateinit var session: Session
-    private lateinit var requestPermissionLauncher: ActivityResultLauncher<Array<String>>
+    internal lateinit var requestPermissionLauncher: ActivityResultLauncher<Array<String>>
 
-    init {
-        registerRequestPermissionLauncher(activity)
+    override fun onCreate(owner: LifecycleOwner) {
+        // Sessions can only be instantiated with an instance of [ComponentActivity].
+        check(owner is ComponentActivity) { "owner is not an instance of ComponentActivity" }
 
-        when (val result = Session.create(activity)) {
+        registerRequestPermissionLauncher(owner)
+
+        when (val result = Session.create(owner)) {
             is SessionCreateSuccess -> {
                 session = result.session
+                onCreateCallback.invoke(session)
             }
             is SessionCreatePermissionsNotGranted -> {
                 requestPermissionLauncher.launch(result.permissions.toTypedArray())
@@ -57,7 +66,9 @@
             return
         }
         when (val result = session.resume()) {
-            is SessionResumeSuccess -> {}
+            is SessionResumeSuccess -> {
+                onResumeCallback?.invoke()
+            }
             is SessionResumePermissionsNotGranted -> {
                 requestPermissionLauncher.launch(result.permissions.toTypedArray())
             }
@@ -71,6 +82,7 @@
         if (!this::session.isInitialized) {
             return
         }
+        beforePauseCallback?.invoke()
         session.pause()
     }
 
@@ -101,11 +113,11 @@
             }
     }
 
-    companion object {
-        private val TAG = this::class.simpleName
-    }
-
     private fun <F> showErrorMessage(error: F) {
         Log.e(TAG, error.toString())
     }
+
+    companion object {
+        private val TAG = this::class.simpleName
+    }
 }
diff --git a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/handtracking/HandTrackingActivity.kt b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/handtracking/HandTrackingActivity.kt
index c4ef142..98890f8 100644
--- a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/handtracking/HandTrackingActivity.kt
+++ b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/handtracking/HandTrackingActivity.kt
@@ -16,6 +16,7 @@
 
 package androidx.xr.arcore.apps.whitebox.handtracking
 
+import android.app.Activity
 import android.os.Bundle
 import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
@@ -26,26 +27,31 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.collectAsState
 import androidx.compose.runtime.getValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.ComposeView
+import androidx.compose.ui.platform.ViewCompositionStrategy
 import androidx.compose.ui.unit.dp
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.ViewModelStoreOwner
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.setViewTreeLifecycleOwner
+import androidx.lifecycle.setViewTreeViewModelStoreOwner
+import androidx.savedstate.SavedStateRegistryOwner
+import androidx.savedstate.setViewTreeSavedStateRegistryOwner
 import androidx.xr.arcore.Hand
-import androidx.xr.arcore.HandJointType
-import androidx.xr.arcore.TrackingState
 import androidx.xr.arcore.apps.whitebox.common.BackToMainActivityButton
 import androidx.xr.arcore.apps.whitebox.common.SessionLifecycleHelper
 import androidx.xr.runtime.Session
-import androidx.xr.scenecore.GltfModel
-import androidx.xr.scenecore.GltfModelEntity
+import androidx.xr.runtime.math.Pose
+import androidx.xr.runtime.math.Quaternion
+import androidx.xr.runtime.math.Vector3
+import androidx.xr.scenecore.Dimensions
+import androidx.xr.scenecore.PanelEntity
 import androidx.xr.scenecore.Session as JxrCoreSession
-import kotlinx.coroutines.guava.await
-import kotlinx.coroutines.launch
 
-/** Sample that demonstrates Hand Tracking API usage. */
+/** Sample that demonstrates fundamental ARCore for Android XR usage. */
 class HandTrackingActivity : ComponentActivity() {
 
     private lateinit var session: Session
@@ -57,73 +63,46 @@
         super.onCreate(savedInstanceState)
 
         // Create session and renderers.
-        sessionHelper = SessionLifecycleHelper(this)
-        session = sessionHelper.session
+        sessionHelper =
+            SessionLifecycleHelper(
+                onCreateCallback = {
+                    session = it
+                    jxrCoreSession = JxrCoreSession.create(this)
+                    setContent { MainPanel(session) }
+                    createHandPanel(session, isLeftHand = true)
+                    createHandPanel(session, isLeftHand = false)
+                }
+            )
         lifecycle.addObserver(sessionHelper)
-
-        jxrCoreSession = JxrCoreSession.create(this)
-        setContent { MainPanel(session) }
-        lifecycleScope.launch {
-            val xyzModel = GltfModel.create(jxrCoreSession, "models/xyzArrows.glb").await()
-
-            val leftHandJointEntityMap =
-                HandJointType.entries.associateWith {
-                    GltfModelEntity.create(jxrCoreSession, xyzModel).also {
-                        it.setScale(0.015f)
-                        it.setHidden(true)
-                    }
-                }
-
-            val rightHandJointEntityMap =
-                HandJointType.entries.associateWith {
-                    GltfModelEntity.create(jxrCoreSession, xyzModel).also {
-                        it.setScale(0.015f)
-                        it.setHidden(true)
-                    }
-                }
-
-            launch {
-                Hand.left(session)?.state?.collect { leftHandState ->
-                    renderHandGizmos(leftHandState, leftHandJointEntityMap)
-                }
-            }
-
-            launch {
-                Hand.right(session)?.state?.collect { rightHandState ->
-                    renderHandGizmos(rightHandState, rightHandJointEntityMap)
-                }
-            }
-        }
     }
 
-    private fun renderHandGizmos(
-        handState: Hand.State,
-        jointEntityMap: Map<HandJointType, GltfModelEntity>,
-    ) {
-        for ((jointType, gltfModelEntity) in jointEntityMap) {
-            if (handState.trackingState == TrackingState.Tracking) {
-                // According to the experiment, calling setHidden will significantly
-                // increase the latency. Thus, check the hidden state before calling
-                // setHidden.
-                if (gltfModelEntity.isHidden(false)) {
-                    gltfModelEntity.setHidden(false)
-                }
-                val transformedPose =
-                    jxrCoreSession.perceptionSpace.transformPoseTo(
-                        handState.handJoints[jointType]!!,
-                        jxrCoreSession.activitySpace,
-                    )
-                gltfModelEntity.setPose(transformedPose)
-            } else {
-                // According to the experiment, calling setHidden will significantly
-                // increase the latency. Thus, check the hidden state before calling
-                // setHidden.
-                if (gltfModelEntity.isHidden(false)) {
-                    return
-                }
-                gltfModelEntity.setHidden(true)
-            }
-        }
+    private fun createHandPanel(session: Session, isLeftHand: Boolean) {
+        val composeView = ComposeView(this)
+        configureComposeView(composeView, this)
+        val hand = if (isLeftHand) Hand.left(session) else Hand.right(session)
+        val title = if (isLeftHand) "Left Hand" else "Right Hand"
+        val position = if (isLeftHand) Vector3(-0.6f, 0f, 0.1f) else Vector3(0.6f, 0f, 0.1f)
+        val rotation = if (isLeftHand) Quaternion(0f, 0f, 0f, 1f) else Quaternion(0f, 0f, 0f, 1f)
+        val panelEntity =
+            PanelEntity.create(
+                jxrCoreSession,
+                composeView,
+                Dimensions(1000f, 700f),
+                Dimensions(1f, 1f, 1f),
+                title,
+                Pose(position, rotation),
+            )
+        panelEntity.setParent(jxrCoreSession.activitySpace)
+        composeView.setContent { HandTrackingPanel(hand!!, isLeftHand) }
+    }
+
+    private fun configureComposeView(composeView: ComposeView, activity: Activity) {
+        composeView.setViewCompositionStrategy(
+            ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
+        )
+        composeView.setViewTreeLifecycleOwner(activity as LifecycleOwner)
+        composeView.setViewTreeViewModelStoreOwner(activity as ViewModelStoreOwner)
+        composeView.setViewTreeSavedStateRegistryOwner(activity as SavedStateRegistryOwner)
     }
 }
 
@@ -146,10 +125,25 @@
         if (leftHand == null || rightHand == null) {
             Text("Hand module is not supported.")
         } else {
-            Text("Left hand tracking state: ${leftHand.state.collectAsState().value.trackingState}")
-            Text(
-                "Right hand tracking state: ${rightHand.state.collectAsState().value.trackingState}"
-            )
+            Text("Hand module is supported.")
+        }
+    }
+}
+
+@Composable
+private fun HandTrackingPanel(hand: Hand, isLeftHand: Boolean) {
+    val handState by hand.state.collectAsStateWithLifecycle()
+    val name = if (isLeftHand) "Left Hand" else "Right Hand"
+    Column(
+        modifier =
+            Modifier.background(color = Color.White)
+                .fillMaxWidth()
+                .fillMaxHeight()
+                .padding(horizontal = 30.dp)
+    ) {
+        Text("${name} isActive: ${handState.isActive}")
+        for ((jointType, pose) in handState.handJoints) {
+            Text("${name} joint ${jointType}: ${pose.translation}")
         }
     }
 }
diff --git a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/HelloArActivity.kt b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/HelloArActivity.kt
index 341584f..d8683a5 100644
--- a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/HelloArActivity.kt
+++ b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/HelloArActivity.kt
@@ -24,6 +24,7 @@
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -45,26 +46,39 @@
 
     private lateinit var jxrCoreSession: JxrCoreSession
 
-    private lateinit var planeRenderer: PlaneRenderer
-    private lateinit var anchorRenderer: AnchorRenderer
+    private var planeRenderer: PlaneRenderer? = null
+    private var anchorRenderer: AnchorRenderer? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
         // Create session and renderers.
-        sessionHelper = SessionLifecycleHelper(this)
-        session = sessionHelper.session
+        sessionHelper =
+            SessionLifecycleHelper(
+                onCreateCallback = {
+                    session = it
+                    jxrCoreSession = JxrCoreSession.create(this)
+                    planeRenderer = PlaneRenderer(session, jxrCoreSession, lifecycleScope)
+                    anchorRenderer =
+                        AnchorRenderer(
+                            this,
+                            planeRenderer!!,
+                            session,
+                            jxrCoreSession,
+                            lifecycleScope
+                        )
+                    setContent { HelloWorld(session) }
+                },
+                onResumeCallback = {
+                    planeRenderer?.startRendering()
+                    anchorRenderer?.startRendering()
+                },
+                beforePauseCallback = {
+                    planeRenderer?.stopRendering()
+                    anchorRenderer?.stopRendering()
+                },
+            )
         lifecycle.addObserver(sessionHelper)
-
-        jxrCoreSession = JxrCoreSession.create(this)
-
-        planeRenderer = PlaneRenderer(session, jxrCoreSession, lifecycleScope)
-        anchorRenderer =
-            AnchorRenderer(this, planeRenderer, session, jxrCoreSession, lifecycleScope)
-        session.lifecycle.addObserver(planeRenderer)
-        session.lifecycle.addObserver(anchorRenderer)
-
-        setContent { HelloWorld(session) }
     }
 }
 
diff --git a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/AnchorRenderer.kt b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/AnchorRenderer.kt
index 58446d8..3259012 100644
--- a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/AnchorRenderer.kt
+++ b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/AnchorRenderer.kt
@@ -19,8 +19,6 @@
 import android.app.Activity
 import android.util.Log
 import android.widget.Toast
-import androidx.lifecycle.DefaultLifecycleObserver
-import androidx.lifecycle.LifecycleOwner
 import androidx.xr.arcore.Anchor
 import androidx.xr.arcore.AnchorCreateResourcesExhausted
 import androidx.xr.arcore.AnchorCreateSuccess
@@ -50,7 +48,7 @@
     val session: Session,
     val renderSession: JxrCoreSession,
     val coroutineScope: CoroutineScope,
-) : DefaultLifecycleObserver {
+) {
 
     private lateinit var gltfAnchorModel: GltfModel
 
@@ -58,7 +56,7 @@
 
     private lateinit var updateJob: CompletableJob
 
-    override fun onResume(owner: LifecycleOwner) {
+    internal fun startRendering() {
         updateJob =
             SupervisorJob(
                 coroutineScope.launch() {
@@ -69,7 +67,7 @@
             )
     }
 
-    override fun onPause(owner: LifecycleOwner) {
+    internal fun stopRendering() {
         updateJob.complete()
         clearRenderedAnchors()
     }
diff --git a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/PlaneRenderer.kt b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/PlaneRenderer.kt
index ca63173d..7b9b7f4 100644
--- a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/PlaneRenderer.kt
+++ b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/helloar/rendering/PlaneRenderer.kt
@@ -21,8 +21,6 @@
 import android.graphics.Color
 import android.view.View
 import android.widget.TextView
-import androidx.lifecycle.DefaultLifecycleObserver
-import androidx.lifecycle.LifecycleOwner
 import androidx.xr.arcore.Plane
 import androidx.xr.arcore.TrackingState
 import androidx.xr.runtime.Session
@@ -30,24 +28,25 @@
 import androidx.xr.runtime.math.Quaternion
 import androidx.xr.runtime.math.Vector2
 import androidx.xr.runtime.math.Vector3
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.PanelEntity
 import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session as JxrCoreSession
 import kotlinx.coroutines.CompletableJob
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.SupervisorJob
+import kotlinx.coroutines.cancel
 import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.StateFlow
 import kotlinx.coroutines.flow.asStateFlow
 import kotlinx.coroutines.launch
 
 /** Class that keeps track of planes rendered as GLTF models in a SceneCore session. */
-@Suppress("DEPRECATION")
 internal class PlaneRenderer(
     val session: Session,
     val renderSession: JxrCoreSession,
     val coroutineScope: CoroutineScope,
-) : DefaultLifecycleObserver {
+) {
 
     private val _renderedPlanes: MutableStateFlow<List<PlaneModel>> =
         MutableStateFlow(mutableListOf<PlaneModel>())
@@ -55,14 +54,14 @@
 
     private lateinit var updateJob: CompletableJob
 
-    override fun onResume(owner: LifecycleOwner) {
+    internal fun startRendering() {
         updateJob =
             SupervisorJob(
                 coroutineScope.launch { Plane.subscribe(session).collect { updatePlaneModels(it) } }
             )
     }
 
-    override fun onPause(owner: LifecycleOwner) {
+    internal fun stopRendering() {
         updateJob.complete()
         _renderedPlanes.value = emptyList<PlaneModel>()
     }
@@ -136,7 +135,8 @@
         return PanelEntity.create(
             renderSession,
             view,
-            PixelDimensions(320, 320),
+            Dimensions(320f, 320f),
+            Dimensions(1f, 1f, 1f),
             plane.hashCode().toString(),
             plane.state.value.centerPose,
         )
diff --git a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/persistentanchors/PersistentAnchorsActivity.kt b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/persistentanchors/PersistentAnchorsActivity.kt
index b4b64fd..f948c91 100644
--- a/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/persistentanchors/PersistentAnchorsActivity.kt
+++ b/xr/arcore/integration-tests/whitebox/src/main/kotlin/androidx/xr/arcore/apps/whitebox/persistentanchors/PersistentAnchorsActivity.kt
@@ -27,30 +27,21 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxHeight
-import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.Button
-import androidx.compose.material3.Scaffold
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.ComposeView
 import androidx.compose.ui.platform.ViewCompositionStrategy
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
-import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.ViewModelStoreOwner
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import androidx.lifecycle.lifecycleScope
-import androidx.lifecycle.repeatOnLifecycle
 import androidx.lifecycle.setViewTreeLifecycleOwner
 import androidx.lifecycle.setViewTreeViewModelStoreOwner
 import androidx.savedstate.SavedStateRegistryOwner
@@ -64,9 +55,9 @@
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
 import androidx.xr.scenecore.AnchorEntity
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.Entity
 import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session as JxrCoreSession
 import java.util.UUID
 import kotlin.collections.List
@@ -89,18 +80,17 @@
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
-        sessionHelper = SessionLifecycleHelper(this)
-        session = sessionHelper.session
+        sessionHelper =
+            SessionLifecycleHelper(
+                onCreateCallback = {
+                    session = it
+                    jxrCoreSession = JxrCoreSession.create(this)
+                    createTargetPanel()
+                    setContent { MainPanel() }
+                },
+                onResumeCallback = { onResumeCallback() },
+            )
         lifecycle.addObserver(sessionHelper)
-
-        jxrCoreSession = JxrCoreSession.create(this)
-
-        createTargetPanel()
-        setContent { MainPanel() }
-
-        session.lifecycleScope.launch {
-            session.repeatOnLifecycle(Lifecycle.State.RESUMED) { onResumeCallback() }
-        }
     }
 
     private fun createTargetPanel() {
@@ -111,7 +101,8 @@
             PanelEntity.create(
                 jxrCoreSession,
                 composeView,
-                PixelDimensions(640, 640),
+                Dimensions(640f, 640f),
+                Dimensions(1f, 1f, 1f),
                 "movableEntity",
                 movableEntityOffset,
             )
@@ -149,52 +140,20 @@
     private fun MainPanel() {
         val uuidsState = uuids.collectAsStateWithLifecycle()
 
-        Scaffold(
-            modifier = Modifier.fillMaxSize(),
-            topBar = {
-                Row(
-                    modifier = Modifier.fillMaxWidth(),
-                    verticalAlignment = Alignment.CenterVertically
-                ) {
-                    BackToMainActivityButton()
-                    Text(
-                        modifier = Modifier.fillMaxWidth(),
-                        textAlign = TextAlign.Center,
-                        text = "Persistent Anchors",
-                        fontWeight = FontWeight.Bold,
-                        fontSize = 24.sp,
-                    )
-                }
-            },
-        ) { innerPadding ->
-            Column(
-                modifier =
-                    Modifier.background(color = Color.White)
-                        .fillMaxHeight()
-                        .fillMaxWidth()
-                        .padding(innerPadding)
-                        .verticalScroll(rememberScrollState())
-            ) {
-                for (uuid in uuidsState.value) {
-                    Row(
-                        modifier =
-                            Modifier.fillMaxWidth().padding(vertical = 15.dp, horizontal = 10.dp),
-                        verticalAlignment = Alignment.CenterVertically,
-                    ) {
-                        Text(text = "UUID: $uuid", fontSize = 24.sp, modifier = Modifier.weight(1f))
-                        Button(
-                            modifier = Modifier.padding(horizontal = 10.dp),
-                            onClick = { loadAnchor(uuid) },
-                        ) {
-                            Text("Load anchor")
-                        }
-                        Button(
-                            modifier = Modifier.padding(horizontal = 10.dp),
-                            onClick = { unpersistAnchor(uuid) },
-                        ) {
-                            Text("Unpersist anchor")
-                        }
-                    }
+        Column(
+            modifier =
+                Modifier.background(color = Color.White)
+                    .fillMaxHeight()
+                    .fillMaxWidth()
+                    .padding(horizontal = 20.dp)
+        ) {
+            BackToMainActivityButton()
+            Text(modifier = Modifier.padding(top = 20.dp), text = "Persisted anchors:")
+            for (uuid in uuidsState.value) {
+                Row(modifier = Modifier.fillMaxWidth().padding(vertical = 20.dp)) {
+                    Text(text = "UUID: $uuid", fontSize = 24.sp)
+                    Button(onClick = { loadAnchor(uuid) }) { Text("Load anchor") }
+                    Button(onClick = { unpersistAnchor(uuid) }) { Text("Unpersist anchor") }
                 }
             }
         }
@@ -244,7 +203,8 @@
             PanelEntity.create(
                 jxrCoreSession,
                 composeView,
-                PixelDimensions(640, 640),
+                Dimensions(640f, 640f),
+                Dimensions(1f, 1f, 1f),
                 "anchorEntity ${anchor.hashCode()}",
                 Pose(),
             )
diff --git a/xr/compose/compose-testing/api/restricted_current.txt b/xr/compose/compose-testing/api/restricted_current.txt
index 15567bd..4b0d43b 100644
--- a/xr/compose/compose-testing/api/restricted_current.txt
+++ b/xr/compose/compose-testing/api/restricted_current.txt
@@ -66,9 +66,9 @@
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class SubspaceTestingActivity extends androidx.activity.ComponentActivity {
     ctor public SubspaceTestingActivity();
-    method public com.android.extensions.xr.XrExtensions getExtensions();
+    method public androidx.xr.scenecore.testing.FakeXrExtensions getExtensions();
     method public androidx.xr.scenecore.Session getSession();
-    property public com.android.extensions.xr.XrExtensions extensions;
+    property public androidx.xr.scenecore.testing.FakeXrExtensions extensions;
     property public androidx.xr.scenecore.Session session;
   }
 
diff --git a/xr/compose/compose-testing/build.gradle b/xr/compose/compose-testing/build.gradle
index 3a1061b..408827a 100644
--- a/xr/compose/compose-testing/build.gradle
+++ b/xr/compose/compose-testing/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.SoftwareType
 import androidx.build.KotlinTarget
 
@@ -50,8 +49,6 @@
     implementation("androidx.compose.ui:ui-util:1.2.1")
     implementation("androidx.compose.ui:ui-test-junit4:1.2.1")
     implementation("com.google.ar:impress:0.0.3")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 android {
diff --git a/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/SubspaceTestingActivity.kt b/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/SubspaceTestingActivity.kt
index 75c34d6..f564fd9 100644
--- a/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/SubspaceTestingActivity.kt
+++ b/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/SubspaceTestingActivity.kt
@@ -28,11 +28,10 @@
 import androidx.xr.scenecore.JxrPlatformAdapter
 import androidx.xr.scenecore.Session
 import androidx.xr.scenecore.impl.JxrPlatformAdapterAxr
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary
 import androidx.xr.scenecore.testing.FakeImpressApi
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService
-import com.android.extensions.xr.XrExtensions
+import androidx.xr.scenecore.testing.FakeXrExtensions
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer
 import org.mockito.Mockito.mock
@@ -42,7 +41,7 @@
 @Suppress("ForbiddenSuperClass")
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class SubspaceTestingActivity : ComponentActivity() {
-    public val extensions: XrExtensions = XrExtensionsProvider.getXrExtensions()!!
+    public val extensions: FakeXrExtensions = FakeXrExtensions()
     public val session: Session by lazy { createFakeSession(this) }
 
     /** Throws an exception by default under test; return Robolectric Display impl instead. */
@@ -107,11 +106,7 @@
 /**
  * Create a fake [Session] for testing.
  *
- * A convenience method that creates a fake [Session] for testing. If runtime is not provided, a
- * fake [JxrPlatformAdapter] will be created by default.
- *
- * @param activity The [SubspaceTestingActivity] to use for the [Session].
- * @param runtime The [JxrPlatformAdapter] to use for the [Session].
+ * TODO(b/370856223) Update documentation to include params
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public fun createFakeSession(
@@ -122,9 +117,7 @@
 /**
  * Create a fake [JxrPlatformAdapter] for testing.
  *
- * A convenience method that creates a fake [JxrPlatformAdapter] for testing.
- *
- * @param activity The [SubspaceTestingActivity] to use for the [JxrPlatformAdapter].
+ * TODO(b/370856223) Update documentation to include params
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public fun createFakeRuntime(activity: SubspaceTestingActivity): JxrPlatformAdapter =
diff --git a/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/TestSetup.kt b/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/TestSetup.kt
index 3efe31b..41f87da 100644
--- a/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/TestSetup.kt
+++ b/xr/compose/compose-testing/src/main/kotlin/androidx/xr/compose/testing/TestSetup.kt
@@ -19,7 +19,6 @@
 import android.app.Activity
 import android.content.Context
 import android.content.ContextWrapper
-import android.view.View
 import androidx.annotation.RestrictTo
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
@@ -27,21 +26,18 @@
 import androidx.compose.ui.platform.LocalContext
 import androidx.xr.compose.platform.LocalHasXrSpatialFeature
 import androidx.xr.compose.platform.LocalSession
-import androidx.xr.runtime.math.Pose
 import androidx.xr.scenecore.JxrPlatformAdapter
 import androidx.xr.scenecore.Session
+import androidx.xr.scenecore.SpatialEnvironment
 import org.mockito.kotlin.any
 import org.mockito.kotlin.doAnswer
 import org.mockito.kotlin.doReturn
 import org.mockito.kotlin.mock
 
 /**
- * A Test environment composable wrapper to support testing elevated components locally.
+ * A Test environment composable wrapper to support testing elevated components locally
  *
- * @param isXrEnabled Whether to enable XR.
- * @param isFullSpace Whether to enable full space mode.
- * @param runtime The [JxrPlatformAdapter] to use for the [Session].
- * @param content The content block containing the compose content to be tested.
+ * TODO(b/370856223) Update documentation
  */
 @Composable
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@@ -107,16 +103,10 @@
                 {
                     throw UnsupportedOperationException()
                 }
-            on {
-                createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
-                )
-            } doAnswer { throw UnsupportedOperationException() }
+            on { createPanelEntity(any(), any(), any(), any(), any(), any(), any()) } doAnswer
+                {
+                    throw UnsupportedOperationException()
+                }
             on { createLoggingEntity(any()) } doAnswer { throw UnsupportedOperationException() }
         },
     )
diff --git a/xr/compose/compose/api/restricted_current.txt b/xr/compose/compose/api/restricted_current.txt
index fb033e7..96633db 100644
--- a/xr/compose/compose/api/restricted_current.txt
+++ b/xr/compose/compose/api/restricted_current.txt
@@ -6,11 +6,6 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static void setSubspaceContent(androidx.activity.ComponentActivity, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
-  public final class LocalCoreEntityKt {
-    property @kotlin.PublishedApi internal static androidx.compose.runtime.ProvidableCompositionLocal<androidx.xr.compose.subspace.layout.OpaqueEntity?> LocalOpaqueEntity;
-    field @kotlin.PublishedApi internal static final androidx.compose.runtime.ProvidableCompositionLocal<androidx.xr.compose.subspace.layout.OpaqueEntity?> LocalOpaqueEntity;
-  }
-
   public final class LocalSessionKt {
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.xr.scenecore.Session?> getLocalSession();
     property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.xr.scenecore.Session?> LocalSession;
@@ -31,6 +26,40 @@
     field public static final androidx.xr.compose.platform.SceneManager INSTANCE;
   }
 
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public fun interface SessionCallbackProvider {
+    method public operator androidx.xr.compose.platform.SessionCallbacks get(androidx.xr.scenecore.Session session);
+    field public static final androidx.xr.compose.platform.SessionCallbackProvider.Companion Companion;
+  }
+
+  public static final class SessionCallbackProvider.Companion {
+    method public androidx.xr.compose.platform.SessionCallbackProvider getDefault();
+    property public androidx.xr.compose.platform.SessionCallbackProvider default;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SessionCallbacks {
+    method public java.io.Closeable onBoundsChanged(kotlin.jvm.functions.Function1<? super androidx.xr.scenecore.Dimensions,kotlin.Unit> callback);
+    method public java.io.Closeable onFullSpaceMode(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method public java.io.Closeable onHomeSpaceMode(kotlin.jvm.functions.Function1<? super androidx.xr.scenecore.Dimensions,kotlin.Unit> callback);
+    method public java.io.Closeable onSpaceModeChanged(kotlin.jvm.functions.Function1<? super androidx.xr.compose.platform.SpaceMode,kotlin.Unit> callback);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @kotlin.jvm.JvmInline public final value class SpaceMode {
+    method public int getValue();
+    property public int value;
+    field public static final androidx.xr.compose.platform.SpaceMode.Companion Companion;
+  }
+
+  public static final class SpaceMode.Companion {
+    method public int getFull();
+    method public int getHome();
+    method public int getNotApplicable();
+    method public int getUnspecified();
+    property public int Full;
+    property public int Home;
+    property public int NotApplicable;
+    property public int Unspecified;
+  }
+
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SpatialCapabilities {
     method public boolean isAppEnvironmentEnabled();
     method public boolean isContent3dEnabled();
@@ -240,13 +269,8 @@
 
 package @RequiresApi(34) androidx.xr.compose.subspace {
 
-  public final class RememberCoreEntityKt {
-    method @kotlin.PublishedApi internal static String entityName(String name);
-    method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.xr.compose.subspace.layout.CoreContentlessEntity rememberCoreContentlessEntity(kotlin.jvm.functions.Function1<? super androidx.xr.scenecore.Session,? extends androidx.xr.scenecore.Entity> entityFactory);
-  }
-
   public final class SpatialBoxKt {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialBox(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialAlignment alignment, optional boolean propagateMinConstraints, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.SpatialBoxScope,kotlin.Unit> content);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialBox(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialAlignment alignment, optional boolean propagateMinConstraints, optional String name, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.SpatialBoxScope,kotlin.Unit> content);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.foundation.layout.LayoutScopeMarker public interface SpatialBoxScope {
@@ -254,7 +278,7 @@
   }
 
   public final class SpatialColumnKt {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialColumn(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialAlignment alignment, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.SpatialColumnScope,kotlin.Unit> content);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialColumn(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialAlignment alignment, optional String name, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.SpatialColumnScope,kotlin.Unit> content);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.foundation.layout.LayoutScopeMarker public interface SpatialColumnScope {
@@ -263,14 +287,9 @@
     method public androidx.xr.compose.subspace.layout.SubspaceModifier weight(androidx.xr.compose.subspace.layout.SubspaceModifier, @FloatRange(from=0.0, fromInclusive=false) float weight, optional boolean fill);
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class SpatialCurvedRowDefaults {
-    method public float getCurveRadius();
-    property public float curveRadius;
-    field public static final androidx.xr.compose.subspace.SpatialCurvedRowDefaults INSTANCE;
-  }
-
   public final class SpatialLayoutSpacerKt {
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialLayoutSpacer(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialLayoutSpacer(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional String name);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class SpatialPanelDefaults {
@@ -281,14 +300,13 @@
 
   public final class SpatialPanelKt {
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void MainPanel(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialShape shape);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialPanel(android.content.Intent intent, optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialShape shape);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialPanel(android.view.View view, optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialShape shape);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialPanel(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialShape shape, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialPanel(android.content.Intent intent, optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional String name, optional androidx.xr.compose.subspace.layout.SpatialShape shape);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialPanel(android.view.View view, optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional String name, optional androidx.xr.compose.subspace.layout.SpatialShape shape);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialPanel(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional String name, optional androidx.xr.compose.subspace.layout.SpatialShape shape, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class SpatialRowKt {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialCurvedRow(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialAlignment alignment, optional float curveRadius, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.SpatialRowScope,kotlin.Unit> content);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialRow(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialAlignment alignment, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.SpatialRowScope,kotlin.Unit> content);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SpatialRow(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional androidx.xr.compose.subspace.layout.SpatialAlignment alignment, optional float curveRadius, optional String name, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.SpatialRowScope,kotlin.Unit> content);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.foundation.layout.LayoutScopeMarker public interface SpatialRowScope {
@@ -301,7 +319,7 @@
   }
 
   public final class VolumeKt {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void Volume(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, kotlin.jvm.functions.Function1<? super androidx.xr.scenecore.Entity,kotlin.Unit> onVolumeEntity);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void Volume(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional String name, kotlin.jvm.functions.Function1<? super androidx.xr.scenecore.Entity,kotlin.Unit> onVolumeEntity);
   }
 
 }
@@ -316,26 +334,6 @@
     ctor public CombinedSubspaceModifier(androidx.xr.compose.subspace.layout.SubspaceModifier outer, androidx.xr.compose.subspace.layout.SubspaceModifier inner);
   }
 
-  @kotlin.PublishedApi internal final class CoreContentlessEntity extends androidx.xr.compose.subspace.layout.CoreEntity {
-    ctor public CoreContentlessEntity(androidx.xr.scenecore.Entity entity);
-  }
-
-  @kotlin.PublishedApi internal abstract sealed class CoreEntity implements androidx.xr.compose.subspace.layout.OpaqueEntity {
-    method public final boolean addComponent(androidx.xr.scenecore.Component component);
-    method public void dispose();
-    method public final androidx.xr.scenecore.Entity getEntity();
-    method protected final androidx.compose.runtime.MutableState<androidx.xr.compose.unit.IntVolumeSize> getMutableSize();
-    method public final androidx.xr.compose.subspace.layout.CoreEntity? getParent();
-    method public androidx.xr.compose.unit.IntVolumeSize getSize();
-    method public final void removeComponent(androidx.xr.scenecore.Component component);
-    method public final void setParent(androidx.xr.compose.subspace.layout.CoreEntity?);
-    method public void setSize(androidx.xr.compose.unit.IntVolumeSize);
-    property public final androidx.xr.scenecore.Entity entity;
-    property protected final androidx.compose.runtime.MutableState<androidx.xr.compose.unit.IntVolumeSize> mutableSize;
-    property public final androidx.xr.compose.subspace.layout.CoreEntity? parent;
-    property public androidx.xr.compose.unit.IntVolumeSize size;
-  }
-
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Measurable {
     method public void adjustParams(androidx.xr.compose.subspace.layout.ParentLayoutParamsAdjustable params);
     method public androidx.xr.compose.subspace.layout.Placeable measure(androidx.xr.compose.unit.VolumeConstraints constraints);
@@ -371,9 +369,6 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.compose.subspace.layout.SubspaceModifier onGloballyPositioned(androidx.xr.compose.subspace.layout.SubspaceModifier, kotlin.jvm.functions.Function1<? super androidx.xr.compose.subspace.layout.SubspaceLayoutCoordinates,kotlin.Unit> onGloballyPositioned);
   }
 
-  @kotlin.PublishedApi internal interface OpaqueEntity {
-  }
-
   public final class PaddingKt {
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.compose.subspace.layout.SubspaceModifier padding(androidx.xr.compose.subspace.layout.SubspaceModifier, float all);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.compose.subspace.layout.SubspaceModifier padding(androidx.xr.compose.subspace.layout.SubspaceModifier, optional float horizontal, optional float vertical, optional float depth);
@@ -423,7 +418,7 @@
   }
 
   public final class ResizableKt {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.compose.subspace.layout.SubspaceModifier resizable(androidx.xr.compose.subspace.layout.SubspaceModifier, optional boolean enabled, optional androidx.xr.compose.unit.DpVolumeSize minimumSize, optional androidx.xr.compose.unit.DpVolumeSize maximumSize, optional boolean maintainAspectRatio, optional kotlin.jvm.functions.Function1<? super androidx.xr.compose.unit.IntVolumeSize,java.lang.Boolean>? onSizeChange);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.compose.subspace.layout.SubspaceModifier resizable(androidx.xr.compose.subspace.layout.SubspaceModifier, optional boolean enabled, optional androidx.xr.compose.unit.DpVolumeSize minimumSize, optional androidx.xr.compose.unit.DpVolumeSize maximumSize, optional boolean maintainAspectRatio, optional kotlin.jvm.functions.Function1<? super androidx.xr.compose.unit.IntVolumeSize,java.lang.Boolean> onSizeChange);
   }
 
   public final class RotateKt {
@@ -612,8 +607,9 @@
   }
 
   public final class SubspaceLayoutKt {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static inline void SubspaceLayout(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, androidx.xr.compose.subspace.layout.MeasurePolicy measurePolicy);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static inline void SubspaceLayout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, androidx.xr.compose.subspace.layout.MeasurePolicy measurePolicy);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SubspaceLayout(optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional String name, androidx.xr.compose.subspace.layout.MeasurePolicy measurePolicy);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @androidx.compose.runtime.Composable @androidx.xr.compose.subspace.SubspaceComposable public static void SubspaceLayout(kotlin.jvm.functions.Function0<kotlin.Unit> content, optional androidx.xr.compose.subspace.layout.SubspaceModifier modifier, optional String name, androidx.xr.compose.subspace.layout.MeasurePolicy measurePolicy);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String defaultSubspaceLayoutName();
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SubspaceModifier {
@@ -660,35 +656,6 @@
 
 package @RequiresApi(34) androidx.xr.compose.subspace.node {
 
-  @kotlin.PublishedApi internal interface ComposeSubspaceNode {
-    method public androidx.compose.runtime.CompositionLocalMap getCompositionLocalMap();
-    method public androidx.xr.compose.subspace.layout.CoreEntity? getCoreEntity();
-    method public androidx.xr.compose.subspace.layout.MeasurePolicy getMeasurePolicy();
-    method public androidx.xr.compose.subspace.layout.SubspaceModifier getModifier();
-    method public void setCompositionLocalMap(androidx.compose.runtime.CompositionLocalMap);
-    method public void setCoreEntity(androidx.xr.compose.subspace.layout.CoreEntity?);
-    method public void setMeasurePolicy(androidx.xr.compose.subspace.layout.MeasurePolicy);
-    method public void setModifier(androidx.xr.compose.subspace.layout.SubspaceModifier);
-    property public abstract androidx.compose.runtime.CompositionLocalMap compositionLocalMap;
-    property public abstract androidx.xr.compose.subspace.layout.CoreEntity? coreEntity;
-    property public abstract androidx.xr.compose.subspace.layout.MeasurePolicy measurePolicy;
-    property public abstract androidx.xr.compose.subspace.layout.SubspaceModifier modifier;
-    field public static final androidx.xr.compose.subspace.node.ComposeSubspaceNode.Companion Companion;
-  }
-
-  public static final class ComposeSubspaceNode.Companion {
-    method public kotlin.jvm.functions.Function0<androidx.xr.compose.subspace.node.ComposeSubspaceNode> getConstructor();
-    method public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.compose.runtime.CompositionLocalMap,kotlin.Unit> getSetCompositionLocalMap();
-    method public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.xr.compose.subspace.layout.CoreEntity?,kotlin.Unit> getSetCoreEntity();
-    method public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.xr.compose.subspace.layout.MeasurePolicy,kotlin.Unit> getSetMeasurePolicy();
-    method public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.xr.compose.subspace.layout.SubspaceModifier,kotlin.Unit> getSetModifier();
-    property public kotlin.jvm.functions.Function0<androidx.xr.compose.subspace.node.ComposeSubspaceNode> Constructor;
-    property public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.compose.runtime.CompositionLocalMap,kotlin.Unit> SetCompositionLocalMap;
-    property public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.xr.compose.subspace.layout.CoreEntity?,kotlin.Unit> SetCoreEntity;
-    property public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.xr.compose.subspace.layout.MeasurePolicy,kotlin.Unit> SetMeasurePolicy;
-    property public kotlin.jvm.functions.Function2<androidx.xr.compose.subspace.node.ComposeSubspaceNode,androidx.xr.compose.subspace.layout.SubspaceModifier,kotlin.Unit> SetModifier;
-  }
-
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface CompositionLocalConsumerSubspaceModifierNode {
   }
 
diff --git a/xr/compose/compose/build.gradle b/xr/compose/compose/build.gradle
index 3ca1c27b6..28b0208 100644
--- a/xr/compose/compose/build.gradle
+++ b/xr/compose/compose/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.SoftwareType
 import androidx.build.KotlinTarget
 
@@ -41,7 +40,6 @@
     implementation("androidx.annotation:annotation:1.8.1")
     implementation("androidx.savedstate:savedstate:1.2.1")
     implementation("androidx.activity:activity:1.9.3")
-    implementation("androidx.activity:activity-compose:1.9.3")
     implementation("androidx.lifecycle:lifecycle-common:2.8.7")
     implementation("androidx.lifecycle:lifecycle-runtime:2.8.7")
 
@@ -63,10 +61,6 @@
     testImplementation("androidx.compose.ui:ui-test:1.7.5")
     testImplementation("androidx.compose.ui:ui-test-junit4:1.7.5")
     testImplementation(project(":xr:compose:compose-testing"))
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-    testCompileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-    testImplementation(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.host.test.jar")))
 }
 
 android {
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/Activity.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/Activity.kt
index 62bfd3c..266e2e5 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/Activity.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/Activity.kt
@@ -80,6 +80,8 @@
             onDispose { session.mainPanelEntity.setHidden(false) }
         }
 
+        // TODO(b/354009078) Why does rendering content in full space mode break presubmits.
+
         // We need to emulate the composition locals that setContent provides
         CompositionLocalProvider(
             LocalConfiguration provides resources.configuration,
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalCoreEntity.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalCoreEntity.kt
index 4f64c1e..9dee625 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalCoreEntity.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalCoreEntity.kt
@@ -16,27 +16,12 @@
 
 package androidx.xr.compose.platform
 
-import androidx.compose.runtime.CompositionLocal
 import androidx.compose.runtime.ProvidableCompositionLocal
 import androidx.compose.runtime.compositionLocalOf
-import androidx.compose.runtime.compositionLocalWithComputedDefaultOf
 import androidx.xr.compose.subspace.layout.CoreEntity
-import androidx.xr.compose.subspace.layout.OpaqueEntity
-
-/**
- * A CompositionLocal that holds the current [OpaqueEntity] acting as the parent for any containing
- * composed UI.
- */
-@PublishedApi
-internal val LocalOpaqueEntity: ProvidableCompositionLocal<OpaqueEntity?> = compositionLocalOf {
-    null
-}
 
 /**
  * A CompositionLocal that holds the current [CoreEntity] acting as the parent for any containing
  * composed UI.
  */
-internal val LocalCoreEntity: CompositionLocal<CoreEntity?> =
-    compositionLocalWithComputedDefaultOf {
-        LocalOpaqueEntity.currentValue as CoreEntity?
-    }
+internal val LocalCoreEntity: ProvidableCompositionLocal<CoreEntity?> = compositionLocalOf { null }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalSession.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalSession.kt
index 10a8071..6a64eff 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalSession.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/LocalSession.kt
@@ -17,11 +17,9 @@
 package androidx.xr.compose.platform
 
 import androidx.annotation.RestrictTo
-import androidx.compose.runtime.Composable
 import androidx.compose.runtime.ProvidableCompositionLocal
 import androidx.compose.runtime.compositionLocalWithComputedDefaultOf
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalDensity
 import androidx.xr.compose.subspace.layout.CoreMainPanelEntity
 import androidx.xr.scenecore.Session
 
@@ -50,5 +48,4 @@
  * makes it so we don't have to worry about disposing the instance every time it is used.
  */
 internal val Session.coreMainPanelEntity: CoreMainPanelEntity
-    @Composable
-    get() = mainPanelEntityMap.getOrPut(this) { CoreMainPanelEntity(this, LocalDensity.current) }
+    get() = mainPanelEntityMap.getOrPut(this) { CoreMainPanelEntity(this) }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/SceneManager.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/SceneManager.kt
index fac3213..98c081b 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/SceneManager.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/SceneManager.kt
@@ -23,9 +23,7 @@
 /**
  * Manager for all [SpatialComposeScene]s that are created when the [SceneManager] is running.
  *
- * Enables finding all semantic roots in a spatial scene graph. This is useful for testing libraries
- * as well as developer tooling to help semantically identify parts of the compose tree. It is not
- * intended to be used in individual apps.
+ * Enables finding all semantic roots in a spatial scene graph.
  */
 @Suppress("NotCloseable")
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/SessionCallbackProvider.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/SessionCallbackProvider.kt
new file mode 100644
index 0000000..1f91439
--- /dev/null
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/platform/SessionCallbackProvider.kt
@@ -0,0 +1,184 @@
+/*
+ * Copyright 2024 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.xr.compose.platform
+
+import androidx.annotation.RestrictTo
+import androidx.xr.scenecore.Dimensions
+import androidx.xr.scenecore.Session
+import java.io.Closeable
+
+/** Provides a [SessionCallbacks] for the current Activity. */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public fun interface SessionCallbackProvider {
+    public operator fun get(session: Session): SessionCallbacks
+
+    public companion object {
+        public val default: SessionCallbackProvider =
+            object : SessionCallbackProvider {
+                val callbackMap = mutableMapOf<Session, SessionCallbacks>()
+
+                override fun get(session: Session): SessionCallbacks =
+                    callbackMap.computeIfAbsent(session, ::DefaultSessionCallbacks)
+            }
+    }
+}
+
+/** Class to store callback lambdas associated with the Session. */
+@Suppress("SingularCallback")
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public interface SessionCallbacks {
+    /**
+     * Register a [callback] to be triggered when the app goes into full space mode. It will be
+     * called immediately upon registration if the system is currently in full space mode and its
+     * state is known.
+     *
+     * @param callback the method that will be called when the application enters full space mode.
+     * @return a closeable to unregister the callback
+     */
+    public fun onFullSpaceMode(callback: () -> Unit): Closeable
+
+    /**
+     * Register a [callback] to be triggered when the app goes into home space mode. It will be
+     * called immediately upon registration if the system is currently in home space mode and its
+     * state is known.
+     *
+     * @param callback the method that will be called when the application enters home space mode.
+     *   It will be called with the current application bounds as its argument.
+     * @return a closeable to unregister the callback
+     */
+    public fun onHomeSpaceMode(callback: (Dimensions) -> Unit): Closeable
+
+    /**
+     * Register a [callback] to be triggered when the app changes space mode. It will be called
+     * immediately with the current state if that state is available.
+     *
+     * @param callback the method that will be called when the space mode changes. It will accept an
+     *   enum [SpaceMode] value indicating the current mode.
+     * @return a closeable to unregister the callback
+     */
+    public fun onSpaceModeChanged(callback: (spaceMode: SpaceMode) -> Unit): Closeable
+
+    /**
+     * Register a [callback] to be triggered when the bounds of the app change. It will be called
+     * immediately with the current state if that state is available.
+     *
+     * @param callback the method that will be called when the application bounds change. The
+     *   argument passed to the callback represents the current bounds of the application.
+     * @return a closeable to unregister the callback
+     */
+    public fun onBoundsChanged(callback: (Dimensions) -> Unit): Closeable
+}
+
+/**
+ * Represents immersion level capabilities of the current application environment.
+ *
+ * In XR environments, there are a few different modes that an application can run in:
+ * - Home Space Mode - the application can run side-by-side with other applications for
+ *   multitasking; however, spatialization (e.g. Orbiters, Panels, 3D objects, etc.) is not allowed.
+ * - Full Space Mode - the application is given the entire space and has access to spatialization.
+ *   It may render multiple panels and 3D objects.
+ */
+@JvmInline
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public value class SpaceMode private constructor(public val value: Int) {
+    public companion object {
+        /**
+         * Current space mode or capabilities unknown. Awaiting checks to complete to indicate the
+         * proper space mode.
+         */
+        public val Unspecified: SpaceMode = SpaceMode(0)
+
+        /**
+         * Space mode is not applicable to the current system. This indicates that the current
+         * system is not XR (e.g. Phone, Tablet, etc.)
+         */
+        public val NotApplicable: SpaceMode = SpaceMode(1)
+
+        /**
+         * The XR application is currently in Full Space Mode.
+         *
+         * In Full Space Mode, the application is given the entire space for its own content. It has
+         * access to spatialization and may render multiple panels and 3D objects.
+         */
+        public val Full: SpaceMode = SpaceMode(2)
+
+        /**
+         * The XR application is currently in Home Space Mode.
+         *
+         * In Home Space Mode, the application does not have access to spatialization. It may not
+         * render multiple panels, orbiters, or 3D objects. However, it may run side-by-side with
+         * other applications for multitasking.
+         */
+        public val Home: SpaceMode = SpaceMode(3)
+    }
+}
+
+private class DefaultSessionCallbacks(session: Session) : SessionCallbacks {
+    private var currentDimensions: Dimensions? = null
+    private val onBoundsChangeListeners: MutableList<(Dimensions) -> Unit> = mutableListOf()
+
+    init {
+        // TODO: b/370618645 - This uses a direct executor for the callbacks, to maintain consistent
+        // behavior for clients using Closeables returned by other methods in this class. We should
+        // reconsider this approach, see the linked bug for more details.
+        session.activitySpace.addBoundsChangedListener({ runnable -> runnable.run() }) {
+            onBoundsChangeListeners.forEach { callback -> callback.invoke(it) }
+            currentDimensions = it
+        }
+    }
+
+    override fun onFullSpaceMode(callback: () -> Unit): Closeable = add {
+        if (it.isFullSpace) {
+            callback()
+        }
+    }
+
+    override fun onHomeSpaceMode(callback: (Dimensions) -> Unit): Closeable = add {
+        if (!it.isFullSpace) {
+            callback(it)
+        }
+    }
+
+    override fun onSpaceModeChanged(callback: (SpaceMode) -> Unit): Closeable = add {
+        // Invoke the callback if the current full space state is not equal to the next full
+        // space state or if the current dimensions are the same object reference as the
+        // next dimensions (initial call when this callback is registered)
+        if (it.isFullSpace != currentDimensions?.isFullSpace || it === currentDimensions) {
+            callback(if (it.isFullSpace) SpaceMode.Full else SpaceMode.Home)
+        }
+    }
+
+    override fun onBoundsChanged(callback: (Dimensions) -> Unit): Closeable = add(callback)
+
+    private fun add(callback: (nextDimensions: Dimensions) -> Unit): Closeable {
+        if (currentDimensions != null) {
+            callback(currentDimensions!!)
+        }
+        onBoundsChangeListeners.add(callback)
+        return Closeable {
+
+            // Tests break if this line stays uncommented
+            onBoundsChangeListeners.remove(callback)
+        }
+    }
+}
+
+private val Dimensions.isFullSpace: Boolean
+    get() =
+        width == Float.POSITIVE_INFINITY &&
+            height == Float.POSITIVE_INFINITY &&
+            depth == Float.POSITIVE_INFINITY
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/ElevatedPanel.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/ElevatedPanel.kt
index 53960df..fce6f83 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/ElevatedPanel.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/ElevatedPanel.kt
@@ -35,23 +35,26 @@
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalView
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.IntSize
 import androidx.xr.compose.platform.LocalCoreEntity
-import androidx.xr.compose.platform.LocalOpaqueEntity
 import androidx.xr.compose.platform.LocalSession
 import androidx.xr.compose.platform.coreMainPanelEntity
+import androidx.xr.compose.platform.disposableValueOf
+import androidx.xr.compose.platform.getValue
+import androidx.xr.compose.subspace.layout.CorePanelEntity
 import androidx.xr.compose.subspace.layout.SpatialRoundedCornerShape
 import androidx.xr.compose.subspace.layout.SpatialShape
 import androidx.xr.compose.subspace.rememberComposeView
-import androidx.xr.compose.subspace.rememberCorePanelEntity
 import androidx.xr.compose.unit.IntVolumeSize
 import androidx.xr.compose.unit.Meter
 import androidx.xr.compose.unit.Meter.Companion.meters
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
 
 internal object ElevatedPanelDefaults {
     /** Default shape for a Spatial Panel. */
@@ -114,19 +117,29 @@
 ) {
     val session = checkNotNull(LocalSession.current) { "session must be initialized" }
     val parentEntity = LocalCoreEntity.current ?: session.coreMainPanelEntity
+    val density = LocalDensity.current
     val view = rememberComposeView()
-    val panelEntity =
-        rememberCorePanelEntity(shape = shape) {
-            PanelEntity.create(
-                session = session,
-                view = view,
-                pixelDimensions = contentSize.run { PixelDimensions(width, height) },
-                name = "ElevatedPanel:${view.id}",
+    val meterSize = contentSize.toMeterSize(density)
+    val panelEntity by remember {
+        disposableValueOf(
+            CorePanelEntity(
+                session,
+                PanelEntity.create(
+                    session = session,
+                    view = view,
+                    surfaceDimensionsPx =
+                        contentSize.run { Dimensions(width.toFloat(), height.toFloat(), 0f) },
+                    dimensions = meterSize.toCoreMeterDimensions(),
+                    name = "ElevatedPanel:${view.id}",
+                ),
             )
+        ) {
+            it.dispose()
         }
+    }
 
     view.setContent {
-        CompositionLocalProvider(LocalOpaqueEntity provides panelEntity) {
+        CompositionLocalProvider(LocalCoreEntity provides panelEntity) {
             Box(Modifier.alpha(if (pose == null) 0.0f else 1.0f)) { content() }
         }
     }
@@ -142,6 +155,12 @@
         val height = contentSize.height
 
         panelEntity.size = IntVolumeSize(width = width, height = height, depth = 0)
+        if (shape is SpatialRoundedCornerShape) {
+            panelEntity.setCornerRadius(
+                shape.computeCornerRadius(width.toFloat(), height.toFloat(), density),
+                density,
+            )
+        }
     }
 
     LaunchedEffect(parentEntity) { panelEntity.entity.setParent(parentEntity.entity) }
@@ -165,5 +184,21 @@
     fun toVector3() = Vector3(x = x.toM(), y = y.toM(), z = z.toM())
 }
 
+/** Represents a 3D size using [Meter] units. */
+internal data class MeterSize(
+    public val width: Meter = 0.meters,
+    public val height: Meter = 0.meters,
+    public val depth: Meter = 0.meters,
+)
+
+private fun IntSize.toMeterSize(density: Density) =
+    MeterSize(
+        Meter.fromPixel(width.toFloat(), density),
+        Meter.fromPixel(height.toFloat(), density),
+        0.meters,
+    )
+
+private fun MeterSize.toCoreMeterDimensions() = Dimensions(width.toM(), height.toM(), depth.toM())
+
 internal val View.size
     get() = IntSize(width, height)
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/RememberCalculatePose.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/RememberCalculatePose.kt
index 62328fd..d159c06 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/RememberCalculatePose.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/RememberCalculatePose.kt
@@ -36,23 +36,13 @@
 ): Pose {
     val density = LocalDensity.current
     return remember(contentOffset, parentViewSize, contentSize, zDepth) {
-        calculatePose(contentOffset, parentViewSize, contentSize, density, zDepth)
+        val meterPosition =
+            contentOffset.toMeterPosition(parentViewSize, contentSize, density) +
+                MeterPosition(z = zDepth.meters)
+        Pose(translation = meterPosition.toVector3())
     }
 }
 
-internal fun calculatePose(
-    contentOffset: Offset,
-    parentViewSize: IntSize,
-    contentSize: IntSize,
-    density: Density,
-    zDepth: Float = 0f,
-): Pose {
-    val meterPosition =
-        contentOffset.toMeterPosition(parentViewSize, contentSize, density) +
-            MeterPosition(z = zDepth.meters)
-    return Pose(translation = meterPosition.toVector3())
-}
-
 /**
  * Resolves the coordinate systems between 2D app pixel space and 3D meter space. In 2d space, views
  * and composables are anchored at the top left corner; however, in 3D space they are anchored at
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialDialog.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialDialog.kt
index 41dde0c..8062693 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialDialog.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialDialog.kt
@@ -16,7 +16,6 @@
 
 package androidx.xr.compose.spatial
 
-import androidx.activity.compose.BackHandler
 import androidx.annotation.RestrictTo
 import androidx.compose.animation.core.FiniteAnimationSpec
 import androidx.compose.animation.core.animate
@@ -61,11 +60,8 @@
  *   outside of it. Defaults to `true`.
  * @property usePlatformDefaultWidth whether the dialog should use the platform's default width.
  *   Defaults to `true`. This is only used in non-spatial environments.
- * @property restingLevelAnimationSpec the animation specification for the depth offset of the app
- *   content as it animates away from the user towards its recessed resting level when a spatial
- *   dialog is shown. The same specification is used when the app content animates back towards the
- *   user to its original resting level when the dialog is dismissed. This is only used in spatial
- *   environments.
+ * @property restingLevelAnimationSpec the animation specification for the resting level of the
+ *   dialog as it animates towards or away from the user. This is only used in spatial environments.
  * @property spatialElevationLevel the elevation level of the dialog. Defaults to
  *   [SpatialElevationLevel.DialogDefault].
  * @see [SpatialDialog]
@@ -130,10 +126,9 @@
 /**
  * [SpatialDialog] is a dialog that is elevated above the activity.
  *
- * When spatial dialogs are displayed the existing app content is pushed back and the dialog appears
- * on top of the content at the base elevation level. When the dialog is dismissed the reverse
- * happens with the dialog going away and the app content elevating back into place towards the
- * user.
+ * When spatial dialogs are displayed the existing content is pushed back and the dialog elevates
+ * into place. When the dialog is dismissed the reverse happens with the dialog getting pushed back
+ * and the previous content elevating back into place.
  *
  * @param onDismissRequest a callback to be invoked when the dialog should be dismissed.
  * @param properties the dialog properties.
@@ -169,10 +164,7 @@
     // Start elevation at Level0 to prevent effects where the dialog flashes behind its parent.
     var spatialElevationLevel by remember { mutableStateOf(SpatialElevationLevel.Level0) }
     val dialogManager = LocalDialogManager.current
-    BackHandler {
-        // TODO(b/401028662) Investigate if we need the animation inside of this scope.
-        dialogManager.isSpatialDialogActive.value = false
-    }
+
     DisposableEffect(Unit) {
         scope.launch {
             animate(
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialElevation.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialElevation.kt
index 2d50f37..a0cf103 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialElevation.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/SpatialElevation.kt
@@ -16,7 +16,6 @@
 
 package androidx.xr.compose.spatial
 
-import android.util.Log
 import androidx.annotation.RestrictTo
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.BoxWithConstraints
@@ -47,7 +46,7 @@
  *
  * In non-spatial environments, the content is rendered normally without elevation.
  *
- * SpatialElevation does not support a [content] lambda that has a width or height of zero.
+ * Empty composables cannot be placed in a SpatialElevation. This includes Popups and Dialogs.
  *
  * @param spatialElevationLevel the desired elevation level for the panel in spatial environments.
  * @param content the composable content to be displayed within the elevated panel.
@@ -99,13 +98,9 @@
             Box(
                 Modifier.constrainTo(constraints)
                     .onSizeChanged {
-                        if (it.width <= bufferPaddingPx * 2 || it.height <= bufferPaddingPx * 2) {
-                            Log.w(
-                                "SpatialElevation",
-                                "Empty composables cannot be placed at a SpatialElevation. You may be trying" +
-                                    " to use a Popup or Dialog with a SpatialElevation, which is not supported.",
-                            )
-                            return@onSizeChanged
+                        check(it.width > bufferPaddingPx * 2 && it.height > bufferPaddingPx * 2) {
+                            "Empty composables cannot be placed at a SpatialElevation. You may be trying" +
+                                " to use a Popup or Dialog with a SpatialElevation, which is not supported."
                         }
                         contentSize = it
                     }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/Subspace.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/Subspace.kt
index 7d189e5..ae9136a 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/Subspace.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/spatial/Subspace.kt
@@ -38,7 +38,6 @@
 import androidx.compose.ui.layout.onGloballyPositioned
 import androidx.compose.ui.layout.positionInRoot
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.platform.LocalView
 import androidx.compose.ui.unit.IntSize
 import androidx.xr.compose.platform.LocalCoreEntity
@@ -179,19 +178,14 @@
     }
     var measuredSize by remember { mutableStateOf(IntVolumeSize.Zero) }
     var contentOffset by remember { mutableStateOf(Offset.Zero) }
-    val viewSize = LocalView.current.size
-    val density = LocalDensity.current
-
-    LaunchedEffect(measuredSize, contentOffset, viewSize, density) {
-        subspaceRootContainer.setPose(
-            calculatePose(
-                contentOffset,
-                viewSize,
-                measuredSize.run { IntSize(width, height) },
-                density
-            )
+    val pose =
+        rememberCalculatePose(
+            contentOffset,
+            LocalView.current.size,
+            measuredSize.run { IntSize(width, height) },
         )
-    }
+
+    LaunchedEffect(pose) { subspaceRootContainer.setPose(pose) }
 
     Layout(modifier = Modifier.onGloballyPositioned { contentOffset = it.positionInRoot() }) {
         _,
@@ -222,14 +216,6 @@
                     )
                 layout(measuredSize.width, measuredSize.height, measuredSize.depth) {
                     placeables.forEach { it.place(Pose.Identity) }
-                    subspaceRootContainer.setPose(
-                        calculatePose(
-                            contentOffset,
-                            viewSize,
-                            measuredSize.run { IntSize(width, height) },
-                            density,
-                        )
-                    )
                 }
             }
         }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/RememberCoreEntity.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/RememberCoreEntity.kt
index e5b6888..0e1e104 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/RememberCoreEntity.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/RememberCoreEntity.kt
@@ -18,16 +18,12 @@
 
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.DisallowComposableCalls
-import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.remember
-import androidx.compose.ui.platform.LocalDensity
 import androidx.xr.compose.platform.LocalSession
 import androidx.xr.compose.platform.disposableValueOf
 import androidx.xr.compose.platform.getValue
 import androidx.xr.compose.subspace.layout.CoreContentlessEntity
-import androidx.xr.compose.subspace.layout.CoreMainPanelEntity
 import androidx.xr.compose.subspace.layout.CorePanelEntity
-import androidx.xr.compose.subspace.layout.SpatialShape
 import androidx.xr.scenecore.Entity
 import androidx.xr.scenecore.PanelEntity
 import androidx.xr.scenecore.Session
@@ -37,9 +33,8 @@
  * composition.
  */
 @Composable
-@PublishedApi
-internal fun rememberCoreContentlessEntity(
-    entityFactory: @DisallowComposableCalls Session.() -> Entity
+internal inline fun rememberCoreContentlessEntity(
+    crossinline entityFactory: @DisallowComposableCalls Session.() -> Entity
 ): CoreContentlessEntity {
     val session = checkNotNull(LocalSession.current) { "session must be initialized" }
     val coreEntity by remember {
@@ -52,50 +47,15 @@
 @Composable
 internal inline fun rememberCorePanelEntity(
     crossinline onCoreEntityCreated: @DisallowComposableCalls (CorePanelEntity) -> Unit = {},
-    shape: SpatialShape = SpatialPanelDefaults.shape,
     crossinline entityFactory: @DisallowComposableCalls Session.() -> PanelEntity,
 ): CorePanelEntity {
     val session = checkNotNull(LocalSession.current) { "session must be initialized" }
-    val density = LocalDensity.current
     val coreEntity by remember {
         disposableValueOf(
-            CorePanelEntity(session.entityFactory(), density)
-                .also { it.shape = shape }
-                .also(onCoreEntityCreated)
+            CorePanelEntity(session, session.entityFactory()).also(onCoreEntityCreated)
         ) {
             it.dispose()
         }
     }
-    LaunchedEffect(shape) { coreEntity.shape = shape }
     return coreEntity
 }
-
-/**
- * Creates a [CoreMainPanelEntity] that is automatically disposed of when it leaves the composition.
- */
-@Composable
-internal fun rememberCoreMainPanelEntity(
-    shape: SpatialShape = SpatialPanelDefaults.shape
-): CoreMainPanelEntity {
-    val session = checkNotNull(LocalSession.current) { "session must be initialized" }
-    val density = LocalDensity.current
-    val coreEntity by remember {
-        disposableValueOf(CoreMainPanelEntity(session, density).also { it.shape = shape }) {
-            it.dispose()
-        }
-    }
-    LaunchedEffect(shape) { coreEntity.shape = shape }
-    return coreEntity
-}
-
-private var entityNamePart: Int = 0
-
-/**
- * Creates a unique debugging name for an [Entity].
- *
- * @param name A context-specific name for the [Entity].
- */
-@PublishedApi
-internal fun entityName(name: String): String {
-    return "$name-${entityNamePart++}"
-}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialBox.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialBox.kt
index cc0eb13..a9605d13 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialBox.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialBox.kt
@@ -52,6 +52,7 @@
  * @param modifier The modifier to be applied to the layout.
  * @param alignment The default alignment of children within the [SpatialBox].
  * @param propagateMinConstraints Whether the incoming min constraints should be passed to content.
+ * @param name The name for the [SpatialBox].
  * @param content The content of the [SpatialBox].
  */
 @Composable
@@ -61,15 +62,23 @@
     modifier: SubspaceModifier = SubspaceModifier,
     alignment: SpatialAlignment = SpatialAlignment.Center,
     propagateMinConstraints: Boolean = false,
+    name: String = defaultSpatialBoxName(),
     content: @Composable @SubspaceComposable SpatialBoxScope.() -> Unit,
 ) {
     SubspaceLayout(
         modifier = modifier,
         content = { SpatialBoxScopeInstance.content() },
         measurePolicy = SpatialBoxMeasurePolicy(alignment, propagateMinConstraints),
+        name = name,
     )
 }
 
+private var spatialBoxNamePart: Int = 0
+
+private fun defaultSpatialBoxName(): String {
+    return "SpatialBox-${spatialBoxNamePart++}"
+}
+
 /** [MeasurePolicy] for [SpatialBox]. */
 internal class SpatialBoxMeasurePolicy(
     private val alignment: SpatialAlignment,
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialColumn.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialColumn.kt
index 0d433e1..e7f91e9 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialColumn.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialColumn.kt
@@ -34,6 +34,7 @@
  *
  * @param modifier Modifiers to apply to the layout.
  * @param alignment The default alignment for child elements within the column.
+ * @param name The name of the layout.
  * @param content The composable content to be laid out vertically.
  */
 @Composable
@@ -42,6 +43,7 @@
 public fun SpatialColumn(
     modifier: SubspaceModifier = SubspaceModifier,
     alignment: SpatialAlignment = SpatialAlignment.Center,
+    name: String = defaultSpatialColumnName(),
     content: @Composable @SubspaceComposable SpatialColumnScope.() -> Unit,
 ) {
     SubspaceLayout(
@@ -49,12 +51,9 @@
         content = { SpatialColumnScopeInstance.content() },
         coreEntity =
             rememberCoreContentlessEntity {
-                ContentlessEntity.create(
-                    this,
-                    name = entityName("SpatialColumn"),
-                    pose = Pose.Identity
-                )
+                ContentlessEntity.create(this, name = name, pose = Pose.Identity)
             },
+        name = name,
         measurePolicy =
             RowColumnMeasurePolicy(
                 orientation = LayoutOrientation.Vertical,
@@ -126,3 +125,9 @@
         return this then RowColumnAlignElement(depthSpatialAlignment = alignment)
     }
 }
+
+private var spatialColumnNamePart: Int = 0
+
+private fun defaultSpatialColumnName(): String {
+    return "SpatialColumn-${spatialColumnNamePart++}"
+}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialLayoutSpacer.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialLayoutSpacer.kt
index de8a605..73f901c 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialLayoutSpacer.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialLayoutSpacer.kt
@@ -39,11 +39,29 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public fun SpatialLayoutSpacer(modifier: SubspaceModifier = SubspaceModifier) {
     SubspaceLayout(
+        name = defaultSpatialLayoutSpacerName(),
         modifier = modifier,
         measurePolicy = SpacerMeasurePolicy,
     )
 }
 
+/**
+ * A composable that represents an empty space layout. Its size can be controlled using modifiers
+ * like [SubspaceModifier.width], [SubspaceModifier.height], etc.
+ *
+ * @param modifier Modifiers to apply to this spacer.
+ * @param name The name of this SpatialLayoutSpacer element.
+ */
+@Composable
+@SubspaceComposable
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public fun SpatialLayoutSpacer(
+    modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultSpatialLayoutSpacerName(),
+) {
+    SubspaceLayout(name = name, modifier = modifier, measurePolicy = SpacerMeasurePolicy)
+}
+
 private object SpacerMeasurePolicy : MeasurePolicy {
     override fun MeasureScope.measure(
         measurables: List<Measurable>,
@@ -57,3 +75,9 @@
         }
     }
 }
+
+private var spatialLayoutSpacerNamePart: Int = 0
+
+private fun defaultSpatialLayoutSpacerName(): String {
+    return "Spacer-${spatialLayoutSpacerNamePart++}"
+}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialPanel.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialPanel.kt
index 19be932..e72dfc4 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialPanel.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialPanel.kt
@@ -37,16 +37,17 @@
 import androidx.compose.ui.UiComposable
 import androidx.compose.ui.graphics.Color as UiColor
 import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.unit.dp
+import androidx.xr.compose.platform.LocalCoreEntity
 import androidx.xr.compose.platform.LocalDialogManager
-import androidx.xr.compose.platform.LocalOpaqueEntity
 import androidx.xr.compose.platform.LocalSession
-import androidx.xr.compose.subspace.layout.CoreBasePanelEntity
 import androidx.xr.compose.subspace.layout.CorePanelEntity
 import androidx.xr.compose.subspace.layout.SpatialRoundedCornerShape
 import androidx.xr.compose.subspace.layout.SpatialShape
 import androidx.xr.compose.subspace.layout.SubspaceLayout
 import androidx.xr.compose.subspace.layout.SubspaceModifier
+import androidx.xr.compose.unit.IntVolumeSize
 import androidx.xr.compose.unit.Meter.Companion.millimeters
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
@@ -70,6 +71,7 @@
  *
  * @param view Content view to be displayed within the SpatialPanel.
  * @param modifier SubspaceModifiers to apply to the SpatialPanel.
+ * @param name A name for the SpatialPanel, useful for debugging.
  * @param shape The shape of this Spatial Panel.
  */
 @Composable
@@ -78,9 +80,10 @@
 public fun SpatialPanel(
     view: View,
     modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultSpatialPanelName(),
     shape: SpatialShape = SpatialPanelDefaults.shape,
 ) {
-    SpatialPanel(modifier, view, shape) {}
+    SpatialPanel(modifier, name, view, shape) {}
 }
 
 /**
@@ -88,6 +91,7 @@
  * content.
  *
  * @param modifier SubspaceModifiers to apply to the SpatialPanel.
+ * @param name A name for the SpatialPanel, useful for debugging.
  * @param shape The shape of this Spatial Panel.
  * @param content The composable content to render within the SpatialPanel.
  */
@@ -96,6 +100,7 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public fun SpatialPanel(
     modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultSpatialPanelName(),
     shape: SpatialShape = SpatialPanelDefaults.shape,
     content: @Composable @UiComposable () -> Unit,
 ) {
@@ -103,12 +108,13 @@
 
     SpatialPanel(
         modifier = modifier,
+        name = name,
         view = composeView,
         shape = shape,
         onCorePanelEntityCreated = { corePanelEntity ->
             composeView.setContent {
                 CompositionLocalProvider(
-                    LocalOpaqueEntity provides corePanelEntity,
+                    LocalCoreEntity provides corePanelEntity,
                     content = content
                 )
             }
@@ -150,14 +156,20 @@
     modifier: SubspaceModifier = SubspaceModifier,
     shape: SpatialShape = SpatialPanelDefaults.shape,
 ) {
-    val mainPanel = rememberCoreMainPanelEntity(shape = shape)
+    val session = checkNotNull(LocalSession.current) { "session must be initialized" }
 
     DisposableEffect(Unit) {
-        mainPanel.hidden = false
-        onDispose { mainPanel.hidden = true }
+        session.mainPanelEntity.setHidden(false)
+        onDispose { session.mainPanelEntity.setHidden(true) }
     }
 
-    LayoutPanelEntity(mainPanel, modifier)
+    LayoutPanelEntity(
+        // Do not use rememberCorePanelEntity since we do not want to dispose the main panel entity.
+        remember { CorePanelEntity(session, session.mainPanelEntity) },
+        "MainPanel",
+        shape,
+        modifier,
+    )
 }
 
 /**
@@ -175,6 +187,7 @@
  *
  * @param intent The intent of an Activity to launch within this panel.
  * @param modifier SubspaceModifiers to apply to the SpatialPanel.
+ * @param name A name for the SpatialPanel, useful for debugging.
  * @param shape The shape of this Spatial Panel.
  */
 @Composable
@@ -183,6 +196,7 @@
 public fun SpatialPanel(
     intent: Intent,
     modifier: SubspaceModifier = SubspaceModifier,
+    name: String = "ActivityPanel-${intent.action}",
     shape: SpatialShape = SpatialPanelDefaults.shape,
 ) {
 
@@ -192,12 +206,11 @@
     val minimumPanelDimension = Dimensions(10f, 10f, 10f)
     val rect = Rect(0, 0, DEFAULT_SIZE_PX, DEFAULT_SIZE_PX)
     val activityPanelEntity = rememberCorePanelEntity {
-        ActivityPanelEntity.create(session, rect, entityName("ActivityPanel-${intent.action}"))
-            .also { it.launchActivity(intent) }
+        ActivityPanelEntity.create(session, rect, name).also { it.launchActivity(intent) }
     }
 
     SpatialBox {
-        LayoutPanelEntity(activityPanelEntity, modifier)
+        LayoutPanelEntity(activityPanelEntity, name, shape, modifier)
 
         if (dialogManager.isSpatialDialogActive.value) {
             val scrimView = rememberComposeView()
@@ -215,24 +228,35 @@
                 ) {}
             }
 
-            val scrimPanelEntity =
-                rememberCorePanelEntity(shape = shape) {
-                    PanelEntity.create(
-                            session = session,
-                            view = scrimView,
-                            dimensions = minimumPanelDimension,
-                            name = entityName("ScrimPanel"),
-                            pose = Pose.Identity,
-                        )
-                        .also {
-                            it.setParent(activityPanelEntity.entity)
-                            it.setPose(Pose(translation = Vector3(0f, 0f, 3.millimeters.toM())))
-                        }
-                }
+            val scrimPanelEntity = rememberCorePanelEntity {
+                PanelEntity.create(
+                        session = session,
+                        view = scrimView,
+                        surfaceDimensionsPx = minimumPanelDimension,
+                        dimensions = minimumPanelDimension,
+                        name = "scrim view",
+                        pose = Pose.Identity,
+                    )
+                    .also {
+                        it.setParent(activityPanelEntity.entity)
+                        it.setPose(Pose(translation = Vector3(0f, 0f, 3.millimeters.toM())))
+                    }
+            }
 
+            val density = LocalDensity.current
             LaunchedEffect(activityPanelEntity.size) {
                 val size = activityPanelEntity.size
                 scrimPanelEntity.size = size
+                if (shape is SpatialRoundedCornerShape) {
+                    scrimPanelEntity.setCornerRadius(
+                        shape.computeCornerRadius(
+                            size.width.toFloat(),
+                            size.height.toFloat(),
+                            density
+                        ),
+                        density,
+                    )
+                }
             }
         }
     }
@@ -242,6 +266,7 @@
  * Private [SpatialPanel] implementation that reports its created PanelEntity.
  *
  * @param modifier SubspaceModifiers.
+ * @param name A name for the SpatialPanel, useful for debugging.
  * @param view content view to render inside the SpatialPanel
  * @param shape The shape of this Spatial Panel.
  * @param onCorePanelEntityCreated callback to consume the [CorePanelEntity] when it is created
@@ -250,6 +275,7 @@
 @SubspaceComposable
 private fun SpatialPanel(
     modifier: SubspaceModifier,
+    name: String,
     view: View,
     shape: SpatialShape,
     onCorePanelEntityCreated: (CorePanelEntity) -> Unit,
@@ -267,12 +293,13 @@
     val scrim = remember { View(view.context) }
     val dialogManager = LocalDialogManager.current
     val corePanelEntity =
-        rememberCorePanelEntity(onCoreEntityCreated = onCorePanelEntityCreated, shape = shape) {
+        rememberCorePanelEntity(onCorePanelEntityCreated) {
             PanelEntity.create(
                 session = this,
                 view = frameLayout,
+                surfaceDimensionsPx = minimumPanelDimension,
                 dimensions = minimumPanelDimension,
-                name = entityName("SpatialPanel"),
+                name = name,
                 pose = Pose.Identity,
             )
         }
@@ -296,21 +323,63 @@
         }
     }
 
-    LayoutPanelEntity(corePanelEntity, modifier)
+    LayoutPanelEntity(corePanelEntity, name, shape, modifier)
 }
 
 /**
- * Lay out the SpatialPanel using the provided [CoreBasePanelEntity].
+ * Lay out the SpatialPanel using the provided [CorePanelEntity].
  *
- * @param coreEntity The [CoreBasePanelEntity] associated with this SpatialPanel.
+ * @param coreEntity The [CorePanelEntity] associated with this SpatialPanel. It should be based on
+ *   a SceneCore panel entity.
+ * @param name The name of the panel for debugging purposes.
+ * @param shape The shape of this Spatial Panel.
  * @param modifier The [SubspaceModifier] attached to this compose node.
  */
 @Composable
-private fun LayoutPanelEntity(coreEntity: CoreBasePanelEntity, modifier: SubspaceModifier) {
-    SubspaceLayout(modifier = modifier, coreEntity = coreEntity) { _, constraints ->
-        val width = DEFAULT_SIZE_PX.coerceIn(constraints.minWidth, constraints.maxWidth)
-        val height = DEFAULT_SIZE_PX.coerceIn(constraints.minHeight, constraints.maxHeight)
-        val depth = DEFAULT_SIZE_PX.coerceIn(constraints.minDepth, constraints.maxDepth)
-        layout(width, height, depth) {}
+private fun LayoutPanelEntity(
+    coreEntity: CorePanelEntity,
+    name: String,
+    shape: SpatialShape,
+    modifier: SubspaceModifier,
+) {
+    val density = LocalDensity.current
+    SubspaceLayout(modifier = modifier, name = name, coreEntity = coreEntity) {
+        measurables,
+        constraints ->
+        val initialWidth = DEFAULT_SIZE_PX.coerceIn(constraints.minWidth, constraints.maxWidth)
+        val initialHeight = DEFAULT_SIZE_PX.coerceIn(constraints.minHeight, constraints.maxHeight)
+        val initialDepth = DEFAULT_SIZE_PX.coerceIn(constraints.minDepth, constraints.maxDepth)
+
+        val placeables = measurables.map { it.measure(constraints) }
+
+        val maxSize =
+            placeables.fold(IntVolumeSize(initialWidth, initialHeight, initialDepth)) {
+                currentMax,
+                placeable ->
+                IntVolumeSize(
+                    width = maxOf(currentMax.width, placeable.measuredWidth),
+                    height = maxOf(currentMax.height, placeable.measuredHeight),
+                    depth = maxOf(currentMax.depth, placeable.measuredDepth),
+                )
+            }
+
+        val maxWidth = maxSize.width
+        val maxHeight = maxSize.height
+
+        if (shape is SpatialRoundedCornerShape) {
+            coreEntity.setCornerRadius(
+                shape.computeCornerRadius(maxWidth.toFloat(), maxHeight.toFloat(), density),
+                density,
+            )
+        }
+
+        // Reserve space in the original composition
+        layout(maxWidth, maxHeight, maxSize.depth) { placeables.forEach { it.place(Pose()) } }
     }
 }
+
+private var spatialPanelNamePart: Int = 0
+
+private fun defaultSpatialPanelName(): String {
+    return "Panel-${spatialPanelNamePart++}"
+}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialRow.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialRow.kt
index 086fcad..445685f 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialRow.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/SpatialRow.kt
@@ -34,6 +34,12 @@
  *
  * @param modifier Appearance modifiers to apply to this Composable.
  * @param alignment The default alignment for child elements within the row.
+ * @param curveRadius The radial distance (in Dp) of the polar coordinate system of this row. It is
+ *   a positive value. Setting this value to Dp.Infinity or a non-positive value will flatten the
+ *   row. When a row is curved, its elements will be oriented so that they lie tangent to the curved
+ *   row. A typical curved row has a curve radius of 825.dp.
+ * @param name A string name to associated with the SpatialRow. This can be useful identifying the
+ *   SpatialRow when debugging spatial applications.
  * @param content The composable content to be laid out horizontally in the row.
  */
 @Composable
@@ -42,52 +48,8 @@
 public fun SpatialRow(
     modifier: SubspaceModifier = SubspaceModifier,
     alignment: SpatialAlignment = SpatialAlignment.Center,
-    content: @Composable @SubspaceComposable SpatialRowScope.() -> Unit,
-) {
-    SpatialRow(modifier, alignment, Dp.Infinity, content)
-}
-
-/**
- * A layout composable that arranges its children in a curved horizontal sequence.
- *
- * @param modifier Appearance modifiers to apply to this Composable.
- * @param alignment The default alignment for child elements within the row.
- * @param curveRadius The radial distance (in Dp) of the polar coordinate system of this row. It is
- *   a positive value. Setting this value to Dp.Infinity or a non-positive value will flatten the
- *   row. When a row is curved, its elements will be oriented so that they lie tangent to the curved
- *   row.
- * @param content The composable content to be laid out horizontally in the row.
- */
-@Composable
-@SubspaceComposable
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public fun SpatialCurvedRow(
-    modifier: SubspaceModifier = SubspaceModifier,
-    alignment: SpatialAlignment = SpatialAlignment.Center,
-    curveRadius: Dp = SpatialCurvedRowDefaults.curveRadius,
-    content: @Composable @SubspaceComposable SpatialRowScope.() -> Unit,
-) {
-    SpatialRow(modifier, alignment, curveRadius, content)
-}
-
-/**
- * A layout composable that arranges its children in a horizontal sequence. For arranging children
- * vertically, see [SpatialColumn].
- *
- * @param modifier Appearance modifiers to apply to this Composable.
- * @param alignment The default alignment for child elements within the row.
- * @param curveRadius The radial distance (in Dp) of the polar coordinate system of this row. It is
- *   a positive value. Setting this value to Dp.Infinity or a non-positive value will flatten the
- *   row. When a row is curved, its elements will be oriented so that they lie tangent to the curved
- *   row.
- * @param content The composable content to be laid out horizontally in the row.
- */
-@Composable
-@SubspaceComposable
-private fun SpatialRow(
-    modifier: SubspaceModifier,
-    alignment: SpatialAlignment,
-    curveRadius: Dp,
+    curveRadius: Dp = Dp.Infinity,
+    name: String = defaultSpatialRowName(),
     content: @Composable @SubspaceComposable SpatialRowScope.() -> Unit,
 ) {
     SubspaceLayout(
@@ -95,12 +57,9 @@
         content = { SpatialRowScopeInstance.content() },
         coreEntity =
             rememberCoreContentlessEntity {
-                ContentlessEntity.create(
-                    this,
-                    name = entityName("SpatialRow"),
-                    pose = Pose.Identity
-                )
+                ContentlessEntity.create(this, name = name, pose = Pose.Identity)
             },
+        name = name,
         measurePolicy =
             RowColumnMeasurePolicy(
                 orientation = LayoutOrientation.Horizontal,
@@ -153,13 +112,6 @@
     public fun SubspaceModifier.align(alignment: SpatialAlignment.Depth): SubspaceModifier
 }
 
-/** Contains the default values used by [SpatialCurvedRow]. */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public object SpatialCurvedRowDefaults {
-    /** Default curve radius used by [SpatialCurvedRow]. */
-    public val curveRadius: Dp = 825.dp
-}
-
 internal object SpatialRowScopeInstance : SpatialRowScope {
     override fun SubspaceModifier.weight(weight: Float, fill: Boolean): SubspaceModifier {
         require(weight > 0.0) { "invalid weight $weight; must be greater than zero" }
@@ -179,3 +131,9 @@
         return this then RowColumnAlignElement(depthSpatialAlignment = alignment)
     }
 }
+
+private var spatialRowNamePart: Int = 0
+
+private fun defaultSpatialRowName(): String {
+    return "SpatialRow-${spatialRowNamePart++}"
+}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/Volume.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/Volume.kt
index a592d1a..13f6b6b 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/Volume.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/Volume.kt
@@ -20,6 +20,7 @@
 import androidx.compose.runtime.Composable
 import androidx.xr.compose.subspace.layout.SubspaceLayout
 import androidx.xr.compose.subspace.layout.SubspaceModifier
+import androidx.xr.compose.unit.IntVolumeSize
 import androidx.xr.runtime.math.Pose
 import androidx.xr.scenecore.ContentlessEntity
 import androidx.xr.scenecore.Entity
@@ -31,28 +32,56 @@
  * attach child Jetpack XR Entities to it.
  *
  * @param modifier SubspaceModifiers to apply to the Volume.
+ * @param name A name associated with this Volume entity, useful for debugging.
  * @param onVolumeEntity A lambda function that will be invoked when the [Entity] becomes available.
  */
 @Composable
 @SubspaceComposable
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public fun Volume(modifier: SubspaceModifier = SubspaceModifier, onVolumeEntity: (Entity) -> Unit) {
+public fun Volume(
+    modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultVolumeName(),
+    onVolumeEntity: (Entity) -> Unit,
+) {
     val defaultWidthPx = 400
     val defaultHeightPx = 400
     val defaultDepthPx = 400
 
     SubspaceLayout(
         modifier = modifier,
+        name = name,
         coreEntity =
             rememberCoreContentlessEntity {
-                ContentlessEntity.create(this, name = entityName("Volume"), pose = Pose.Identity)
+                ContentlessEntity.create(this, name = name, pose = Pose.Identity)
                     .apply(onVolumeEntity)
             },
-    ) { _, constraints ->
+    ) { measurables, constraints ->
         val initialWidth = defaultWidthPx.coerceIn(constraints.minWidth, constraints.maxWidth)
         val initialHeight = defaultHeightPx.coerceIn(constraints.minHeight, constraints.maxHeight)
         val initialDepth = defaultDepthPx.coerceIn(constraints.minDepth, constraints.maxDepth)
 
-        layout(initialWidth, initialHeight, initialDepth) {}
+        val placeables = measurables.map { it.measure(constraints) }
+
+        val maxSize =
+            placeables.fold(IntVolumeSize(initialWidth, initialHeight, initialDepth)) {
+                currentMax,
+                placeable ->
+                IntVolumeSize(
+                    width = maxOf(currentMax.width, placeable.measuredWidth),
+                    height = maxOf(currentMax.height, placeable.measuredHeight),
+                    depth = maxOf(currentMax.depth, placeable.measuredDepth),
+                )
+            }
+
+        // Reserve space in the original composition
+        layout(maxSize.width, maxSize.height, maxSize.depth) {
+            placeables.forEach { it.place(Pose()) }
+        }
     }
 }
+
+private var volumeNamePart: Int = 0
+
+private fun defaultVolumeName(): String {
+    return "Volume-${volumeNamePart++}"
+}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Alpha.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Alpha.kt
index 3f7750a..0b3a577 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Alpha.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Alpha.kt
@@ -56,8 +56,8 @@
     }
 }
 
-private class AlphaNode(var alpha: Float) : SubspaceModifier.Node(), CoreEntityNode {
-    override fun CoreEntityScope.modifyCoreEntity() {
-        setOrAppendAlpha(alpha)
+private class AlphaNode(public var alpha: Float) : SubspaceModifier.Node(), CoreEntityNode {
+    override fun modifyCoreEntity(coreEntity: CoreEntity) {
+        coreEntity.setAlpha(alpha)
     }
 }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/CoreEntity.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/CoreEntity.kt
index 42514aa..04c4130 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/CoreEntity.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/CoreEntity.kt
@@ -16,43 +16,53 @@
 
 package androidx.xr.compose.subspace.layout
 
+import android.content.res.Resources
+import android.util.Log
 import android.view.View
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.ui.unit.Density
-import androidx.xr.compose.subspace.SpatialPanelDefaults
+import androidx.xr.compose.subspace.node.SubspaceLayoutModifierNode
 import androidx.xr.compose.subspace.node.SubspaceLayoutNode
+import androidx.xr.compose.subspace.node.coordinator
 import androidx.xr.compose.unit.IntVolumeSize
 import androidx.xr.compose.unit.Meter
+import androidx.xr.compose.unit.toDimensionsInMeters
+import androidx.xr.compose.unit.toIntVolumeSize
 import androidx.xr.runtime.math.Pose
+import androidx.xr.runtime.math.Ray
 import androidx.xr.scenecore.BasePanelEntity
-import androidx.xr.scenecore.Component
 import androidx.xr.scenecore.ContentlessEntity
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.Entity
+import androidx.xr.scenecore.MovableComponent
+import androidx.xr.scenecore.MoveListener
 import androidx.xr.scenecore.PanelEntity
 import androidx.xr.scenecore.PixelDimensions
+import androidx.xr.scenecore.ResizableComponent
+import androidx.xr.scenecore.ResizeListener
 import androidx.xr.scenecore.Session
+import java.util.concurrent.Executor
+import java.util.concurrent.Executors
 
 /**
  * Wrapper class for Entities from SceneCore to provide convenience methods for working with
  * Entities from SceneCore.
  */
-@PublishedApi
-internal sealed class CoreEntity(public val entity: Entity) : OpaqueEntity {
+internal sealed class CoreEntity(public val entity: Entity) : SubspaceLayoutCoordinates {
 
-    internal var layout: SubspaceLayoutNode? = null
+    internal var movable: Movable? = null
+    internal var resizable: Resizable? = null
+
+    internal var layout: SubspaceLayoutNode.MeasurableLayout? = null
         set(value) {
             field = value
             updateEntityPose()
         }
 
-    private val density: Density
-        get() = layout?.density ?: error { "CoreEntity is not attached to a layout." }
-
     internal fun updateEntityPose() {
         // Compose XR uses pixels, SceneCore uses meters.
         val corePose =
-            layout?.measurableLayout?.poseInParentEntity?.convertPixelsToMeters(density)
-                ?: Pose.Identity
+            (layout?.poseInParentEntity ?: Pose.Identity).convertPixelsToMeters(DEFAULT_DENSITY)
         if (entity.getPose() != corePose) {
             entity.setPose(corePose)
         }
@@ -62,47 +72,62 @@
         entity.dispose()
     }
 
-    /**
-     * The backing value for the size of the [CoreEntity] in pixels. It uses a MutableState object
-     * so that recompositions can be triggered on size changes.
-     */
-    protected val mutableSize = mutableStateOf(IntVolumeSize.Zero)
+    override val pose: Pose
+        get() = movable?.userPose ?: Pose.Identity
 
-    /** The volume size of the [CoreEntity] in pixels. */
-    public open var size: IntVolumeSize
-        get() = mutableSize.value
+    override val poseInRoot: Pose
+        get() = pose.translate(sourcePoseInRoot.translation).rotate(sourcePoseInRoot.rotation)
+
+    private val sourcePoseInRoot: Pose
+        get() = coordinatesInRoot?.poseInRoot ?: Pose.Identity
+
+    private val coordinatesInRoot: SubspaceLayoutCoordinates?
+        get() =
+            layout
+                ?.tail
+                ?.traverseSelfThenAncestors()
+                ?.findInstance<SubspaceLayoutModifierNode>()
+                ?.coordinator ?: layout?.parentCoordinatesInRoot
+
+    override val poseInParentEntity: Pose
+        get() =
+            pose
+                .translate(sourcePoseInParentEntity.translation)
+                .rotate(sourcePoseInParentEntity.rotation)
+
+    private val sourcePoseInParentEntity: Pose
+        get() = coordinatesInParentEntity?.poseInParentEntity ?: Pose.Identity
+
+    private val coordinatesInParentEntity: SubspaceLayoutCoordinates?
+        get() =
+            layout
+                ?.tail
+                ?.traverseSelfThenAncestors()
+                ?.findInstance<SubspaceLayoutModifierNode>()
+                ?.coordinator ?: layout?.parentCoordinatesInParentEntity
+
+    protected val _size = mutableStateOf(IntVolumeSize.Zero)
+
+    override var size: IntVolumeSize
+        get() = _size.value
         set(value) {
-            if (mutableSize.value == value) {
+            val proposedSize = resizable?.userSize ?: value
+            if (_size.value == proposedSize) {
                 return
             }
-            mutableSize.value = value
+
+            setEntitySize(proposedSize)
+            _size.value = proposedSize
+
+            movable?.setComponentSize(proposedSize)
+            resizable?.setComponentSize(proposedSize)
         }
 
-    /**
-     * The scale of this entity relative to its parent. This value will affect the rendering of this
-     * Entity's children. As the scale increases, this will uniformly stretch the content of the
-     * Entity. This does not affect layout and other content will be laid out according to the
-     * original scale of the entity.
-     */
-    internal var scale = 1f
-        set(value) {
-            if (field != value) {
-                entity.setScale(value)
-            }
-            field = value
-        }
-
-    /**
-     * The opacity of this entity (and its children) as a value between [0..1]. An alpha value of
-     * 0.0f means fully transparent while the value of 1.0f means fully opaque.
-     */
-    internal var alpha = 1f
-        set(value) {
-            if (field != value) {
-                entity.setAlpha(value)
-            }
-            field = value
-        }
+    protected open fun setEntitySize(size: IntVolumeSize) {
+        entity.setSize(
+            Dimensions(size.width.toFloat(), size.height.toFloat(), size.depth.toFloat())
+        )
+    }
 
     public var parent: CoreEntity? = null
         set(value) {
@@ -126,27 +151,388 @@
         }
 
     /**
-     * Add a SceneCore [Component] to this entity.
-     *
-     * @param component The [Component] to add.
-     * @return true if the component was added successfully, false otherwise.
+     * The scale of this entity relative to its parent. This value will affect the rendering of this
+     * Entity's children. As the scale increases, this will uniformly stretch the content of the
+     * Entity. This does not affect layout and other content will be laid out according to the
+     * original scale of the entity.
      */
-    public fun addComponent(component: Component): Boolean {
-        return entity.addComponent(component)
-    }
+    public var scale: Float = 1.0F
+        set(value) {
+            field = value
+            entity.setScale(value * scaleFromMovement)
+        }
 
     /**
-     * Remove a SceneCore [Component] from this entity.
-     *
-     * @param component The [Component] to remove.
+     * The scale of this entity when it is moved. This value is only used to be multiplied by the
+     * scale of the entity, to preserve the original scale of the entity and determine the final
+     * scale of the entity.
      */
-    public fun removeComponent(component: Component) {
-        entity.removeComponent(component)
+    var scaleFromMovement: Float = 1.0F
+
+    /**
+     * Sets the opacity of this entity (and its children) to a value between [0..1]. An alpha value
+     * of 0.0f means fully transparent while the value of 1.0f means fully opaque.
+     *
+     * @param alpha The opacity of this entity.
+     */
+    public fun setAlpha(alpha: Float) {
+        entity.setAlpha(alpha)
+    }
+
+    public companion object {
+        protected val LocalExecutor: Executor = Executors.newSingleThreadExecutor()
+
+        // TODO(djeu): Figure out if there's a better way here where there is no context.
+        private val DEFAULT_DENSITY: Density =
+            Density(
+                density = Resources.getSystem().displayMetrics.density,
+                fontScale = Resources.getSystem().configuration.fontScale,
+            )
+    }
+
+    internal inner class Movable(private val session: Session) {
+        /**
+         * The node should be movable.
+         *
+         * Right now this only affects the initial attachment of the component to the Core entity;
+         * however, this may change to be more reactive.
+         *
+         * TODO(b/358678496): Revisit this now that Movable cannot by disabled, except via the
+         *   'enabled' bit in the Node.
+         */
+        public var isEnabled: Boolean = true
+        /** Pose based on user adjustments from MoveEvents from SceneCore. */
+        public var userPose: Pose? = null
+            set(value) {
+                field = value
+                updateEntityPose()
+            }
+
+        private var initialOffset: Pose = Pose.Identity
+
+        /** Sets the size of the SysUI movable affordance. */
+        public fun setComponentSize(size: IntVolumeSize) {
+            if (isAttached) {
+                component.size = size.toDimensionsInMeters(DEFAULT_DENSITY)
+            }
+        }
+
+        /** All Compose XR params for the Movable modifier for this CoreEntity. */
+        private var movableNode: MovableNode? = null
+
+        /** Whether the movableComponent is attached to the entity. */
+        private var isAttached: Boolean = false
+
+        private val component: MovableComponent by lazy {
+            // Here we create the component and pass in false to systemMovable since Compose is
+            // going to
+            // handle the move events.
+            MovableComponent.create(session, systemMovable = false)
+        }
+
+        /**
+         * Updates the movable state of this CoreEntity. Only update movable state if [Movable] is
+         * enabled.
+         *
+         * @param node The Movable modifier for this CoreEntity.
+         */
+        internal fun updateState(node: MovableNode?) {
+            if (!isEnabled) {
+                if (node != null && node.enabled) logEnabledCheck()
+                return
+            }
+
+            movableNode = node
+            if (node != null && node.enabled) {
+                enableComponent()
+            } else {
+                disableComponent()
+            }
+        }
+
+        /** Enables the MovableComponent for this CoreEntity. */
+        private fun enableComponent() {
+            if (!isAttached) {
+                check(entity.addComponent(component)) {
+                    "Could not add MovableComponent to Core Entity"
+                }
+                component.addMoveListener(
+                    LocalExecutor,
+                    object : MoveListener {
+                        override fun onMoveStart(
+                            entity: Entity,
+                            initialInputRay: Ray,
+                            initialPose: Pose,
+                            initialScale: Float,
+                            initialParent: Entity,
+                        ) {
+                            // updatePoseOnMove() not called because initialPose should be the same
+                            // as the current
+                            // pose.
+                            initialOffset = sourcePoseInParentEntity
+                        }
+
+                        override fun onMoveUpdate(
+                            entity: Entity,
+                            currentInputRay: Ray,
+                            currentPose: Pose,
+                            currentScale: Float,
+                        ) {
+                            updatePoseOnMove(
+                                currentPose,
+                                currentScale,
+                                entity.getSize().toIntVolumeSize(DEFAULT_DENSITY),
+                            )
+                        }
+
+                        override fun onMoveEnd(
+                            entity: Entity,
+                            finalInputRay: Ray,
+                            finalPose: Pose,
+                            finalScale: Float,
+                            updatedParent: Entity?,
+                        ) {
+                            updatePoseOnMove(
+                                finalPose,
+                                finalScale,
+                                entity.getSize().toIntVolumeSize(DEFAULT_DENSITY),
+                            )
+                            initialOffset = Pose.Identity
+                        }
+                    },
+                )
+                // Ensure size is correct, since we do not update the size
+                // when the component is detached.
+                setComponentSize(size)
+                isAttached = true
+            }
+
+            // If the MovableComponent gets more internal state, copy it over
+            // from the modifier node here.
+        }
+
+        /**
+         * Disables the MovableComponent for this CoreEntity. Takes care of life cycle tasks for the
+         * underlying component in SceneCore.
+         */
+        private fun disableComponent() {
+            if (isAttached) {
+                entity.removeComponent(component)
+                isAttached = false
+                if (movableNode?.stickyPose != true) {
+                    userPose = null
+                }
+            }
+        }
+
+        /** Called every time there is a MoveEvent in SceneCore, if this CoreEntity is movable. */
+        private fun updatePoseOnMove(pose: Pose, scaleWithDistance: Float, size: IntVolumeSize) {
+
+            if (movableNode?.enabled == false) {
+                return
+            }
+            val node = movableNode ?: return
+
+            // SceneCore uses meters, Compose XR uses pixels.
+            val corePose = pose.convertMetersToPixels(DEFAULT_DENSITY)
+
+            // Find the delta from when the move event started.
+            val coreDeltaPose =
+                Pose(
+                    corePose.translation - initialOffset.translation,
+                    initialOffset.rotation.inverse * corePose.rotation,
+                )
+
+            if (
+                node.onPoseChange?.invoke(PoseChangeEvent(corePose, scaleWithDistance, size)) ==
+                    true
+            ) {
+                // We're done, the user app will handle the event.
+                return
+            }
+            userPose = coreDeltaPose
+            if (movableNode?.scaleWithDistance!!) {
+                scaleFromMovement = scaleWithDistance
+                entity.setScale(scale * scaleFromMovement)
+            }
+        }
+
+        /** Flag to enforce single logging of Entity Component update error. */
+        private var shouldLogEnabledCheck: Boolean = true
+
+        /** Log enabled check error if first time occurring. */
+        private fun logEnabledCheck() {
+            if (shouldLogEnabledCheck) {
+                Log.i(
+                    "CoreEntity",
+                    "Not attempting to update Components, functionality is not enabled."
+                )
+                shouldLogEnabledCheck = false
+            }
+        }
+    }
+
+    internal inner class Resizable(private val session: Session) {
+        /**
+         * The node should be resizable.
+         *
+         * Right now this only affects the initial attachment of the component to the Core entity;
+         * however, this may change to be more reactive.
+         *
+         * TODO(b/358678496): Revisit this now that Resizable cannot by disabled, except via the
+         *   'enabled' bit in the Node.
+         */
+        public var isEnabled: Boolean = true
+
+        /** Size based on user adjustments from ResizeEvents from SceneCore. */
+        public var userSize: IntVolumeSize? = null
+            private set(value) {
+                field = value
+                if (value != null) {
+                    // The user size takes priority. Set the current size to the user provided size.
+                    size = value
+                }
+            }
+
+        /** Sets the size of the SysUI resizable affordance. */
+        public fun setComponentSize(size: IntVolumeSize) {
+            if (isAttached) {
+                component.size = size.toDimensionsInMeters(DEFAULT_DENSITY)
+            }
+        }
+
+        /** All Compose XR params for the Resizable modifier for this CoreEntity. */
+        private var resizableNode: ResizableNode? = null
+
+        /** Whether the resizableComponent is attached to the entity. */
+        private var isAttached: Boolean = false
+
+        /** Whether the resizableComponent should maintain the aspect ratio of the entity. */
+        private var maintainAspectRatio: Boolean = false
+
+        private val component: ResizableComponent by lazy {
+            ResizableComponent.create(session).apply {
+                addResizeListener(
+                    LocalExecutor,
+                    object : ResizeListener {
+                        override fun onResizeStart(entity: Entity, originalSize: Dimensions) {
+                            component.fixedAspectRatio =
+                                if (maintainAspectRatio) getAspectRatioY() else 0.0f
+                            resizeListener(originalSize)
+                        }
+
+                        // Compose does not need to handle the onResizeUpdate event since Core is
+                        // handling the
+                        // UI affordance change and adding the update would make it so we update the
+                        // size twice.
+                        override fun onResizeEnd(entity: Entity, finalSize: Dimensions) {
+                            resizeListener(finalSize)
+                        }
+                    },
+                )
+            }
+        }
+
+        /**
+         * Updates the resizable state of this CoreEntity. Only update resizable state if
+         * [Resizable] is enabled.
+         *
+         * @param node The Resizable modifier for this CoreEntity.
+         */
+        internal fun updateState(node: ResizableNode?) {
+            if (!isEnabled) {
+                if (node != null && node.enabled) logEnabledCheck()
+                return
+            }
+
+            resizableNode = node
+            if (node != null && node.enabled) {
+                enableAndUpdateComponent(node)
+            } else {
+                disableComponent()
+            }
+        }
+
+        /** Flag to enforce single logging of Entity Component update error. */
+        private var shouldLogEnabledCheck: Boolean = true
+
+        /** Log enabled check error if first time occurring. */
+        private fun logEnabledCheck() {
+            if (shouldLogEnabledCheck) {
+                Log.i(
+                    "CoreEntity",
+                    "Not attempting to update Components, entity type is not interactive."
+                )
+                shouldLogEnabledCheck = false
+            }
+        }
+
+        /**
+         * Enables the ResizableComponent for this CoreEntity. Also, updates the component using
+         * [node]'s values.
+         *
+         * @param node The Resizable modifier for this CoreEntity.
+         */
+        private fun enableAndUpdateComponent(node: ResizableNode) {
+            if (!isAttached) {
+                check(entity.addComponent(component)) {
+                    "Could not add ResizableComponent to Core Entity"
+                }
+                // Ensure size is correct, since we do not update the size
+                // when the component is detached.
+                setComponentSize(size)
+                isAttached = true
+            }
+
+            component.minimumSize = node.minimumSize.toDimensionsInMeters()
+            component.maximumSize = node.maximumSize.toDimensionsInMeters()
+
+            maintainAspectRatio = node.maintainAspectRatio
+        }
+
+        /** Returns 0.0f if the aspect ratio of x to y is not well defined. */
+        private fun getAspectRatioY(): Float {
+            if (size.width == 0 || size.height == 0) return 0.0f
+            return size.width.toFloat() / size.height.toFloat()
+        }
+
+        /**
+         * Disables the ResizableComponent for this CoreEntity. Takes care of life cycle tasks for
+         * the underlying component in SceneCore.
+         */
+        private fun disableComponent() {
+            if (isAttached) {
+                entity.removeComponent(component)
+                isAttached = false
+            }
+        }
+
+        /**
+         * Called every time there is an onResizeStart or onResizeEnd event in SceneCore, if this
+         * CoreEntity is resizable.
+         */
+        private fun resizeListener(newSize: Dimensions) {
+            val node = resizableNode ?: return
+            if (node.onSizeChange(newSize.toIntVolumeSize(DEFAULT_DENSITY))) {
+                // We're done, the user app will handle the event.
+                return
+            }
+            userSize = newSize.toIntVolumeSize(DEFAULT_DENSITY)
+        }
     }
 }
 
+/**
+ * A [CoreEntityNode] will apply itself to the entity in question as part of the [CoreEntity]'s
+ * application of modifiers. A [CoreEntityNode] should be applicable to all Entity types.
+ *
+ * TODO(b/374774812)
+ */
+internal interface CoreEntityNode {
+    public fun modifyCoreEntity(coreEntity: CoreEntity)
+}
+
 /** Wrapper class for contentless entities from SceneCore. */
-@PublishedApi
 internal class CoreContentlessEntity(entity: Entity) : CoreEntity(entity) {
     init {
         require(entity is ContentlessEntity) {
@@ -160,39 +546,37 @@
  * entities from SceneCore.
  */
 internal sealed class CoreBasePanelEntity(
+    session: Session,
     private val panelEntity: BasePanelEntity<*>,
-    private val density: Density,
-) : CoreEntity(panelEntity), MovableCoreEntity, ResizableCoreEntity {
-    override var overrideSize: IntVolumeSize? = null
+) : CoreEntity(panelEntity) {
 
-    override var size: IntVolumeSize
-        get() = super.size
-        set(value) {
-            val nextSize = overrideSize ?: value
-            if (super.size != nextSize) {
-                super.size = nextSize
-                panelEntity.setSizeInPixels(PixelDimensions(size.width, size.height))
-                updateShape()
-            }
-        }
+    init {
+        movable = Movable(session)
+        resizable = Resizable(session)
+    }
 
-    /** The [SpatialShape] of this [CoreBasePanelEntity]. */
-    public var shape: SpatialShape = SpatialPanelDefaults.shape
-        set(value) {
-            if (field != value) {
-                field = value
-                updateShape()
-            }
-        }
+    override fun setEntitySize(size: IntVolumeSize) {
+        panelEntity.setPixelDimensions(PixelDimensions(size.width, size.height))
+    }
 
-    /** Apply shape changes to the SceneCore [Entity]. */
-    private fun updateShape() {
-        val shape = shape
-        if (shape is SpatialRoundedCornerShape) {
-            val radius =
-                shape.computeCornerRadius(size.width.toFloat(), size.height.toFloat(), density)
-            panelEntity.setCornerRadius(Meter.fromPixel(radius, density).toM())
-        }
+    /**
+     * Sets a corner radius on all four corners of this PanelEntity.
+     *
+     * @param radius The radius of the corners, in pixels.
+     * @param density The panel pixel density.
+     * @throws IllegalArgumentException if radius is <= 0.0f.
+     */
+    internal fun setCornerRadius(radius: Float, density: Density) {
+        panelEntity.setCornerRadius(Meter.fromPixel(radius, density).value)
+    }
+
+    /**
+     * Returns the corner radius of this PanelEntity, in pixels.
+     *
+     * @param density The panel pixel density.
+     */
+    internal fun getCornerRadius(density: Density): Float {
+        return Meter(panelEntity.getCornerRadius()).toPx(density)
     }
 }
 
@@ -200,53 +584,28 @@
  * Wrapper class for [PanelEntity] to provide convenience methods for working with panel entities
  * from SceneCore.
  */
-internal class CorePanelEntity(entity: PanelEntity, density: Density) :
-    CoreBasePanelEntity(entity, density)
+internal class CorePanelEntity(session: Session, entity: PanelEntity) :
+    CoreBasePanelEntity(session, entity)
 
 /**
  * Wrapper class for [Session.mainPanelEntity] to provide convenience methods for working with the
  * main panel from SceneCore.
  */
-internal class CoreMainPanelEntity(session: Session, density: Density) :
-    CoreBasePanelEntity(session.mainPanelEntity, density) {
+internal class CoreMainPanelEntity(session: Session) :
+    CoreBasePanelEntity(session, session.mainPanelEntity) {
     private val mainView = session.activity.window.decorView
     private val listener =
         View.OnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
-            mutableSize.value =
-                session.mainPanelEntity.getSizeInPixels().run { IntVolumeSize(width, height, 0) }
+            _size.value =
+                session.mainPanelEntity.getPixelDimensions().run { IntVolumeSize(width, height, 0) }
         }
 
     init {
         mainView.addOnLayoutChangeListener(listener)
     }
 
-    /**
-     * Whether this entity or any of its ancestors is marked as hidden.
-     *
-     * Note that a non-hidden entity may still not be visible if its alpha is 0.
-     */
-    public var hidden
-        get() = entity.isHidden(includeParents = true)
-        set(value) {
-            entity.setHidden(value)
-        }
-
     override fun dispose() {
-        // Do not call super.dispose() because we don't want to dispose the main panel entity.
         mainView.removeOnLayoutChangeListener(listener)
+        super.dispose()
     }
 }
-
-/** [CoreEntity] types that implement this interface may have the ResizableComponent attached. */
-internal interface ResizableCoreEntity {
-    /**
-     * The size of the [CoreEntity] in pixels.
-     *
-     * This value is used to override the layout size of the [CoreEntity] when it is resizable. When
-     * this value is null, the layout size of the [CoreEntity] is used.
-     */
-    public var overrideSize: IntVolumeSize?
-}
-
-/** [CoreEntity] types that implement this interface may have the MovableComponent attached. */
-internal interface MovableCoreEntity
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/CoreEntityNode.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/CoreEntityNode.kt
deleted file mode 100644
index 76b0576..0000000
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/CoreEntityNode.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright 2024 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.xr.compose.subspace.layout
-
-import androidx.xr.compose.unit.IntVolumeSize
-
-/**
- * Interface for nodes that can modify a CoreEntity.
- *
- * Modifications are applied sequentially in the order nodes are applied, with each modification
- * combined according to the property's logic. For example, if two nodes modify scale, the resulting
- * scale will be the product of the individual scales. See the description of each property setter
- * for more details on the particular logic that is applied.
- */
-internal interface CoreEntityNode {
-    /**
-     * Called during the placement of the [CoreEntity] prior to when the size and position is
-     * finally set on the node.
-     */
-    public fun CoreEntityScope.modifyCoreEntity()
-}
-
-/**
- * Requests a relayout of the [CoreEntityNode] composition tree.
- *
- * This is used to request a relayout in stateful layout modifiers that are impacted by events that
- * don't trigger a recomposition. *Do not* call this from [CoreEntityNode.modifyCoreEntity] as
- * [modifyCoreEntity] is called during layout and [requestRelayout] will cause a relayout loop.
- */
-internal fun CoreEntityNode.requestRelayout() {
-    (this as SubspaceModifier.Node).layoutNode?.requestRelayout()
-}
-
-/**
- * The scope for modifying a CoreEntity. This gives access to specific changes that may be made to a
- * [CoreEntity] in the [CoreEntityNode.modifyCoreEntity] method.
- */
-internal interface CoreEntityScope {
-    /**
-     * Sets the scale of the [CoreEntity].
-     *
-     * If multiple [CoreEntityNode] modifiers set the scale, the final scale will be the product of
-     * all scales. Only the last call to [setOrAppendScale] from a particular [CoreEntityNode] will
-     * be applied.
-     *
-     * See [CoreEntity.scale] for more details on how scale is applied.
-     *
-     * @param scale The scale of the CoreEntity.
-     */
-    public fun setOrAppendScale(scale: Float)
-
-    /**
-     * Sets the alpha of the [CoreEntity].
-     *
-     * If multiple [CoreEntityNode] modifiers set the alpha, the final alpha will be the product of
-     * all alphas. Only the last call to [setOrAppendAlpha] from a particular [CoreEntityNode] will
-     * be applied.
-     *
-     * See [CoreEntity.alpha] for more details on how alpha is applied.
-     *
-     * @param alpha The alpha of the CoreEntity.
-     */
-    public fun setOrAppendAlpha(alpha: Float)
-
-    /**
-     * Sets the rendered size of the [CoreEntity] in pixels.
-     *
-     * Only the last [CoreEntityNode] in the chain that sets the size of the [CoreEntity] will take
-     * effect. This does not change the measured size of the composable content during layout, only
-     * the rendered size of the [CoreEntity]. This is similar to how [SubspaceModifier.scale] works.
-     *
-     * @param size The rendered size of the CoreEntity.
-     */
-    public fun setRenderedSize(size: IntVolumeSize)
-}
-
-private class CoreEntityAccumulator : CoreEntityScope {
-    var alpha: Float = 1f
-    var scale: Float = 1f
-    var size: IntVolumeSize? = null
-
-    override fun setOrAppendScale(scale: Float) {
-        this.scale = scale
-    }
-
-    override fun setOrAppendAlpha(alpha: Float) {
-        this.alpha = alpha
-    }
-
-    override fun setRenderedSize(size: IntVolumeSize) {
-        this.size = size
-    }
-
-    fun merge(next: CoreEntityAccumulator): CoreEntityAccumulator {
-        val result = CoreEntityAccumulator()
-        result.alpha = alpha * next.alpha
-        result.scale = scale * next.scale
-        result.size = next.size
-        return result
-    }
-
-    fun applyChanges(coreEntity: CoreEntity) {
-        coreEntity.scale = scale
-        coreEntity.alpha = alpha
-        if (coreEntity is ResizableCoreEntity) {
-            coreEntity.overrideSize = size
-        }
-    }
-}
-
-/**
- * Applies the [CoreEntityNode]s in the given chain to this [CoreEntity].
- *
- * @param nodes The chain containing the [CoreEntityNode]s to apply.
- */
-internal fun CoreEntity.applyCoreEntityNodes(nodes: Sequence<CoreEntityNode>) {
-    nodes.getAccumulator().applyChanges(this)
-}
-
-private fun Sequence<CoreEntityNode>.getAccumulator(): CoreEntityAccumulator =
-    fold(CoreEntityAccumulator()) { accumulator, node ->
-        accumulator.merge(with(node) { CoreEntityAccumulator().apply { modifyCoreEntity() } })
-    }
-
-/**
- * The CoreEntity that will be modified by the CoreEntityNode.
- *
- * This is only available if the CoreEntityNode is attached to a SubspaceLayoutNode, which happens
- * when the modifier is evaluated. This field cannot be used in the initialization of the
- * [CoreEntityNode].
- */
-internal val CoreEntityNode.coreEntity: CoreEntity
-    get() =
-        checkNotNull((this as? SubspaceModifier.Node)?.layoutNode?.coreEntity) {
-            "CoreEntityNode must be attached to a SubspaceLayoutNode to access the CoreEntity."
-        }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Movable.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Movable.kt
index d2e7d26..1993364 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Movable.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Movable.kt
@@ -17,29 +17,9 @@
 package androidx.xr.compose.subspace.layout
 
 import androidx.annotation.RestrictTo
-import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.unit.Density
-import androidx.xr.compose.platform.LocalSession
-import androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode
-import androidx.xr.compose.subspace.node.LayoutCoordinatesAwareModifierNode
-import androidx.xr.compose.subspace.node.SubspaceLayoutModifierNode
 import androidx.xr.compose.subspace.node.SubspaceModifierNodeElement
-import androidx.xr.compose.subspace.node.currentValueOf
-import androidx.xr.compose.subspace.node.requestRelayout
 import androidx.xr.compose.unit.IntVolumeSize
-import androidx.xr.compose.unit.VolumeConstraints
-import androidx.xr.compose.unit.toDimensionsInMeters
-import androidx.xr.compose.unit.toIntVolumeSize
 import androidx.xr.runtime.math.Pose
-import androidx.xr.runtime.math.Ray
-import androidx.xr.scenecore.BasePanelEntity
-import androidx.xr.scenecore.Entity
-import androidx.xr.scenecore.MovableComponent
-import androidx.xr.scenecore.MoveListener
-import androidx.xr.scenecore.Session
-import java.util.concurrent.Executor
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.asExecutor
 
 /**
  * When the movable modifier is present and enabled, draggable UI controls will be shown that allow
@@ -161,179 +141,8 @@
     public var stickyPose: Boolean,
     public var scaleWithDistance: Boolean,
     public var onPoseChange: ((PoseChangeEvent) -> Boolean)?,
-) :
-    SubspaceModifier.Node(),
-    CompositionLocalConsumerSubspaceModifierNode,
-    CoreEntityNode,
-    LayoutCoordinatesAwareModifierNode,
-    MoveListener,
-    SubspaceLayoutModifierNode {
-
-    private inline val density: Density
-        get() = currentValueOf(LocalDensity)
-
-    private inline val session: Session
-        get() = checkNotNull(currentValueOf(LocalSession)) { "Movable requires a Session." }
-
-    /** The previous pose of this entity from the last MoveEvent. */
-    private var previousPose: Pose = Pose.Identity
-
-    /** Pose based on user adjustments from MoveEvents from SceneCore. */
-    private var userPose: Pose = Pose.Identity
-
-    /** The scale of this entity when it is moved. */
-    private var scaleFromMovement: Float = 1.0F
-
-    private var component: MovableComponent? = null
-
-    override fun CoreEntityScope.modifyCoreEntity() {
-        updateState()
-        setOrAppendScale(scaleFromMovement)
-    }
-
-    override fun onDetach() {
-        if (component != null) {
-            disableComponent()
-        }
-    }
-
-    override fun MeasureScope.measure(
-        measurable: Measurable,
-        constraints: VolumeConstraints,
-    ): MeasureResult {
-        val placeable = measurable.measure(constraints)
-        return layout(placeable.measuredWidth, placeable.measuredHeight, placeable.measuredDepth) {
-            placeable.place(userPose)
-        }
-    }
-
-    override fun onLayoutCoordinates(coordinates: SubspaceLayoutCoordinates) {
-        // Update the size of the component to match the final size of the layout.
-        component?.size = coordinates.size.toDimensionsInMeters(density)
-    }
-
-    /**
-     * Updates the movable state of the CoreEntity associated with this node. Only update movable
-     * state if [MovableNode] is [enabled] and the [CoreEntity] is a [MovableCoreEntity].
-     */
-    private fun updateState() {
-        if (enabled && component == null && coreEntity is MovableCoreEntity) {
-            enableComponent()
-        } else if (!enabled && component != null) {
-            disableComponent()
-        }
-    }
-
-    /** Enables the MovableComponent for this CoreEntity. */
-    private fun enableComponent() {
-        check(component == null) { "MovableComponent already enabled." }
-        component = MovableComponent.create(session, systemMovable = false)
-        check(component?.let { coreEntity.addComponent(it) } == true) {
-            "Could not add MovableComponent to Core Entity."
-        }
-        component?.addMoveListener(MainExecutor, this)
-    }
-
-    /**
-     * Disables the MovableComponent for this CoreEntity. Takes care of life cycle tasks for the
-     * underlying component in SceneCore.
-     */
-    private fun disableComponent() {
-        check(component != null) { "MovableComponent already disabled." }
-        component?.let { coreEntity.removeComponent(it) }
-        component = null
-        if (!stickyPose) {
-            userPose = Pose.Identity
-            requestRelayout()
-        }
-    }
-
-    override fun onMoveStart(
-        entity: Entity,
-        initialInputRay: Ray,
-        initialPose: Pose,
-        initialScale: Float,
-        initialParent: Entity,
-    ) {
-        // updatePoseOnMove() not called because there is no previous pose to compare to.
-        previousPose = initialPose
-    }
-
-    override fun onMoveUpdate(
-        entity: Entity,
-        currentInputRay: Ray,
-        currentPose: Pose,
-        currentScale: Float,
-    ) {
-        updatePoseOnMove(
-            previousPose,
-            currentPose,
-            currentScale,
-            when (entity) {
-                is BasePanelEntity<*> -> entity.getSize().toIntVolumeSize(density)
-                else -> IntVolumeSize.Zero
-            },
-        )
-        previousPose = currentPose
-    }
-
-    override fun onMoveEnd(
-        entity: Entity,
-        finalInputRay: Ray,
-        finalPose: Pose,
-        finalScale: Float,
-        updatedParent: Entity?,
-    ) {
-        updatePoseOnMove(
-            previousPose,
-            finalPose,
-            finalScale,
-            when (entity) {
-                is BasePanelEntity<*> -> entity.getSize().toIntVolumeSize(density)
-                else -> IntVolumeSize.Zero
-            },
-        )
-        previousPose = Pose.Identity
-    }
-
-    /** Called every time there is a MoveEvent in SceneCore, if this CoreEntity is movable. */
-    private fun updatePoseOnMove(
-        previousPose: Pose,
-        nextPose: Pose,
-        scale: Float,
-        size: IntVolumeSize,
-    ) {
-        if (!enabled) {
-            return
-        }
-
-        // SceneCore uses meters, Compose XR uses pixels.
-        val previousCorePose = previousPose.convertMetersToPixels(density)
-        val corePose = nextPose.convertMetersToPixels(density)
-
-        if (onPoseChange?.invoke(PoseChangeEvent(corePose, scale, size)) == true) {
-            // We're done, the user app will handle the event.
-            return
-        }
-
-        // Find the delta from the previous move event.
-        val coreDeltaPose =
-            Pose(
-                corePose.translation - previousCorePose.translation,
-                previousCorePose.rotation.inverse * corePose.rotation,
-            )
-        userPose =
-            Pose(
-                userPose.translation + coreDeltaPose.translation,
-                userPose.rotation * coreDeltaPose.rotation,
-            )
-        if (scaleWithDistance) {
-            scaleFromMovement = scale
-        }
-        requestRelayout()
-    }
-
-    public companion object {
-        private val MainExecutor: Executor = Dispatchers.Main.asExecutor()
+) : SubspaceModifier.Node(), CoreEntityNode {
+    override fun modifyCoreEntity(coreEntity: CoreEntity) {
+        coreEntity.movable?.updateState(this)
     }
 }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/OpaqueEntity.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/OpaqueEntity.kt
deleted file mode 100644
index 3bc9da00..0000000
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/OpaqueEntity.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright 2024 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.xr.compose.subspace.layout
-
-/**
- * An Entity is the underlying API that Compose XR emits and controls to render spatial content.
- * This opaque wrapper has been extracted to avoid exposing the underlying entity type where Entity
- * appears in the API. It is not expected to be used or manipulated outside Compose XR's subspace
- * module.
- */
-@PublishedApi internal interface OpaqueEntity
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Resizable.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Resizable.kt
index a6ecd15..e90882b 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Resizable.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Resizable.kt
@@ -17,26 +17,10 @@
 package androidx.xr.compose.subspace.layout
 
 import androidx.annotation.RestrictTo
-import androidx.compose.ui.platform.LocalDensity
-import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.Dp
-import androidx.xr.compose.platform.LocalSession
-import androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode
-import androidx.xr.compose.subspace.node.LayoutCoordinatesAwareModifierNode
 import androidx.xr.compose.subspace.node.SubspaceModifierNodeElement
-import androidx.xr.compose.subspace.node.currentValueOf
 import androidx.xr.compose.unit.DpVolumeSize
 import androidx.xr.compose.unit.IntVolumeSize
-import androidx.xr.compose.unit.toDimensionsInMeters
-import androidx.xr.compose.unit.toIntVolumeSize
-import androidx.xr.scenecore.Dimensions
-import androidx.xr.scenecore.Entity
-import androidx.xr.scenecore.ResizableComponent
-import androidx.xr.scenecore.ResizeListener
-import androidx.xr.scenecore.Session
-import java.util.concurrent.Executor
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.asExecutor
 
 /**
  * When the resizable modifier is present and enabled, draggable UI controls will be shown that
@@ -59,7 +43,7 @@
     minimumSize: DpVolumeSize = DpVolumeSize.Zero,
     maximumSize: DpVolumeSize = DpVolumeSize(Dp.Infinity, Dp.Infinity, Dp.Infinity),
     maintainAspectRatio: Boolean = false,
-    onSizeChange: ((IntVolumeSize) -> Boolean)? = null,
+    onSizeChange: (IntVolumeSize) -> Boolean = { false },
 ): SubspaceModifier =
     this.then(
         ResizableElement(enabled, minimumSize, maximumSize, maintainAspectRatio, onSizeChange)
@@ -70,7 +54,7 @@
     private val minimumSize: DpVolumeSize,
     private val maximumSize: DpVolumeSize,
     private val maintainAspectRatio: Boolean,
-    private val onSizeChange: ((IntVolumeSize) -> Boolean)?,
+    private val onSizeChange: (IntVolumeSize) -> Boolean,
 ) : SubspaceModifierNodeElement<ResizableNode>() {
 
     init {
@@ -123,119 +107,9 @@
     internal var minimumSize: DpVolumeSize,
     internal var maximumSize: DpVolumeSize,
     internal var maintainAspectRatio: Boolean,
-    internal var onSizeChange: ((IntVolumeSize) -> Boolean)?,
-) :
-    SubspaceModifier.Node(),
-    CompositionLocalConsumerSubspaceModifierNode,
-    CoreEntityNode,
-    LayoutCoordinatesAwareModifierNode,
-    ResizeListener {
-    private inline val density: Density
-        get() = currentValueOf(LocalDensity)
-
-    private inline val session: Session
-        get() = checkNotNull(currentValueOf(LocalSession)) { "Expected Session to be available." }
-
-    /** Size based on user adjustments from ResizeEvents from SceneCore. */
-    private var userSize: IntVolumeSize? = null
-
-    /** Whether the resizableComponent is attached to the entity. */
-    private var isComponentAttached: Boolean = false
-
-    private val component: ResizableComponent by lazy {
-        ResizableComponent.create(session).also { it.addResizeListener(MainExecutor, this) }
-    }
-
-    /** Updates the resizable state of this CoreEntity. Only update resizable state if [enabled]. */
-    private fun updateState() {
-        if (enabled && coreEntity is ResizableCoreEntity) {
-            enableAndUpdateComponent()
-        } else {
-            disableComponent()
-        }
-    }
-
-    /** Enables the ResizableComponent for this CoreEntity and updates its values. */
-    private fun enableAndUpdateComponent() {
-        if (!isComponentAttached) {
-            check(coreEntity.addComponent(component)) {
-                "Could not add ResizableComponent to Core Entity"
-            }
-            isComponentAttached = true
-        }
-
-        minimumSize.toDimensionsInMeters().let {
-            if (component.minimumSize != it) {
-                component.minimumSize = it
-            }
-        }
-        maximumSize.toDimensionsInMeters().let {
-            if (component.maximumSize != it) {
-                component.maximumSize = it
-            }
-        }
-    }
-
-    /** Returns 0.0f if the aspect ratio of x to y is not well defined. */
-    private fun getAspectRatioY(size: Dimensions): Float {
-        if (size.width == 0f || size.height == 0f) return 0.0f
-        return size.width / size.height
-    }
-
-    /**
-     * Disables the ResizableComponent for this CoreEntity. Takes care of life cycle tasks for the
-     * underlying component in SceneCore.
-     */
-    private fun disableComponent() {
-        if (isComponentAttached) {
-            coreEntity.removeComponent(component)
-            isComponentAttached = false
-            userSize = null
-            requestRelayout()
-        }
-    }
-
-    override fun onResizeStart(entity: Entity, originalSize: Dimensions) {
-        component.fixedAspectRatio =
-            if (maintainAspectRatio) getAspectRatioY(originalSize) else 0.0f
-    }
-
-    /**
-     * During a resize, the size of the entity does not change, only its reform window. We do not
-     * need to respond to every event, e.g., onResizeUpdate, like we do for Movable.
-     */
-    override fun onResizeEnd(entity: Entity, finalSize: Dimensions) {
-        resizeListener(finalSize)
-    }
-
-    /**
-     * Called every time there is an onResizeEnd event in SceneCore, if this CoreEntity is
-     * resizable.
-     */
-    private fun resizeListener(newSize: Dimensions) {
-        if (onSizeChange?.invoke(newSize.toIntVolumeSize(density)) == true) {
-            // We're done, the user app will handle the event.
-            return
-        }
-        userSize = newSize.toIntVolumeSize(density)
-        requestRelayout()
-    }
-
-    override fun CoreEntityScope.modifyCoreEntity() {
-        updateState()
-        userSize?.let { setRenderedSize(it) }
-    }
-
-    override fun onLayoutCoordinates(coordinates: SubspaceLayoutCoordinates) {
-        // Update the size of the component to match the final size of the layout.
-        component.size = coordinates.size.toDimensionsInMeters(density)
-    }
-
-    override fun onDetach() {
-        disableComponent()
-    }
-
-    private companion object {
-        val MainExecutor: Executor = Dispatchers.Main.asExecutor()
+    internal var onSizeChange: (IntVolumeSize) -> Boolean,
+) : SubspaceModifier.Node(), CoreEntityNode {
+    override fun modifyCoreEntity(coreEntity: CoreEntity) {
+        coreEntity.resizable?.updateState(this)
     }
 }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Scale.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Scale.kt
index 6f549e1..e67de1b 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Scale.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Scale.kt
@@ -54,8 +54,8 @@
     }
 }
 
-private class ScaleNode(var scale: Float) : SubspaceModifier.Node(), CoreEntityNode {
-    override fun CoreEntityScope.modifyCoreEntity() {
-        setOrAppendScale(scale)
+private class ScaleNode(public var scale: Float) : SubspaceModifier.Node(), CoreEntityNode {
+    override fun modifyCoreEntity(coreEntity: CoreEntity) {
+        coreEntity.scale = scale
     }
 }
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Size.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Size.kt
index 520862d..66cd9e4 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Size.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/Size.kt
@@ -525,69 +525,3 @@
     Z,
     AllThree,
 }
-
-/**
- * Declares the recommended size (width and height) for a @SubspaceComposable.
- *
- * In Full Space Mode, the maximum available size is determined by the user's field of view (FOV) as
- * perceived from the Subspace's origin. The maximum available size is then scaled by the provided
- * [fraction] to decide the recommended size.
- *
- * This API does not support Home Space Mode yet.
- *
- * @param fraction The fraction of the maximum field of view size to fill [0.0f to 1.0f]. A value of
- *   1.0f represents 100% of the calculated FOV size.
- * @return A [SubspaceModifier] that applies the calculated size to the layout.
- * @experimental This function is experimental and may change or be removed without notice.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-public fun SubspaceModifier.SpatialRecommendedSize(
-    @FloatRange(from = 0.0, to = 1.0) @Suppress("UNUSED_PARAMETER") fraction: Float = 1.0f
-): SubspaceModifier {
-    // TODO(b/394100111): Implement SpatialRecommendedSize modifier.
-    return this
-}
-
-/**
- * Declares the recommended width for a @SubspaceComposable.
- *
- * In Full Space Mode, the maximum available width is determined by the user's field of view (FOV)
- * as perceived from the Subspace's origin. The maximum available width is then scaled by the
- * provided [fraction] to decide the recommended width.
- *
- * This API does not support Home Space Mode yet.
- *
- * @param fraction The fraction of the maximum field of view width to fill [0.0f to 1.0f]. A value
- *   of 1.0f represents 100% of the calculated FOV width.
- * @return A [SubspaceModifier] that applies the calculated width to the layout.
- * @experimental This function is experimental and may change or be removed without notice.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-public fun SubspaceModifier.SpatialRecommendedWidth(
-    @FloatRange(from = 0.0, to = 1.0) @Suppress("UNUSED_PARAMETER") fraction: Float = 1.0f
-): SubspaceModifier {
-    // TODO(b/394100111): Implement SpatialRecommendedWidth modifier.
-    return this
-}
-
-/**
- * Declares the recommended height for a @SubspaceComposable.
- *
- * In Full Space Mode, the maximum available height is determined by the user's field of view (FOV)
- * as perceived from the Subspace's origin. The maximum available height is then scaled by the
- * provided [fraction] to decide the recommended height.
- *
- * This API does not support Home Space Mode yet.
- *
- * @param fraction The fraction of the maximum field of view height to fill [0.0f to 1.0f]. A value
- *   of 1.0f represents 100% of the calculated FOV height.
- * @return A [SubspaceModifier] that applies the calculated height to the layout.
- * @experimental This function is experimental and may change or be removed without notice.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY)
-public fun SubspaceModifier.SpatialRecommendedHeight(
-    @FloatRange(from = 0.0, to = 1.0) @Suppress("UNUSED_PARAMETER") fraction: Float = 1.0f
-): SubspaceModifier {
-    // TODO(b/394100111): Implement SpatialRecommendedHeight modifier.
-    return this
-}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/SubspaceLayout.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/SubspaceLayout.kt
index f6280bf..8defb8c 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/SubspaceLayout.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/layout/SubspaceLayout.kt
@@ -17,19 +17,19 @@
 package androidx.xr.compose.subspace.layout
 
 import androidx.annotation.RestrictTo
-import androidx.compose.runtime.Applier
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.ComposeNode
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.currentComposer
-import androidx.xr.compose.platform.LocalOpaqueEntity
+import androidx.xr.compose.platform.LocalCoreEntity
 import androidx.xr.compose.subspace.SubspaceComposable
-import androidx.xr.compose.subspace.entityName
 import androidx.xr.compose.subspace.node.ComposeSubspaceNode
 import androidx.xr.compose.subspace.node.ComposeSubspaceNode.Companion.SetCompositionLocalMap
 import androidx.xr.compose.subspace.node.ComposeSubspaceNode.Companion.SetCoreEntity
 import androidx.xr.compose.subspace.node.ComposeSubspaceNode.Companion.SetMeasurePolicy
 import androidx.xr.compose.subspace.node.ComposeSubspaceNode.Companion.SetModifier
+import androidx.xr.compose.subspace.node.ComposeSubspaceNode.Companion.SetName
+import androidx.xr.compose.subspace.node.SubspaceNodeApplier
 import androidx.xr.compose.subspace.rememberCoreContentlessEntity
 import androidx.xr.scenecore.ContentlessEntity
 
@@ -41,23 +41,25 @@
  * the [measurePolicy] instance. See [MeasurePolicy] for more details.
  *
  * @param modifier SubspaceModifier to apply during layout.
+ * @param name a name for the ComposeSubspaceNode. This can be useful for debugging.
  * @param measurePolicy a policy defining the measurement and positioning of the layout.
  */
-@Suppress("NOTHING_TO_INLINE")
 @SubspaceComposable
 @Composable
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public inline fun SubspaceLayout(
+public fun SubspaceLayout(
     modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultSubspaceLayoutName(),
     measurePolicy: MeasurePolicy,
 ) {
     val compositionLocalMap = currentComposer.currentCompositionLocalMap
-    ComposeNode<ComposeSubspaceNode, Applier<Any>>(
+    ComposeNode<ComposeSubspaceNode, SubspaceNodeApplier>(
         factory = ComposeSubspaceNode.Constructor,
         update = {
             set(compositionLocalMap, SetCompositionLocalMap)
             set(measurePolicy, SetMeasurePolicy)
             set(modifier, SetModifier)
+            set(name, SetName)
         },
     )
 }
@@ -71,22 +73,24 @@
  *
  * @param modifier SubspaceModifier to apply during layout
  * @param content the children composable to be laid out.
+ * @param name a name for the ComposeSubspaceNode. This can be useful for debugging.
  * @param measurePolicy a policy defining the measurement and positioning of the layout.
  */
-@Suppress("ComposableLambdaParameterPosition", "NOTHING_TO_INLINE")
+@Suppress("ComposableLambdaParameterPosition")
 @SubspaceComposable
 @Composable
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public inline fun SubspaceLayout(
-    crossinline content: @Composable @SubspaceComposable () -> Unit,
+public fun SubspaceLayout(
+    content: @Composable @SubspaceComposable () -> Unit,
     modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultSubspaceLayoutName(),
     measurePolicy: MeasurePolicy,
 ) {
     val coreEntity = rememberCoreContentlessEntity {
-        ContentlessEntity.create(session = this, name = entityName("Entity"))
+        ContentlessEntity.create(session = this, name = name)
     }
     val compositionLocalMap = currentComposer.currentCompositionLocalMap
-    ComposeNode<ComposeSubspaceNode, Applier<Any>>(
+    ComposeNode<ComposeSubspaceNode, SubspaceNodeApplier>(
         factory = ComposeSubspaceNode.Constructor,
         update = {
             set(compositionLocalMap, SetCompositionLocalMap)
@@ -95,8 +99,11 @@
             // TODO(b/390674036) Remove call-order dependency between SetCoreEntity and SetModifier
             // Execute SetModifier after SetCoreEntity, it depends on CoreEntity.
             set(modifier, SetModifier)
+            set(name, SetName)
         },
-        content = { CompositionLocalProvider(LocalOpaqueEntity provides coreEntity) { content() } },
+        content = {
+            CompositionLocalProvider(LocalCoreEntity provides coreEntity, content = content)
+        },
     )
 }
 
@@ -112,18 +119,19 @@
  *   needed for most use cases and should be avoided unless you have specific requirements to manage
  *   entities outside the Compose framework. If provided, it will associate the [SubspaceLayout]
  *   with the given SceneCore Entity.
+ * @param name a name for the ComposeSubspaceNode. This can be useful for debugging.
  * @param measurePolicy a policy defining the measurement and positioning of the layout.
  */
-@Suppress("NOTHING_TO_INLINE")
 @SubspaceComposable
 @Composable
-internal inline fun SubspaceLayout(
+internal fun SubspaceLayout(
     modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultSubspaceLayoutName(),
     coreEntity: CoreEntity? = null,
     measurePolicy: MeasurePolicy,
 ) {
     val compositionLocalMap = currentComposer.currentCompositionLocalMap
-    ComposeNode<ComposeSubspaceNode, Applier<Any>>(
+    ComposeNode<ComposeSubspaceNode, SubspaceNodeApplier>(
         factory = ComposeSubspaceNode.Constructor,
         update = {
             set(compositionLocalMap, SetCompositionLocalMap)
@@ -132,6 +140,7 @@
             // TODO(b/390674036) Remove call-order dependency between SetCoreEntity and SetModifier
             // Execute SetModifier after SetCoreEntity, it depends on CoreEntity.
             set(modifier, SetModifier)
+            set(name, SetName)
         },
     )
 }
@@ -149,21 +158,23 @@
  *   entities outside the Compose framework. If provided, it will associate the [SubspaceLayout]
  *   with the given SceneCore Entity.
  * @param content the children composable to be laid out.
+ * @param name a name for the ComposeSubspaceNode. This can be useful for debugging.
  * @param measurePolicy a policy defining the measurement and positioning of the layout.
  */
-@Suppress("ComposableLambdaParameterPosition", "NOTHING_TO_INLINE")
+@Suppress("ComposableLambdaParameterPosition")
 @SubspaceComposable
 @Composable
-internal inline fun SubspaceLayout(
-    crossinline content: @Composable @SubspaceComposable () -> Unit,
+internal fun SubspaceLayout(
+    content: @Composable @SubspaceComposable () -> Unit,
     modifier: SubspaceModifier = SubspaceModifier,
+    name: String = defaultSubspaceLayoutName(),
     coreEntity: CoreEntity = rememberCoreContentlessEntity {
-        ContentlessEntity.create(session = this, name = entityName("Entity"))
+        ContentlessEntity.create(session = this, name = name)
     },
     measurePolicy: MeasurePolicy,
 ) {
     val compositionLocalMap = currentComposer.currentCompositionLocalMap
-    ComposeNode<ComposeSubspaceNode, Applier<Any>>(
+    ComposeNode<ComposeSubspaceNode, SubspaceNodeApplier>(
         factory = ComposeSubspaceNode.Constructor,
         update = {
             set(compositionLocalMap, SetCompositionLocalMap)
@@ -172,7 +183,17 @@
             // TODO(b/390674036) Remove call-order dependency between SetCoreEntity and SetModifier
             // Execute SetModifier after SetCoreEntity, it depends on CoreEntity.
             set(modifier, SetModifier)
+            set(name, SetName)
         },
-        content = { CompositionLocalProvider(LocalOpaqueEntity provides coreEntity) { content() } },
+        content = {
+            CompositionLocalProvider(LocalCoreEntity provides coreEntity, content = content)
+        },
     )
 }
+
+private var subspaceLayoutNamePart: Int = 0
+
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public fun defaultSubspaceLayoutName(): String {
+    return "SubspaceLayoutNode-${subspaceLayoutNamePart++}"
+}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/ComposeSubspaceNode.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/ComposeSubspaceNode.kt
index a227e9c..232979a 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/ComposeSubspaceNode.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/ComposeSubspaceNode.kt
@@ -26,7 +26,6 @@
  *
  * This interface is inspired by [androidx.compose.ui.node.ComposeUiNode].
  */
-@PublishedApi
 internal interface ComposeSubspaceNode {
 
     /** The [MeasurePolicy] used to define the measure and layout behavior of this node. */
@@ -38,6 +37,9 @@
     /** The optional [CoreEntity] associated with this node. */
     public var coreEntity: CoreEntity?
 
+    /** An optional name for this node, useful for debugging and identification purposes. */
+    public var name: String?
+
     /** A snapshot of the current composition local map when this node is created. */
     public var compositionLocalMap: CompositionLocalMap
 
@@ -78,6 +80,13 @@
             this.modifier = it
         }
 
+        /**
+         * Sets the name for the given [ComposeSubspaceNode].
+         *
+         * @param name the name to be assigned.
+         */
+        public val SetName: ComposeSubspaceNode.(String) -> Unit = { this.name = it }
+
         /** Sets a snapshot of the current composition local map when this node is created. */
         public val SetCompositionLocalMap: ComposeSubspaceNode.(CompositionLocalMap) -> Unit = {
             this.compositionLocalMap = it
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode.kt
index 3a51c41..697d049 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode.kt
@@ -51,11 +51,11 @@
  * Requests a relayout of the [SubspaceLayoutModifierNode] composition tree.
  *
  * This is used to request a relayout in stateful layout modifiers that are impacted by events that
- * don't trigger a recomposition. *Do not* call this from [SubspaceLayoutModifierNode.measure].
+ * don't trigger a recomposition. *Do not* call this from [measure].
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public fun SubspaceLayoutModifierNode.requestRelayout() {
-    requireCoordinator().layoutNode?.requestRelayout()
+    coordinator.layoutNode?.requestRelayout()
 }
 
 /**
@@ -65,10 +65,10 @@
  * This is used to traverse the modifier node tree to find the correct [SubspaceLayoutCoordinates]
  * for a given [SubspaceLayoutModifierNode].
  */
-internal fun SubspaceLayoutModifierNode.requireCoordinator():
-    SubspaceLayoutModifierNodeCoordinator {
-    check(this is SubspaceModifier.Node && coordinator != null) {
-        "SubspaceLayoutModifierNode must also be a SubspaceModifier.Node and have a coordinator."
+internal val SubspaceLayoutModifierNode.coordinator: SubspaceLayoutModifierNodeCoordinator
+    get() {
+        check(this is SubspaceModifier.Node && this.coordinator != null) {
+            "SubspaceLayoutModifierNode must be a SubspaceModifier.Node and have a non-null coordinator."
+        }
+        return (this as SubspaceModifier.Node).coordinator!!
     }
-    return coordinator
-}
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutNode.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutNode.kt
index 9e4f19f..86ce12f 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutNode.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutNode.kt
@@ -19,7 +19,6 @@
 import androidx.compose.runtime.CompositionLocalMap
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.semantics.SemanticsConfiguration
-import androidx.compose.ui.semantics.SemanticsProperties
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.util.fastForEach
 import androidx.xr.compose.subspace.layout.CoreEntity
@@ -34,7 +33,6 @@
 import androidx.xr.compose.subspace.layout.SubspaceLayoutCoordinates
 import androidx.xr.compose.subspace.layout.SubspaceModifier
 import androidx.xr.compose.subspace.layout.SubspaceRootMeasurePolicy
-import androidx.xr.compose.subspace.layout.applyCoreEntityNodes
 import androidx.xr.compose.unit.IntVolumeSize
 import androidx.xr.compose.unit.VolumeConstraints
 import androidx.xr.runtime.math.Pose
@@ -79,6 +77,7 @@
         set(value) {
             field = value
             nodes.updateFrom(value)
+            updateCoreEntity()
         }
 
     override var coreEntity: CoreEntity? = null
@@ -86,10 +85,18 @@
             check(field == null) { "overwriting non-null CoreEntity is not supported" }
             field = value
             if (value != null) {
-                value.layout = this
+                value.layout = measurableLayout
             }
         }
 
+    override var name: String? = null
+
+    private fun updateCoreEntity() {
+        coreEntity?.let { entity ->
+            nodes.getAll<CoreEntityNode>().forEach { it.modifyCoreEntity(entity) }
+        }
+    }
+
     override var compositionLocalMap: CompositionLocalMap = CompositionLocalMap.Empty
         set(value) {
             field = value
@@ -234,7 +241,7 @@
     }
 
     override fun toString(): String {
-        return measurableLayout.config.getOrElse(SemanticsProperties.TestTag) { super.toString() }
+        return name ?: super.toString()
     }
 
     /** Call this method to see a dump of the SpatialLayoutNode tree structure. */
@@ -338,7 +345,6 @@
         public override fun placeAt(pose: Pose) {
             layoutPose = pose
 
-            coreEntity?.applyCoreEntityNodes(nodes.getAll<CoreEntityNode>())
             coreEntity?.updateEntityPose()
             coreEntity?.size = IntVolumeSize(measuredWidth, measuredHeight, measuredDepth)
 
@@ -418,7 +424,8 @@
          */
         private val coordinatesInRoot: SubspaceLayoutCoordinates?
             get() =
-                nodes.getLast<SubspaceLayoutModifierNode>()?.requireCoordinator()
+                coreEntity
+                    ?: nodes.getLast<SubspaceLayoutModifierNode>()?.coordinator
                     ?: parentCoordinatesInRoot
 
         /** Traverse the parent hierarchy up to the root. */
@@ -435,7 +442,8 @@
          */
         private val coordinatesInParentEntity: SubspaceLayoutCoordinates?
             get() =
-                nodes.getLast<SubspaceLayoutModifierNode>()?.requireCoordinator()
+                coreEntity
+                    ?: nodes.getLast<SubspaceLayoutModifierNode>()?.coordinator
                     ?: parentCoordinatesInParentEntity
 
         /** Traverse up the parent hierarchy until we reach a node with an entity. */
diff --git a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChain.kt b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChain.kt
index 92d7dcf..a6ff929 100644
--- a/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChain.kt
+++ b/xr/compose/compose/src/main/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChain.kt
@@ -144,7 +144,7 @@
             return wrappedMeasureBlock(constraints)
         }
         inMeasurePass = true
-        val placeable = layoutNode.requireCoordinator().measure(constraints)
+        val placeable = layoutNode.coordinator.measure(constraints)
         inMeasurePass = false
         return placeable
     }
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialCapabilitiesTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialCapabilitiesTest.kt
index 9c9c7a8..718d684 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialCapabilitiesTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialCapabilitiesTest.kt
@@ -17,6 +17,8 @@
 package androidx.xr.compose.platform
 
 import androidx.compose.material3.Text
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.test.junit4.createAndroidComposeRule
 import androidx.compose.ui.test.onNodeWithText
 import androidx.test.ext.junit.runners.AndroidJUnit4
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialConfigurationTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialConfigurationTest.kt
index 552b2bb..97dfa73 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialConfigurationTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/platform/SpatialConfigurationTest.kt
@@ -17,6 +17,8 @@
 package androidx.xr.compose.platform
 
 import androidx.compose.material3.Text
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.test.junit4.createAndroidComposeRule
 import androidx.compose.ui.test.onNodeWithText
 import androidx.compose.ui.unit.Dp
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/spatial/SpatialElevationTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/spatial/SpatialElevationTest.kt
index b8e9003..60a8bc3 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/spatial/SpatialElevationTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/spatial/SpatialElevationTest.kt
@@ -27,10 +27,12 @@
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.onNodeWithText
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.window.Dialog
 import androidx.compose.ui.window.Popup
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.xr.compose.testing.SubspaceTestingActivity
 import androidx.xr.compose.testing.TestSetup
+import kotlin.test.assertFailsWith
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -56,10 +58,21 @@
     }
 
     @Test
-    fun spatialElevation_popup_doesNotThrowError() {
-        composeTestRule.setContent { TestSetup { SpatialElevation { Popup { Text("Popup") } } } }
+    fun spatialElevation_dialog_throwsError() {
+        assertFailsWith<RuntimeException> {
+            composeTestRule.setContent {
+                TestSetup { SpatialElevation { Dialog(onDismissRequest = {}) { Text("Title") } } }
+            }
+        }
+    }
 
-        composeTestRule.onNodeWithText("Popup").assertExists()
+    @Test
+    fun spatialElevation_popup_throwsError() {
+        assertFailsWith<RuntimeException> {
+            composeTestRule.setContent {
+                TestSetup { SpatialElevation { Popup { Text("Popup") } } }
+            }
+        }
     }
 
     @Test
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialPanelTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialPanelTest.kt
index db94be7..8b6d125 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialPanelTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialPanelTest.kt
@@ -50,8 +50,6 @@
 import androidx.xr.scenecore.BasePanelEntity
 import androidx.xr.scenecore.PanelEntity
 import androidx.xr.scenecore.getEntitiesOfType
-import com.android.extensions.xr.ShadowXrExtensions
-import com.android.extensions.xr.space.ShadowActivityPanel
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertThrows
@@ -183,11 +181,8 @@
         // instead of
         // being launched.
         val launchIntent =
-            ShadowActivityPanel.extract(
-                    ShadowXrExtensions.extract(composeTestRule.activity.extensions)
-                        .getActivityPanelForHost(composeTestRule.activity)
-                )
-                .launchIntent
+            composeTestRule.activity.extensions.activityPanelMap[composeTestRule.activity]
+                ?.launchIntent
 
         assertThat(launchIntent?.component?.className)
             .isEqualTo(SpatialPanelActivity::class.java.name)
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialRowColumnTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialRowColumnTest.kt
index 75a4fba..bae11de 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialRowColumnTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/SpatialRowColumnTest.kt
@@ -344,10 +344,7 @@
     @Test
     fun spatialRowColumn_negativeCurvatureIsIgnored() {
         composeTestRule.setSubspaceContent {
-            SpatialCurvedRow(
-                SubspaceModifier.testTag("row1").width(500.dp),
-                curveRadius = -100.dp
-            ) {
+            SpatialRow(SubspaceModifier.testTag("row1").width(500.dp), curveRadius = -100.dp) {
                 SpatialColumn(SubspaceModifier.testTag("column1").width(250.dp)) {
                     SpatialPanel { Text(text = "Column 1") }
                 }
@@ -374,7 +371,7 @@
     @Test
     fun spatialRowColumn_zeroCurvatureIsIgnored() {
         composeTestRule.setSubspaceContent {
-            SpatialCurvedRow(SubspaceModifier.testTag("row1").width(500.dp), curveRadius = 0.dp) {
+            SpatialRow(SubspaceModifier.testTag("row1").width(500.dp), curveRadius = 0.dp) {
                 SpatialColumn(SubspaceModifier.testTag("column1").width(250.dp)) {
                     SpatialPanel { Text(text = "Column 1") }
                 }
@@ -402,7 +399,7 @@
     @Test
     fun spatialRowColumn_positiveCurvatureCreatesCurvature() {
         composeTestRule.setSubspaceContent {
-            SpatialCurvedRow(SubspaceModifier.testTag("row1").width(500.dp), curveRadius = 100.dp) {
+            SpatialRow(SubspaceModifier.testTag("row1").width(500.dp), curveRadius = 100.dp) {
                 SpatialColumn(SubspaceModifier.testTag("column1").width(250.dp)) {
                     SpatialPanel { Text(text = "Column 1") }
                 }
@@ -430,7 +427,7 @@
     @Test
     fun spatialRowColumn_zOffsetIsRespected() {
         composeTestRule.setSubspaceContent {
-            SpatialCurvedRow(
+            SpatialRow(
                 SubspaceModifier.testTag("row1").width(500.dp).offset(0.dp, 0.dp, -50.dp),
                 curveRadius = 100.dp,
             ) {
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/layout/AlphaTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/layout/AlphaTest.kt
deleted file mode 100644
index e33280e..0000000
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/layout/AlphaTest.kt
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright 2024 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.xr.compose.subspace.layout
-
-import androidx.compose.material3.Text
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.test.junit4.createAndroidComposeRule
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.xr.compose.subspace.SpatialPanel
-import androidx.xr.compose.testing.SubspaceTestingActivity
-import androidx.xr.compose.testing.onSubspaceNodeWithTag
-import androidx.xr.compose.testing.setSubspaceContent
-import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-class AlphaTest {
-
-    @get:Rule val composeTestRule = createAndroidComposeRule<SubspaceTestingActivity>()
-
-    @Test
-    fun alpha_shouldBeAppliedToEntity() {
-        composeTestRule.setSubspaceContent {
-            SpatialPanel(SubspaceModifier.testTag("panel").alpha(0.5f)) { Text(text = "Panel") }
-        }
-
-        assertThat(
-                composeTestRule
-                    .onSubspaceNodeWithTag("panel")
-                    .fetchSemanticsNode()
-                    .semanticsEntity
-                    ?.getAlpha()
-            )
-            .isEqualTo(0.5f)
-    }
-
-    @Test
-    fun alpha_multiple_shouldBeMultipliedThenAppliedToEntity() {
-        composeTestRule.setSubspaceContent {
-            SpatialPanel(SubspaceModifier.testTag("panel").alpha(0.5f).alpha(0.5f)) {
-                Text(text = "Panel")
-            }
-        }
-
-        assertThat(
-                composeTestRule
-                    .onSubspaceNodeWithTag("panel")
-                    .fetchSemanticsNode()
-                    .semanticsEntity
-                    ?.getAlpha()
-            )
-            .isEqualTo(0.25f)
-    }
-
-    @Test
-    fun alpha_negative_shouldBeClampedToZero() {
-        composeTestRule.setSubspaceContent {
-            SpatialPanel(SubspaceModifier.testTag("panel").alpha(-1f)) { Text(text = "Panel") }
-        }
-
-        assertThat(
-                composeTestRule
-                    .onSubspaceNodeWithTag("panel")
-                    .fetchSemanticsNode()
-                    .semanticsEntity
-                    ?.getAlpha()
-            )
-            .isEqualTo(0.0f)
-    }
-
-    @Test
-    fun alpha_greaterThanOne_shouldBeClampedToOne() {
-        composeTestRule.setSubspaceContent {
-            SpatialPanel(SubspaceModifier.testTag("panel").alpha(1.1f)) { Text(text = "Panel") }
-        }
-
-        assertThat(
-                composeTestRule
-                    .onSubspaceNodeWithTag("panel")
-                    .fetchSemanticsNode()
-                    .semanticsEntity
-                    ?.getAlpha()
-            )
-            .isEqualTo(1.0f)
-    }
-
-    @Test
-    fun alpha_updatesWhenValueChanges() {
-        var alpha by mutableStateOf(0.1f)
-        composeTestRule.setSubspaceContent {
-            SpatialPanel(SubspaceModifier.testTag("panel").alpha(alpha)) { Text(text = "Panel") }
-        }
-
-        assertThat(
-                composeTestRule
-                    .onSubspaceNodeWithTag("panel")
-                    .fetchSemanticsNode()
-                    .semanticsEntity
-                    ?.getAlpha()
-            )
-            .isEqualTo(0.1f)
-
-        alpha = 0.5f
-
-        assertThat(
-                composeTestRule
-                    .onSubspaceNodeWithTag("panel")
-                    .fetchSemanticsNode()
-                    .semanticsEntity
-                    ?.getAlpha()
-            )
-            .isEqualTo(0.5f)
-    }
-
-    @Test
-    fun alpha_multiple_valuesShouldBeClampedThenMultiplied() {
-        composeTestRule.setSubspaceContent {
-            SpatialPanel(SubspaceModifier.testTag("panel").alpha(3f).alpha(0.1f)) {
-                Text(text = "Panel")
-            }
-        }
-
-        assertThat(
-                composeTestRule
-                    .onSubspaceNodeWithTag("panel")
-                    .fetchSemanticsNode()
-                    .semanticsEntity
-                    ?.getAlpha()
-            )
-            .isEqualTo(0.1f)
-    }
-}
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/layout/SizeTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/layout/SizeTest.kt
index 3620804..0529d73 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/layout/SizeTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/layout/SizeTest.kt
@@ -28,7 +28,6 @@
 import androidx.xr.compose.testing.assertWidthIsEqualTo
 import androidx.xr.compose.testing.onSubspaceNodeWithTag
 import androidx.xr.compose.testing.setSubspaceContent
-import org.junit.Assert.assertSame
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -209,37 +208,4 @@
             .assertHeightIsEqualTo(10.dp)
             .assertDepthIsEqualTo(10.dp)
     }
-
-    @Test
-    fun spatialRecommendedSize_returnsSameModifier() {
-        val modifier = SubspaceModifier
-        val returnedModifier = modifier.SpatialRecommendedSize()
-        assertSame(
-            "SpatialRecommendedSize should return the same SubspaceModifier instance",
-            modifier,
-            returnedModifier,
-        )
-    }
-
-    @Test
-    fun spatialRecommendedWidth_returnsSameModifier() {
-        val modifier = SubspaceModifier
-        val returnedModifier = modifier.SpatialRecommendedWidth()
-        assertSame(
-            "SpatialRecommendedWidth should return the same SubspaceModifier instance",
-            modifier,
-            returnedModifier,
-        )
-    }
-
-    @Test
-    fun spatialRecommendedHeight_returnsSameModifier() {
-        val modifier = SubspaceModifier
-        val returnedModifier = modifier.SpatialRecommendedHeight()
-        assertSame(
-            "SpatialRecommendedHeight should return the same SubspaceModifier instance",
-            modifier,
-            returnedModifier,
-        )
-    }
 }
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChainTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChainTest.kt
index fedd3d8..97744cb 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChainTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeChainTest.kt
@@ -29,8 +29,8 @@
 import androidx.compose.ui.test.performClick
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.xr.compose.subspace.SpatialPanel
+import androidx.xr.compose.subspace.layout.CoreEntity
 import androidx.xr.compose.subspace.layout.CoreEntityNode
-import androidx.xr.compose.subspace.layout.CoreEntityScope
 import androidx.xr.compose.subspace.layout.SubspaceModifier
 import androidx.xr.compose.testing.SubspaceTestingActivity
 import androidx.xr.compose.testing.setSubspaceContent
@@ -112,7 +112,7 @@
         // This is used to track the number of times the node is reused.
         private var internalCount = 0
 
-        override fun CoreEntityScope.modifyCoreEntity() {
+        override fun modifyCoreEntity(coreEntity: CoreEntity) {
             nodeCount = ++internalCount
         }
     }
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/DpVolumeSizeTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/DpVolumeSizeTest.kt
index 1ffb125..0813537 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/DpVolumeSizeTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/DpVolumeSizeTest.kt
@@ -44,7 +44,7 @@
 
     @Test
     fun toDimensionsInMeter_returnsCorrectDimensions() {
-        val dpVolumeSize = DpVolumeSize(1.dp, 1.dp, 1.dp)
+        val dpVolumeSize = DpVolumeSize(1151.856f.dp, 1151.856f.dp, 1151.856f.dp)
 
         val dimensions = dpVolumeSize.toDimensionsInMeters()
 
@@ -55,7 +55,7 @@
     fun dpVolumeSize_fromMeters_returnsCorrectDpVolumeSize() {
         val dpVolumeSize = Dimensions(1f, 1f, 1f).toDpVolumeSize()
 
-        assertThat(dpVolumeSize).isEqualTo(DpVolumeSize(1.dp, 1.dp, 1.dp))
+        assertThat(dpVolumeSize).isEqualTo(DpVolumeSize(1151.856f.dp, 1151.856f.dp, 1151.856f.dp))
     }
 
     @Test
@@ -76,3 +76,20 @@
             .isEqualTo(DpVolumeSize(1111.11f.dp, 1111.11f.dp, 1111.11f.dp))
     }
 }
+
+/**
+ * Converts this [DpVolumeSize] to a [Dimensions] object in meters.
+ *
+ * @return a [Dimensions] object representing the volume size in meters
+ */
+internal fun DpVolumeSize.toDimensionsInMeters(): Dimensions =
+    Dimensions(width.toMeter().value, height.toMeter().value, depth.toMeter().value)
+
+/**
+ * Creates a [DpVolumeSize] from a [Dimensions] object in meters.
+ *
+ * @param dimensions the [Dimensions] object in meters.
+ * @return a [DpVolumeSize] object representing the same volume size in Dp.
+ */
+internal fun Dimensions.toDpVolumeSize(): DpVolumeSize =
+    DpVolumeSize(Meter(width).toDp(), Meter(height).toDp(), Meter(depth).toDp())
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/IntVolumeSizeTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/IntVolumeSizeTest.kt
index b8c886a..bdc84e2 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/IntVolumeSizeTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/IntVolumeSizeTest.kt
@@ -42,9 +42,9 @@
 
         val dimensions = intVolumeSize.toDimensionsInMeters(UNIT_DENSITY)
 
-        assertThat(dimensions.width).isWithin(0.0003f).of(10367.0f)
-        assertThat(dimensions.height).isWithin(0.0003f).of(10367.0f)
-        assertThat(dimensions.depth).isWithin(0.0003f).of(10367.0f)
+        assertThat(dimensions.width).isWithin(0.0003f).of(9.0f)
+        assertThat(dimensions.height).isWithin(0.0003f).of(9.0f)
+        assertThat(dimensions.depth).isWithin(0.0003f).of(9.0f)
     }
 
     @Test
@@ -55,9 +55,9 @@
         val dimensions = intVolumeSize.toDimensionsInMeters(DOUBLE_DENSITY)
 
         // When pixels are twice as dense, we expect the Meters equivalent to be half.
-        assertThat(dimensions.width).isWithin(0.0002f).of(5183.5f)
-        assertThat(dimensions.height).isWithin(0.0002f).of(5183.5f)
-        assertThat(dimensions.depth).isWithin(0.0002f).of(5183.5f)
+        assertThat(dimensions.width).isWithin(0.0002f).of(4.5f)
+        assertThat(dimensions.height).isWithin(0.0002f).of(4.5f)
+        assertThat(dimensions.depth).isWithin(0.0002f).of(4.5f)
     }
 
     @Test
@@ -73,7 +73,7 @@
 
         val intVolumeSize = dimensions.toIntVolumeSize(UNIT_DENSITY)
 
-        assertThat(intVolumeSize).isEqualTo(IntVolumeSize(9, 9, 9))
+        assertThat(intVolumeSize).isEqualTo(IntVolumeSize(10367, 10367, 10367))
     }
 
     @Test
diff --git a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/MeterTest.kt b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/MeterTest.kt
index 455d6d7..3a8d696 100644
--- a/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/MeterTest.kt
+++ b/xr/compose/compose/src/test/kotlin/androidx/xr/compose/unit/MeterTest.kt
@@ -33,12 +33,12 @@
 
     @Test
     fun meter_toDp() {
-        assertThat(1.meters.toDp()).isEqualTo(1.dp)
+        assertThat(1.meters.toDp()).isEqualTo(1151.856f.dp)
     }
 
     @Test
     fun roundToPx_roundsToNearestPixel() {
-        assertThat(1.meters.roundToPx(UNIT_DENSITY)).isEqualTo(1)
+        assertThat(1.meters.roundToPx(UNIT_DENSITY)).isEqualTo(1152)
     }
 
     @Test
@@ -46,12 +46,12 @@
         val DOUBLE_DENSITY = Density(density = 2.0f, fontScale = 2.0f)
 
         // Twice the density, twice the pixels.
-        assertThat(1.meters.roundToPx(DOUBLE_DENSITY)).isEqualTo(2)
+        assertThat(1.meters.roundToPx(DOUBLE_DENSITY)).isEqualTo(2304)
     }
 
     @Test
     fun dp_toMeter() {
-        assertThat(10.dp.toMeter()).isEqualTo(Meter(10f))
+        assertThat(10.dp.toMeter()).isEqualTo(Meter(0.008681641f))
         assertThat(Dp.Infinity.toMeter()).isEqualTo(Meter.Infinity)
         assertThat(Dp.Unspecified.toMeter()).isEqualTo(Meter.NaN)
 
@@ -80,17 +80,17 @@
 
     @Test
     fun meter_toPx() {
-        assertThat(5.meters.toPx(UNIT_DENSITY)).isEqualTo(5f)
+        assertThat(5.meters.toPx(UNIT_DENSITY)).isEqualTo(5759.28f)
     }
 
     @Test
     fun meter_roundToPx() {
-        assertThat(5.meters.roundToPx(UNIT_DENSITY)).isEqualTo(5)
+        assertThat(5.meters.roundToPx(UNIT_DENSITY)).isEqualTo(5759)
     }
 
     @Test
     fun meter_todp() {
-        assertThat(5.meters.toDp()).isEqualTo(5.dp)
+        assertThat(5.meters.toDp()).isEqualTo(5759.28f.dp)
     }
 
     @Test
diff --git a/xr/compose/integration-tests/common/build.gradle b/xr/compose/integration-tests/common/build.gradle
index 2c08a6f..17cafbd 100644
--- a/xr/compose/integration-tests/common/build.gradle
+++ b/xr/compose/integration-tests/common/build.gradle
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 plugins {
     id("com.android.library")
     id("AndroidXPlugin")
@@ -34,4 +33,4 @@
     implementation("androidx.compose.ui:ui-tooling-preview:1.7.0")
     implementation("androidx.compose.material:material-icons-core:1.6.7")
     implementation("androidx.compose.material3:material3:1.3.0")
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/layout/activitypanelapp/build.gradle b/xr/compose/integration-tests/layout/activitypanelapp/build.gradle
index 6c20265..71678efc 100644
--- a/xr/compose/integration-tests/layout/activitypanelapp/build.gradle
+++ b/xr/compose/integration-tests/layout/activitypanelapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -47,6 +44,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/layout/activitypanelapp/src/main/java/androidx/xr/compose/integration/layout/activitypanelapp/ActivityPanelApp.kt b/xr/compose/integration-tests/layout/activitypanelapp/src/main/java/androidx/xr/compose/integration/layout/activitypanelapp/ActivityPanelApp.kt
index 8f4c474..4c3787f 100644
--- a/xr/compose/integration-tests/layout/activitypanelapp/src/main/java/androidx/xr/compose/integration/layout/activitypanelapp/ActivityPanelApp.kt
+++ b/xr/compose/integration-tests/layout/activitypanelapp/src/main/java/androidx/xr/compose/integration/layout/activitypanelapp/ActivityPanelApp.kt
@@ -33,7 +33,6 @@
 import androidx.xr.compose.subspace.layout.movable
 import androidx.xr.compose.subspace.layout.offset
 import androidx.xr.compose.subspace.layout.resizable
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import androidx.xr.compose.unit.DpVolumeSize
 
@@ -68,8 +67,8 @@
                     SubspaceModifier.width(panelWidth)
                         .height(panelHeight)
                         .movable()
-                        .resizable(minimumSize = minimumSize)
-                        .testTag("AnotherActivityPanel"),
+                        .resizable(minimumSize = minimumSize),
+                name = "AnotherActivityPanel",
                 intent = Intent(this@ActivityPanelApp, AnotherActivity::class.java),
             )
             SpatialLayoutSpacer(modifier = SubspaceModifier.height(20.dp))
@@ -79,8 +78,8 @@
                         SubspaceModifier.width(panelWidth)
                             .height(panelHeight)
                             .movable()
-                            .resizable(minimumSize = minimumSize)
-                            .testTag("BaseActivityPanel"),
+                            .resizable(minimumSize = minimumSize),
+                    name = "BaseActivityPanel",
                     intent =
                         Intent(this@ActivityPanelApp, BaseActivity::class.java)
                             .putExtra("activityName", "Activity $i"),
@@ -99,8 +98,8 @@
                         SubspaceModifier.width(panelWidth)
                             .height(panelHeight)
                             .movable()
-                            .resizable(minimumSize = minimumSize)
-                            .testTag("BaseActivityPanel"),
+                            .resizable(minimumSize = minimumSize),
+                    name = "BaseActivityPanel",
                 )
                 SpatialLayoutSpacer(modifier = SubspaceModifier.height(20.dp))
             }
diff --git a/xr/compose/integration-tests/layout/animationexplorationapp/build.gradle b/xr/compose/integration-tests/layout/animationexplorationapp/build.gradle
index cab4182..5bd818be 100644
--- a/xr/compose/integration-tests/layout/animationexplorationapp/build.gradle
+++ b/xr/compose/integration-tests/layout/animationexplorationapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -41,15 +40,12 @@
 
 dependencies {
     implementation(project(":xr:compose:compose"))
-    implementation("com.google.ar:impress:0.0.3")
 
     implementation("androidx.activity:activity-compose:1.10.0-beta01")
     implementation("androidx.compose.ui:ui:1.7.0")
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/animationexplorationapp/src/main/java/androidx/xr/compose/integration/layout/animationexplorationapp/AnimationExplorationApp.kt b/xr/compose/integration-tests/layout/animationexplorationapp/src/main/java/androidx/xr/compose/integration/layout/animationexplorationapp/AnimationExplorationApp.kt
index 6803c32..b310390 100644
--- a/xr/compose/integration-tests/layout/animationexplorationapp/src/main/java/androidx/xr/compose/integration/layout/animationexplorationapp/AnimationExplorationApp.kt
+++ b/xr/compose/integration-tests/layout/animationexplorationapp/src/main/java/androidx/xr/compose/integration/layout/animationexplorationapp/AnimationExplorationApp.kt
@@ -50,7 +50,6 @@
 import androidx.xr.compose.subspace.layout.alpha
 import androidx.xr.compose.subspace.layout.height
 import androidx.xr.compose.subspace.layout.scale
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import kotlinx.coroutines.launch
 
@@ -98,8 +97,8 @@
                         modifier =
                             SubspaceModifier.width(desiredWidth)
                                 .height(desiredHeight)
-                                .alpha(animatedAlpha.value)
-                                .testTag("FadeInPanel")
+                                .alpha(animatedAlpha.value),
+                        name = "FadeInPanel",
                     ) {
                         PanelContent(
                             "Faded in content",
diff --git a/xr/compose/integration-tests/layout/curvedpanelandrowapp/build.gradle b/xr/compose/integration-tests/layout/curvedpanelandrowapp/build.gradle
index 9341963..05aaaa1 100644
--- a/xr/compose/integration-tests/layout/curvedpanelandrowapp/build.gradle
+++ b/xr/compose/integration-tests/layout/curvedpanelandrowapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -49,8 +48,6 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/curvedpanelandrowapp/src/main/java/androidx/xr/compose/integration/layout/curvedpanelandrowapp/CurvedPanelAndRowApp.kt b/xr/compose/integration-tests/layout/curvedpanelandrowapp/src/main/java/androidx/xr/compose/integration/layout/curvedpanelandrowapp/CurvedPanelAndRowApp.kt
index 2fd343f..9ea27fd 100644
--- a/xr/compose/integration-tests/layout/curvedpanelandrowapp/src/main/java/androidx/xr/compose/integration/layout/curvedpanelandrowapp/CurvedPanelAndRowApp.kt
+++ b/xr/compose/integration-tests/layout/curvedpanelandrowapp/src/main/java/androidx/xr/compose/integration/layout/curvedpanelandrowapp/CurvedPanelAndRowApp.kt
@@ -59,7 +59,6 @@
 import androidx.xr.compose.spatial.Subspace
 import androidx.xr.compose.subspace.MainPanel
 import androidx.xr.compose.subspace.SpatialColumn
-import androidx.xr.compose.subspace.SpatialCurvedRow
 import androidx.xr.compose.subspace.SpatialLayoutSpacer
 import androidx.xr.compose.subspace.SpatialPanel
 import androidx.xr.compose.subspace.SpatialRow
@@ -107,7 +106,7 @@
                     }
                 }
             }
-            SpatialCurvedRow(
+            SpatialRow(
                 modifier = SubspaceModifier.width(2000.dp).height(600.dp),
                 alignment = SpatialAlignment.BottomCenter,
                 curveRadius = curveRadius,
diff --git a/xr/compose/integration-tests/layout/depthstackingapp/build.gradle b/xr/compose/integration-tests/layout/depthstackingapp/build.gradle
index 8b00959..910be7d 100644
--- a/xr/compose/integration-tests/layout/depthstackingapp/build.gradle
+++ b/xr/compose/integration-tests/layout/depthstackingapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -46,6 +43,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/layout/depthstackingapp/src/main/java/androidx/xr/compose/integration/layout/depthstackingapp/DepthStackingApp.kt b/xr/compose/integration-tests/layout/depthstackingapp/src/main/java/androidx/xr/compose/integration/layout/depthstackingapp/DepthStackingApp.kt
index 7779868..2f2da78 100644
--- a/xr/compose/integration-tests/layout/depthstackingapp/src/main/java/androidx/xr/compose/integration/layout/depthstackingapp/DepthStackingApp.kt
+++ b/xr/compose/integration-tests/layout/depthstackingapp/src/main/java/androidx/xr/compose/integration/layout/depthstackingapp/DepthStackingApp.kt
@@ -37,7 +37,6 @@
 import androidx.xr.compose.subspace.layout.SubspaceModifier
 import androidx.xr.compose.subspace.layout.height
 import androidx.xr.compose.subspace.layout.offset
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 
 class DepthStackingApp : ComponentActivity() {
@@ -50,13 +49,13 @@
     private fun SpatialContent() {
         val panelSize = SubspaceModifier.width(200.dp).height(200.dp)
 
-        SpatialPanel(modifier = panelSize.offset(0.dp, 0.dp, (-50).dp).testTag("BackPanel")) {
+        SpatialPanel(modifier = panelSize.offset(0.dp, 0.dp, (-50).dp), name = "BackPanel") {
             PanelContent(Color.Red, "Back Panel")
         }
-        SpatialPanel(modifier = panelSize.testTag("MiddlePanel")) {
+        SpatialPanel(modifier = panelSize, name = "MiddlePanel") {
             PanelContent(Color.White, "Middle Panel")
         }
-        SpatialPanel(modifier = panelSize.offset(0.dp, 0.dp, 50.dp).testTag("FrontPanel")) {
+        SpatialPanel(modifier = panelSize.offset(0.dp, 0.dp, 50.dp), name = "Front Panel") {
             PanelContent(Color.Blue, "Front Panel")
         }
     }
diff --git a/xr/compose/integration-tests/layout/dialogpermissionsapp/build.gradle b/xr/compose/integration-tests/layout/dialogpermissionsapp/build.gradle
index dfed058..711a274 100644
--- a/xr/compose/integration-tests/layout/dialogpermissionsapp/build.gradle
+++ b/xr/compose/integration-tests/layout/dialogpermissionsapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -47,8 +46,6 @@
     implementation("androidx.compose.ui:ui:1.7.0")
     implementation("androidx.compose.ui:ui-tooling-preview:1.7.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/dialogpermissionsapp/src/main/java/androidx/xr/compose/integration/layout/dialogpermissionsapp/DialogPermissionsApp.kt b/xr/compose/integration-tests/layout/dialogpermissionsapp/src/main/java/androidx/xr/compose/integration/layout/dialogpermissionsapp/DialogPermissionsApp.kt
index 5fe7ee9..bf81b1ad 100644
--- a/xr/compose/integration-tests/layout/dialogpermissionsapp/src/main/java/androidx/xr/compose/integration/layout/dialogpermissionsapp/DialogPermissionsApp.kt
+++ b/xr/compose/integration-tests/layout/dialogpermissionsapp/src/main/java/androidx/xr/compose/integration/layout/dialogpermissionsapp/DialogPermissionsApp.kt
@@ -27,14 +27,16 @@
 import androidx.xr.compose.subspace.MainPanel
 import androidx.xr.compose.subspace.SubspaceComposable
 import androidx.xr.compose.subspace.layout.SubspaceModifier
+import androidx.xr.compose.subspace.layout.height
 import androidx.xr.compose.subspace.layout.movable
+import androidx.xr.compose.subspace.layout.offset
 import androidx.xr.compose.subspace.layout.resizable
-import androidx.xr.compose.subspace.layout.size
+import androidx.xr.compose.subspace.layout.width
 import androidx.xr.scenecore.PermissionHelper
 
 /**
- * Launches a dialog in the Main Panel for the scene understanding permission. If it is not given,
- * the app will close and alert of missing required permissions.
+ * Creates a new activity which asks for the scene understanding permission. If it is not given will
+ * close the app and alert of missing required permissions.
  */
 class DialogPermissionsApp : ComponentActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -54,6 +56,13 @@
     @Composable
     @SubspaceComposable
     private fun SpatialContent() {
-        MainPanel(modifier = SubspaceModifier.size(600.dp).movable().resizable())
+        MainPanel(
+            modifier =
+                SubspaceModifier.offset(100.dp, 200.dp)
+                    .width(100.dp)
+                    .height(100.dp)
+                    .movable()
+                    .resizable()
+        )
     }
 }
diff --git a/xr/compose/integration-tests/layout/modechangeapp/build.gradle b/xr/compose/integration-tests/layout/modechangeapp/build.gradle
index 62cfa07..e68885c 100644
--- a/xr/compose/integration-tests/layout/modechangeapp/build.gradle
+++ b/xr/compose/integration-tests/layout/modechangeapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -50,8 +49,6 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/modifierorderapp/build.gradle b/xr/compose/integration-tests/layout/modifierorderapp/build.gradle
index 7c1b6c3..2b62e46 100644
--- a/xr/compose/integration-tests/layout/modifierorderapp/build.gradle
+++ b/xr/compose/integration-tests/layout/modifierorderapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -46,6 +43,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/layout/modifierorderapp/src/main/java/androidx/xr/compose/integration/layout/modifierorderapp/ModifierOrderApp.kt b/xr/compose/integration-tests/layout/modifierorderapp/src/main/java/androidx/xr/compose/integration/layout/modifierorderapp/ModifierOrderApp.kt
index be564da..ec6ce74 100644
--- a/xr/compose/integration-tests/layout/modifierorderapp/src/main/java/androidx/xr/compose/integration/layout/modifierorderapp/ModifierOrderApp.kt
+++ b/xr/compose/integration-tests/layout/modifierorderapp/src/main/java/androidx/xr/compose/integration/layout/modifierorderapp/ModifierOrderApp.kt
@@ -43,7 +43,6 @@
 import androidx.xr.compose.subspace.layout.onGloballyPositioned
 import androidx.xr.compose.subspace.layout.resizable
 import androidx.xr.compose.subspace.layout.scale
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 
 class ModifierOrderApp : ComponentActivity() {
@@ -70,8 +69,8 @@
                     .onGloballyPositioned {
                         Log.i("ModifierOrderApp", "BackPanel position: ${it.poseInRoot}")
                     }
-                    .offset(y = (-100).dp)
-                    .testTag("Back Panel")
+                    .offset(y = (-100).dp),
+            name = "Back Panel",
         ) {
             PanelContent(Color.Red, "Back Panel")
         }
@@ -81,8 +80,8 @@
                     .onGloballyPositioned {
                         Log.i("ModifierOrderApp", "MiddlePanel position: ${it.poseInRoot}")
                     }
-                    .scale(0.9f)
-                    .testTag("Middle Panel")
+                    .scale(0.9f),
+            name = "Middle Panel",
         ) {
             PanelContent(Color.White, "Middle Panel")
         }
@@ -94,8 +93,8 @@
                     .onGloballyPositioned {
                         Log.i("ModifierOrderApp", "FrontPanel position: ${it.poseInRoot}")
                     }
-                    .offset(y = 100.dp)
-                    .testTag("Front Panel")
+                    .offset(y = 100.dp),
+            name = "Front Panel",
         ) {
             PanelContent(Color.Blue, "Front Panel")
         }
diff --git a/xr/compose/integration-tests/layout/movableandresizablepanelapp/build.gradle b/xr/compose/integration-tests/layout/movableandresizablepanelapp/build.gradle
index 336fbac..7236018 100644
--- a/xr/compose/integration-tests/layout/movableandresizablepanelapp/build.gradle
+++ b/xr/compose/integration-tests/layout/movableandresizablepanelapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -47,6 +44,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/layout/movableandresizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movableandresizablepanelapp/MovableAndResizablePanelApp.kt b/xr/compose/integration-tests/layout/movableandresizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movableandresizablepanelapp/MovableAndResizablePanelApp.kt
index 5c3e6f1..a4876fe 100644
--- a/xr/compose/integration-tests/layout/movableandresizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movableandresizablepanelapp/MovableAndResizablePanelApp.kt
+++ b/xr/compose/integration-tests/layout/movableandresizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movableandresizablepanelapp/MovableAndResizablePanelApp.kt
@@ -53,7 +53,6 @@
 import androidx.xr.compose.subspace.layout.offset
 import androidx.xr.compose.subspace.layout.padding
 import androidx.xr.compose.subspace.layout.resizable
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import kotlin.concurrent.fixedRateTimer
 
@@ -82,17 +81,15 @@
             }
         }
         val panelWidth = (dynamicValue * 40).dp
-        SpatialColumn(SubspaceModifier.testTag("PanelGridColumn")) {
+        SpatialColumn(name = "PanelGridColumn") {
             SpatialRow(
                 modifier = SubspaceModifier.fillMaxWidth(),
                 alignment = SpatialAlignment.BottomCenter,
             ) {
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(400.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("LeftColumn")
+                        SubspaceModifier.width(400.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "LeftColumn",
                 ) {
                     if (counter >= 5) {
                         SpatialPanel(
@@ -144,10 +141,8 @@
                 }
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(600.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("MiddleColumn")
+                        SubspaceModifier.width(600.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "MiddleColumn",
                 ) {
                     SpatialPanel(
                         modifier = SubspaceModifier.width(panelWidth).height(200.dp).fillMaxWidth()
@@ -166,10 +161,8 @@
                 }
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(400.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("RightColumn")
+                        SubspaceModifier.width(400.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "RightColumn",
                 ) {
                     SpatialPanel(
                         modifier = SubspaceModifier.width(panelWidth).height(200.dp).fillMaxWidth()
@@ -185,8 +178,8 @@
                                 .width(panelWidth)
                                 .height(200.dp)
                                 .resizable()
-                                .movable()
-                                .testTag("ActivityPanel"),
+                                .movable(),
+                        name = "ActivityPanel",
                     )
                 }
             }
diff --git a/xr/compose/integration-tests/layout/movablepanelapp/build.gradle b/xr/compose/integration-tests/layout/movablepanelapp/build.gradle
index 8d8203f..001401a 100644
--- a/xr/compose/integration-tests/layout/movablepanelapp/build.gradle
+++ b/xr/compose/integration-tests/layout/movablepanelapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -49,8 +48,6 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/movablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movablepanelapp/MovablePanelApp.kt b/xr/compose/integration-tests/layout/movablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movablepanelapp/MovablePanelApp.kt
index 1dbfd79f..a7206d5 100644
--- a/xr/compose/integration-tests/layout/movablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movablepanelapp/MovablePanelApp.kt
+++ b/xr/compose/integration-tests/layout/movablepanelapp/src/main/java/androidx/xr/compose/integration/layout/movablepanelapp/MovablePanelApp.kt
@@ -60,7 +60,6 @@
 import androidx.xr.compose.subspace.layout.offset
 import androidx.xr.compose.subspace.layout.padding
 import androidx.xr.compose.subspace.layout.rotate
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import androidx.xr.runtime.math.Quaternion
 
@@ -106,17 +105,15 @@
         var zValueMovable by remember { mutableStateOf(0.dp) }
         val density = LocalDensity.current
         var rotateValueMovable by remember { mutableStateOf(Quaternion.Identity) }
-        SpatialColumn(SubspaceModifier.testTag("PanelGridSpatialColumn")) {
+        SpatialColumn(name = "PanelGridSpatialColumn") {
             SpatialRow(
                 modifier = SubspaceModifier.fillMaxWidth(),
                 alignment = SpatialAlignment.BottomCenter,
             ) {
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(400.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("LeftColumn")
+                        SubspaceModifier.width(400.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "LeftColumn",
                 ) {
                     if (
                         transition.value >= 150f
@@ -150,10 +147,8 @@
                 }
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(600.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("MiddleColumn")
+                        SubspaceModifier.width(600.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "MiddleColumn",
                 ) {
                     SpatialPanel(
                         modifier = SubspaceModifier.width(panelWidth).height(200.dp).fillMaxWidth()
@@ -191,10 +186,8 @@
                 }
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(400.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("RightColumn")
+                        SubspaceModifier.width(400.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "RightColumn",
                 ) {
                     SpatialPanel(
                         modifier = SubspaceModifier.width(panelWidth).height(200.dp).fillMaxWidth()
@@ -208,8 +201,8 @@
                             SubspaceModifier.offset(x = 120.dp)
                                 .width(panelWidth)
                                 .height(200.dp)
-                                .movable(true)
-                                .testTag("ActivityPanel"),
+                                .movable(true),
+                        name = "ActivityPanel",
                     )
                 }
             }
diff --git a/xr/compose/integration-tests/layout/movablescalableapp/build.gradle b/xr/compose/integration-tests/layout/movablescalableapp/build.gradle
index a88ddd3..b3754b7 100644
--- a/xr/compose/integration-tests/layout/movablescalableapp/build.gradle
+++ b/xr/compose/integration-tests/layout/movablescalableapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -48,8 +47,6 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/movabletoggleapp/build.gradle b/xr/compose/integration-tests/layout/movabletoggleapp/build.gradle
index b859c32..a760b68 100644
--- a/xr/compose/integration-tests/layout/movabletoggleapp/build.gradle
+++ b/xr/compose/integration-tests/layout/movabletoggleapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -46,6 +43,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
diff --git a/xr/compose/integration-tests/layout/nestedsubspaceapp/build.gradle b/xr/compose/integration-tests/layout/nestedsubspaceapp/build.gradle
index 6a4b90b..53aad75 100644
--- a/xr/compose/integration-tests/layout/nestedsubspaceapp/build.gradle
+++ b/xr/compose/integration-tests/layout/nestedsubspaceapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -46,6 +43,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
diff --git a/xr/compose/integration-tests/layout/nestedsubspacesetsubspacecontentactivity/build.gradle b/xr/compose/integration-tests/layout/nestedsubspacesetsubspacecontentactivity/build.gradle
index bb5ad37..01d6857 100644
--- a/xr/compose/integration-tests/layout/nestedsubspacesetsubspacecontentactivity/build.gradle
+++ b/xr/compose/integration-tests/layout/nestedsubspacesetsubspacecontentactivity/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -46,6 +43,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
diff --git a/xr/compose/integration-tests/layout/panelvolumeapp/build.gradle b/xr/compose/integration-tests/layout/panelvolumeapp/build.gradle
index e9824f5..01fca76 100644
--- a/xr/compose/integration-tests/layout/panelvolumeapp/build.gradle
+++ b/xr/compose/integration-tests/layout/panelvolumeapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -49,6 +46,4 @@
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
     implementation(libs.kotlinCoroutinesGuava)
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
diff --git a/xr/compose/integration-tests/layout/panelvolumeapp/src/main/java/androidx/xr/compose/integration/layout/panelvolumeapp/PanelVolumeApp.kt b/xr/compose/integration-tests/layout/panelvolumeapp/src/main/java/androidx/xr/compose/integration/layout/panelvolumeapp/PanelVolumeApp.kt
index f971dbe..524c9e1 100644
--- a/xr/compose/integration-tests/layout/panelvolumeapp/src/main/java/androidx/xr/compose/integration/layout/panelvolumeapp/PanelVolumeApp.kt
+++ b/xr/compose/integration-tests/layout/panelvolumeapp/src/main/java/androidx/xr/compose/integration/layout/panelvolumeapp/PanelVolumeApp.kt
@@ -51,7 +51,6 @@
 import androidx.xr.compose.subspace.layout.movable
 import androidx.xr.compose.subspace.layout.offset
 import androidx.xr.compose.subspace.layout.scale
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import androidx.xr.compose.unit.Meter.Companion.meters
 import androidx.xr.scenecore.GltfModel
@@ -86,11 +85,8 @@
 
         SpatialPanel(
             modifier =
-                SubspaceModifier.width(200.dp)
-                    .height(200.dp)
-                    .offset(y = panelYOffset)
-                    .movable()
-                    .testTag("RootPanel")
+                SubspaceModifier.width(200.dp).height(200.dp).offset(y = panelYOffset).movable(),
+            name = "RootPanel",
         ) {
             Box(
                 modifier = Modifier.background(Color.LightGray).fillMaxSize(),
diff --git a/xr/compose/integration-tests/layout/resizablepanelapp/build.gradle b/xr/compose/integration-tests/layout/resizablepanelapp/build.gradle
index 456aa3d..6846250 100644
--- a/xr/compose/integration-tests/layout/resizablepanelapp/build.gradle
+++ b/xr/compose/integration-tests/layout/resizablepanelapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -47,6 +44,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/layout/resizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/resizablepanelapp/ResizablePanelApp.kt b/xr/compose/integration-tests/layout/resizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/resizablepanelapp/ResizablePanelApp.kt
index 385811d..c5421ce 100644
--- a/xr/compose/integration-tests/layout/resizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/resizablepanelapp/ResizablePanelApp.kt
+++ b/xr/compose/integration-tests/layout/resizablepanelapp/src/main/java/androidx/xr/compose/integration/layout/resizablepanelapp/ResizablePanelApp.kt
@@ -58,7 +58,6 @@
 import androidx.xr.compose.subspace.layout.offset
 import androidx.xr.compose.subspace.layout.padding
 import androidx.xr.compose.subspace.layout.resizable
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import androidx.xr.compose.unit.DpVolumeSize
 
@@ -87,17 +86,15 @@
         // recomposition.
         var onSizeChangeWidth by remember { mutableStateOf(200.dp) }
         var onSizeChangeHeight by remember { mutableStateOf(200.dp) }
-        SpatialColumn(modifier = SubspaceModifier.testTag("PanelGridColumn")) {
+        SpatialColumn(name = "PanelGridColumn") {
             SpatialRow(
                 modifier = SubspaceModifier.fillMaxWidth(),
                 alignment = SpatialAlignment.BottomCenter,
             ) {
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(400.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("LeftColumn")
+                        SubspaceModifier.width(400.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "LeftColumn",
                 ) {
                     if (
                         transition.value >= 150f
@@ -134,10 +131,8 @@
                 }
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(600.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("MiddleColumn")
+                        SubspaceModifier.width(600.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "MiddleColumn",
                 ) {
                     val density = LocalDensity.current
                     SpatialPanel(
@@ -169,10 +164,8 @@
                 }
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(400.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("RightColumn")
+                        SubspaceModifier.width(400.dp).fillMaxHeight().padding(horizontal = 20.dp),
+                    name = "RightColumn",
                 ) {
                     SpatialPanel(
                         modifier = SubspaceModifier.width(panelWidth).height(200.dp).fillMaxWidth()
@@ -186,8 +179,8 @@
                             SubspaceModifier.offset(x = 120.dp)
                                 .width(panelWidth)
                                 .height(200.dp)
-                                .resizable(true)
-                                .testTag("ActivityPanel"),
+                                .resizable(true),
+                        name = "ActivityPanel",
                     )
                 }
             }
diff --git a/xr/compose/integration-tests/layout/resizabletoggleapp/build.gradle b/xr/compose/integration-tests/layout/resizabletoggleapp/build.gradle
index 4e1299a..91c9144 100644
--- a/xr/compose/integration-tests/layout/resizabletoggleapp/build.gradle
+++ b/xr/compose/integration-tests/layout/resizabletoggleapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -46,6 +43,4 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/layout/rotationapp/build.gradle b/xr/compose/integration-tests/layout/rotationapp/build.gradle
index 5883140..03b26e3 100644
--- a/xr/compose/integration-tests/layout/rotationapp/build.gradle
+++ b/xr/compose/integration-tests/layout/rotationapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -48,8 +47,6 @@
     implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/rotationapp/src/main/java/androidx/xr/compose/integration/layout/rotationapp/RotationApp.kt b/xr/compose/integration-tests/layout/rotationapp/src/main/java/androidx/xr/compose/integration/layout/rotationapp/RotationApp.kt
index 80e6950..0808239 100644
--- a/xr/compose/integration-tests/layout/rotationapp/src/main/java/androidx/xr/compose/integration/layout/rotationapp/RotationApp.kt
+++ b/xr/compose/integration-tests/layout/rotationapp/src/main/java/androidx/xr/compose/integration/layout/rotationapp/RotationApp.kt
@@ -53,7 +53,6 @@
 import androidx.xr.compose.subspace.layout.padding
 import androidx.xr.compose.subspace.layout.rotate
 import androidx.xr.compose.subspace.layout.size
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import androidx.xr.runtime.math.Vector3
 import kotlin.math.floor
@@ -109,62 +108,66 @@
                     ),
             )
 
-        SpatialColumn(SubspaceModifier.testTag("OutermostContainer")) {
-            SpatialRow(SubspaceModifier.testTag("StatusRow")) {
+        SpatialColumn(name = "OutermostContainer") {
+            SpatialRow(name = "StatusRow") {
                 AppPanel(
-                    modifier = SubspaceModifier.height(80.dp).testTag("StatusPanel"),
+                    modifier = SubspaceModifier.height(80.dp),
+                    name = "StatusPanel",
                     text = "Rotation Axis: ${axisAngle.x}, ${axisAngle.y}, ${axisAngle.z}",
                 )
             }
-            SpatialRow(SubspaceModifier.testTag("ContentRow")) {
+            SpatialRow(name = "ContentRow") {
                 SpatialColumn(
-                    modifier =
-                        SubspaceModifier.rotate(axisAngle, rotationValue).testTag("RotatingColumn")
+                    modifier = SubspaceModifier.rotate(axisAngle, rotationValue),
+                    name = "RotatingColumn",
                 ) {
                     val rotatedColumnPanelModifier = SubspaceModifier.size(200.dp).padding(20.dp)
                     AppPanel(
-                        modifier = rotatedColumnPanelModifier.testTag("TopPanelRotatingColumn"),
+                        modifier = rotatedColumnPanelModifier,
+                        name = "TopPanelRotatingColumn",
                         text = "Top panel: ${rotationValue.roundToInt()}",
                     )
                     AppPanel(
-                        modifier = rotatedColumnPanelModifier.testTag("CenterPanelRotatingColumn"),
+                        modifier = rotatedColumnPanelModifier,
+                        name = "CenterPanelRotatingColumn",
                         text = "Center panel: ${rotationValue.roundToInt()}",
                     )
                     AppPanel(
-                        modifier = rotatedColumnPanelModifier.testTag("BottomPanelRotatingColumn"),
+                        modifier = rotatedColumnPanelModifier,
+                        name = "BottomPanelRotatingColumn",
                         text = "Bottom panel: ${rotationValue.roundToInt()}",
                     )
                 }
-                SpatialColumn(SubspaceModifier.testTag("RightmostColumn")) {
+                SpatialColumn(name = "RightmostColumn") {
                     val rotatedRowPanelModifier = SubspaceModifier.size(200.dp).padding(20.dp)
                     SpatialRow(
-                        modifier =
-                            SubspaceModifier.rotate(axisAngle, rotationValue).testTag("RotatingRow")
+                        modifier = SubspaceModifier.rotate(axisAngle, rotationValue),
+                        name = "RotatingRow",
                     ) {
                         AppPanel(
-                            modifier = rotatedRowPanelModifier.testTag("LeftPanelRotatingRow"),
+                            modifier = rotatedRowPanelModifier,
+                            name = "RightPanelRotatingRow",
                             text = "Left panel: ${rotationValue.roundToInt()}",
                         )
                         AppPanel(
-                            modifier = rotatedRowPanelModifier.testTag("CenterPanelRotatingRow"),
+                            modifier = rotatedRowPanelModifier,
+                            name = "CenterPanelRotatingRow",
                             text = "Center panel: ${rotationValue.roundToInt()}",
                         )
                         AppPanel(
-                            modifier = rotatedRowPanelModifier.testTag("RightPanelRotatingRow"),
+                            modifier = rotatedRowPanelModifier,
+                            name = "LeftPanelRotatingRow",
                             text = "Right panel: ${rotationValue.roundToInt()}",
                         )
                     }
-                    SpatialRow(
-                        modifier = SubspaceModifier.testTag("RowWithRotatingPanel"),
-                        alignment = SpatialAlignment.Center,
-                    ) {
+                    SpatialRow(alignment = SpatialAlignment.Center, name = "RowWithRotatingPanel") {
                         AppPanel(
                             modifier =
                                 SubspaceModifier.width(400.dp)
                                     .height(400.dp)
                                     .padding(20.dp)
-                                    .rotate(axisAngle, rotationValue)
-                                    .testTag("RotatingPanel"),
+                                    .rotate(axisAngle, rotationValue),
+                            name = "RotatingPanel",
                             text = "Rotating Panel: ${rotationValue.roundToInt()}",
                         )
                     }
@@ -175,8 +178,8 @@
 
     @SubspaceComposable
     @Composable
-    fun AppPanel(modifier: SubspaceModifier = SubspaceModifier, text: String = "") {
-        SpatialPanel(modifier = modifier) { PanelContent(text) }
+    fun AppPanel(modifier: SubspaceModifier = SubspaceModifier, name: String, text: String = "") {
+        SpatialPanel(modifier = modifier, name = name) { PanelContent(text) }
     }
 
     @UiComposable
diff --git a/xr/compose/integration-tests/layout/spatialcomposeapp/build.gradle b/xr/compose/integration-tests/layout/spatialcomposeapp/build.gradle
index 5b95d7b..38b81da0c 100644
--- a/xr/compose/integration-tests/layout/spatialcomposeapp/build.gradle
+++ b/xr/compose/integration-tests/layout/spatialcomposeapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -52,12 +51,10 @@
     implementation("androidx.compose.ui:ui:1.7.0")
     implementation("androidx.compose.ui:ui-tooling-preview:1.7.0")
     implementation("androidx.compose.material:material-icons-core:1.6.7")
-    implementation("androidx.compose.material3:material3:1.4.0-alpha01")
+    implementation("androidx.compose.material3:material3:1.3.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
     implementation(libs.kotlinCoroutinesGuava)
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/layout/spatialcomposeapp/src/main/java/androidx/xr/compose/integration/layout/spatialcomposeapp/SpatialComposeAppActivity.kt b/xr/compose/integration-tests/layout/spatialcomposeapp/src/main/java/androidx/xr/compose/integration/layout/spatialcomposeapp/SpatialComposeAppActivity.kt
index 49d1929..20a5993 100644
--- a/xr/compose/integration-tests/layout/spatialcomposeapp/src/main/java/androidx/xr/compose/integration/layout/spatialcomposeapp/SpatialComposeAppActivity.kt
+++ b/xr/compose/integration-tests/layout/spatialcomposeapp/src/main/java/androidx/xr/compose/integration/layout/spatialcomposeapp/SpatialComposeAppActivity.kt
@@ -39,14 +39,11 @@
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Check
-import androidx.compose.material.icons.filled.Lock
 import androidx.compose.material3.Button
-import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
 import androidx.compose.material3.Icon
 import androidx.compose.material3.IconButton
 import androidx.compose.material3.Surface
 import androidx.compose.material3.Text
-import androidx.compose.material3.ToggleButton
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.derivedStateOf
@@ -75,9 +72,9 @@
 import androidx.xr.compose.spatial.Subspace
 import androidx.xr.compose.subspace.MainPanel
 import androidx.xr.compose.subspace.SpatialColumn
-import androidx.xr.compose.subspace.SpatialCurvedRow
 import androidx.xr.compose.subspace.SpatialLayoutSpacer
 import androidx.xr.compose.subspace.SpatialPanel
+import androidx.xr.compose.subspace.SpatialRow
 import androidx.xr.compose.subspace.SubspaceComposable
 import androidx.xr.compose.subspace.Volume
 import androidx.xr.compose.subspace.layout.SpatialAlignment
@@ -87,11 +84,8 @@
 import androidx.xr.compose.subspace.layout.fillMaxHeight
 import androidx.xr.compose.subspace.layout.fillMaxWidth
 import androidx.xr.compose.subspace.layout.height
-import androidx.xr.compose.subspace.layout.movable
 import androidx.xr.compose.subspace.layout.offset
 import androidx.xr.compose.subspace.layout.padding
-import androidx.xr.compose.subspace.layout.resizable
-import androidx.xr.compose.subspace.layout.testTag
 import androidx.xr.compose.subspace.layout.width
 import androidx.xr.compose.unit.Meter.Companion.meters
 import androidx.xr.runtime.math.Pose
@@ -157,15 +151,6 @@
                 ) {
                     Text("Switch Space Mode")
                 }
-                Button(
-                    onClick = {
-                        val intent =
-                            Intent(this@SpatialComposeAppActivity, VideoPlayerActivity::class.java)
-                        startActivity(intent)
-                    }
-                ) {
-                    Text("Launch Video Player")
-                }
             }
         }
     }
@@ -175,14 +160,16 @@
     fun PanelGrid() {
         val sidePanelModifier = SubspaceModifier.fillMaxWidth().height(200.dp)
         val curveRadius = 1025.dp
-        SpatialColumn(SubspaceModifier.testTag("PanelGridColumn")) {
-            SpatialCurvedRow(
-                modifier = SubspaceModifier.width(2000.dp).height(1200.dp).testTag("PanelGridRow"),
+        SpatialColumn(name = "PanelGridColumn") {
+            SpatialRow(
+                modifier = SubspaceModifier.width(2000.dp).height(1200.dp),
                 alignment = SpatialAlignment.BottomCenter,
                 curveRadius = curveRadius,
+                name = "PanelGridRow",
             ) {
                 SpatialColumn(
-                    modifier = SubspaceModifier.width(200.dp).fillMaxHeight().testTag("LeftColumn")
+                    modifier = SubspaceModifier.width(200.dp).fillMaxHeight(),
+                    name = "LeftColumn",
                 ) {
                     Orbiter(
                         position = OrbiterEdge.Start,
@@ -206,22 +193,21 @@
                 }
                 SpatialColumn(
                     modifier =
-                        SubspaceModifier.width(800.dp)
-                            .fillMaxHeight()
-                            .padding(horizontal = 20.dp)
-                            .testTag("CenterColumn"),
+                        SubspaceModifier.width(800.dp).fillMaxHeight().padding(horizontal = 20.dp),
                     alignment = SpatialAlignment.TopCenter,
+                    name = "CenterColumn",
                 ) {
                     MainPanel(modifier = SubspaceModifier.fillMaxWidth().height(600.dp))
                     SpatialPanel(
-                        modifier =
-                            SubspaceModifier.fillMaxWidth().height(400.dp).testTag("ActivityPanel"),
+                        modifier = SubspaceModifier.fillMaxWidth().height(400.dp),
+                        name = "ActivityPanel",
                         intent =
                             Intent(this@SpatialComposeAppActivity, AnotherActivity::class.java),
                     )
                 }
                 SpatialColumn(
-                    modifier = SubspaceModifier.width(200.dp).fillMaxHeight().testTag("RightColumn")
+                    modifier = SubspaceModifier.width(200.dp).fillMaxHeight(),
+                    name = "RightColumn",
                 ) {
                     AppPanel(modifier = sidePanelModifier, text = "Panel Top Right")
                     SpatialLayoutSpacer(modifier = SubspaceModifier.height(20.dp))
@@ -231,35 +217,20 @@
         }
     }
 
-    @OptIn(ExperimentalMaterial3ExpressiveApi::class)
     @SubspaceComposable
     @Composable
     fun AppPanel(modifier: SubspaceModifier = SubspaceModifier, text: String = "") {
-        var moveResizeLocked by remember { mutableStateOf(true) }
-        SpatialPanel(
-            modifier =
-                modifier
-                    .testTag(text)
-                    .movable(enabled = !moveResizeLocked)
-                    .resizable(enabled = !moveResizeLocked)
-        ) {
-            PanelContent { Text(text) }
+        SpatialPanel(modifier = modifier, name = text) { PanelContent(text) }
+    }
 
-            Orbiter(
-                position = OrbiterEdge.Bottom,
-                offset = 24.dp,
-                shape = SpatialRoundedCornerShape(size = CornerSize(50)),
-                settings = OrbiterSettings(shouldRenderInNonSpatial = false),
-            ) {
-                ToggleButton(
-                    checked = moveResizeLocked,
-                    onCheckedChange = { moveResizeLocked = !moveResizeLocked },
-                ) {
-                    Icon(
-                        imageVector = Icons.Filled.Lock,
-                        contentDescription =
-                            if (moveResizeLocked) "Enable Move/Resize" else "Disable Move/Resize",
-                    )
+    @UiComposable
+    @SubspaceComposable
+    @Composable
+    fun PanelContent(vararg texts: String) {
+        PanelContent {
+            Column {
+                for (text in texts) {
+                    Text(text)
                 }
             }
         }
@@ -268,7 +239,6 @@
     @UiComposable
     @Composable
     fun PanelContent(content: @Composable () -> Unit) {
-        var showArrows by remember { mutableStateOf(false) }
         var addHighlight by remember { mutableStateOf(false) }
         val borderWidth by remember { derivedStateOf { if (addHighlight) 3.dp else 0.dp } }
         var showDialog by remember { mutableStateOf(false) }
@@ -280,9 +250,6 @@
             horizontalAlignment = Alignment.CenterHorizontally,
             verticalArrangement = Arrangement.Center,
         ) {
-            if (showArrows) {
-                Subspace { XyzArrows() }
-            }
             content()
             Orbiter(
                 position = OrbiterEdge.End,
@@ -291,10 +258,7 @@
                 settings = OrbiterSettings(shouldRenderInNonSpatial = false),
             ) {
                 IconButton(
-                    onClick = {
-                        addHighlight = !addHighlight
-                        showArrows = !showArrows
-                    },
+                    onClick = { addHighlight = !addHighlight },
                     modifier = Modifier.background(Color.Gray),
                 ) {
                     Icon(imageVector = Icons.Filled.Check, contentDescription = "Add highlight")
@@ -338,7 +302,6 @@
         SpatialPanel(view = textView, modifier = modifier)
     }
 
-    @SubspaceComposable
     @Composable
     fun XyzArrows(modifier: SubspaceModifier = SubspaceModifier) {
         val session =
diff --git a/xr/compose/integration-tests/layout/spatialcomposeapp/src/main/java/androidx/xr/compose/integration/layout/spatialcomposeapp/VideoPlayerActivity.kt b/xr/compose/integration-tests/layout/spatialcomposeapp/src/main/java/androidx/xr/compose/integration/layout/spatialcomposeapp/VideoPlayerActivity.kt
deleted file mode 100644
index d5c9204..0000000
--- a/xr/compose/integration-tests/layout/spatialcomposeapp/src/main/java/androidx/xr/compose/integration/layout/spatialcomposeapp/VideoPlayerActivity.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright 2024 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.xr.compose.integration.layout.spatialcomposeapp
-
-import android.media.MediaPlayer
-import android.os.Bundle
-import android.util.Log
-import androidx.activity.ComponentActivity
-import androidx.activity.compose.BackHandler
-import androidx.activity.compose.setContent
-import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Button
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.ComposeView
-import androidx.compose.ui.platform.ViewCompositionStrategy
-import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
-import androidx.xr.compose.spatial.Subspace
-import androidx.xr.compose.subspace.SpatialPanel
-import androidx.xr.compose.subspace.layout.SubspaceModifier
-import androidx.xr.compose.subspace.layout.height
-import androidx.xr.compose.subspace.layout.movable
-import androidx.xr.compose.subspace.layout.width
-import androidx.xr.runtime.math.Pose
-import androidx.xr.runtime.math.Quaternion
-import androidx.xr.runtime.math.Vector3
-import androidx.xr.scenecore.Dimensions
-import androidx.xr.scenecore.MovableComponent
-import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
-import androidx.xr.scenecore.Session
-import androidx.xr.scenecore.SurfaceEntity
-
-/**
- * This is a sample activity that shows how to use Compose XR to create a SurfaceEntity and use it
- * to display a video.
- */
-class VideoPlayerActivity : ComponentActivity() {
-    private lateinit var mediaPlayer: MediaPlayer
-
-    private val session by lazy { Session.create(this) }
-
-    private var surfaceEntity: SurfaceEntity? = null
-    private var movableComponent: MovableComponent? = null
-    private var videoPlaying by mutableStateOf<Boolean>(false)
-    private var controlPanelEntity: PanelEntity? = null
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        session.spatialEnvironment.setPassthroughOpacityPreference(0.0f)
-        setContent { Subspace { SurfaceEntityContent(session) } }
-    }
-
-    /** Sets up the surface entity */
-    @Composable
-    private fun SurfaceEntityContent(session: Session) {
-
-        SpatialPanel(SubspaceModifier.height(600.dp).width(600.dp).movable()) {
-            Box(
-                modifier = Modifier.background(Color.LightGray).fillMaxSize(),
-                contentAlignment = Alignment.Center,
-            ) {
-                BackHandler {
-                    Log.i(
-                        "BackHandler",
-                        "Gnav BACK is being handled by Surface Entity back handler"
-                    )
-                    destroySurfaceEntity()
-                    finish()
-                }
-                VideoPlayerTestActivityUI(session)
-            }
-        }
-    }
-
-    @Composable
-    fun BigBuckBunnyButton() {
-        Button(
-            onClick = {
-                surfaceEntity =
-                    SurfaceEntity.create(
-                        session,
-                        SurfaceEntity.StereoMode.TOP_BOTTOM,
-                        Pose(Vector3(0f, 0.0f, 0.1f), Quaternion(0.0f, 0.0f, 0.0f, 1.0f)),
-                    )
-                // Make the video player movable (to make it easier to look at it from different
-                // angles and distances)
-                movableComponent = MovableComponent.create(session)
-
-                // The quad has a radius of 1.0 meters
-                movableComponent!!.size = Dimensions(1.0f, 1.0f, 1.0f)
-
-                @Suppress("UNUSED_VARIABLE")
-                val unused = surfaceEntity!!.addComponent(movableComponent!!)
-
-                // Set up MediaPlayer
-                mediaPlayer = MediaPlayer()
-                mediaPlayer.setSurface(surfaceEntity!!.getSurface())
-
-                // For Testers: This file should be packaged with the APK.
-                mediaPlayer.setDataSource(assets.openFd("vid_bigbuckbunny.mp4"))
-
-                mediaPlayer.setOnCompletionListener { mediaPlayer.release() }
-                mediaPlayer.setOnVideoSizeChangedListener { _, width, height ->
-                    check(width >= 0 && height >= 0) { "Video dimensions must be positive" }
-                    // Resize the canvas to match the video aspect ratio - accounting for the stereo
-                    // mode.
-                    var dimensions =
-                        getCanvasAspectRatio(SurfaceEntity.StereoMode.TOP_BOTTOM, width, height)
-                    surfaceEntity!!.canvasShape =
-                        SurfaceEntity.CanvasShape.Quad(dimensions.width, dimensions.height)
-
-                    // Resize the MovableComponent to match the canvas dimensions.
-                    movableComponent!!.size = surfaceEntity!!.dimensions
-                }
-                mediaPlayer.setOnPreparedListener { mediaPlayer.start() }
-                mediaPlayer.prepareAsync()
-                videoPlaying = true
-            }
-        ) {
-            Text(text = "Play Big Buck Bunny", fontSize = 20.sp)
-        }
-    }
-
-    @Composable
-    fun VideoPlayerControls() {
-        Column(
-            horizontalAlignment = Alignment.CenterHorizontally,
-            verticalArrangement = Arrangement.Center,
-        ) {
-            Row(verticalAlignment = Alignment.CenterVertically) {
-                Button(onClick = { destroySurfaceEntity() }) {
-                    Text(text = "End Video", fontSize = 10.sp)
-                }
-            }
-            Row(verticalAlignment = Alignment.CenterVertically) {
-                Button(
-                    onClick = {
-                        surfaceEntity!!.canvasShape = SurfaceEntity.CanvasShape.Quad(1.0f, 1.0f)
-                        // Move the Quad-shaped canvas to a spot in front of the User.
-                        surfaceEntity!!.setPose(
-                            session.spatialUser.head?.transformPoseTo(
-                                Pose(
-                                    Vector3(0.0f, 0.0f, -1.5f),
-                                    Quaternion(0.0f, 0.0f, 0.0f, 1.0f)
-                                ),
-                                session.activitySpace,
-                            )!!
-                        )
-                    }
-                ) {
-                    Text(text = "Set Quad", fontSize = 10.sp)
-                }
-                Button(
-                    onClick = {
-                        surfaceEntity!!.canvasShape = SurfaceEntity.CanvasShape.Vr360Sphere(1.0f)
-                    }
-                ) {
-                    Text(text = "Set Vr360", fontSize = 10.sp)
-                }
-                Button(
-                    onClick = {
-                        surfaceEntity!!.canvasShape =
-                            SurfaceEntity.CanvasShape.Vr180Hemisphere(1.0f)
-                    }
-                ) {
-                    Text(text = "Set Vr180", fontSize = 10.sp)
-                }
-            } // end row
-            Row(verticalAlignment = Alignment.CenterVertically) {
-                Button(onClick = { surfaceEntity!!.stereoMode = SurfaceEntity.StereoMode.MONO }) {
-                    Text(text = "Mono", fontSize = 10.sp)
-                }
-                Button(
-                    onClick = { surfaceEntity!!.stereoMode = SurfaceEntity.StereoMode.TOP_BOTTOM }
-                ) {
-                    Text(text = "Top-Bottom", fontSize = 10.sp)
-                }
-                Button(
-                    onClick = { surfaceEntity!!.stereoMode = SurfaceEntity.StereoMode.SIDE_BY_SIDE }
-                ) {
-                    Text(text = "Side-by-Side", fontSize = 10.sp)
-                }
-            } // end row
-        } // end column
-    }
-
-    private fun setupControlPanel() {
-        // Technically this leaks, but it's a sample / test app.
-        val panelContentView =
-            ComposeView(this).apply {
-                setViewCompositionStrategy(
-                    ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
-                )
-                setContent { VideoPlayerControls() }
-            }
-
-        controlPanelEntity =
-            PanelEntity.create(
-                session,
-                panelContentView,
-                pixelDimensions = PixelDimensions(640, 480),
-                "playerControls",
-                Pose(Vector3(0.0f, -0.4f, -0.85f)), // kind of low, but within a 1m radius
-            )
-        controlPanelEntity!!.setParent(surfaceEntity!!)
-    }
-
-    fun destroySurfaceEntity() {
-        if (surfaceEntity == null) {
-            return
-        }
-        if (::mediaPlayer.isInitialized) {
-            mediaPlayer.release()
-        }
-        videoPlaying = false
-        surfaceEntity!!.dispose()
-        surfaceEntity = null
-    }
-
-    fun getCanvasAspectRatio(stereoMode: Int, videoWidth: Int, videoHeight: Int): Dimensions {
-        when (stereoMode) {
-            SurfaceEntity.StereoMode.MONO ->
-                return Dimensions(1.0f, videoHeight.toFloat() / videoWidth, 0.0f)
-            SurfaceEntity.StereoMode.TOP_BOTTOM ->
-                return Dimensions(1.0f, 0.5f * videoHeight.toFloat() / videoWidth, 0.0f)
-            SurfaceEntity.StereoMode.SIDE_BY_SIDE ->
-                return Dimensions(1.0f, 2.0f * videoHeight.toFloat() / videoWidth, 0.0f)
-            else -> throw IllegalArgumentException("Unsupported stereo mode: $stereoMode")
-        }
-    }
-
-    @Composable
-    fun VideoPlayerTestActivityUI(session: Session) {
-        val movableComponentMP = remember { mutableStateOf<MovableComponent?>(null) }
-        val videoPaused = remember { mutableStateOf(false) }
-        movableComponentMP.value = MovableComponent.create(session)
-        @Suppress("UNUSED_VARIABLE")
-        val unused = session.mainPanelEntity.addComponent(movableComponentMP.value!!)
-        Row(modifier = Modifier.fillMaxWidth().padding(16.dp)) {
-            Column(
-                verticalArrangement = Arrangement.Center,
-                modifier = Modifier.weight(1f).padding(8.dp),
-            ) {
-                Text(text = "(Stereo) SurfaceEntity", fontSize = 50.sp)
-                if (videoPlaying == false) {
-                    // High level testcases
-                    BigBuckBunnyButton()
-                } else {
-                    Column(
-                        verticalArrangement = Arrangement.Center,
-                        modifier = Modifier.weight(1f).padding(8.dp),
-                    ) {
-                        VideoPlayerControls()
-                        Button(
-                            onClick = {
-                                videoPaused.value = !videoPaused.value
-                                if (videoPaused.value) {
-                                    mediaPlayer.pause()
-                                } else {
-                                    mediaPlayer.start()
-                                }
-                            }
-                        ) {
-                            Text(text = "Toggle Pause Stereo video", fontSize = 30.sp)
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/xr/compose/integration-tests/layout/uxtestapp/build.gradle b/xr/compose/integration-tests/layout/uxtestapp/build.gradle
index e2105cc..c316112 100644
--- a/xr/compose/integration-tests/layout/uxtestapp/build.gradle
+++ b/xr/compose/integration-tests/layout/uxtestapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -47,6 +44,4 @@
     implementation("androidx.compose.material:material:1.7.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/mediaplayerapp/build.gradle b/xr/compose/integration-tests/mediaplayerapp/build.gradle
index 128c929..eb28c13 100644
--- a/xr/compose/integration-tests/mediaplayerapp/build.gradle
+++ b/xr/compose/integration-tests/mediaplayerapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -50,8 +49,6 @@
     implementation("androidx.compose.ui:ui:1.7.0")
     implementation("androidx.compose.ui:ui-tooling-preview:1.7.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/spatialelevation/build.gradle b/xr/compose/integration-tests/spatialelevation/build.gradle
index b3a38e3..312927a 100644
--- a/xr/compose/integration-tests/spatialelevation/build.gradle
+++ b/xr/compose/integration-tests/spatialelevation/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -50,8 +49,6 @@
     implementation("androidx.compose.ui:ui:1.7.0")
     implementation("androidx.compose.ui:ui-tooling-preview:1.7.0")
     implementation("androidx.compose.runtime:runtime:1.8.0-alpha06")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/compose/integration-tests/subspacecomposableapp/build.gradle b/xr/compose/integration-tests/subspacecomposableapp/build.gradle
index 682eb35..23fa601 100644
--- a/xr/compose/integration-tests/subspacecomposableapp/build.gradle
+++ b/xr/compose/integration-tests/subspacecomposableapp/build.gradle
@@ -13,9 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-import androidx.build.AndroidXConfig
-
 plugins {
     id("com.android.application")
     id("AndroidXPlugin")
@@ -50,6 +47,4 @@
     implementation("androidx.compose.foundation:foundation-layout:1.8.0-alpha06")
     implementation(libs.kotlinCoroutinesGuava)
     implementation("androidx.navigation:navigation-compose:2.7.6")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-}
+}
\ No newline at end of file
diff --git a/xr/compose/integration-tests/subspacecomposableapp/src/main/java/androidx/xr/compose/integration/subspacecomposableapp/SubspaceComposableApp.kt b/xr/compose/integration-tests/subspacecomposableapp/src/main/java/androidx/xr/compose/integration/subspacecomposableapp/SubspaceComposableApp.kt
index be222dad..1802871 100644
--- a/xr/compose/integration-tests/subspacecomposableapp/src/main/java/androidx/xr/compose/integration/subspacecomposableapp/SubspaceComposableApp.kt
+++ b/xr/compose/integration-tests/subspacecomposableapp/src/main/java/androidx/xr/compose/integration/subspacecomposableapp/SubspaceComposableApp.kt
@@ -76,7 +76,6 @@
 import androidx.xr.compose.spatial.OrbiterEdge
 import androidx.xr.compose.spatial.Subspace
 import androidx.xr.compose.subspace.SpatialColumn
-import androidx.xr.compose.subspace.SpatialCurvedRow
 import androidx.xr.compose.subspace.SpatialLayoutSpacer
 import androidx.xr.compose.subspace.SpatialPanel
 import androidx.xr.compose.subspace.SpatialRow
@@ -233,7 +232,7 @@
                     }
                 }
             }
-            SpatialCurvedRow(
+            SpatialRow(
                 modifier = SubspaceModifier.width(2000.dp).height(600.dp),
                 alignment = SpatialAlignment.BottomCenter,
                 curveRadius = curveRadius,
diff --git a/xr/compose/material3/integration-tests/testapp/build.gradle b/xr/compose/material3/integration-tests/testapp/build.gradle
index 86585ec..e734047 100644
--- a/xr/compose/material3/integration-tests/testapp/build.gradle
+++ b/xr/compose/material3/integration-tests/testapp/build.gradle
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 
 plugins {
@@ -28,7 +27,7 @@
     implementation(libs.kotlinStdlib)
 
     implementation(project(":appcompat:appcompat"))
-    implementation("androidx.activity:activity-compose:1.10.1")
+    implementation(project(":activity:activity-compose"))
     implementation(project(":compose:foundation:foundation"))
     implementation(project(":compose:foundation:foundation-layout"))
     implementation(project(":compose:material3:material3"))
@@ -48,8 +47,6 @@
     implementation(project(":xr:compose:compose"))
     implementation(project(":xr:scenecore:scenecore"))
 
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-
     // TODO(b/374796755): Write unit-tests for this test app
 }
 
diff --git a/xr/runtime/runtime-openxr/api/restricted_current.txt b/xr/runtime/runtime-openxr/api/restricted_current.txt
index de3e528..17531b2 100644
--- a/xr/runtime/runtime-openxr/api/restricted_current.txt
+++ b/xr/runtime/runtime-openxr/api/restricted_current.txt
@@ -22,7 +22,7 @@
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class HandState {
     ctor public HandState();
-    ctor public HandState(optional androidx.xr.runtime.internal.TrackingState trackingState, optional java.util.List<androidx.xr.runtime.math.Pose> handJoints);
+    ctor public HandState(optional boolean isActive, optional java.util.List<androidx.xr.runtime.math.Pose> handJoints);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class HitData {
@@ -55,11 +55,11 @@
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class OpenXrHand implements androidx.xr.runtime.internal.Hand {
-    method public java.nio.ByteBuffer getHandJointsBuffer();
-    method public androidx.xr.runtime.internal.TrackingState getTrackingState();
+    method public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> getHandJoints();
+    method public boolean isActive();
     method public void update(long xrTime);
-    property public java.nio.ByteBuffer handJointsBuffer;
-    property public androidx.xr.runtime.internal.TrackingState trackingState;
+    property public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> handJoints;
+    property public boolean isActive;
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class OpenXrManager implements androidx.xr.runtime.internal.LifecycleManager {
diff --git a/xr/runtime/runtime-openxr/dependencyAnalysis-baseline.json b/xr/runtime/runtime-openxr/dependencyAnalysis-baseline.json
index cc63f523..b4a8cdb 100644
--- a/xr/runtime/runtime-openxr/dependencyAnalysis-baseline.json
+++ b/xr/runtime/runtime-openxr/dependencyAnalysis-baseline.json
@@ -4,6 +4,14 @@
     {
       "coordinates": {
         "type": "module",
+        "identifier": "androidx.annotation:annotation",
+        "resolvedVersion": "1.8.1"
+      },
+      "fromConfiguration": "implementation"
+    },
+    {
+      "coordinates": {
+        "type": "module",
         "identifier": "androidx.appcompat:appcompat",
         "resolvedVersion": "1.2.0"
       },
diff --git a/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/HandStateTest.kt b/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/HandStateTest.kt
index 743ca6e..dd3bdb8 100644
--- a/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/HandStateTest.kt
+++ b/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/HandStateTest.kt
@@ -18,7 +18,6 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.SmallTest
-import androidx.xr.runtime.internal.TrackingState
 import kotlin.test.assertFailsWith
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -29,8 +28,6 @@
 
     @Test
     fun constructor_ActiveButNoHandJoints_throwsIllegalArgumentException() {
-        assertFailsWith<IllegalArgumentException> {
-            HandState(trackingState = TrackingState.Tracking, emptyList())
-        }
+        assertFailsWith<IllegalArgumentException> { HandState(isActive = true, emptyList()) }
     }
 }
diff --git a/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrHandTest.kt b/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrHandTest.kt
index 0066c00..c9f4907 100644
--- a/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrHandTest.kt
+++ b/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrHandTest.kt
@@ -22,7 +22,6 @@
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import androidx.xr.runtime.internal.HandJointType
-import androidx.xr.runtime.internal.TrackingState
 import androidx.xr.runtime.math.Quaternion
 import androidx.xr.runtime.math.Vector3
 import com.google.common.truth.Truth.assertThat
@@ -58,14 +57,14 @@
     @Test
     fun update_updatesActiveStatus() = initOpenXrManagerAndRunTest {
         val xrTime = 50L * 1_000_000 // 50 milliseconds in nanoseconds.
-        check(underTest.trackingState != TrackingState.Tracking)
+        check(!underTest.isActive)
 
         underTest.update(xrTime)
 
         // TODO - b/346615429: Define values here using the stub's Kotlin API. For the time being
         // they
         // come from `kPose` defined in //third_party/jetpack_xr_natives/openxr/openxr_stub.cc
-        assertThat(underTest.trackingState).isEqualTo(TrackingState.Tracking)
+        assertThat(underTest.isActive).isTrue()
     }
 
     @Test
@@ -78,24 +77,11 @@
         // TODO - b/346615429: Define values here using the stub's Kotlin API. For the time being
         // they
         // come from `kPose` defined in //third_party/jetpack_xr_natives/openxr/openxr_stub.cc
-        val fetchedHandJoints = underTest.handJoints
-        assertThat(fetchedHandJoints.size).isEqualTo(HandJointType.values().size)
-        for (jointType in HandJointType.values()) {
-            val jointTypeIndex = jointType.ordinal.toFloat()
-            assertThat(underTest.handJoints[jointType]!!.rotation)
-                .isEqualTo(
-                    Quaternion(
-                        jointTypeIndex + 0.1f,
-                        jointTypeIndex + 0.2f,
-                        jointTypeIndex + 0.3f,
-                        jointTypeIndex + 0.4f,
-                    )
-                )
-            assertThat(underTest.handJoints[jointType]!!.translation)
-                .isEqualTo(
-                    Vector3(jointTypeIndex + 0.5f, jointTypeIndex + 0.6f, jointTypeIndex + 0.7f)
-                )
-        }
+        assertThat(underTest.handJoints).hasSize(1)
+        assertThat(underTest.handJoints[HandJointType.PALM]!!.rotation)
+            .isEqualTo(Quaternion(1.0f, 2.0f, 3.0f, 4.0f))
+        assertThat(underTest.handJoints[HandJointType.PALM]!!.translation)
+            .isEqualTo(Vector3(5.0f, 6.0f, 7.0f))
     }
 
     private fun initOpenXrManagerAndRunTest(testBody: () -> Unit) {
diff --git a/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrPerceptionManagerTest.kt b/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrPerceptionManagerTest.kt
index f437ba4..32ec004 100644
--- a/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrPerceptionManagerTest.kt
+++ b/xr/runtime/runtime-openxr/src/androidTest/kotlin/androidx/xr/runtime/openxr/OpenXrPerceptionManagerTest.kt
@@ -23,7 +23,6 @@
 import androidx.test.filters.SdkSuppress
 import androidx.xr.runtime.internal.AnchorResourcesExhaustedException
 import androidx.xr.runtime.internal.HandJointType
-import androidx.xr.runtime.internal.TrackingState
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Quaternion
 import androidx.xr.runtime.math.Ray
@@ -124,53 +123,26 @@
     @Test
     fun update_updatesHands() = initOpenXrManagerAndRunTest {
         check(underTest.xrResources.updatables.size == 2)
-        check(underTest.leftHand.trackingState != TrackingState.Tracking)
-        check(underTest.rightHand.trackingState != TrackingState.Tracking)
+        check(!underTest.leftHand.isActive)
+        check(!underTest.rightHand.isActive)
 
         underTest.update(XR_TIME)
 
         // TODO - b/346615429: Define values here using the stub's Kotlin API. For the time being
         // they
         // come from `kPose` defined in //third_party/jetpack_xr_natives/openxr/openxr_stub.cc
-        val leftHandJoints = underTest.leftHand.handJoints
-        assertThat(underTest.leftHand.trackingState).isEqualTo(TrackingState.Tracking)
-        assertThat(leftHandJoints).hasSize(HandJointType.values().size)
-        for (jointType in HandJointType.values()) {
-            val jointTypeIndex = jointType.ordinal.toFloat()
-            assertThat(leftHandJoints[jointType]!!.rotation)
-                .isEqualTo(
-                    Quaternion(
-                        jointTypeIndex + 0.1f,
-                        jointTypeIndex + 0.2f,
-                        jointTypeIndex + 0.3f,
-                        jointTypeIndex + 0.4f,
-                    )
-                )
-            assertThat(leftHandJoints[jointType]!!.translation)
-                .isEqualTo(
-                    Vector3(jointTypeIndex + 0.5f, jointTypeIndex + 0.6f, jointTypeIndex + 0.7f)
-                )
-        }
-
-        val rightHandJoints = underTest.rightHand.handJoints
-        assertThat(underTest.rightHand.trackingState).isEqualTo(TrackingState.Tracking)
-        assertThat(rightHandJoints).hasSize(HandJointType.values().size)
-        for (jointType in HandJointType.values()) {
-            val jointTypeIndex = jointType.ordinal.toFloat()
-            assertThat(rightHandJoints[jointType]!!.rotation)
-                .isEqualTo(
-                    Quaternion(
-                        jointTypeIndex + 0.1f,
-                        jointTypeIndex + 0.2f,
-                        jointTypeIndex + 0.3f,
-                        jointTypeIndex + 0.4f,
-                    )
-                )
-            assertThat(rightHandJoints[jointType]!!.translation)
-                .isEqualTo(
-                    Vector3(jointTypeIndex + 0.5f, jointTypeIndex + 0.6f, jointTypeIndex + 0.7f)
-                )
-        }
+        assertThat(underTest.leftHand.isActive).isTrue()
+        assertThat(underTest.leftHand.handJoints).hasSize(1)
+        assertThat(underTest.leftHand.handJoints[HandJointType.PALM]!!.rotation)
+            .isEqualTo(Quaternion(1.0f, 2.0f, 3.0f, 4.0f))
+        assertThat(underTest.leftHand.handJoints[HandJointType.PALM]!!.translation)
+            .isEqualTo(Vector3(5.0f, 6.0f, 7.0f))
+        assertThat(underTest.rightHand.isActive).isTrue()
+        assertThat(underTest.rightHand.handJoints).hasSize(1)
+        assertThat(underTest.rightHand.handJoints[HandJointType.PALM]!!.rotation)
+            .isEqualTo(Quaternion(1.0f, 2.0f, 3.0f, 4.0f))
+        assertThat(underTest.rightHand.handJoints[HandJointType.PALM]!!.translation)
+            .isEqualTo(Vector3(5.0f, 6.0f, 7.0f))
     }
 
     @Test
diff --git a/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/HandState.kt b/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/HandState.kt
index b027211..a8bab4e 100644
--- a/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/HandState.kt
+++ b/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/HandState.kt
@@ -17,7 +17,6 @@
 package androidx.xr.runtime.openxr
 
 import androidx.annotation.RestrictTo
-import androidx.xr.runtime.internal.TrackingState
 import androidx.xr.runtime.math.Pose
 
 /**
@@ -28,12 +27,12 @@
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class HandState(
-    internal val trackingState: TrackingState = TrackingState.Paused,
+    internal val isActive: Boolean = false,
     internal val handJoints: List<Pose> = listOf(),
 ) {
     init {
-        require(trackingState != TrackingState.Tracking || handJoints.isNotEmpty()) {
-            "Hand joints cannot be empty if the hand is being tracked."
+        require(isActive == false || handJoints.isNotEmpty()) {
+            "Hand joints cannot be empty if the hand is active."
         }
     }
 }
diff --git a/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/OpenXrHand.kt b/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/OpenXrHand.kt
index 0023127..0a52ca7 100644
--- a/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/OpenXrHand.kt
+++ b/xr/runtime/runtime-openxr/src/main/kotlin/androidx/xr/runtime/openxr/OpenXrHand.kt
@@ -18,31 +18,27 @@
 
 import androidx.annotation.RestrictTo
 import androidx.xr.runtime.internal.Hand
-import androidx.xr.runtime.internal.TrackingState
-import java.nio.ByteBuffer
-import java.nio.ByteOrder
+import androidx.xr.runtime.internal.HandJointType
+import androidx.xr.runtime.math.Pose
 
 /** Wraps the native [XrHandJointLocationsEXT] with the [Hand] interface. */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class OpenXrHand internal constructor(private val isLeftHand: Boolean) : Hand, Updatable {
 
-    override var trackingState: TrackingState = TrackingState.Paused
+    override var isActive: Boolean = false
         private set
 
-    override var handJointsBuffer: ByteBuffer = ByteBuffer.allocate(0)
+    override var handJoints: Map<HandJointType, Pose> = emptyMap()
         private set
 
     override fun update(xrTime: Long) {
-        val handDataBuffer =
-            nativeGetHandDataBuffer(isLeftHand, xrTime)
-                ?: throw IllegalStateException("Could not get hand data buffer.")
-        trackingState =
-            if (handDataBuffer.int != 0) TrackingState.Tracking else TrackingState.Paused
-        handJointsBuffer = handDataBuffer.slice().order(ByteOrder.nativeOrder())
+        val handState: HandState =
+            nativeLocateHandJoints(isLeftHand, xrTime)
+                ?: throw IllegalStateException("Could not locate hand joints for hand.")
+
+        isActive = handState.isActive
+        handJoints = HandJointType.values().zip(handState.handJoints).toMap()
     }
 
-    private external fun nativeGetHandDataBuffer(
-        isLeftHand: Boolean,
-        timestampNs: Long
-    ): ByteBuffer?
+    private external fun nativeLocateHandJoints(isLeftHand: Boolean, timestampNs: Long): HandState?
 }
diff --git a/xr/runtime/runtime-testing/api/restricted_current.txt b/xr/runtime/runtime-testing/api/restricted_current.txt
index 3171234..64bfe7f 100644
--- a/xr/runtime/runtime-testing/api/restricted_current.txt
+++ b/xr/runtime/runtime-testing/api/restricted_current.txt
@@ -102,13 +102,13 @@
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class FakeRuntimeHand implements androidx.xr.runtime.internal.Hand {
     ctor public FakeRuntimeHand();
-    ctor public FakeRuntimeHand(optional androidx.xr.runtime.internal.TrackingState trackingState, optional java.nio.ByteBuffer handJointsBuffer);
-    method public java.nio.ByteBuffer getHandJointsBuffer();
-    method public androidx.xr.runtime.internal.TrackingState getTrackingState();
-    method public void setHandJointsBuffer(java.nio.ByteBuffer);
-    method public void setTrackingState(androidx.xr.runtime.internal.TrackingState);
-    property public java.nio.ByteBuffer handJointsBuffer;
-    property public androidx.xr.runtime.internal.TrackingState trackingState;
+    ctor public FakeRuntimeHand(optional boolean isActive, optional java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> handJoints);
+    method public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> getHandJoints();
+    method public boolean isActive();
+    method public void setActive(boolean);
+    method public void setHandJoints(java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose>);
+    property public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> handJoints;
+    property public boolean isActive;
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class FakeRuntimePlane implements androidx.xr.runtime.testing.AnchorHolder androidx.xr.runtime.internal.Plane {
diff --git a/xr/runtime/runtime-testing/src/main/kotlin/androidx/xr/runtime/testing/FakeRuntimeHand.kt b/xr/runtime/runtime-testing/src/main/kotlin/androidx/xr/runtime/testing/FakeRuntimeHand.kt
index 7b4d98f..92af55f 100644
--- a/xr/runtime/runtime-testing/src/main/kotlin/androidx/xr/runtime/testing/FakeRuntimeHand.kt
+++ b/xr/runtime/runtime-testing/src/main/kotlin/androidx/xr/runtime/testing/FakeRuntimeHand.kt
@@ -18,11 +18,11 @@
 
 import androidx.annotation.RestrictTo
 import androidx.xr.runtime.internal.Hand as RuntimeHand
-import androidx.xr.runtime.internal.TrackingState
-import java.nio.ByteBuffer
+import androidx.xr.runtime.internal.HandJointType
+import androidx.xr.runtime.math.Pose
 
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class FakeRuntimeHand(
-    override var trackingState: TrackingState = TrackingState.Paused,
-    override var handJointsBuffer: ByteBuffer = ByteBuffer.allocate(0),
+    override var isActive: Boolean = false,
+    override var handJoints: Map<HandJointType, Pose> = emptyMap(),
 ) : RuntimeHand {}
diff --git a/xr/runtime/runtime/api/restricted_current.txt b/xr/runtime/runtime/api/restricted_current.txt
index d6bcbb3..b6c0619 100644
--- a/xr/runtime/runtime/api/restricted_current.txt
+++ b/xr/runtime/runtime/api/restricted_current.txt
@@ -3,61 +3,24 @@
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class CoreState {
     ctor public CoreState(kotlin.time.ComparableTimeMark timeMark);
+    method public kotlin.time.ComparableTimeMark component1();
+    method public androidx.xr.runtime.CoreState copy(kotlin.time.ComparableTimeMark timeMark);
     method public kotlin.time.ComparableTimeMark getTimeMark();
     property public kotlin.time.ComparableTimeMark timeMark;
   }
 
-  public final class ManifestFeature {
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String FEATURE_XR_API_OPENXR;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String FEATURE_XR_API_SPATIAL;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String FEATURE_XR_INPUT_CONTROLLER;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String FEATURE_XR_INPUT_EYE_TRACKING;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String FEATURE_XR_INPUT_HAND_TRACKING;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String FEATURE_XR_API_OPENXR;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String FEATURE_XR_API_SPATIAL;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String FEATURE_XR_INPUT_CONTROLLER;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String FEATURE_XR_INPUT_EYE_TRACKING;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String FEATURE_XR_INPUT_HAND_TRACKING;
-  }
-
-  public final class ManifestPermission {
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String EYE_TRACKING_COARSE;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String EYE_TRACKING_FINE;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String FACE_TRACKING;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String HAND_TRACKING;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String HEAD_TRACKING;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String SCENE_UNDERSTANDING_COARSE;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String SCENE_UNDERSTANDING_FINE;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String EYE_TRACKING_COARSE;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String EYE_TRACKING_FINE;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String FACE_TRACKING;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String HAND_TRACKING;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String HEAD_TRACKING;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String SCENE_UNDERSTANDING_COARSE;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String SCENE_UNDERSTANDING_FINE;
-  }
-
-  public final class ManifestPermissionGroup {
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String XR_TRACKING;
-    property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static String XR_TRACKING_SENSITIVE;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String XR_TRACKING;
-    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final String XR_TRACKING_SENSITIVE;
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Session implements androidx.lifecycle.LifecycleOwner {
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Session {
     method public androidx.xr.runtime.SessionConfigureResult configure();
     method public static androidx.xr.runtime.SessionCreateResult create(android.app.Activity activity);
     method public static androidx.xr.runtime.SessionCreateResult create(android.app.Activity activity, optional kotlinx.coroutines.CoroutineDispatcher coroutineDispatcher);
     method public void destroy();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public kotlinx.coroutines.CoroutineScope getCoroutineScope();
-    method public androidx.lifecycle.Lifecycle getLifecycle();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.xr.runtime.internal.Runtime getRuntime();
     method public kotlinx.coroutines.flow.StateFlow<androidx.xr.runtime.CoreState> getState();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.List<androidx.xr.runtime.StateExtender> getStateExtenders();
     method public void pause();
     method public androidx.xr.runtime.SessionResumeResult resume();
     property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public kotlinx.coroutines.CoroutineScope coroutineScope;
-    property public androidx.lifecycle.Lifecycle lifecycle;
     property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public androidx.xr.runtime.internal.Runtime runtime;
     property public kotlinx.coroutines.flow.StateFlow<androidx.xr.runtime.CoreState> state;
     property @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public java.util.List<androidx.xr.runtime.StateExtender> stateExtenders;
@@ -275,37 +238,34 @@
     method public void addInputEventListener(java.util.concurrent.Executor executor, androidx.xr.runtime.internal.InputEventListener listener);
     method public void dispose();
     method public float getActivitySpaceAlpha();
-    method public default float getAlpha();
-    method public float getAlpha(int relativeTo);
+    method public float getAlpha();
     method public java.util.List<androidx.xr.runtime.internal.Entity> getChildren();
     method public String getContentDescription();
     method public androidx.xr.runtime.internal.Entity? getParent();
-    method public default androidx.xr.runtime.math.Pose getPose();
-    method public androidx.xr.runtime.math.Pose getPose(int relativeTo);
-    method public default androidx.xr.runtime.math.Vector3 getScale();
-    method public androidx.xr.runtime.math.Vector3 getScale(int relativeTo);
+    method public androidx.xr.runtime.math.Pose getPose();
+    method public androidx.xr.runtime.math.Vector3 getScale();
     method public androidx.xr.runtime.internal.Dimensions getSize();
     method public boolean isHidden();
     method public boolean isHidden(boolean includeParents);
     method public void removeAllComponents();
     method public void removeComponent(androidx.xr.runtime.internal.Component component);
     method public void removeInputEventListener(androidx.xr.runtime.internal.InputEventListener listener);
-    method public default void setAlpha(float alpha);
-    method public void setAlpha(float alpha, int relativeTo);
+    method public void setAlpha(float);
     method public void setChildren(java.util.List<? extends androidx.xr.runtime.internal.Entity>);
     method public void setContentDescription(String);
     method public void setHidden(boolean);
     method public void setParent(androidx.xr.runtime.internal.Entity?);
-    method public default void setPose(androidx.xr.runtime.math.Pose pose);
-    method public void setPose(androidx.xr.runtime.math.Pose pose, int relativeTo);
-    method public default void setScale(androidx.xr.runtime.math.Vector3 scale);
-    method public void setScale(androidx.xr.runtime.math.Vector3 scale, int relativeTo);
+    method public void setPose(androidx.xr.runtime.math.Pose);
+    method public void setScale(androidx.xr.runtime.math.Vector3);
     method public void setSize(androidx.xr.runtime.internal.Dimensions);
     property public abstract float activitySpaceAlpha;
+    property public abstract float alpha;
     property public abstract java.util.List<androidx.xr.runtime.internal.Entity> children;
     property public abstract String contentDescription;
     property public abstract boolean isHidden;
     property public abstract androidx.xr.runtime.internal.Entity? parent;
+    property public abstract androidx.xr.runtime.math.Pose pose;
+    property public abstract androidx.xr.runtime.math.Vector3 scale;
     property public abstract androidx.xr.runtime.internal.Dimensions size;
   }
 
@@ -323,18 +283,10 @@
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Hand {
-    method public default java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> getHandJoints();
-    method public java.nio.ByteBuffer getHandJointsBuffer();
-    method public androidx.xr.runtime.internal.TrackingState getTrackingState();
-    method public static java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> parseHandJoint(androidx.xr.runtime.internal.TrackingState trackingState, java.nio.ByteBuffer handJointsBuffer);
-    property public default java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> handJoints;
-    property public abstract java.nio.ByteBuffer handJointsBuffer;
-    property public abstract androidx.xr.runtime.internal.TrackingState trackingState;
-    field public static final androidx.xr.runtime.internal.Hand.Companion Companion;
-  }
-
-  public static final class Hand.Companion {
-    method public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> parseHandJoint(androidx.xr.runtime.internal.TrackingState trackingState, java.nio.ByteBuffer handJointsBuffer);
+    method public java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> getHandJoints();
+    method public boolean isActive();
+    property public abstract java.util.Map<androidx.xr.runtime.internal.HandJointType,androidx.xr.runtime.math.Pose> handJoints;
+    property public abstract boolean isActive;
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public enum HandJointType {
@@ -454,7 +406,6 @@
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface JxrPlatformAdapter {
     method public void addSpatialCapabilitiesListener(java.util.concurrent.Executor callbackExecutor, kotlin.jvm.functions.Function1<? super androidx.xr.runtime.internal.SpatialCapabilities,kotlin.Unit> listener);
-    method public androidx.xr.runtime.internal.TextureResource? borrowReflectionTexture();
     method public androidx.xr.runtime.internal.ActivityPanelEntity createActivityPanelEntity(androidx.xr.runtime.math.Pose pose, androidx.xr.runtime.internal.PixelDimensions windowBoundsPx, String name, android.app.Activity hostActivity, androidx.xr.runtime.internal.Entity parent);
     method public androidx.xr.runtime.internal.AnchorEntity createAnchorEntity(androidx.xr.runtime.internal.Anchor anchor);
     method public androidx.xr.runtime.internal.AnchorEntity createAnchorEntity(androidx.xr.runtime.internal.Dimensions bounds, androidx.xr.runtime.internal.PlaneType planeType, androidx.xr.runtime.internal.PlaneSemantic planeSemantic, java.time.Duration searchTimeout);
@@ -464,15 +415,11 @@
     method public androidx.xr.runtime.internal.InteractableComponent createInteractableComponent(java.util.concurrent.Executor executor, androidx.xr.runtime.internal.InputEventListener listener);
     method public androidx.xr.runtime.internal.LoggingEntity createLoggingEntity(androidx.xr.runtime.math.Pose pose);
     method public androidx.xr.runtime.internal.MovableComponent createMovableComponent(boolean systemMovable, boolean scaleInZ, java.util.Set<? extends androidx.xr.runtime.internal.AnchorPlacement> anchorPlacement, boolean shouldDisposeParentAnchor);
-    method public androidx.xr.runtime.internal.PanelEntity createPanelEntity(android.content.Context context, androidx.xr.runtime.math.Pose pose, android.view.View view, androidx.xr.runtime.internal.Dimensions dimensions, String name, androidx.xr.runtime.internal.Entity parent);
-    method public androidx.xr.runtime.internal.PanelEntity createPanelEntity(android.content.Context context, androidx.xr.runtime.math.Pose pose, android.view.View view, androidx.xr.runtime.internal.PixelDimensions pixelDimensions, String name, androidx.xr.runtime.internal.Entity parent);
+    method public androidx.xr.runtime.internal.PanelEntity createPanelEntity(androidx.xr.runtime.math.Pose pose, android.view.View view, androidx.xr.runtime.internal.PixelDimensions surfaceDimensionsPx, androidx.xr.runtime.internal.Dimensions dimensions, String name, android.content.Context context, androidx.xr.runtime.internal.Entity parent);
     method public androidx.xr.runtime.internal.AnchorEntity createPersistedAnchorEntity(java.util.UUID uuid, java.time.Duration searchTimeout);
     method public void createPointerCaptureComponent(java.util.concurrent.Executor executor, androidx.xr.runtime.internal.PointerCaptureComponent.StateListener stateListener, androidx.xr.runtime.internal.InputEventListener inputListener);
     method public void createResizableComponent(androidx.xr.runtime.internal.Dimensions minimumSize, androidx.xr.runtime.internal.Dimensions maximumSize);
     method public androidx.xr.runtime.internal.SurfaceEntity createSurfaceEntity(int stereoMode, androidx.xr.runtime.internal.SurfaceEntity.CanvasShape canvasShape, androidx.xr.runtime.math.Pose pose, androidx.xr.runtime.internal.Entity parentEntity);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.runtime.internal.MaterialResource> createWaterMaterial(boolean isAlphaMapVersion);
-    method public void destroyTexture(androidx.xr.runtime.internal.TextureResource texture);
-    method public void destroyWaterMaterial(androidx.xr.runtime.internal.MaterialResource material);
     method public void dispose();
     method public androidx.xr.runtime.internal.ActivitySpace getActivitySpace();
     method public androidx.xr.runtime.internal.Entity getActivitySpaceRootImpl();
@@ -488,22 +435,12 @@
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.runtime.internal.ExrImageResource> loadExrImageByAssetName(String assetName);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.runtime.internal.GltfModelResource> loadGltfByAssetName(String assetName);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.runtime.internal.GltfModelResource> loadGltfByAssetNameSplitEngine(String assetName);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.runtime.internal.GltfModelResource> loadGltfByByteArray(java.util.List<java.lang.Byte> assetData, String assetKey);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.runtime.internal.TextureResource>? loadTexture(String assetName, androidx.xr.runtime.internal.TextureSampler sampler);
     method public void removeSpatialCapabilitiesListener(kotlin.jvm.functions.Function1<? super androidx.xr.runtime.internal.SpatialCapabilities,kotlin.Unit> listener);
     method public void requestFullSpaceMode();
     method public void requestHomeSpaceMode();
-    method public void setAlphaMap(androidx.xr.runtime.internal.MaterialResource material, androidx.xr.runtime.internal.TextureResource alphaMap);
-    method public void setAlphaStepMultiplier(androidx.xr.runtime.internal.MaterialResource material, float alphaStepMultiplier);
     method public android.os.Bundle setFullSpaceMode(android.os.Bundle bundle);
     method public android.os.Bundle setFullSpaceModeWithEnvironmentInherited(android.os.Bundle bundle);
-    method public void setNormalBoundary(androidx.xr.runtime.internal.MaterialResource material, float normalBoundary);
-    method public void setNormalMap(androidx.xr.runtime.internal.MaterialResource material, androidx.xr.runtime.internal.TextureResource normalMap);
-    method public void setNormalSpeed(androidx.xr.runtime.internal.MaterialResource material, float normalSpeed);
-    method public void setNormalTiling(androidx.xr.runtime.internal.MaterialResource material, float normalTiling);
-    method public void setNormalZ(androidx.xr.runtime.internal.MaterialResource material, float normalZ);
     method public void setPreferredAspectRatio(android.app.Activity activity, float preferredRatio);
-    method public void setReflectionCube(androidx.xr.runtime.internal.MaterialResource material, androidx.xr.runtime.internal.TextureResource reflectionCube);
     method public void startRenderer();
     method public void stopRenderer();
     property public abstract androidx.xr.runtime.internal.ActivitySpace activitySpace;
@@ -531,9 +468,6 @@
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface LoggingEntity extends androidx.xr.runtime.internal.Entity {
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface MaterialResource extends androidx.xr.runtime.internal.Resource {
-  }
-
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface MediaPlayerExtensionsWrapper {
     method public void setPointSourceAttributes(android.media.MediaPlayer mediaPlayer, androidx.xr.runtime.internal.PointSourceAttributes attributes);
     method public void setSoundFieldAttributes(android.media.MediaPlayer mediaPlayer, androidx.xr.runtime.internal.SoundFieldAttributes attributes);
@@ -592,14 +526,13 @@
     method public float getCornerRadius();
     method public androidx.xr.runtime.internal.Dimensions getPanelSize();
     method public androidx.xr.runtime.math.Vector3 getPixelDensity();
-    method public androidx.xr.runtime.internal.PixelDimensions getSizeInPixels();
+    method public androidx.xr.runtime.internal.PixelDimensions getPixelDimensions();
     method public void setCornerRadius(float);
-    method public void setPanelSize(androidx.xr.runtime.internal.Dimensions);
-    method public void setSizeInPixels(androidx.xr.runtime.internal.PixelDimensions);
+    method public void setPixelDimensions(androidx.xr.runtime.internal.PixelDimensions);
     property public abstract float cornerRadius;
     property public abstract androidx.xr.runtime.internal.Dimensions panelSize;
     property public abstract androidx.xr.runtime.math.Vector3 pixelDensity;
-    property public abstract androidx.xr.runtime.internal.PixelDimensions sizeInPixels;
+    property public abstract androidx.xr.runtime.internal.PixelDimensions pixelDimensions;
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface PerceptionManager {
@@ -776,14 +709,18 @@
     method public void play(android.media.SoundPool soundPool, int soundId, androidx.xr.runtime.internal.SoundFieldAttributes attributes, float volume, int priority, int loop, float rate);
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Space {
-    property public static int ACTIVITY;
-    property public static int PARENT;
-    property public static int REAL_WORLD;
-    field public static final int ACTIVITY = 1; // 0x1
-    field public static final androidx.xr.runtime.internal.Space INSTANCE;
-    field public static final int PARENT = 0; // 0x0
-    field public static final int REAL_WORLD = 2; // 0x2
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Space extends androidx.xr.runtime.internal.Trackable {
+  }
+
+  public static final class Space.Type {
+    field public static final androidx.xr.runtime.internal.Space.Type.Companion Companion;
+    field public static final androidx.xr.runtime.internal.Space.Type Local;
+    field public static final androidx.xr.runtime.internal.Space.Type LocalFloor;
+  }
+
+  public static final class Space.Type.Companion {
+    property public androidx.xr.runtime.internal.Space.Type Local;
+    property public androidx.xr.runtime.internal.Space.Type LocalFloor;
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class SpatialCapabilities {
@@ -877,7 +814,7 @@
   }
 
   public static final class SpatialEnvironment.SpatialEnvironmentPreference {
-    ctor public SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.runtime.internal.ExrImageResource? skybox, androidx.xr.runtime.internal.GltfModelResource? geometry, androidx.xr.runtime.internal.MaterialResource? geometryMaterial, String? geometryMeshName, String? geometryAnimationName);
+    ctor public SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.runtime.internal.GltfModelResource? geometry, androidx.xr.runtime.internal.ExrImageResource? skybox);
     method public androidx.xr.runtime.internal.GltfModelResource? getGeometry();
     method public androidx.xr.runtime.internal.ExrImageResource? getSkybox();
     property public androidx.xr.runtime.internal.GltfModelResource? geometry;
@@ -988,71 +925,6 @@
     method public void onSpaceUpdated();
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TextureResource extends androidx.xr.runtime.internal.Resource {
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class TextureSampler {
-    ctor public TextureSampler(@androidx.xr.runtime.internal.TextureSampler.WrapMode int wrapModeS, @androidx.xr.runtime.internal.TextureSampler.WrapMode int wrapModeT, @androidx.xr.runtime.internal.TextureSampler.WrapMode int wrapModeR, @androidx.xr.runtime.internal.TextureSampler.WrapMode int minFilter, @androidx.xr.runtime.internal.TextureSampler.WrapMode int magFilter, @androidx.xr.runtime.internal.TextureSampler.WrapMode int compareMode, @androidx.xr.runtime.internal.TextureSampler.WrapMode int compareFunc, @androidx.xr.runtime.internal.TextureSampler.WrapMode int anisotropyLog2);
-    method public int getAnisotropyLog2();
-    method public int getCompareFunc();
-    method public int getCompareMode();
-    method public int getMagFilter();
-    method public int getMinFilter();
-    method public int getWrapModeR();
-    method public int getWrapModeS();
-    method public int getWrapModeT();
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int anisotropyLog2;
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int compareFunc;
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int compareMode;
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int magFilter;
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int minFilter;
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int wrapModeR;
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int wrapModeS;
-    property @androidx.xr.runtime.internal.TextureSampler.WrapMode public int wrapModeT;
-    field public static final int CLAMP_TO_EDGE = 0; // 0x0
-    field public static final int COMPARE_TO_TEXTURE = 1; // 0x1
-    field public static final androidx.xr.runtime.internal.TextureSampler.Companion Companion;
-    field public static final int LINEAR = 1; // 0x1
-    field public static final int LINEAR_MIPMAP_LINEAR = 5; // 0x5
-    field public static final int LINEAR_MIPMAP_NEAREST = 3; // 0x3
-    field public static final int MAG_LINEAR = 1; // 0x1
-    field public static final int MAG_NEAREST = 0; // 0x0
-    field public static final int MIRRORED_REPEAT = 2; // 0x2
-    field public static final int NEAREST = 0; // 0x0
-    field public static final int NEAREST_MIPMAP_LINEAR = 4; // 0x4
-    field public static final int NEAREST_MIPMAP_NEAREST = 2; // 0x2
-    field public static final int NONE = 0; // 0x0
-    field public static final int REPEAT = 1; // 0x1
-  }
-
-  public static final class TextureSampler.Companion {
-    property public static int CLAMP_TO_EDGE;
-    property public static int COMPARE_TO_TEXTURE;
-    property public static int LINEAR;
-    property public static int LINEAR_MIPMAP_LINEAR;
-    property public static int LINEAR_MIPMAP_NEAREST;
-    property public static int MAG_LINEAR;
-    property public static int MAG_NEAREST;
-    property public static int MIRRORED_REPEAT;
-    property public static int NEAREST;
-    property public static int NEAREST_MIPMAP_LINEAR;
-    property public static int NEAREST_MIPMAP_NEAREST;
-    property public static int NONE;
-    property public static int REPEAT;
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public static @interface TextureSampler.CompareMode {
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public static @interface TextureSampler.MagFilter {
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public static @interface TextureSampler.MinFilter {
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public static @interface TextureSampler.WrapMode {
-  }
-
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Trackable {
     method public androidx.xr.runtime.internal.Anchor createAnchor(androidx.xr.runtime.math.Pose pose);
     method public androidx.xr.runtime.internal.TrackingState getTrackingState();
diff --git a/xr/runtime/runtime/build.gradle b/xr/runtime/runtime/build.gradle
index 4c6cd6b..1f26582a 100644
--- a/xr/runtime/runtime/build.gradle
+++ b/xr/runtime/runtime/build.gradle
@@ -38,11 +38,9 @@
     api(libs.kotlinStdlib)
     api(libs.kotlinCoroutinesCore)
     api("androidx.annotation:annotation:1.8.1")
-    api("androidx.lifecycle:lifecycle-common:2.8.7")
 
     implementation(libs.kotlinCoroutinesGuava)
     implementation("androidx.core:core:1.1.0")
-    implementation("androidx.lifecycle:lifecycle-runtime:2.8.7")
 
     testImplementation(libs.kotlinCoroutinesTest)
     testImplementation(libs.junit)
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/CoreState.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/CoreState.kt
index 18a1f7d..16c1669 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/CoreState.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/CoreState.kt
@@ -22,23 +22,8 @@
 /**
  * Represents the state of the XR system at a specific point in time.
  *
- * Instances of this class can be accessed via the [Session.state] [StateFlow] property. This class
- * may include extension properties provided by implementations of the [StateExtender] interface
- * found during [Session] creation.
- *
  * @property timeMark at which the state was computed.
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class CoreState(public val timeMark: ComparableTimeMark) {
-
-    override fun equals(other: Any?): Boolean {
-        if (this === other) return true
-        if (other !is CoreState) return false
-        if (timeMark != other.timeMark) return false
-        return true
-    }
-
-    override fun hashCode(): Int = timeMark.hashCode()
-
-    override fun toString(): String = "CoreState(timeMark=$timeMark)"
-}
+@Suppress("DataClassDefinition")
+public data class CoreState(val timeMark: ComparableTimeMark) {}
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestFeature.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestFeature.kt
deleted file mode 100644
index c649d5c..0000000
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestFeature.kt
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@file:JvmName("ManifestFeature")
-
-package androidx.xr.runtime
-
-import androidx.annotation.RestrictTo
-
-/**
- * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: This device
- * supports XR input from XR controllers.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val FEATURE_XR_INPUT_CONTROLLER: String = "android.hardware.xr.input.controller"
-
-/**
- * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: This device
- * supports XR input from the user's hands.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val FEATURE_XR_INPUT_HAND_TRACKING: String = "android.hardware.xr.input.hand_tracking"
-
-/**
- * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: This device
- * supports XR input from the user's eye gaze.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val FEATURE_XR_INPUT_EYE_TRACKING: String = "android.hardware.xr.input.eye_tracking"
-
-/**
- * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: This device
- * supports <a href="https://www.khronos.org/openxr/">OpenXR</a>. The feature version indicates the
- * highest version of OpenXR supported by the device using the following encoding:
- * <ul>
- * <li> Major version in bits 31-16</li>
- * <li> Minor version in bits 15-0</li>
- * </ul>
- *
- * This is the same encoding as the top 32 bits of an {@code XrVersion}.
- *
- * <p>
- * Example: OpenXR 1.1 support is encoded as 0x00010001.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val FEATURE_XR_API_OPENXR: String = "android.software.xr.api.openxr"
-
-/**
- * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: This device
- * supports the Android XR Spatial APIs. The feature version indicates the highest version of the
- * Android XR Spatial APIs supported by the device.
- *
- * <p>Also see <a href="https://developer.android.com/develop/xr">Develop with the Android XR
- * SDK</a>.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val FEATURE_XR_API_SPATIAL: String = "android.software.xr.api.spatial"
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestPermission.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestPermission.kt
deleted file mode 100644
index a9d6dda..0000000
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestPermission.kt
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@file:JvmName("ManifestPermission")
-
-package androidx.xr.runtime
-
-import androidx.annotation.RestrictTo
-
-/**
- * Allows an application to get approximate eye gaze.
- *
- * <p>Protection level: dangerous
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val EYE_TRACKING_COARSE: String = "android.permission.EYE_TRACKING_COARSE"
-
-/**
- * Allows an application to get face tracking data.
- *
- * <p>Protection level: dangerous
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val FACE_TRACKING: String = "android.permission.FACE_TRACKING"
-
-/**
- * Allows an application to get hand tracking data.
- *
- * <p>Protection level: dangerous
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val HAND_TRACKING: String = "android.permission.HAND_TRACKING"
-
-/**
- * Allows an application to get data derived by sensing the user's environment.
- *
- * <p>Protection level: dangerous
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val SCENE_UNDERSTANDING_COARSE: String = "android.permission.SCENE_UNDERSTANDING_COARSE"
-
-/**
- * Allows an application to get precise eye gaze data.
- *
- * <p>Protection level: dangerous
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val EYE_TRACKING_FINE: String = "android.permission.EYE_TRACKING_FINE"
-
-/**
- * Allows an application to get head tracking data. Unmanaged activities (OpenXR activities with the
- * manifest property "android.window.PROPERTY_XR_ACTIVITY_START_MODE" set to
- * "XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED") do not require this permission to get head
- * tracking data.
- *
- * {@see
- * https://developer.android.com/develop/xr/get-started#property_activity_xr_start_mode_property}
- *
- * <p>Protection level: dangerous
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val HEAD_TRACKING: String = "android.permission.HEAD_TRACKING"
-
-/**
- * Allows an application to get highly precise data derived by sensing the user's environment, such
- * as a depth map.
- *
- * <p>Protection level: dangerous
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val SCENE_UNDERSTANDING_FINE: String = "android.permission.SCENE_UNDERSTANDING_FINE"
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestPermissionGroup.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestPermissionGroup.kt
deleted file mode 100644
index 91ef369..0000000
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/ManifestPermissionGroup.kt
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@file:JvmName("ManifestPermissionGroup")
-
-package androidx.xr.runtime
-
-import androidx.annotation.RestrictTo
-
-/**
- * Used for permissions that are associated with accessing XR tracked information about the person
- * using the device and the environment around them.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val XR_TRACKING: String = "android.permission-group.XR_TRACKING"
-
-/**
- * Used for permissions that are associated with accessing particularly sensitive XR tracking data.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-@JvmField
-public val XR_TRACKING_SENSITIVE: String = "android.permission-group.XR_TRACKING_SENSITIVE"
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/Session.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/Session.kt
index d32e03fe..5ccd631 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/Session.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/Session.kt
@@ -20,9 +20,6 @@
 import android.content.pm.PackageManager
 import androidx.annotation.RestrictTo
 import androidx.core.content.ContextCompat
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleOwner
-import androidx.lifecycle.LifecycleRegistry
 import androidx.xr.runtime.internal.Runtime
 import androidx.xr.runtime.internal.RuntimeFactory
 import java.util.ServiceLoader
@@ -58,12 +55,12 @@
     @get:RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     public val coroutineScope: CoroutineScope,
     private val activity: Activity,
-) : LifecycleOwner {
+) {
     public companion object {
         /**
          * Creates a new [Session].
          *
-         * Creating a session requires the `android.permission.SCENE_UNDERSTANDING_COARSE` and
+         * Creating a session requires the `android.permission.SCENE_UNDERSTANDING` and
          * `android.permission.HAND_TRACKING` permissions to be granted.
          *
          * @param activity the [Activity] that owns the session.
@@ -95,26 +92,28 @@
             }
             val session =
                 Session(runtime, stateExtenders, CoroutineScope(coroutineDispatcher), activity)
-
-            session.lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE)
-
             return SessionCreateSuccess(session)
         }
 
         // TODO(b/392919087): Move the Hand Tracking permission to another place.
         internal val SESSION_PERMISSIONS: List<String> =
-            listOf(SCENE_UNDERSTANDING_COARSE, HAND_TRACKING)
+            listOf("android.permission.SCENE_UNDERSTANDING", "android.permission.HAND_TRACKING")
     }
 
-    private val lifecycleRegistry: LifecycleRegistry = LifecycleRegistry(this)
-
-    override public val lifecycle: Lifecycle = lifecycleRegistry
+    /** The state of the runtime. */
+    private enum class RuntimeState {
+        INITIALIZED,
+        RESUMED,
+        PAUSED,
+        STOPPED,
+    }
 
     private val _state = MutableStateFlow<CoreState>(CoreState(TimeSource.Monotonic.markNow()))
 
     /** A [StateFlow] of the current state. */
     public val state: StateFlow<CoreState> = _state.asStateFlow()
 
+    private var runtimeState: RuntimeState = RuntimeState.INITIALIZED
     private var updateJob: Job? = null
 
     /**
@@ -126,9 +125,7 @@
      * @throws IllegalStateException if the session has been destroyed.
      */
     public fun configure(): SessionConfigureResult {
-        check(lifecycleRegistry.currentState != Lifecycle.State.DESTROYED) {
-            "Session has been destroyed."
-        }
+        check(runtimeState != RuntimeState.STOPPED) { "Session has been destroyed." }
         runtime.lifecycleManager.configure()
         return SessionConfigureSuccess()
     }
@@ -136,7 +133,7 @@
     /**
      * Starts or resumes the session.
      *
-     * Resuming a session requires the `android.permission.SCENE_UNDERSTANDING_COARSE` and
+     * Resuming a session requires the `android.permission.SCENE_UNDERSTANDING` and
      * `android.permission.HAND_TRACKING` permissions to be granted.
      *
      * @return the result of the operation. Can be [SessionResumeSuccess] if the session was
@@ -145,17 +142,16 @@
      * @throws IllegalStateException if the session has been destroyed.
      */
     public fun resume(): SessionResumeResult {
-        check(lifecycleRegistry.currentState != Lifecycle.State.DESTROYED) {
-            "Session has been destroyed."
-        }
-        if (lifecycleRegistry.currentState != Lifecycle.State.RESUMED) {
+        check(runtimeState != RuntimeState.STOPPED) { "Session has been destroyed." }
+
+        if (runtimeState != RuntimeState.RESUMED) {
             val missingPermissions = activity.selectMissing(SESSION_PERMISSIONS)
             if (missingPermissions.isNotEmpty()) {
                 return SessionResumePermissionsNotGranted(missingPermissions)
             }
 
             runtime.lifecycleManager.resume()
-            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
+            runtimeState = RuntimeState.RESUMED
             updateJob = coroutineScope.launch { updateLoop() }
         }
 
@@ -171,13 +167,11 @@
      * @throws IllegalStateException if the session has been destroyed.
      */
     public fun pause() {
-        check(lifecycleRegistry.currentState != Lifecycle.State.DESTROYED) {
-            "Session has been destroyed."
-        }
+        check(runtimeState != RuntimeState.STOPPED) { "Session has been destroyed." }
 
-        if (lifecycleRegistry.currentState == Lifecycle.State.RESUMED) {
-            lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_PAUSE)
+        if (runtimeState == RuntimeState.RESUMED) {
             runtime.lifecycleManager.pause()
+            runtimeState = RuntimeState.PAUSED
             updateJob?.cancel()
             updateJob = null
         }
@@ -191,18 +185,19 @@
      * an active session will first call [pause].
      */
     public fun destroy() {
-        if (lifecycleRegistry.currentState == Lifecycle.State.DESTROYED) {
+        if (runtimeState == RuntimeState.STOPPED) {
             return
-        } else if (lifecycleRegistry.currentState == Lifecycle.State.RESUMED) {
+        } else if (runtimeState == RuntimeState.RESUMED) {
             pause()
         }
-        lifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
+
         runtime.lifecycleManager.stop()
         coroutineScope.cancel()
+        runtimeState = RuntimeState.STOPPED
     }
 
     private suspend fun updateLoop() {
-        while (lifecycleRegistry.currentState == Lifecycle.State.RESUMED) {
+        while (runtimeState == RuntimeState.RESUMED) {
             update()
         }
     }
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Entity.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Entity.kt
index 2cb9e40..aaf9021 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Entity.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Entity.kt
@@ -25,6 +25,24 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public interface Entity : ActivityPose {
 
+    /** Updates the pose (position and rotation) of the Entity relative to its parent. */
+    public var pose: Pose
+
+    /**
+     * Sets the scale of this entity relative to its parent. This value will affect the rendering of
+     * this Entity's children. As the scale increases, this will stretch the content of the Entity.
+     *
+     * @param scale The [Vector3] scale factor from the parent.
+     */
+    public var scale: Vector3
+
+    /**
+     * Add given Entity as child. The child Entity's pose will be relative to the pose of its parent
+     *
+     * @param child The child entity.
+     */
+    public fun addChild(child: Entity)
+
     /** Sets the provided Entities to be children of the Entity. */
     public var children: List<Entity>
 
@@ -46,6 +64,13 @@
      */
     public var size: Dimensions
 
+    /**
+     * Sets the alpha transparency for the given Entity.
+     *
+     * @param alpha Alpha transparency level for the Entity.
+     */
+    public var alpha: Float
+
     /** Returns the total alpha transparency level for this Entity. */
     public val activitySpaceAlpha: Float
 
@@ -59,80 +84,6 @@
     public var isHidden: Boolean
 
     /**
-     * Add given Entity as child. The child Entity's pose will be relative to the pose of its parent
-     *
-     * @param child The child entity.
-     */
-    public fun addChild(child: Entity)
-
-    /** Returns the pose for this entity, relative to the given space. */
-    public fun getPose(@SpaceValue relativeTo: Int): Pose
-
-    /** Returns the pose for this entity, relative to its parent. */
-    public fun getPose(): Pose = getPose(Space.PARENT)
-
-    /** Updates the pose (position and rotation) of the Entity relative to the given space. */
-    public fun setPose(pose: Pose, @SpaceValue relativeTo: Int)
-
-    /** Updates the pose (position and rotation) of the Entity relative to its parent. */
-    public fun setPose(pose: Pose): Unit = setPose(pose, Space.PARENT)
-
-    /**
-     * Returns the scale of this entity, relative to the given space.
-     *
-     * @return Current [Vector3] scale relative to the given space.
-     */
-    public fun getScale(@SpaceValue relativeTo: Int): Vector3
-
-    /**
-     * Returns the scale of this entity, relative to its parent.
-     *
-     * @return Current [Vector3] scale relative to the parent.
-     */
-    public fun getScale(): Vector3 = getScale(Space.PARENT)
-
-    /**
-     * Sets the scale of this entity relative to the given space. This value will affect the
-     * rendering of this Entity's children. As the scale increases, this will stretch the content of
-     * the Entity.
-     *
-     * @param scale The [Vector3] scale factor relative to the given space.
-     */
-    public fun setScale(scale: Vector3, @SpaceValue relativeTo: Int)
-
-    /**
-     * Sets the scale of this entity relative to its parent. This value will affect the rendering of
-     * this Entity's children. As the scale increases, this will stretch the content of the Entity.
-     *
-     * @param scale The [Vector3] scale factor from the parent.
-     */
-    public fun setScale(scale: Vector3): Unit = setScale(scale, Space.PARENT)
-
-    /**
-     * Returns the effective alpha transparency level of the entity, relative to the given space.
-     *
-     * @param relativeTo The space in which to evaluate the alpha.
-     */
-    public fun getAlpha(@SpaceValue relativeTo: Int): Float
-
-    /** Returns the set alpha transparency level for this Entity. */
-    public fun getAlpha(): Float = getAlpha(Space.PARENT)
-
-    /**
-     * Sets the alpha transparency for the given Entity, relative to the given space.
-     *
-     * @param alpha Alpha transparency level for the Entity.
-     */
-    public fun setAlpha(alpha: Float, @SpaceValue relativeTo: Int)
-
-    /**
-     * Sets the alpha transparency for the given Entity.
-     *
-     * @param alpha Alpha transparency level for the Entity.
-     */
-    public fun setAlpha(alpha: Float): Unit = setAlpha(alpha, Space.PARENT)
-
-    /**
      * Returns the hidden status of this Entity.
      *
      * @param includeParents Whether to include the hidden status of parents in the returned value.
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Hand.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Hand.kt
index d30876d..67c3346 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Hand.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Hand.kt
@@ -18,10 +18,6 @@
 
 import androidx.annotation.RestrictTo
 import androidx.xr.runtime.math.Pose
-import androidx.xr.runtime.math.Quaternion
-import androidx.xr.runtime.math.Vector3
-import java.nio.ByteBuffer
-import java.nio.ByteOrder
 
 /** Represents the type of hand joint. */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@@ -94,47 +90,9 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public interface Hand {
 
-    public companion object {
-        /**
-         * Parses the hand joint data from the buffer.
-         *
-         * @param trackingState the current [TrackingState] of the hand.
-         * @param handJointsBuffer the [ByteBuffer] containing the pose of each joint in the hand.
-         * @return a map of [HandJointType] to [Pose] representing the current pose of each joint in
-         *   the hand.
-         */
-        @JvmStatic
-        public fun parseHandJoint(
-            trackingState: TrackingState,
-            handJointsBuffer: ByteBuffer,
-        ): Map<HandJointType, Pose> {
-            if (trackingState != TrackingState.Tracking) {
-                return emptyMap()
-            }
-            val buffer = handJointsBuffer.duplicate().order(ByteOrder.nativeOrder())
-            val jointCount = HandJointType.values().size
-            val poses = mutableListOf<Pose>()
-            repeat(jointCount) {
-                val qx = buffer.float
-                val qy = buffer.float
-                val qz = buffer.float
-                val qw = buffer.float
-                val px = buffer.float
-                val py = buffer.float
-                val pz = buffer.float
-                poses.add(Pose(Vector3(px, py, pz), Quaternion(qx, qy, qz, qw)))
-            }
-            return HandJointType.values().zip(poses).toMap()
-        }
-    }
-
-    /** The current [TrackingState] of the hand's data. */
-    public val trackingState: TrackingState
-
-    /** The value describing the data of the hand, including trackingState and handJoints' poses. */
-    public val handJointsBuffer: ByteBuffer
+    /** The value describing if the hand is active. */
+    public val isActive: Boolean
 
     /** The value describing the poses of the hand joints. */
     public val handJoints: Map<HandJointType, Pose>
-        get() = parseHandJoint(trackingState, handJointsBuffer)
 }
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/JxrPlatformAdapter.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/JxrPlatformAdapter.kt
index b6142d8..0e7428e 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/JxrPlatformAdapter.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/JxrPlatformAdapter.kt
@@ -89,70 +89,11 @@
         assetName: String
     ): ListenableFuture<GltfModelResource>
 
-    /**
-     * Loads glTF Asset from a provided byte array. The future returned by this method will fire
-     * listeners on the UI thread if Runnable::run is supplied.
-     */
-    // TODO(b/397746548): Add InputStream support for loading glTFs.
-    // Suppressed to allow CompletableFuture.
-    public fun loadGltfByByteArray(
-        assetData: List<Byte>,
-        assetKey: String,
-    ): ListenableFuture<GltfModelResource>
-
     /** Loads an ExrImage for the given asset name from the assets folder. */
     // Suppressed to allow CompletableFuture.
     public fun loadExrImageByAssetName(assetName: String): ListenableFuture<ExrImageResource>
 
     /**
-     * Loads a texture resource for the given asset name or URL. The future returned by this method
-     * will fire listeners on the UI thread if Runnable::run is supplied.
-     */
-    public fun loadTexture(
-        assetName: String,
-        sampler: TextureSampler,
-    ): ListenableFuture<TextureResource>?
-
-    /** Borrows the reflection texture from the currently set environment IBL. */
-    public fun borrowReflectionTexture(): TextureResource?
-
-    /** Destroys the given texture resource. */
-    public fun destroyTexture(texture: TextureResource)
-
-    /**
-     * Creates a water material by querying it from the system's built-in materials. The future
-     * returned by this method will fire listeners on the UI thread if Runnable::run is supplied.
-     */
-    public fun createWaterMaterial(isAlphaMapVersion: Boolean): ListenableFuture<MaterialResource>
-
-    /** Destroys the given water material resource. */
-    public fun destroyWaterMaterial(material: MaterialResource)
-
-    /** Sets the reflection cube texture for the water material. */
-    public fun setReflectionCube(material: MaterialResource, reflectionCube: TextureResource)
-
-    /** Sets the normal map texture for the water material. */
-    public fun setNormalMap(material: MaterialResource, normalMap: TextureResource)
-
-    /** Sets the normal tiling for the water material. */
-    public fun setNormalTiling(material: MaterialResource, normalTiling: Float)
-
-    /** Sets the normal speed for the water material. */
-    public fun setNormalSpeed(material: MaterialResource, normalSpeed: Float)
-
-    /** Sets the alpha step multiplier for the water material. */
-    public fun setAlphaStepMultiplier(material: MaterialResource, alphaStepMultiplier: Float)
-
-    /** Sets the alpha map for the water material. */
-    public fun setAlphaMap(material: MaterialResource, alphaMap: TextureResource)
-
-    /** Sets the normal z for the water material. */
-    public fun setNormalZ(material: MaterialResource, normalZ: Float)
-
-    /** Sets the normal boundary for the water material. */
-    public fun setNormalBoundary(material: MaterialResource, normalBoundary: Float)
-
-    /**
      * A factory function to create a SceneCore GltfEntity. The parent may be the activity space or
      * GltfEntity in the scene.
      */
@@ -205,38 +146,21 @@
     /**
      * A factory function to create a platform PanelEntity. The parent can be any entity.
      *
-     * @param context Application Context.
      * @param pose Initial pose of the panel.
      * @param view View inflating this panel.
+     * @param surfaceDimensionsPx Dimensions for the underlying surface for the given view.
      * @param dimensions Size of the panel in meters.
      * @param name Name of the panel.
+     * @param context Application Context.
      * @param parent Parent entity.
      */
     public fun createPanelEntity(
-        context: Context,
         pose: Pose,
         view: View,
+        surfaceDimensionsPx: PixelDimensions,
         dimensions: Dimensions,
         name: String,
-        parent: Entity,
-    ): PanelEntity
-
-    /**
-     * A factory function to create a platform PanelEntity. The parent can be any entity.
-     *
-     * @param context Application Context.
-     * @param pose Initial pose of the panel.
-     * @param view View inflating this panel.
-     * @param pixelDimensions Dimensions for the underlying surface for the given view in pixels.
-     * @param name Name of the panel.
-     * @param parent Parent entity.
-     */
-    public fun createPanelEntity(
         context: Context,
-        pose: Pose,
-        view: View,
-        pixelDimensions: PixelDimensions,
-        name: String,
         parent: Entity,
     ): PanelEntity
 
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/PanelEntity.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/PanelEntity.kt
index c7b23b3..d4352f6 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/PanelEntity.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/PanelEntity.kt
@@ -29,7 +29,7 @@
      *
      * @param dimensions The [PixelDimensions] of the underlying surface to set.
      */
-    public var sizeInPixels: PixelDimensions
+    public var pixelDimensions: PixelDimensions
 
     /**
      * Sets a corner radius on all four corners of this PanelEntity.
@@ -44,7 +44,6 @@
      * including parent scale.
      *
      * @return Vector3 scale applied to pixels within the Panel. (Z will be 0)
-     * @deprecated This method will be removed in a future release.
      */
     public val pixelDensity: Vector3
 
@@ -54,5 +53,5 @@
      *
      * @return [Dimensions] size of this panel in meters. (Z will be 0)
      */
-    public var panelSize: Dimensions
+    public val panelSize: Dimensions
 }
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Resource.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Resource.kt
index 19bfbf2..b97cf4e 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Resource.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Resource.kt
@@ -29,9 +29,3 @@
 
 /** Interface for a glTF resource. This can be used for creating glTF entities. */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface GltfModelResource : Resource {}
-
-/** Interface for a texture resource. This can be used alongside materials. */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface TextureResource : Resource {}
-
-/** Interface for a material resource. This can be used to override materials on meshes. */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface MaterialResource : Resource {}
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Space.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Space.kt
index d85ae9dd..a0af994 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Space.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/Space.kt
@@ -16,20 +16,28 @@
 
 package androidx.xr.runtime.internal
 
-import androidx.annotation.IntDef
 import androidx.annotation.RestrictTo
 
-@IntDef(Space.PARENT, Space.ACTIVITY, Space.REAL_WORLD)
-@Retention(AnnotationRetention.SOURCE)
-internal annotation class SpaceValue
-
-/** Coordinate spaces in which to apply the transformation values. */
+/**
+ * Describes a well-known coordinate system that is available for [anchors][Anchor] to be attached
+ * to.
+ */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public object Space {
-    /** The local coordinate space of an [Entity], relative to its parent. */
-    public const val PARENT: Int = 0
-    /** The global coordinate space, at the root of the scene graph for the activity. */
-    public const val ACTIVITY: Int = 1
-    /** The global coordinate space, unscaled, at the root of the scene graph of the activity. */
-    public const val REAL_WORLD: Int = 2
+public interface Space : Trackable {
+    /** Describes the origin and extents of the well-known coordinate system. */
+    public class Type private constructor(private val name: Int) {
+        public companion object {
+            /**
+             * A world-locked origin useful when an application needs to render seated-scale content
+             * that is not positioned relative to the physical floor.
+             */
+            @JvmField public val Local: Type = Type(0)
+
+            /**
+             * Similar to [LOCAL] but with a different height/Y coordinate. Matches [STAGE] but with
+             * potentially reduced bounds.
+             */
+            @JvmField public val LocalFloor: Type = Type(1)
+        }
+    }
 }
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/SpatialEnvironment.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/SpatialEnvironment.kt
index 86e3103..b610b3a 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/SpatialEnvironment.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/SpatialEnvironment.kt
@@ -165,29 +165,16 @@
      *   If null, there will be no geometry.
      * @param skybox the preferred skybox for the environment based on a pre-loaded EXR Image. If
      *   null, it will be all black.
-     * @param geometryMaterial the material to override a given mesh in the geometry. If null, the
-     *   material will not override any mesh.
-     * @param geometryMeshName the name of the mesh to override with the material. If null, the
-     *   material will not override any mesh.
-     * @param geometryAnimationName the name of the animation to play on the geometry. If null, the
-     *   geometry will not play any animation. Note that the animation will be played in loop.
      */
     public class SpatialEnvironmentPreference(
-        public val skybox: ExrImageResource?,
         public val geometry: GltfModelResource?,
-        internal val geometryMaterial: MaterialResource?,
-        internal val geometryMeshName: String?,
-        internal val geometryAnimationName: String?,
+        public val skybox: ExrImageResource?,
     ) {
         override fun equals(other: Any?): Boolean {
             if (this === other) return true
             if (other !is SpatialEnvironmentPreference) return false
 
-            return skybox == other.skybox &&
-                geometry == other.geometry &&
-                geometryMaterial == other.geometryMaterial &&
-                geometryMeshName == other.geometryMeshName &&
-                geometryAnimationName == other.geometryAnimationName
+            return skybox == other.skybox && geometry == other.geometry
         }
 
         override fun hashCode(): Int {
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/TextureSampler.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/TextureSampler.kt
deleted file mode 100644
index fec3297..0000000
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/internal/TextureSampler.kt
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2024 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.xr.runtime.internal
-
-import androidx.annotation.RestrictTo
-
-/**
- * TextureSampler class used to define the way a texture gets sampled. The fields of this sampler
- * are based on the public Filament TextureSampler class but may diverge over time.
- * https://github.com/google/filament/blob/main/android/filament-android/src/main/java/com/google/android/filament/TextureSampler.java
- *
- * @param wrapModeS wrap mode S for the texture sampler.
- * @param wrapModeT wrap mode T for the texture sampler.
- * @param wrapModeR wrap mode R for the texture sampler.
- * @param minFilter min filter for the texture sampler.
- * @param magFilter mag filter for the texture sampler.
- * @param compareMode compare mode for the texture sampler.
- * @param compareFunc compare function for the texture sampler.
- * @param anisotropyLog2 anisotropy log 2 for the texture sampler.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class TextureSampler(
-    @TextureSampler.WrapMode public val wrapModeS: Int,
-    @TextureSampler.WrapMode public val wrapModeT: Int,
-    @TextureSampler.WrapMode public val wrapModeR: Int,
-    @TextureSampler.WrapMode public val minFilter: Int,
-    @TextureSampler.WrapMode public val magFilter: Int,
-    @TextureSampler.WrapMode public val compareMode: Int,
-    @TextureSampler.WrapMode public val compareFunc: Int,
-    @TextureSampler.WrapMode public val anisotropyLog2: Int,
-) {
-    /**
-     * Defines how texture coordinates outside the range [0, 1] are handled. Although these values
-     * are based on the public Filament values, they may diverge over time.
-     */
-    public annotation class WrapMode {}
-
-    /**
-     * Specifies how the texture is sampled when it's minified (appears smaller than its original
-     * size). Although these values are based on the public Filament values, they may diverge over
-     * time.
-     */
-    public annotation class MinFilter {}
-
-    /**
-     * Specifies how the texture is sampled when it's magnified (appears larger than its original
-     * size). Although these values are based on the public Filament values, they may diverge over
-     * time.
-     */
-    public annotation class MagFilter {}
-
-    /**
-     * Used for depth texture comparisons, determining how the sampled depth value is compared to a
-     * reference depth. Although these values are based on the public Filament values, they may
-     * diverge over time.
-     */
-    public annotation class CompareMode {}
-
-    public companion object {
-        /** The edge of the texture extends to infinity. */
-        public const val CLAMP_TO_EDGE: Int = 0
-
-        /** The texture infinitely repeats in the wrap direction. */
-        public const val REPEAT: Int = 1
-
-        /** The texture infinitely repeats and mirrors in the wrap direction. */
-        public const val MIRRORED_REPEAT: Int = 2
-
-        /** No filtering. Nearest neighbor is used. */
-        public const val NEAREST: Int = 0
-
-        /** Box filtering. Weighted average of 4 neighbors is used. */
-        public const val LINEAR: Int = 1
-
-        /** Mip-mapping is activated. But no filtering occurs. */
-        public const val NEAREST_MIPMAP_NEAREST: Int = 2
-
-        /** Box filtering within a mip-map level. */
-        public const val LINEAR_MIPMAP_NEAREST: Int = 3
-
-        /** Mip-map levels are interpolated, but no other filtering occurs. */
-        public const val NEAREST_MIPMAP_LINEAR: Int = 4
-
-        /** Both interpolated Mip-mapping and linear filtering are used. */
-        public const val LINEAR_MIPMAP_LINEAR: Int = 5
-
-        /** No filtering. Nearest neighbor is used. */
-        public const val MAG_NEAREST: Int = 0
-
-        /** Box filtering. Weighted average of 4 neighbors is used. */
-        public const val MAG_LINEAR: Int = 1
-
-        public const val NONE: Int = 0
-
-        public const val COMPARE_TO_TEXTURE: Int = 1
-    }
-}
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Matrix4.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Matrix4.kt
index fefc2cb..635bd04 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Matrix4.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Matrix4.kt
@@ -182,7 +182,23 @@
     }
 
     /** Standard hash code calculation using constructor values */
-    public override fun hashCode(): Int = data.contentHashCode()
+    public override fun hashCode(): Int =
+        31 * data[0].hashCode() +
+            data[1].hashCode() +
+            data[2].hashCode() +
+            data[3].hashCode() +
+            data[4].hashCode() +
+            data[5].hashCode() +
+            data[6].hashCode() +
+            data[7].hashCode() +
+            data[8].hashCode() +
+            data[9].hashCode() +
+            data[10].hashCode() +
+            data[11].hashCode() +
+            data[12].hashCode() +
+            data[13].hashCode() +
+            data[14].hashCode() +
+            data[15].hashCode()
 
     /** Standard toString() implementation */
     public override fun toString(): String =
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Quaternion.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Quaternion.kt
index 698686f..9b19e12 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Quaternion.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Quaternion.kt
@@ -205,13 +205,7 @@
         return this.x == other.x && this.y == other.y && this.z == other.z && this.w == other.w
     }
 
-    override fun hashCode(): Int {
-        var result = x.hashCode()
-        result = 31 * result + y.hashCode()
-        result = 31 * result + z.hashCode()
-        result = 31 * result + w.hashCode()
-        return result
-    }
+    override fun hashCode(): Int = 31 * x.hashCode() + y.hashCode() + z.hashCode() + w.hashCode()
 
     override fun toString(): String = "[x=$x, y=$y, z=$z, w=$w]"
 
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector3.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector3.kt
index a986c60..59dac4c 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector3.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector3.kt
@@ -107,12 +107,7 @@
         return this.x == other.x && this.y == other.y && this.z == other.z
     }
 
-    override fun hashCode(): Int {
-        var result = x.hashCode()
-        result = 31 * result + y.hashCode()
-        result = 31 * result + z.hashCode()
-        return result
-    }
+    override fun hashCode(): Int = 31 * x.hashCode() + y.hashCode() + z.hashCode()
 
     override fun toString(): String = "[x=$x, y=$y, z=$z]"
 
diff --git a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector4.kt b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector4.kt
index 9b73033..5473cc3 100644
--- a/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector4.kt
+++ b/xr/runtime/runtime/src/main/kotlin/androidx/xr/runtime/math/Vector4.kt
@@ -118,13 +118,7 @@
         return this.x == other.x && this.y == other.y && this.z == other.z && this.w == other.w
     }
 
-    override fun hashCode(): Int {
-        var result = x.hashCode()
-        result = 31 * result + y.hashCode()
-        result = 31 * result + z.hashCode()
-        result = 31 * result + w.hashCode()
-        return result
-    }
+    override fun hashCode(): Int = 31 * x.hashCode() + y.hashCode() + z.hashCode() + w.hashCode()
 
     override fun toString(): String = "[x=$x, y=$y, z=$z, w=$w]"
 
diff --git a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/CoreStateTest.kt b/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/CoreStateTest.kt
deleted file mode 100644
index 83dae31..0000000
--- a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/CoreStateTest.kt
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2024 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.xr.runtime
-
-import com.google.common.truth.Truth.assertThat
-import kotlin.time.Duration.Companion.seconds
-import kotlin.time.TestTimeSource
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.junit.runners.JUnit4
-
-@RunWith(JUnit4::class)
-class CoreStateTest {
-
-    private val timeSource = TestTimeSource()
-
-    @Test
-    fun equals_sameObject_returnsTrue() {
-        val coreState = CoreState(timeMark = timeSource.markNow())
-
-        assertThat(coreState).isEqualTo(coreState)
-    }
-
-    @Test
-    fun equals_sameTimeMark_returnsTrue() {
-        val timeMark = timeSource.markNow()
-        val coreState1 = CoreState(timeMark = timeMark)
-        val coreState2 = CoreState(timeMark = timeMark)
-
-        assertThat(coreState1).isEqualTo(coreState2)
-    }
-
-    @Test
-    fun equals_differentTimeMark_returnsFalse() {
-        val coreState1 = CoreState(timeMark = timeSource.markNow())
-        timeSource += 1.seconds
-        val coreState2 = CoreState(timeMark = timeSource.markNow())
-
-        assertThat(coreState1).isNotEqualTo(coreState2)
-    }
-
-    @Test
-    fun equals_differentObjectType_returnsFalse() {
-        val coreState = CoreState(timeMark = timeSource.markNow())
-        val other = Object()
-
-        assertThat(coreState).isNotEqualTo(other)
-    }
-
-    @Test
-    fun hashCode_sameTimeMark_returnsSameHashCode() {
-        val timeMark = timeSource.markNow()
-        val coreState1 = CoreState(timeMark = timeMark)
-        val coreState2 = CoreState(timeMark = timeMark)
-
-        assertThat(coreState1.hashCode()).isEqualTo(coreState2.hashCode())
-    }
-
-    @Test
-    fun hashCode_differentTimeMark_returnsDifferentHashCode() {
-        val coreState1 = CoreState(timeMark = timeSource.markNow())
-        timeSource += 1.seconds
-        val coreState2 = CoreState(timeMark = timeSource.markNow())
-
-        assertThat(coreState1.hashCode()).isNotEqualTo(coreState2.hashCode())
-    }
-
-    @Test
-    fun toString_returnsCorrectString() {
-        val timeMark = timeSource.markNow()
-        val coreState = CoreState(timeMark = timeMark)
-
-        assertThat(coreState.toString()).isEqualTo("CoreState(timeMark=$timeMark)")
-    }
-}
diff --git a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/SessionTest.kt b/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/SessionTest.kt
index d3bcef5..3110bae 100644
--- a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/SessionTest.kt
+++ b/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/SessionTest.kt
@@ -27,6 +27,7 @@
 import kotlin.time.Duration.Companion.milliseconds
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.test.StandardTestDispatcher
 import kotlinx.coroutines.test.TestDispatcher
@@ -84,7 +85,7 @@
 
     @Test
     fun create_permissionNotGranted_returnsPermissionsNotGranted() {
-        val permission = "android.permission.SCENE_UNDERSTANDING_COARSE"
+        val permission = "android.permission.SCENE_UNDERSTANDING"
         shadowOf(activity).denyPermissions(permission)
 
         val result = Session.create(activity) as SessionCreatePermissionsNotGranted
@@ -125,7 +126,7 @@
     @Test
     fun resume_permissionNotGranted_returnsPermissionsNotGranted() {
         val underTest = (Session.create(activity) as SessionCreateSuccess).session
-        val permission = "android.permission.SCENE_UNDERSTANDING_COARSE"
+        val permission = "android.permission.SCENE_UNDERSTANDING"
         shadowOf(activity).denyPermissions(permission)
 
         val result = underTest.resume() as SessionResumePermissionsNotGranted
diff --git a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/CoroutinesTest.kt b/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/CoroutinesTest.kt
index eb3f723..3bc395a 100644
--- a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/CoroutinesTest.kt
+++ b/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/CoroutinesTest.kt
@@ -49,7 +49,7 @@
         activityScenarioRule.scenario.onActivity { this.activity = it }
         shadowOf(activity)
             .grantPermissions(
-                "android.permission.SCENE_UNDERSTANDING_COARSE",
+                "android.permission.SCENE_UNDERSTANDING",
                 "android.permission.HAND_TRACKING",
             )
 
diff --git a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/FlowsTest.kt b/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/FlowsTest.kt
index 0fdf169..30af430 100644
--- a/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/FlowsTest.kt
+++ b/xr/runtime/runtime/src/test/kotlin/androidx/xr/runtime/java/FlowsTest.kt
@@ -50,7 +50,7 @@
         activityScenarioRule.scenario.onActivity { this.activity = it }
         shadowOf(activity)
             .grantPermissions(
-                "android.permission.SCENE_UNDERSTANDING_COARSE",
+                "android.permission.SCENE_UNDERSTANDING",
                 "android.permission.HAND_TRACKING",
             )
 
diff --git a/xr/scenecore/integration-tests/activitypanel/build.gradle b/xr/scenecore/integration-tests/activitypanel/build.gradle
index cc23f44..088c32a 100644
--- a/xr/scenecore/integration-tests/activitypanel/build.gradle
+++ b/xr/scenecore/integration-tests/activitypanel/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -67,8 +66,6 @@
     implementation("androidx.activity:activity-compose:1.9.3")
     implementation("androidx.appcompat:appcompat:1.7.0")
     implementation("androidx.compose.runtime:runtime:1.7.5")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/ActivityPanelHostActivity.kt b/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/ActivityPanelHostActivity.kt
index af4211f..7813920 100644
--- a/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/ActivityPanelHostActivity.kt
+++ b/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/ActivityPanelHostActivity.kt
@@ -23,6 +23,7 @@
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
 import androidx.xr.scenecore.ActivityPanelEntity
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.MovableComponent
 import androidx.xr.scenecore.Session
 import androidx.xr.scenecore.SpatialCapabilities
@@ -48,13 +49,23 @@
             activityPanelEntity.launchActivity(intent)
             activityPanelEntity.setPose(Pose(Vector3(0.5f, 0.5f, 0.0f)))
             val movableComponent = MovableComponent.create(session)
-            movableComponent.size = activityPanelEntity.getSize()
+            movableComponent.size = getSizeInLocalSpace(activityPanelEntity)
             @Suppress("UNUSED_VARIABLE")
             val unused = activityPanelEntity.addComponent(movableComponent)
         }
         setContentView(CommonTestView(this))
     }
 
+    private fun getSizeInLocalSpace(activityPanelEntity: ActivityPanelEntity): Dimensions {
+        val scaledSize = activityPanelEntity.getSize()
+        val worldSpaceScale = activityPanelEntity.getWorldSpaceScale()
+        return Dimensions(
+            scaledSize.width / worldSpaceScale,
+            scaledSize.height / worldSpaceScale,
+            scaledSize.depth / worldSpaceScale,
+        )
+    }
+
     override fun onDestroy() {
         super.onDestroy()
         activityPanelEntity.setParent(null)
diff --git a/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/CounterActivity.kt b/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/CounterActivity.kt
index 05b8fe3..a0ae875 100644
--- a/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/CounterActivity.kt
+++ b/xr/scenecore/integration-tests/activitypanel/src/main/kotlin/androidx/xr/scenecore/samples/activitypanel/CounterActivity.kt
@@ -17,17 +17,14 @@
 package androidx.xr.scenecore.samples.activitypanel
 
 import android.os.Bundle
-import android.util.Log
 import androidx.appcompat.app.AppCompatActivity
 import androidx.xr.scenecore.samples.commontestview.DebugTextLinearView
 import java.util.Timer
 import java.util.TimerTask
 
-class CounterActivity : AppCompatActivity() {
-    var counter = 0
-    private val TAG = "CounterActivity"
-    private val timer = Timer()
+var counter = 0
 
+class CounterActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
@@ -35,24 +32,17 @@
         view.setName("Secondary Counter Activity")
         setContentView(view)
 
-        // Schedule a timer to update the counter every second
-        Log.i(TAG, "Counter Activity timer scheduled")
+        // Create a timer to update the counter every second
+        val timer = Timer()
         timer.schedule(createTimerTask(view), 0, 1000)
     }
-
-    override fun onDestroy() {
-        super.onDestroy()
-        Log.i(TAG, "Counter Activity onDestroy called")
-        timer.cancel()
-        timer.purge()
-    }
-
-    // Timer task that increments a counter and updates the view.
-    private fun createTimerTask(view: DebugTextLinearView) =
-        object : TimerTask() {
-            override fun run() {
-                counter++
-                view.setLine("counter", counter.toString())
-            }
-        }
 }
+
+// Timer task that increments a counter and updates the view.
+fun createTimerTask(view: DebugTextLinearView) =
+    object : TimerTask() {
+        override fun run() {
+            counter++
+            view.setLine("counter", counter.toString())
+        }
+    }
diff --git a/xr/scenecore/integration-tests/anchortest/build.gradle b/xr/scenecore/integration-tests/anchortest/build.gradle
index 90ef3b7f..839a841 100644
--- a/xr/scenecore/integration-tests/anchortest/build.gradle
+++ b/xr/scenecore/integration-tests/anchortest/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.KotlinTarget
 import androidx.build.SoftwareType
@@ -72,7 +71,6 @@
     implementation("androidx.core:core:1.9.0")
     implementation("androidx.lifecycle:lifecycle-common:2.8.7")
 
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/commontestview/build.gradle b/xr/scenecore/integration-tests/commontestview/build.gradle
index c17b895..dfe0193 100644
--- a/xr/scenecore/integration-tests/commontestview/build.gradle
+++ b/xr/scenecore/integration-tests/commontestview/build.gradle
@@ -21,7 +21,6 @@
  * Please use that script when creating a new project, rather than copying an existing project and
  * modifying its settings.
  */
-
 import androidx.build.SoftwareType
 
 plugins {
diff --git a/xr/scenecore/integration-tests/commontestview/src/main/kotlin/androidx/xr/scenecore/samples/commontestview/DebugTextPanel.kt b/xr/scenecore/integration-tests/commontestview/src/main/kotlin/androidx/xr/scenecore/samples/commontestview/DebugTextPanel.kt
index 3c0fb40..aa6320f 100644
--- a/xr/scenecore/integration-tests/commontestview/src/main/kotlin/androidx/xr/scenecore/samples/commontestview/DebugTextPanel.kt
+++ b/xr/scenecore/integration-tests/commontestview/src/main/kotlin/androidx/xr/scenecore/samples/commontestview/DebugTextPanel.kt
@@ -19,9 +19,9 @@
 import android.content.Context
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.Entity
 import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session
 
 /**
@@ -36,15 +36,17 @@
     session: Session,
     /** The parent entity that the Debug panel is attached to. */
     var parent: Entity,
-    pixelDimensions: PixelDimensions = PixelDimensions(550, 750),
-    name: String = "DebugTextPanel",
+    surfaceDimensionsPx: Dimensions = Dimensions(550f, 750f),
+    dimensions: Dimensions = Dimensions(0.1f, 0.1f, 0.1f),
+    name: String = "",
     pose: Pose = Pose(Vector3(0f, -0.1f, 0.1f)),
 ) {
     /** The view that displays the text lines. */
     var view: DebugTextLinearView = DebugTextLinearView(context = context)
 
     /** The panel entity that is created to hold the Debug view. */
-    var panelEntity = PanelEntity.create(session, view, pixelDimensions, name, pose)
+    var panelEntity: PanelEntity =
+        PanelEntity.create(session, view, surfaceDimensionsPx, dimensions, name, pose)
 
     /** Optional entity that the Debug panel is tracking. */
     var trackedEntity: Entity? = null
diff --git a/xr/scenecore/integration-tests/headlocked-ui/build.gradle b/xr/scenecore/integration-tests/headlocked-ui/build.gradle
index 403e377..987dc37 100644
--- a/xr/scenecore/integration-tests/headlocked-ui/build.gradle
+++ b/xr/scenecore/integration-tests/headlocked-ui/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -77,8 +76,6 @@
     implementation("androidx.lifecycle:lifecycle-runtime:2.8.7")
     implementation("androidx.lifecycle:lifecycle-viewmodel:2.8.7")
     implementation("androidx.savedstate:savedstate:1.2.1")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/headlocked-ui/src/main/kotlin/androidx/xr/scenecore/samples/headlocked_ui/HeadLockedUiActivity.kt b/xr/scenecore/integration-tests/headlocked-ui/src/main/kotlin/androidx/xr/scenecore/samples/headlocked_ui/HeadLockedUiActivity.kt
index 54bcf92..9588177 100644
--- a/xr/scenecore/integration-tests/headlocked-ui/src/main/kotlin/androidx/xr/scenecore/samples/headlocked_ui/HeadLockedUiActivity.kt
+++ b/xr/scenecore/integration-tests/headlocked-ui/src/main/kotlin/androidx/xr/scenecore/samples/headlocked_ui/HeadLockedUiActivity.kt
@@ -52,11 +52,11 @@
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
 import androidx.xr.scenecore.ActivityPose
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.MovableComponent
 import androidx.xr.scenecore.PanelEntity
 import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session
-import androidx.xr.scenecore.Space
 import androidx.xr.scenecore.samples.commontestview.DebugTextPanel
 
 class HeadLockedUiActivity : AppCompatActivity() {
@@ -79,7 +79,7 @@
         val mActivity = this
 
         // Set the main panel size and make the main panel movable.
-        mSession.mainPanelEntity.setSizeInPixels(PixelDimensions(width = 1500, height = 1100))
+        mSession.mainPanelEntity.setPixelDimensions(PixelDimensions(width = 1500, height = 1100))
         val movableComponent =
             MovableComponent.create(mSession, systemMovable = true, scaleInZ = false)
         val unused = mSession.mainPanelEntity.addComponent(movableComponent)
@@ -90,9 +90,9 @@
                 context = this,
                 session = mSession,
                 parent = mSession.activitySpace,
-                pixelDimensions = PixelDimensions(1500, 1000),
                 name = "DebugPanel",
                 pose = Pose(Vector3(0f, -0.6f, -0.05f)),
+                surfaceDimensionsPx = Dimensions(1500f, 1000f),
             )
 
         // Create the image panel.
@@ -103,7 +103,8 @@
             PanelEntity.create(
                 session = mSession,
                 view = mHeadLockedPanelView,
-                pixelDimensions = PixelDimensions(360, 180),
+                surfaceDimensionsPx = Dimensions(360f, 180f),
+                dimensions = Dimensions(0.1f, 0.1f, 0.1f),
                 name = "headLockedPanel",
                 pose = Pose(Vector3(0f, 0f, 0f)),
             )
@@ -116,7 +117,7 @@
         if (this.mProjectionSource != null) {
             // Since the panel is parented by the activitySpace, we need to inverse its scale
             // so that the panel stays at a fixed size in the view even when ActivitySpace scales.
-            this.mHeadLockedPanel.setScale(0.5f / mSession.activitySpace.getScale(Space.REAL_WORLD))
+            this.mHeadLockedPanel.setScale(0.5f / mSession.activitySpace.getWorldSpaceScale())
             this.mProjectionSource?.transformPoseTo(mUserForward, mSession.activitySpace)?.let {
                 this.mHeadLockedPanel.setPose(it)
                 if (mIsDebugPanelEnabled) updateDebugPanel(it)
@@ -132,11 +133,11 @@
         )
         mDebugPanel.view.setLine(
             "ActivitySpace WorldScale",
-            mSession.activitySpace.getScale(Space.REAL_WORLD).toString(),
+            mSession.activitySpace.getWorldSpaceScale().toString(),
         )
         mDebugPanel.view.setLine(
             "Head Locked Panel WorldScale",
-            this.mHeadLockedPanel.getScale(Space.REAL_WORLD).toString(),
+            this.mHeadLockedPanel.getWorldSpaceScale().toString(),
         )
         mDebugPanel.view.setLine(
             "Head ActivityPose",
diff --git a/xr/scenecore/integration-tests/inputmoveresize/build.gradle b/xr/scenecore/integration-tests/inputmoveresize/build.gradle
index 49441cb..a3f81e9 100644
--- a/xr/scenecore/integration-tests/inputmoveresize/build.gradle
+++ b/xr/scenecore/integration-tests/inputmoveresize/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -77,8 +76,6 @@
     implementation("androidx.lifecycle:lifecycle-runtime:2.8.7")
     implementation("androidx.lifecycle:lifecycle-viewmodel:2.8.7")
     implementation("androidx.savedstate:savedstate:1.2.1")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/inputmoveresize/src/main/kotlin/androidx/xr/scenecore/samples/inputmoveresize/InputMoveResizeTestActivity.kt b/xr/scenecore/integration-tests/inputmoveresize/src/main/kotlin/androidx/xr/scenecore/samples/inputmoveresize/InputMoveResizeTestActivity.kt
index 5fb2c73..8b8452c7 100644
--- a/xr/scenecore/integration-tests/inputmoveresize/src/main/kotlin/androidx/xr/scenecore/samples/inputmoveresize/InputMoveResizeTestActivity.kt
+++ b/xr/scenecore/integration-tests/inputmoveresize/src/main/kotlin/androidx/xr/scenecore/samples/inputmoveresize/InputMoveResizeTestActivity.kt
@@ -30,7 +30,6 @@
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Ray
 import androidx.xr.runtime.math.Vector3
-import androidx.xr.scenecore.BasePanelEntity
 import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.Entity
 import androidx.xr.scenecore.InputEvent
@@ -100,7 +99,7 @@
 
             override fun onResizeEnd(entity: Entity, finalSize: Dimensions) {
                 Log.i(TAG, "$entity $finalSize")
-                (entity as BasePanelEntity<*>).setSize(finalSize)
+                updatePanelSize(finalSize, entity as PanelEntity)
             }
         }
 
@@ -119,6 +118,29 @@
         textView.text = text
     }
 
+    private fun updatePanelSize(newSize: Dimensions, panelEntity: PanelEntity) {
+        panelEntity.setPixelDimensions(
+            PixelDimensions(
+                (newSize.width * panelEntity.getPixelDensity().x * panelEntity.getWorldSpaceScale())
+                    .toInt(),
+                (newSize.height *
+                        panelEntity.getPixelDensity().y *
+                        panelEntity.getWorldSpaceScale())
+                    .toInt(),
+            )
+        )
+    }
+
+    private fun getSizeInLocalSpace(entity: Entity): Dimensions {
+        val scaledSize = entity.getSize()
+        val worldSpaceScale = entity.getWorldSpaceScale()
+        return Dimensions(
+            scaledSize.width / worldSpaceScale,
+            scaledSize.height / worldSpaceScale,
+            scaledSize.depth / worldSpaceScale,
+        )
+    }
+
     private fun createPanelEntityWithText(text: String, panel: View): PanelEntity {
         updateTextInPanel(text, panel)
         val switch = panel.findViewById<Switch>(R.id.switch1)
@@ -129,7 +151,8 @@
             PanelEntity.create(
                 session,
                 panel,
-                PixelDimensions(640, 480),
+                Dimensions(640f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 "panel",
                 Pose(Vector3(0f, -0.5f, 0.5f)),
             )
@@ -150,7 +173,7 @@
         val mainPanelScaleInZ = findViewById<CheckBox>(R.id.scaleInZ)
         mainPanelScaleInZ.isChecked = true
         var mainPanelMovableComponent = MovableComponent.create(session)
-        mainPanelMovableComponent.size = session.mainPanelEntity.getSize()
+        mainPanelMovableComponent.size = getSizeInLocalSpace(session.mainPanelEntity)
 
         fun updateMainPanelMovableComponent() {
             if (mainPanelMovableActive) {
@@ -182,7 +205,7 @@
 
         val mainPanelMovableSwitch = findViewById<Switch>(R.id.movableSwitch)
         mainPanelMovableSwitch.setOnCheckedChangeListener { _, isChecked ->
-            mainPanelMovableComponent.size = session.mainPanelEntity.getSize()
+            mainPanelMovableComponent.size = getSizeInLocalSpace(session.mainPanelEntity)
             when (isChecked) {
                 true -> {
                     updateMainPanelMovableComponent()
@@ -202,7 +225,7 @@
         }
 
         val mainPanelResizableComponent = ResizableComponent.create(session)
-        mainPanelResizableComponent.size = session.mainPanelEntity.getSize()
+        mainPanelResizableComponent.size = getSizeInLocalSpace(session.mainPanelEntity)
         mainPanelResizableComponent.addResizeListener(mainExecutor, resizeListener)
 
         val mainPanelAnyAspectRatioButton = findViewById<RadioButton>(R.id.radioButton1)
@@ -225,7 +248,7 @@
 
         val mainPanelResizableSwitch = findViewById<Switch>(R.id.resizableSwitch)
         mainPanelResizableSwitch.setOnCheckedChangeListener { _, isChecked ->
-            mainPanelResizableComponent.size = session.mainPanelEntity.getSize()
+            mainPanelResizableComponent.size = getSizeInLocalSpace(session.mainPanelEntity)
             when (isChecked) {
                 true ->
                     mainPanelResizableActive =
@@ -259,7 +282,7 @@
         scaleInZCheckBox.isChecked = true
 
         var movablePanelComponent = MovableComponent.create(session)
-        movablePanelComponent.size = movablePanelEntity.getSize()
+        movablePanelComponent.size = getSizeInLocalSpace(movablePanelEntity)
         fun updateMovablePanelComponent() {
             if (movablePanelActive) {
                 movablePanelEntity.removeComponent(movablePanelComponent)
@@ -287,7 +310,7 @@
         val movablePanelSwitch = movablePanelView.findViewById<Switch>(R.id.switch1)
         movablePanelSwitch.text = getString(R.string.movable_label)
         movablePanelSwitch.setOnCheckedChangeListener { _, isChecked ->
-            movablePanelComponent.size = movablePanelEntity.getSize()
+            movablePanelComponent.size = getSizeInLocalSpace(movablePanelEntity)
             when (isChecked) {
                 true -> {
                     updateMovablePanelComponent()
@@ -319,13 +342,13 @@
                 }
             }
         val everythingPanelMovableComponent = MovableComponent.create(session)
-        everythingPanelMovableComponent.size = everythingPanelEntity.getSize()
+        everythingPanelMovableComponent.size = getSizeInLocalSpace(everythingPanelEntity)
         val everythingPanelResizeComponent = ResizableComponent.create(session)
-        everythingPanelResizeComponent.size = everythingPanelEntity.getSize()
+        everythingPanelResizeComponent.size = getSizeInLocalSpace(everythingPanelEntity)
         everythingPanelResizeComponent.addResizeListener(mainExecutor, resizeListener)
         everythingPanelSwitch.setOnCheckedChangeListener { _, isChecked ->
-            everythingPanelMovableComponent.size = everythingPanelEntity.getSize()
-            everythingPanelResizeComponent.size = everythingPanelEntity.getSize()
+            everythingPanelMovableComponent.size = getSizeInLocalSpace(everythingPanelEntity)
+            everythingPanelResizeComponent.size = getSizeInLocalSpace(everythingPanelEntity)
             when (isChecked) {
                 true -> {
                     checkNotNull(
@@ -356,7 +379,7 @@
         resizablePanelEntity.setPose(Pose(Vector3(0.9f, 0.2f, -0.1f)))
         resizablePanelEntity.setParent(session.mainPanelEntity)
         val resizablePanelComponent = ResizableComponent.create(session)
-        resizablePanelComponent.size = resizablePanelEntity.getSize()
+        resizablePanelComponent.size = getSizeInLocalSpace(resizablePanelEntity)
         resizablePanelComponent.addResizeListener(mainExecutor, resizeListener)
 
         val anyAspectRatioButton = resizablePanelView.findViewById<RadioButton>(R.id.radioButton1)
@@ -381,7 +404,7 @@
 
         val resizablePanelSwitch = resizablePanelView.findViewById<Switch>(R.id.switch1)
         resizablePanelSwitch.setOnCheckedChangeListener { _, isChecked ->
-            resizablePanelComponent.size = resizablePanelEntity.getSize()
+            resizablePanelComponent.size = getSizeInLocalSpace(resizablePanelEntity)
             when (isChecked) {
                 true ->
                     resizablePanelActive =
diff --git a/xr/scenecore/integration-tests/movable/build.gradle b/xr/scenecore/integration-tests/movable/build.gradle
index a51bdb7..b2d0e66 100644
--- a/xr/scenecore/integration-tests/movable/build.gradle
+++ b/xr/scenecore/integration-tests/movable/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -66,8 +65,6 @@
     implementation("androidx.activity:activity:1.9.3")
     implementation("androidx.appcompat:appcompat:1.7.0")
     implementation("androidx.core:core:1.9.0")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/movable/src/main/kotlin/androidx/xr/scenecore/samples/movable/MovableActivity.kt b/xr/scenecore/integration-tests/movable/src/main/kotlin/androidx/xr/scenecore/samples/movable/MovableActivity.kt
index 6a44bf1..5162d88 100644
--- a/xr/scenecore/integration-tests/movable/src/main/kotlin/androidx/xr/scenecore/samples/movable/MovableActivity.kt
+++ b/xr/scenecore/integration-tests/movable/src/main/kotlin/androidx/xr/scenecore/samples/movable/MovableActivity.kt
@@ -27,12 +27,12 @@
 import androidx.xr.runtime.math.Ray
 import androidx.xr.runtime.math.Vector3
 import androidx.xr.scenecore.AnchorPlacement
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.Entity
 import androidx.xr.scenecore.MovableComponent
 import androidx.xr.scenecore.MoveListener
 import androidx.xr.scenecore.PanelEntity
 import androidx.xr.scenecore.PermissionHelper
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.PlaneSemantic
 import androidx.xr.scenecore.PlaneType
 import androidx.xr.scenecore.Session
@@ -83,7 +83,8 @@
             PanelEntity.create(
                 session,
                 stationaryPanelContentView,
-                PixelDimensions(640, 480),
+                Dimensions(640f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 "stationaryPanel",
                 Pose(Vector3(1f, 0f, 0f)),
             )
@@ -95,7 +96,8 @@
             PanelEntity.create(
                 session,
                 movablePanelContentView,
-                PixelDimensions(640, 880),
+                Dimensions(640f, 880f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 "panel",
                 Pose(Vector3(0f, 0f, 0.1f)),
             )
diff --git a/xr/scenecore/integration-tests/panelroundedcorner/build.gradle b/xr/scenecore/integration-tests/panelroundedcorner/build.gradle
index d4c2b21..2db8de2 100644
--- a/xr/scenecore/integration-tests/panelroundedcorner/build.gradle
+++ b/xr/scenecore/integration-tests/panelroundedcorner/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -67,8 +66,6 @@
     implementation("androidx.activity:activity-compose:1.9.3")
     implementation("androidx.appcompat:appcompat:1.7.0")
     implementation("androidx.compose.runtime:runtime:1.7.5")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/panelroundedcorner/src/main/kotlin/androidx/xr/scenecore/samples/panelroundedcorner/MainPanelActivity.kt b/xr/scenecore/integration-tests/panelroundedcorner/src/main/kotlin/androidx/xr/scenecore/samples/panelroundedcorner/MainPanelActivity.kt
index 4cacae7..d7eae72 100644
--- a/xr/scenecore/integration-tests/panelroundedcorner/src/main/kotlin/androidx/xr/scenecore/samples/panelroundedcorner/MainPanelActivity.kt
+++ b/xr/scenecore/integration-tests/panelroundedcorner/src/main/kotlin/androidx/xr/scenecore/samples/panelroundedcorner/MainPanelActivity.kt
@@ -27,8 +27,8 @@
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
 import androidx.xr.scenecore.ActivityPanelEntity
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session
 import androidx.xr.scenecore.SpatialCapabilities
 import androidx.xr.scenecore.addSpatialCapabilitiesChangedListener
@@ -36,7 +36,6 @@
 
 const val TAG = "MainPanelActivity"
 
-@Suppress("DEPRECATION")
 class MainPanelActivity : AppCompatActivity() {
     private var activityPanelEntity: ActivityPanelEntity? = null
     private lateinit var panelEntity: PanelEntity
@@ -67,7 +66,8 @@
             PanelEntity.create(
                 session,
                 panelEntityView,
-                PixelDimensions(640, 880),
+                Dimensions(640f, 880f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 "panel_entity",
                 Pose(Vector3(0f, 0f, 0.0f)),
             )
diff --git a/xr/scenecore/integration-tests/spatialcapabilities/build.gradle b/xr/scenecore/integration-tests/spatialcapabilities/build.gradle
index 2cea31b..1ac02e4 100644
--- a/xr/scenecore/integration-tests/spatialcapabilities/build.gradle
+++ b/xr/scenecore/integration-tests/spatialcapabilities/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -65,8 +64,6 @@
     implementation("androidx.activity:activity:1.9.3")
     implementation("androidx.appcompat:appcompat:1.7.0")
     implementation("androidx.core:core:1.9.0")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/spatialcapabilities/src/main/kotlin/androidx/xr/scenecore/samples/spatialcapabilities/SpatialCapabilitiesTestActivity.kt b/xr/scenecore/integration-tests/spatialcapabilities/src/main/kotlin/androidx/xr/scenecore/samples/spatialcapabilities/SpatialCapabilitiesTestActivity.kt
index 439ed2a..3b372a1 100644
--- a/xr/scenecore/integration-tests/spatialcapabilities/src/main/kotlin/androidx/xr/scenecore/samples/spatialcapabilities/SpatialCapabilitiesTestActivity.kt
+++ b/xr/scenecore/integration-tests/spatialcapabilities/src/main/kotlin/androidx/xr/scenecore/samples/spatialcapabilities/SpatialCapabilitiesTestActivity.kt
@@ -70,7 +70,6 @@
             debugTextString.append(
                 "Bounds Changed event received: w=${bounds.width}, h=${bounds.height}, d=${bounds.depth}\n"
             )
-            isFsm = bounds.width == Float.POSITIVE_INFINITY
         }
     }
 
diff --git a/xr/scenecore/integration-tests/spatialuser/build.gradle b/xr/scenecore/integration-tests/spatialuser/build.gradle
index 626605d..5c6cd35 100644
--- a/xr/scenecore/integration-tests/spatialuser/build.gradle
+++ b/xr/scenecore/integration-tests/spatialuser/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -73,8 +72,6 @@
     implementation("androidx.compose.ui:ui:1.7.5")
     implementation("androidx.lifecycle:lifecycle-common:2.8.7")
     implementation("androidx.core:core:1.9.0")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/spatialuser/src/main/kotlin/androidx/xr/scenecore/samples/spatialuser/SpatialUserActivity.kt b/xr/scenecore/integration-tests/spatialuser/src/main/kotlin/androidx/xr/scenecore/samples/spatialuser/SpatialUserActivity.kt
index f58c631..f1a6f3e 100644
--- a/xr/scenecore/integration-tests/spatialuser/src/main/kotlin/androidx/xr/scenecore/samples/spatialuser/SpatialUserActivity.kt
+++ b/xr/scenecore/integration-tests/spatialuser/src/main/kotlin/androidx/xr/scenecore/samples/spatialuser/SpatialUserActivity.kt
@@ -26,9 +26,9 @@
 import androidx.xr.runtime.math.Quaternion
 import androidx.xr.runtime.math.Vector3
 import androidx.xr.scenecore.CameraView
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.Entity
 import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session
 import kotlin.math.tan
 import kotlinx.coroutines.delay
@@ -62,7 +62,8 @@
             PanelEntity.create(
                 session,
                 panelContentView,
-                PixelDimensions(640, 480),
+                Dimensions(640f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 "panel",
                 Pose(Vector3(0f, 0f, 0.5f)),
             )
diff --git a/xr/scenecore/integration-tests/standalone/build.gradle b/xr/scenecore/integration-tests/standalone/build.gradle
index dd94532..9d935ef 100644
--- a/xr/scenecore/integration-tests/standalone/build.gradle
+++ b/xr/scenecore/integration-tests/standalone/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.KotlinTarget
 import androidx.build.SoftwareType
@@ -71,8 +70,6 @@
     implementation("androidx.compose.runtime:runtime:1.7.5")
     implementation("androidx.core:core:1.9.0")
     implementation("androidx.lifecycle:lifecycle-common:2.8.7")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/standalone/src/main/kotlin/androidx/xr/scenecore/samples/standalone/StandaloneActivity.kt b/xr/scenecore/integration-tests/standalone/src/main/kotlin/androidx/xr/scenecore/samples/standalone/StandaloneActivity.kt
index 9012b6f..d8dcf02 100644
--- a/xr/scenecore/integration-tests/standalone/src/main/kotlin/androidx/xr/scenecore/samples/standalone/StandaloneActivity.kt
+++ b/xr/scenecore/integration-tests/standalone/src/main/kotlin/androidx/xr/scenecore/samples/standalone/StandaloneActivity.kt
@@ -23,10 +23,10 @@
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Quaternion
 import androidx.xr.runtime.math.Vector3
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.GltfModel
 import androidx.xr.scenecore.GltfModelEntity
 import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session
 import kotlin.math.cos
 import kotlin.math.sin
@@ -49,7 +49,8 @@
             PanelEntity.create(
                 session,
                 panelContentView,
-                PixelDimensions(640, 480),
+                Dimensions(640f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 "panel",
                 Pose(Vector3(0f, -0.5f, 0.5f)),
             )
diff --git a/xr/scenecore/integration-tests/svxr-example/build.gradle b/xr/scenecore/integration-tests/svxr-example/build.gradle
index 5aa8656..ba1fc24 100644
--- a/xr/scenecore/integration-tests/svxr-example/build.gradle
+++ b/xr/scenecore/integration-tests/svxr-example/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.SoftwareType
 
@@ -61,8 +60,6 @@
 dependencies {
     implementation("androidx.activity:activity:1.9.3")
     implementation("androidx.appcompat:appcompat:1.7.0")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/transformationtests/build.gradle b/xr/scenecore/integration-tests/transformationtests/build.gradle
index aa4b2c9..366e834 100644
--- a/xr/scenecore/integration-tests/transformationtests/build.gradle
+++ b/xr/scenecore/integration-tests/transformationtests/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.KotlinTarget
 import androidx.build.SoftwareType
@@ -72,8 +71,6 @@
     implementation("androidx.core:core:1.9.0")
     implementation("androidx.lifecycle:lifecycle-common:2.8.7")
     implementation("com.google.errorprone:error_prone_annotations:2.30.0")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/transformationtests/src/main/kotlin/androidx/xr/scenecore/samples/transformationtests/TransformationTestsActivity.kt b/xr/scenecore/integration-tests/transformationtests/src/main/kotlin/androidx/xr/scenecore/samples/transformationtests/TransformationTestsActivity.kt
index 30e3b21..72b03d3 100644
--- a/xr/scenecore/integration-tests/transformationtests/src/main/kotlin/androidx/xr/scenecore/samples/transformationtests/TransformationTestsActivity.kt
+++ b/xr/scenecore/integration-tests/transformationtests/src/main/kotlin/androidx/xr/scenecore/samples/transformationtests/TransformationTestsActivity.kt
@@ -30,11 +30,9 @@
 import androidx.xr.scenecore.GltfModel
 import androidx.xr.scenecore.GltfModelEntity
 import androidx.xr.scenecore.MovableComponent
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.PlaneSemantic
 import androidx.xr.scenecore.PlaneType
 import androidx.xr.scenecore.Session
-import androidx.xr.scenecore.Space
 import androidx.xr.scenecore.samples.commontestview.DebugTextLinearView
 import androidx.xr.scenecore.samples.commontestview.DebugTextPanel
 import com.google.errorprone.annotations.CanIgnoreReturnValue
@@ -199,10 +197,10 @@
                 session,
                 trackedEntity,
                 name = name,
-                pixelDimensions =
-                    PixelDimensions(
-                        (labelDimensions.width * trackedEntity.getScale(Space.REAL_WORLD)).toInt(),
-                        (labelDimensions.height * trackedEntity.getScale(Space.REAL_WORLD)).toInt(),
+                surfaceDimensionsPx =
+                    Dimensions(
+                        labelDimensions.width * trackedEntity.getWorldSpaceScale(),
+                        labelDimensions.height * trackedEntity.getWorldSpaceScale(),
                     ),
             )
         return debugPanel
diff --git a/xr/scenecore/integration-tests/visibilitytest/build.gradle b/xr/scenecore/integration-tests/visibilitytest/build.gradle
index a2f72c8..8277108 100644
--- a/xr/scenecore/integration-tests/visibilitytest/build.gradle
+++ b/xr/scenecore/integration-tests/visibilitytest/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.ApkCopyHelperKt
 import androidx.build.KotlinTarget
 import androidx.build.SoftwareType
@@ -72,8 +71,6 @@
     implementation("androidx.core:core:1.9.0")
     implementation("androidx.lifecycle:lifecycle-common:2.8.7")
     implementation("com.google.errorprone:error_prone_annotations:2.30.0")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
 }
 
 // Making this APK available via Android Build so the QA team can
diff --git a/xr/scenecore/integration-tests/visibilitytest/src/main/kotlin/androidx/xr/scenecore/samples/visibilitytest/VisibilityTestActivity.kt b/xr/scenecore/integration-tests/visibilitytest/src/main/kotlin/androidx/xr/scenecore/samples/visibilitytest/VisibilityTestActivity.kt
index b7a1094..1689fbb 100644
--- a/xr/scenecore/integration-tests/visibilitytest/src/main/kotlin/androidx/xr/scenecore/samples/visibilitytest/VisibilityTestActivity.kt
+++ b/xr/scenecore/integration-tests/visibilitytest/src/main/kotlin/androidx/xr/scenecore/samples/visibilitytest/VisibilityTestActivity.kt
@@ -26,12 +26,12 @@
 import androidx.appcompat.app.AppCompatActivity
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
+import androidx.xr.scenecore.Dimensions
 import androidx.xr.scenecore.Entity
 import androidx.xr.scenecore.GltfModel
 import androidx.xr.scenecore.GltfModelEntity
 import androidx.xr.scenecore.MovableComponent
 import androidx.xr.scenecore.PanelEntity
-import androidx.xr.scenecore.PixelDimensions
 import androidx.xr.scenecore.Session
 
 class VisibilityTestActivity : AppCompatActivity() {
@@ -155,7 +155,8 @@
             PanelEntity.create(
                 session,
                 panelContentView,
-                PixelDimensions(640, 480),
+                Dimensions(640f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 name,
                 Pose(Vector3(-0.5f, -0.1f, 0f)),
             )
diff --git a/xr/scenecore/scenecore-testing/api/restricted_current.txt b/xr/scenecore/scenecore-testing/api/restricted_current.txt
index 59ad0b9e..eb9484e 100644
--- a/xr/scenecore/scenecore-testing/api/restricted_current.txt
+++ b/xr/scenecore/scenecore-testing/api/restricted_current.txt
@@ -5,18 +5,15 @@
     ctor public FakeImpressApi();
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> animateGltfModel(int, String?, boolean);
     method public com.google.ar.imp.apibindings.Texture borrowReflectionTexture();
-    method public void clearPreferredEnvironmentIblAsset();
     method public int createImpressNode();
     method public int createStereoSurface(@com.google.ar.imp.apibindings.ImpressApi.StereoMode int);
     method public com.google.common.util.concurrent.ListenableFuture<com.google.ar.imp.apibindings.WaterMaterial!> createWaterMaterial(boolean);
     method public void destroyImpressNode(int);
     method public void destroyNativeObject(long);
-    method public long getCurrentEnvironmentLight();
     method public int getImpressNodeParent(int);
     method public java.util.Map<androidx.xr.scenecore.testing.FakeImpressApi.GltfNodeData!,androidx.xr.scenecore.testing.FakeImpressApi.GltfNodeData!> getImpressNodes();
     method public java.util.List<java.lang.Integer!> getImpressNodesForToken(long);
     method public java.util.Map<java.lang.Long!,androidx.xr.scenecore.testing.FakeImpressApi.MaterialData!> getMaterials();
-    method public com.google.ar.imp.apibindings.Texture getReflectionTextureFromIbl(long);
     method public java.util.Map<java.lang.Integer!,androidx.xr.scenecore.testing.FakeImpressApi.StereoSurfaceEntityData!> getStereoSurfaceEntities();
     method public android.view.Surface getSurfaceFromStereoSurface(int);
     method public java.util.Map<java.lang.Long!,com.google.ar.imp.apibindings.Texture!> getTextureImages();
@@ -25,28 +22,20 @@
     method public int impressNodeLoopAnimatingSize();
     method public int instanceGltfModel(long);
     method public int instanceGltfModel(long, boolean);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> loadGltfModel(byte[], String);
     method public com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> loadGltfModel(String);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> loadImageBasedLightingAsset(byte[], String);
-    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> loadImageBasedLightingAsset(String);
     method public com.google.common.util.concurrent.ListenableFuture<com.google.ar.imp.apibindings.Texture!> loadTexture(String, com.google.ar.imp.apibindings.TextureSampler);
     method public void onPause();
     method public void onResume();
     method public void releaseGltfModel(long);
-    method public void releaseImageBasedLightingAsset(long);
-    method public void setAlphaMapOnWaterMaterial(long, long);
     method public void setAlphaStepMultiplierOnWaterMaterial(long, float);
     method public void setAlphaStepUOnWaterMaterial(long, float, float, float, float);
     method public void setAlphaStepVOnWaterMaterial(long, float, float, float, float);
     method public void setGltfModelColliderEnabled(int, boolean);
     method public void setImpressNodeParent(int, int);
     method public void setMaterialOverride(int, long, String);
-    method public void setNormalBoundaryOnWaterMaterial(long, float);
     method public void setNormalMapOnWaterMaterial(long, long);
     method public void setNormalSpeedOnWaterMaterial(long, float);
     method public void setNormalTilingOnWaterMaterial(long, float);
-    method public void setNormalZOnWaterMaterial(long, float);
-    method public void setPreferredEnvironmentLight(long);
     method public void setReflectionCubeOnWaterMaterial(long, long);
     method public void setStereoModeForStereoSurface(int, @com.google.ar.imp.apibindings.ImpressApi.StereoMode int);
     method public void setStereoSurfaceEntityCanvasShapeHemisphere(int, float);
@@ -75,7 +64,6 @@
   public enum FakeImpressApi.MaterialData.Type {
     enum_constant public static final androidx.xr.scenecore.testing.FakeImpressApi.MaterialData.Type GENERIC;
     enum_constant public static final androidx.xr.scenecore.testing.FakeImpressApi.MaterialData.Type WATER;
-    enum_constant public static final androidx.xr.scenecore.testing.FakeImpressApi.MaterialData.Type WATER_ALPHA;
   }
 
   public static class FakeImpressApi.StereoSurfaceEntityData {
@@ -138,8 +126,8 @@
     method public androidx.xr.scenecore.testing.FakeXrExtensions.FakeActivityPanel getActivityPanelForHost(android.app.Activity);
     method public int getApiVersion();
     method public androidx.xr.extensions.Config getConfig();
-    method public androidx.xr.extensions.node.Node? getFakeEnvironmentNode();
-    method public androidx.xr.extensions.node.Node? getFakeNodeForMainWindow();
+    method public androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode? getFakeEnvironmentNode();
+    method public androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode? getFakeNodeForMainWindow();
     method public androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode? getFakeTaskNode();
     method public int getMainWindowHeight();
     method public int getMainWindowWidth();
@@ -168,8 +156,8 @@
     method @Deprecated public androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode testGetNodeWithEnvironmentToken(androidx.xr.extensions.asset.EnvironmentToken);
     method @Deprecated public androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode testGetNodeWithGltfToken(androidx.xr.extensions.asset.GltfModelToken);
     field public final java.util.Map<android.app.Activity!,androidx.xr.scenecore.testing.FakeXrExtensions.FakeActivityPanel!> activityPanelMap;
-    field public final java.util.List<androidx.xr.extensions.asset.EnvironmentToken!> createdEnvironmentTokens;
-    field public final java.util.List<com.android.extensions.xr.asset.FakeGltfModelToken!> createdGltfModelTokens;
+    field public final java.util.List<androidx.xr.scenecore.testing.FakeXrExtensions.FakeEnvironmentToken!> createdEnvironmentTokens;
+    field public final java.util.List<androidx.xr.scenecore.testing.FakeXrExtensions.FakeGltfModelToken!> createdGltfModelTokens;
     field public final java.util.List<androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode!> createdNodes;
     field public final androidx.xr.scenecore.testing.FakeXrExtensions.FakeSpatialAudioExtensions fakeSpatialAudioExtensions;
     field public final androidx.xr.scenecore.testing.FakeXrExtensions.FakeSpatialState fakeSpatialState;
@@ -203,10 +191,56 @@
     method public boolean isClosed();
   }
 
+  public static class FakeXrExtensions.FakeConfig implements androidx.xr.extensions.Config {
+    ctor public FakeXrExtensions.FakeConfig();
+    method public float defaultPixelsPerMeter(float);
+    field public static final float DEFAULT_PIXELS_PER_METER = 1.0f;
+  }
+
+  public static class FakeXrExtensions.FakeEnvironmentToken implements androidx.xr.extensions.asset.EnvironmentToken {
+    ctor public FakeXrExtensions.FakeEnvironmentToken(String);
+    method public String getUrl();
+  }
+
   public static class FakeXrExtensions.FakeEnvironmentVisibilityState implements androidx.xr.extensions.environment.EnvironmentVisibilityState {
     ctor public FakeXrExtensions.FakeEnvironmentVisibilityState(@androidx.xr.extensions.environment.EnvironmentVisibilityState.State int);
   }
 
+  public static class FakeXrExtensions.FakeGltfModelToken implements androidx.xr.extensions.asset.GltfModelToken {
+    ctor public FakeXrExtensions.FakeGltfModelToken(String);
+    method public String getUrl();
+  }
+
+  public static class FakeXrExtensions.FakeInputEvent implements androidx.xr.extensions.node.InputEvent {
+    ctor public FakeXrExtensions.FakeInputEvent();
+    method public int getAction();
+    method public androidx.xr.extensions.node.Vec3 getDirection();
+    method public int getDispatchFlags();
+    method public androidx.xr.extensions.node.InputEvent.HitInfo? getHitInfo();
+    method public androidx.xr.extensions.node.Vec3 getOrigin();
+    method public int getPointerType();
+    method public androidx.xr.extensions.node.InputEvent.HitInfo? getSecondaryHitInfo();
+    method public int getSource();
+    method public long getTimestamp();
+    method public void setDirection(androidx.xr.extensions.node.Vec3);
+    method public void setDispatchFlags(int);
+    method public void setFakeHitInfo(androidx.xr.scenecore.testing.FakeXrExtensions.FakeInputEvent.FakeHitInfo);
+    method public void setOrigin(androidx.xr.extensions.node.Vec3);
+    method public void setTimestamp(long);
+  }
+
+  public static class FakeXrExtensions.FakeInputEvent.FakeHitInfo implements androidx.xr.extensions.node.InputEvent.HitInfo {
+    ctor public FakeXrExtensions.FakeInputEvent.FakeHitInfo();
+    method public androidx.xr.extensions.node.Vec3? getHitPosition();
+    method public androidx.xr.extensions.node.Node getInputNode();
+    method public int getSubspaceImpressNodeId();
+    method public androidx.xr.extensions.node.Mat4f getTransform();
+    method public void setHitPosition(androidx.xr.extensions.node.Vec3?);
+    method public void setInputNode(androidx.xr.extensions.node.Node);
+    method public void setSubspaceImpressNodeId(int);
+    method public void setTransform(androidx.xr.extensions.node.Mat4f);
+  }
+
   public static class FakeXrExtensions.FakeMediaPlayerExtensions implements androidx.xr.extensions.media.MediaPlayerExtensions {
     ctor public FakeXrExtensions.FakeMediaPlayerExtensions();
     method public androidx.xr.extensions.media.PointSourceAttributes? getPointSourceAttributes();
@@ -214,8 +248,6 @@
   }
 
   public static final class FakeXrExtensions.FakeNode implements androidx.xr.extensions.node.Node {
-    ctor public FakeXrExtensions.FakeNode(androidx.xr.extensions.node.Node);
-    ctor public FakeXrExtensions.FakeNode(com.android.extensions.xr.node.Node);
     method public int describeContents();
     method public float getAlpha();
     method public android.os.IBinder? getAnchorId();
@@ -223,14 +255,14 @@
     method @Deprecated public androidx.xr.extensions.asset.EnvironmentToken? getEnvironment();
     method public java.util.concurrent.Executor? getExecutor();
     method @Deprecated public androidx.xr.extensions.asset.GltfModelToken? getGltfModel();
-    method public com.android.extensions.xr.function.Consumer<com.android.extensions.xr.node.InputEvent!>? getListener();
+    method public androidx.xr.extensions.Consumer<androidx.xr.extensions.node.InputEvent!>? getListener();
     method public String? getName();
-    method public androidx.xr.extensions.node.Node? getParent();
+    method public androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode? getParent();
     method public androidx.xr.extensions.Consumer<java.lang.Integer!>? getPointerCaptureStateCallback();
     method public androidx.xr.extensions.node.ReformOptions? getReformOptions();
-    method public android.view.SurfaceControl? getSurfaceControl();
+    method public android.view.SurfaceControlViewHost.SurfacePackage? getSurfacePackage();
     method public java.util.concurrent.Executor? getTransformExecutor();
-    method public com.android.extensions.xr.function.Consumer<com.android.extensions.xr.node.NodeTransform!>? getTransformListener();
+    method public androidx.xr.extensions.Consumer<androidx.xr.extensions.node.NodeTransform!>? getTransformListener();
     method public float getWOrientation();
     method public float getXOrientation();
     method public float getXPosition();
@@ -241,22 +273,68 @@
     method public boolean isVisible();
     method public void listenForInput(androidx.xr.extensions.Consumer<androidx.xr.extensions.node.InputEvent!>, java.util.concurrent.Executor);
     method public void requestPointerCapture(androidx.xr.extensions.Consumer<java.lang.Integer!>, java.util.concurrent.Executor);
-    method public void sendInputEvent(com.android.extensions.xr.node.InputEvent);
-    method public void sendTransformEvent(com.android.extensions.xr.node.NodeTransform);
+    method public void sendInputEvent(androidx.xr.extensions.node.InputEvent);
+    method public void sendTransformEvent(androidx.xr.scenecore.testing.FakeXrExtensions.FakeNodeTransform);
     method public void setNonPointerFocusTarget(android.view.AttachedSurfaceControl);
     method public void stopListeningForInput();
     method public void stopPointerCapture();
     method public java.io.Closeable subscribeToTransform(androidx.xr.extensions.Consumer<androidx.xr.extensions.node.NodeTransform!>, java.util.concurrent.Executor);
     method public void writeToParcel(android.os.Parcel, int);
-    field public final androidx.xr.extensions.node.Node! node;
-    field public final com.android.extensions.xr.node.Node! realNode;
-    field public final com.android.extensions.xr.node.ShadowNode! shadowNode;
+  }
+
+  public static class FakeXrExtensions.FakeNodeTransaction implements androidx.xr.extensions.node.NodeTransaction {
+  }
+
+  public static class FakeXrExtensions.FakeNodeTransform implements androidx.xr.extensions.node.NodeTransform {
+    ctor public FakeXrExtensions.FakeNodeTransform(androidx.xr.extensions.node.Mat4f);
+    method public long getTimestamp();
+    method public androidx.xr.extensions.node.Mat4f getTransform();
   }
 
   public static class FakeXrExtensions.FakePassthroughVisibilityState implements androidx.xr.extensions.environment.PassthroughVisibilityState {
     ctor public FakeXrExtensions.FakePassthroughVisibilityState(@androidx.xr.extensions.environment.PassthroughVisibilityState.State int, float);
   }
 
+  public static class FakeXrExtensions.FakeReformEvent implements androidx.xr.extensions.node.ReformEvent {
+    ctor public FakeXrExtensions.FakeReformEvent();
+    method public androidx.xr.extensions.node.Vec3 getCurrentRayDirection();
+    method public androidx.xr.extensions.node.Vec3 getCurrentRayOrigin();
+    method public int getId();
+    method public androidx.xr.extensions.node.Vec3 getInitialRayDirection();
+    method public androidx.xr.extensions.node.Vec3 getInitialRayOrigin();
+    method public androidx.xr.extensions.node.Quatf getProposedOrientation();
+    method public androidx.xr.extensions.node.Vec3 getProposedPosition();
+    method public androidx.xr.extensions.node.Vec3 getProposedScale();
+    method public androidx.xr.extensions.node.Vec3 getProposedSize();
+    method public int getState();
+    method public int getType();
+    method public void setProposedOrientation(androidx.xr.extensions.node.Quatf);
+    method public void setProposedPosition(androidx.xr.extensions.node.Vec3);
+    method public void setProposedScale(androidx.xr.extensions.node.Vec3);
+    method public void setProposedSize(androidx.xr.extensions.node.Vec3);
+    method public void setState(int);
+    method public void setType(int);
+  }
+
+  public static class FakeXrExtensions.FakeReformOptions implements androidx.xr.extensions.node.ReformOptions {
+    method public androidx.xr.extensions.node.Vec3 getCurrentSize();
+    method public int getEnabledReform();
+    method public androidx.xr.extensions.Consumer<androidx.xr.extensions.node.ReformEvent!> getEventCallback();
+    method public java.util.concurrent.Executor getEventExecutor();
+    method public float getFixedAspectRatio();
+    method public int getFlags();
+    method public androidx.xr.extensions.node.Vec3 getMaximumSize();
+    method public androidx.xr.extensions.node.Vec3 getMinimumSize();
+    method public androidx.xr.extensions.node.ReformOptions setCurrentSize(androidx.xr.extensions.node.Vec3);
+    method public androidx.xr.extensions.node.ReformOptions setEnabledReform(int);
+    method public androidx.xr.extensions.node.ReformOptions setEventCallback(androidx.xr.extensions.Consumer<androidx.xr.extensions.node.ReformEvent!>);
+    method public androidx.xr.extensions.node.ReformOptions setEventExecutor(java.util.concurrent.Executor);
+    method public androidx.xr.extensions.node.ReformOptions setFixedAspectRatio(float);
+    method public androidx.xr.extensions.node.ReformOptions setFlags(int);
+    method public androidx.xr.extensions.node.ReformOptions setMaximumSize(androidx.xr.extensions.node.Vec3);
+    method public androidx.xr.extensions.node.ReformOptions setMinimumSize(androidx.xr.extensions.node.Vec3);
+  }
+
   public static class FakeXrExtensions.FakeSoundPoolExtensions implements androidx.xr.extensions.media.SoundPoolExtensions {
     ctor public FakeXrExtensions.FakeSoundPoolExtensions();
     method public void setPlayAsPointSourceResult(int);
diff --git a/xr/scenecore/scenecore-testing/build.gradle b/xr/scenecore/scenecore-testing/build.gradle
index 665bf5a..92ebe1e 100644
--- a/xr/scenecore/scenecore-testing/build.gradle
+++ b/xr/scenecore/scenecore-testing/build.gradle
@@ -22,7 +22,6 @@
  * modifying its settings.
  */
 
-import androidx.build.AndroidXConfig
 import androidx.build.KotlinTarget
 import androidx.build.SoftwareType
 
@@ -38,9 +37,6 @@
     implementation("androidx.annotation:annotation:1.8.1")
     implementation("androidx.concurrent:concurrent-futures:1.0.0")
     implementation("com.google.ar:impress:0.0.3")
-
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-    implementation(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.host.test.jar")))
 }
 
 android {
diff --git a/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeImpressApi.java b/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeImpressApi.java
index cb52d05..3ec4e74 100644
--- a/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeImpressApi.java
+++ b/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeImpressApi.java
@@ -16,7 +16,6 @@
 
 package androidx.xr.scenecore.testing;
 
-import android.content.res.Resources.NotFoundException;
 import android.graphics.SurfaceTexture;
 import android.view.Surface;
 
@@ -115,8 +114,7 @@
         /** Enum representing the different built-in material types that can be created. */
         public enum Type {
             GENERIC,
-            WATER,
-            WATER_ALPHA
+            WATER
         }
 
         @NonNull public Type type;
@@ -142,12 +140,8 @@
         }
     }
 
-    // Vector of image based lighting asset tokens.
-    private final List<Long> mImageBasedLightingAssets = new ArrayList<>();
-
     // Map of model tokens to the list of impress nodes that are instances of that model.
     private final Map<Long, List<Integer>> mGltfModels = new HashMap<>();
-
     // Map of impress nodes to their parent impress nodes.
     private final Map<GltfNodeData, GltfNodeData> mImpressNodes = new HashMap<>();
 
@@ -166,12 +160,10 @@
     // Map of material tokens to their associated MaterialData object
     public final Map<Long, MaterialData> mMaterials = new HashMap<>();
 
-    private int mNextImageBasedLightingAssetId = 1;
     private int mNextModelId = 1;
     private int mNextNodeId = 1;
     private long mNextTextureId = 1;
     private long mNextMaterialId = 1;
-    private long mCurrentEnvironmentLightId = -1;
 
     @NonNull
     public Map<Integer, StereoSurfaceEntityData> getStereoSurfaceEntities() {
@@ -188,57 +180,9 @@
     public void onPause() {}
 
     @Override
-    public void releaseImageBasedLightingAsset(long iblToken) {
-        if (!mImageBasedLightingAssets.contains(iblToken)) {
-            throw new NotFoundException("Image based lighting asset token not found");
-        }
-        mImageBasedLightingAssets.remove(iblToken);
-    }
-
-    @Override
     @NonNull
     @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
-    public ListenableFuture<Long> loadImageBasedLightingAsset(@NonNull String path) {
-        long imageBasedLightingAssetToken = mNextImageBasedLightingAssetId++;
-        mImageBasedLightingAssets.add(imageBasedLightingAssetToken);
-        // TODO(b/352827267): Enforce minSDK API strategy - go/androidx-api-guidelines#compat-newapi
-        ResolvableFuture<Long> ret = ResolvableFuture.create();
-        ret.set(imageBasedLightingAssetToken);
-
-        return ret;
-    }
-
-    @Override
-    @NonNull
-    @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
-    public ListenableFuture<Long> loadImageBasedLightingAsset(
-            @NonNull byte[] data, @NonNull String key) {
-        long imageBasedLightingAssetToken = mNextImageBasedLightingAssetId++;
-        mImageBasedLightingAssets.add(imageBasedLightingAssetToken);
-        // TODO(b/352827267): Enforce minSDK API strategy - go/androidx-api-guidelines#compat-newapi
-        ResolvableFuture<Long> ret = ResolvableFuture.create();
-        ret.set(imageBasedLightingAssetToken);
-
-        return ret;
-    }
-
-    @Override
-    @NonNull
-    @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
-    public ListenableFuture<Long> loadGltfModel(@NonNull String path) {
-        long modelToken = mNextModelId++;
-        mGltfModels.put(modelToken, new ArrayList<>());
-        // TODO(b/352827267): Enforce minSDK API strategy - go/androidx-api-guidelines#compat-newapi
-        ResolvableFuture<Long> ret = ResolvableFuture.create();
-        ret.set(modelToken);
-
-        return ret;
-    }
-
-    @Override
-    @NonNull
-    @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
-    public ListenableFuture<Long> loadGltfModel(@NonNull byte[] data, @NonNull String key) {
+    public ListenableFuture<Long> loadGltfModel(@NonNull String name) {
         long modelToken = mNextModelId++;
         mGltfModels.put(modelToken, new ArrayList<>());
         // TODO(b/352827267): Enforce minSDK API strategy - go/androidx-api-guidelines#compat-newapi
@@ -251,7 +195,7 @@
     @Override
     public void releaseGltfModel(long modelToken) {
         if (!mGltfModels.containsKey(modelToken)) {
-            throw new NotFoundException("Model token not found");
+            throw new IllegalArgumentException("Model token not found");
         }
         mGltfModels.remove(modelToken);
     }
@@ -499,19 +443,9 @@
     }
 
     @Override
-    @NonNull
-    public Texture getReflectionTextureFromIbl(long iblToken) {
-        long textureImageToken = mNextTextureId++;
-        return new Texture.Builder()
-                .setNativeTexture(textureImageToken)
-                .setTextureSampler(new TextureSampler.Builder().build())
-                .build();
-    }
-
-    @Override
     @SuppressWarnings("RestrictTo")
     @NonNull
-    public ListenableFuture<WaterMaterial> createWaterMaterial(boolean isAlphaMapVersion) {
+    public ListenableFuture<WaterMaterial> createWaterMaterial(boolean transparent) {
         long materialToken = mNextMaterialId++;
         WaterMaterial material =
                 new WaterMaterial.Builder()
@@ -545,35 +479,20 @@
     }
 
     @Override
-    public void setAlphaStepMultiplierOnWaterMaterial(
-            long nativeMaterial, float alphaStepMultiplier) {
-        throw new IllegalArgumentException("not implemented");
-    }
-
-    @Override
-    public void setAlphaMapOnWaterMaterial(long nativeWaterMaterial, long alphaMap) {
-        throw new IllegalArgumentException("not implemented");
-    }
-
-    @Override
-    public void setNormalZOnWaterMaterial(long nativeWaterMaterial, float normalZ) {
-        throw new IllegalArgumentException("not implemented");
-    }
-
-    @Override
-    public void setNormalBoundaryOnWaterMaterial(long nativeWaterMaterial, float normalBoundary) {
-        throw new IllegalArgumentException("not implemented");
-    }
-
-    @Override
     public void setAlphaStepUOnWaterMaterial(
-            long nativeWaterMaterial, float x, float y, float z, float w) {
+            long nativeMaterial, float x, float y, float z, float w) {
         throw new IllegalArgumentException("not implemented");
     }
 
     @Override
     public void setAlphaStepVOnWaterMaterial(
-            long nativeWaterMaterial, float x, float y, float z, float w) {
+            long nativeMaterial, float x, float y, float z, float w) {
+        throw new IllegalArgumentException("not implemented");
+    }
+
+    @Override
+    public void setAlphaStepMultiplierOnWaterMaterial(
+            long nativeMaterial, float alphaStepMultiplier) {
         throw new IllegalArgumentException("not implemented");
     }
 
@@ -597,16 +516,6 @@
         gltfNodeData.setMaterialOverride(mMaterials.get(nativeMaterial));
     }
 
-    @Override
-    public void setPreferredEnvironmentLight(long iblToken) {
-        mCurrentEnvironmentLightId = iblToken;
-    }
-
-    @Override
-    public void clearPreferredEnvironmentIblAsset() {
-        mCurrentEnvironmentLightId = -1;
-    }
-
     /** Returns the map of texture image tokens to their associated Texture object. */
     @NonNull
     public Map<Long, Texture> getTextureImages() {
@@ -625,11 +534,6 @@
         return mImpressNodes;
     }
 
-    /** Returns the current environment light token. */
-    public long getCurrentEnvironmentLight() {
-        return mCurrentEnvironmentLightId;
-    }
-
     @Nullable
     private GltfNodeData getGltfNodeData(int impressNode) {
         for (Map.Entry<GltfNodeData, GltfNodeData> pair : mImpressNodes.entrySet()) {
diff --git a/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeXrExtensions.java b/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeXrExtensions.java
index 8e18339..a07e96a 100644
--- a/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeXrExtensions.java
+++ b/xr/scenecore/scenecore-testing/src/main/java/androidx/xr/scenecore/testing/FakeXrExtensions.java
@@ -16,8 +16,6 @@
 
 package androidx.xr.scenecore.testing;
 
-import static java.util.Objects.requireNonNull;
-
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.content.Intent;
@@ -29,7 +27,7 @@
 import android.os.IBinder;
 import android.os.Parcel;
 import android.view.AttachedSurfaceControl;
-import android.view.SurfaceControl;
+import android.view.SurfaceControlViewHost;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -40,8 +38,6 @@
 import androidx.xr.extensions.Consumer;
 import androidx.xr.extensions.XrExtensionResult;
 import androidx.xr.extensions.XrExtensions;
-import androidx.xr.extensions.XrExtensionsProvider;
-import androidx.xr.extensions.asset.TokenConverter;
 import androidx.xr.extensions.environment.EnvironmentVisibilityState;
 import androidx.xr.extensions.environment.PassthroughVisibilityState;
 import androidx.xr.extensions.media.AudioTrackExtensions;
@@ -52,13 +48,15 @@
 import androidx.xr.extensions.media.SpatializerExtensions;
 import androidx.xr.extensions.media.XrSpatialAudioExtensions;
 import androidx.xr.extensions.node.InputEvent;
+import androidx.xr.extensions.node.Mat4f;
 import androidx.xr.extensions.node.Node;
 import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.extensions.node.NodeTransform;
-import androidx.xr.extensions.node.NodeTypeConverter;
+import androidx.xr.extensions.node.Quatf;
 import androidx.xr.extensions.node.ReformEvent;
 import androidx.xr.extensions.node.ReformOptions;
 import androidx.xr.extensions.node.Vec3;
+import androidx.xr.extensions.passthrough.PassthroughState;
 import androidx.xr.extensions.space.ActivityPanel;
 import androidx.xr.extensions.space.ActivityPanelLaunchParameters;
 import androidx.xr.extensions.space.Bounds;
@@ -68,10 +66,6 @@
 import androidx.xr.extensions.splitengine.SplitEngineBridge;
 import androidx.xr.extensions.subspace.Subspace;
 
-import com.android.extensions.xr.asset.FakeGltfModelToken;
-import com.android.extensions.xr.node.NodeRepository;
-import com.android.extensions.xr.node.ShadowNode;
-
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
 
 import java.io.Closeable;
@@ -96,31 +90,17 @@
             "This function is not implemented yet in FakeXrExtensions.  Please add an"
                     + " implementation if support is desired for testing.";
 
-    // Because there are many tests which are written to use the FakeXrExtensions (and associated
-    // classes) interface to minimize the scope of changes FakeXrExtensions will defer to
-    // XrExtensionsProvider which when used in a host test will use the fake implementation of the
-    // com.android.extensions.xr classes. FakeXrExtensions is thus a thin androidx.xr.extensions
-    // wrapper around the com.android.extensions.xr fake classes. Once all tests are migrated to use
-    // the com.android.extensions.xr types this fake can be removed.
-    // TODO: b/399893709 - Remove FakeXrExtensions once tests are migrated to use the real
-    // XrExtensionsProvider.
-    @NonNull private final XrExtensions extensions = XrExtensionsProvider.getXrExtensions();
-
-    @NonNull private final NodeRepository mNodeRepository = NodeRepository.getInstance();
-
     @NonNull public final List<FakeNode> createdNodes = new ArrayList<>();
 
     @NonNull public final List<FakeGltfModelToken> createdGltfModelTokens = new ArrayList<>();
 
-    @NonNull
-    public final List<androidx.xr.extensions.asset.EnvironmentToken> createdEnvironmentTokens =
-            new ArrayList<>();
+    @NonNull public final List<FakeEnvironmentToken> createdEnvironmentTokens = new ArrayList<>();
 
     @NonNull public final Map<Activity, FakeActivityPanel> activityPanelMap = new HashMap<>();
 
     FakeNode mFakeTaskNode = null;
-    Node mEnvironmentNode = null;
-    Node mNodeForMainWindow = null;
+    FakeNode mFakeEnvironmentNode = null;
+    FakeNode mFakeNodeForMainWindow = null;
 
     // TODO: b/370033054 - fakeSpatialState should be updated according to some fake extensions
     // calls
@@ -138,39 +118,40 @@
 
     float mPreferredAspectRatioHsm = 0.0f;
     int mOpenXrWorldSpaceType = 0;
-    NodeTransaction mLastFakeNodeTransaction = null;
+    FakeNodeTransaction mLastFakeNodeTransaction = null;
 
     @NonNull
     public final FakeSpatialAudioExtensions fakeSpatialAudioExtensions =
             new FakeSpatialAudioExtensions();
 
     @Nullable
-    public Node getFakeEnvironmentNode() {
-        return mEnvironmentNode;
+    public FakeNode getFakeEnvironmentNode() {
+        return mFakeEnvironmentNode;
     }
 
     @Nullable
-    public Node getFakeNodeForMainWindow() {
-        return mNodeForMainWindow;
+    public FakeNode getFakeNodeForMainWindow() {
+        return mFakeNodeForMainWindow;
     }
 
     @Override
     public int getApiVersion() {
-        return extensions.getApiVersion();
+        // The API surface is aligned with the initial XRU release.
+        return 1;
     }
 
     @Override
     @NonNull
     public Node createNode() {
-        Node node = extensions.createNode();
-        createdNodes.add(new FakeNode(node));
+        FakeNode node = new FakeNode();
+        createdNodes.add(node);
         return node;
     }
 
     @Override
     @NonNull
     public NodeTransaction createNodeTransaction() {
-        mLastFakeNodeTransaction = extensions.createNodeTransaction();
+        mLastFakeNodeTransaction = new FakeNodeTransaction();
         return mLastFakeNodeTransaction;
     }
 
@@ -183,7 +164,7 @@
     @Override
     @NonNull
     public Config getConfig() {
-        return extensions.getConfig();
+        return new FakeConfig();
     }
 
     @NonNull
@@ -303,10 +284,11 @@
             @NonNull Node windowNode,
             @NonNull Consumer<XrExtensionResult> callback,
             @NonNull Executor executor) {
-        mFakeTaskNode = new FakeNode(sceneNode);
+        mFakeTaskNode = (FakeNode) sceneNode;
         mFakeTaskNode.mName = "taskNode";
 
-        mNodeForMainWindow = windowNode;
+        mFakeNodeForMainWindow = (FakeNode) windowNode;
+        mFakeNodeForMainWindow.mName = "nodeForMainWindow";
 
         executor.execute(() -> callback.accept(createAsyncResult()));
     }
@@ -317,7 +299,7 @@
             @NonNull Consumer<XrExtensionResult> callback,
             @NonNull Executor executor) {
         mFakeTaskNode = null;
-        mNodeForMainWindow = null;
+        mFakeNodeForMainWindow = null;
 
         executor.execute(() -> callback.accept(createAsyncResult()));
     }
@@ -333,7 +315,8 @@
             @NonNull Node environmentNode,
             @NonNull Consumer<XrExtensionResult> callback,
             @NonNull Executor executor) {
-        mEnvironmentNode = environmentNode;
+        mFakeEnvironmentNode = (FakeNode) environmentNode;
+        mFakeEnvironmentNode.mName = "environmentNode";
 
         executor.execute(() -> callback.accept(createAsyncResult()));
     }
@@ -343,7 +326,7 @@
             @NonNull Activity activity,
             @NonNull Consumer<XrExtensionResult> callback,
             @NonNull Executor executor) {
-        mEnvironmentNode = null;
+        mFakeEnvironmentNode = null;
 
         executor.execute(() -> callback.accept(createAsyncResult()));
     }
@@ -365,7 +348,7 @@
                     @Nullable String url) {
         FakeGltfModelToken modelToken = new FakeGltfModelToken(url);
         createdGltfModelTokens.add(modelToken);
-        return CompletableFuture.completedFuture(TokenConverter.toLibrary(modelToken));
+        return CompletableFuture.completedFuture(modelToken);
     }
 
     /**
@@ -377,19 +360,18 @@
     @Override
     @NonNull
     @Deprecated
+    //  public ListenableFuture</* @Nullable */ EnvironmentToken>
+    // loadEnvironment(
     public CompletableFuture</* @Nullable */ androidx.xr.extensions.asset.EnvironmentToken>
             loadEnvironment(
                     @Nullable InputStream asset,
                     int regionSizeBytes,
                     int regionOffsetBytes,
                     @Nullable String url) {
-        CompletableFuture<androidx.xr.extensions.asset.EnvironmentToken> future =
-                extensions.loadEnvironment(asset, regionSizeBytes, regionOffsetBytes, url);
-        return future.thenApply(
-                imageToken -> {
-                    createdEnvironmentTokens.add(imageToken);
-                    return imageToken;
-                });
+        FakeEnvironmentToken imageToken = new FakeEnvironmentToken(url);
+        createdEnvironmentTokens.add(imageToken);
+        //    return immediateFuture(imageToken);
+        return CompletableFuture.completedFuture(imageToken);
     }
 
     /**
@@ -441,13 +423,12 @@
     @Deprecated
     public FakeNode testGetNodeWithGltfToken(
             @NonNull androidx.xr.extensions.asset.GltfModelToken token) {
-        com.android.extensions.xr.node.Node node =
-                mNodeRepository.findNode(
-                        (NodeRepository.NodeMetadata metadata) ->
-                                TokenConverter.toFramework(token)
-                                        .equals(metadata.getGltfModelToken()));
-
-        return (node != null) ? new FakeNode(node) : null;
+        for (FakeNode node : createdNodes) {
+            if (node.mGltfModel != null && node.mGltfModel.equals(token)) {
+                return node;
+            }
+        }
+        return null;
     }
 
     /**
@@ -459,13 +440,12 @@
     @Deprecated
     public FakeNode testGetNodeWithEnvironmentToken(
             @NonNull androidx.xr.extensions.asset.EnvironmentToken token) {
-        com.android.extensions.xr.node.Node node =
-                mNodeRepository.findNode(
-                        (NodeRepository.NodeMetadata metadata) ->
-                                TokenConverter.toFramework(token)
-                                        .equals(metadata.getEnvironmentToken()));
-
-        return (node != null) ? new FakeNode(node) : null;
+        for (FakeNode node : createdNodes) {
+            if (node.mEnvironment != null && node.mEnvironment.equals(token)) {
+                return node;
+            }
+        }
+        return null;
     }
 
     @Override
@@ -487,7 +467,7 @@
     @NonNull
     public ReformOptions createReformOptions(
             @NonNull Consumer<ReformEvent> callback, @NonNull Executor executor) {
-        return extensions.createReformOptions(callback, executor);
+        return new FakeReformOptions(callback, executor);
     }
 
     @Override
@@ -566,6 +546,16 @@
         FULL_SPACE
     }
 
+    /** Fake implementation of Extensions Config. */
+    public static class FakeConfig implements Config {
+        public static final float DEFAULT_PIXELS_PER_METER = 1f;
+
+        @Override
+        public float defaultPixelsPerMeter(float density) {
+            return DEFAULT_PIXELS_PER_METER;
+        }
+    }
+
     /** A fake implementation of Closeable. */
     @SuppressWarnings("NotCloseable")
     public static class FakeCloseable implements Closeable {
@@ -584,106 +574,97 @@
     /** A fake implementation of the XR extensions Node. */
     @SuppressWarnings("ParcelCreator")
     public static final class FakeNode implements Node {
-        /**
-         * A shadow of {@link com.android.extensions.xr.node.Node} which has additional methods for
-         * testing.
-         */
-        public final ShadowNode shadowNode;
-
-        /** The actual node returned from XrExtensions.createNode(). */
-        public final com.android.extensions.xr.node.Node realNode;
-
-        /**
-         * The {@link androidx.xr.extensions.node.Node} wrapper of the {@link realNode}.
-         *
-         * <p>This node is an adapter, it converts a {@link com.android.extensions.xr.node.Node} so
-         * it can be passed into the {@link androidx.xr.extensions} set of APIs.
-         */
-        public final Node node;
-
-        @NonNull private final NodeRepository nodeRepository = NodeRepository.getInstance();
-
+        FakeNode mParent = null;
+        float mXPosition = 0.0f;
+        float mYPosition = 0.0f;
+        float mZPosition = 0.0f;
+        float mXOrientation = 0.0f;
+        float mYOrientation = 0.0f;
+        float mZOrientation = 0.0f;
+        float mWOrientation = 1.0f;
+        float mXScale = 1.0f;
+        float mYScale = 1.0f;
+        float mZScale = 1.0f;
+        float mCornerRadius = 0.0f;
+        boolean mIsVisible = false;
+        float mAlpha = 1.0f;
+        androidx.xr.extensions.asset.GltfModelToken mGltfModel = null;
+        IBinder mAnchorId = null;
         String mName = null;
+        float mPassthroughOpacity = 1.0f;
+        @PassthroughState.Mode int mPassthroughMode = 0;
+        SurfaceControlViewHost.SurfacePackage mSurfacePackage = null;
+        androidx.xr.extensions.asset.EnvironmentToken mEnvironment = null;
+        Consumer<InputEvent> mListener = null;
+        Consumer<NodeTransform> mTransformListener = null;
+        Consumer<Integer> mPointerCaptureStateCallback = null;
 
-        public FakeNode(@NonNull com.android.extensions.xr.node.Node node) {
-            requireNonNull(node);
-            realNode = node;
-            shadowNode = ShadowNode.extract(node);
-            this.node = NodeTypeConverter.toLibrary(node);
-        }
+        Executor mExecutor = null;
+        ReformOptions mReformOptions;
+        Executor mTransformExecutor = null;
 
-        public FakeNode(@NonNull Node node) {
-            requireNonNull(node);
-            realNode = NodeTypeConverter.toFramework(node);
-            shadowNode = ShadowNode.extract(realNode);
-            this.node = node;
-        }
+        private FakeNode() {}
 
         @Override
         public void listenForInput(
                 @NonNull Consumer<InputEvent> listener, @NonNull Executor executor) {
-            node.listenForInput(listener, executor);
+            mListener = listener;
+            mExecutor = executor;
         }
 
         @Override
         public void stopListeningForInput() {
-            node.stopListeningForInput();
+            mListener = null;
+            mExecutor = null;
         }
 
         @Override
-        public void setNonPointerFocusTarget(@NonNull AttachedSurfaceControl focusTarget) {
-            node.setNonPointerFocusTarget(focusTarget);
-        }
+        public void setNonPointerFocusTarget(@NonNull AttachedSurfaceControl focusTarget) {}
 
         @Override
         public void requestPointerCapture(
                 @NonNull Consumer<Integer> stateCallback, @NonNull Executor executor) {
-            node.requestPointerCapture(stateCallback, executor);
+            mPointerCaptureStateCallback = stateCallback;
         }
 
         @Override
         public void stopPointerCapture() {
-            node.stopPointerCapture();
+            mPointerCaptureStateCallback = null;
         }
 
         /**
          * Fires the InputEvent callback with the given event. It is invoked on the executor
          * provided in listenForInput.
          */
-        public void sendInputEvent(@NonNull com.android.extensions.xr.node.InputEvent event) {
-            shadowNode
-                    .getInputExecutor()
-                    .execute(() -> shadowNode.getInputListener().accept(event));
+        public void sendInputEvent(@NonNull InputEvent event) {
+            mExecutor.execute(() -> mListener.accept(event));
         }
 
         /**
          * Fires the nodeTransform callback with the given transform. It is invoked on the executor
          * provided in listenForInput.
          */
-        public void sendTransformEvent(
-                @NonNull com.android.extensions.xr.node.NodeTransform nodeTransform) {
-            shadowNode
-                    .getTransformExecutor()
-                    .execute(() -> shadowNode.getTransformListener().accept(nodeTransform));
+        public void sendTransformEvent(@NonNull FakeNodeTransform nodeTransform) {
+            mTransformExecutor.execute(() -> mTransformListener.accept(nodeTransform));
         }
 
         @Override
         @NonNull
         public Closeable subscribeToTransform(
                 @NonNull Consumer<NodeTransform> transformCallback, @NonNull Executor executor) {
-            return node.subscribeToTransform(transformCallback, executor);
+            mTransformListener = transformCallback;
+            mTransformExecutor = executor;
+            return new FakeCloseable();
         }
 
         @Nullable
-        public com.android.extensions.xr.function.Consumer<
-                        com.android.extensions.xr.node.NodeTransform>
-                getTransformListener() {
-            return shadowNode.getTransformListener();
+        public Consumer<NodeTransform> getTransformListener() {
+            return mTransformListener;
         }
 
         @Nullable
         public Executor getTransformExecutor() {
-            return shadowNode.getTransformExecutor();
+            return mTransformExecutor;
         }
 
         @Override
@@ -695,48 +676,48 @@
         }
 
         @Nullable
-        public Node getParent() {
-            return NodeTypeConverter.toLibrary(nodeRepository.getParent(realNode));
+        public FakeNode getParent() {
+            return mParent;
         }
 
         public float getXPosition() {
-            return nodeRepository.getPosition(realNode).x;
+            return mXPosition;
         }
 
         public float getYPosition() {
-            return nodeRepository.getPosition(realNode).y;
+            return mYPosition;
         }
 
         public float getZPosition() {
-            return nodeRepository.getPosition(realNode).z;
+            return mZPosition;
         }
 
         public float getXOrientation() {
-            return nodeRepository.getOrientation(realNode).x;
+            return mXOrientation;
         }
 
         public float getYOrientation() {
-            return nodeRepository.getOrientation(realNode).y;
+            return mYOrientation;
         }
 
         public float getZOrientation() {
-            return nodeRepository.getOrientation(realNode).z;
+            return mZOrientation;
         }
 
         public float getWOrientation() {
-            return nodeRepository.getOrientation(realNode).w;
+            return mWOrientation;
         }
 
         public float getCornerRadius() {
-            return nodeRepository.getCornerRadius(realNode);
+            return mCornerRadius;
         }
 
         public boolean isVisible() {
-            return nodeRepository.isVisible(realNode);
+            return mIsVisible;
         }
 
         public float getAlpha() {
-            return nodeRepository.getAlpha(realNode);
+            return mAlpha;
         }
 
         /**
@@ -745,22 +726,22 @@
         @Nullable
         @Deprecated
         public androidx.xr.extensions.asset.GltfModelToken getGltfModel() {
-            return TokenConverter.toLibrary(nodeRepository.getGltfModelToken(realNode));
+            return mGltfModel;
         }
 
         @Nullable
         public IBinder getAnchorId() {
-            return nodeRepository.getAnchorId(realNode);
+            return mAnchorId;
         }
 
         @Nullable
         public String getName() {
-            return nodeRepository.getName(realNode);
+            return mName;
         }
 
         @Nullable
-        public SurfaceControl getSurfaceControl() {
-            return nodeRepository.getSurfaceControl(realNode);
+        public SurfaceControlViewHost.SurfacePackage getSurfacePackage() {
+            return mSurfacePackage;
         }
 
         /**
@@ -769,43 +750,261 @@
         @Nullable
         @Deprecated
         public androidx.xr.extensions.asset.EnvironmentToken getEnvironment() {
-            return TokenConverter.toLibrary(nodeRepository.getEnvironmentToken(realNode));
+            return mEnvironment;
         }
 
         @Nullable
-        public com.android.extensions.xr.function.Consumer<
-                        com.android.extensions.xr.node.InputEvent>
-                getListener() {
-            return shadowNode.getInputListener();
+        public Consumer<InputEvent> getListener() {
+            return mListener;
         }
 
         @Nullable
         public Consumer<Integer> getPointerCaptureStateCallback() {
-            com.android.extensions.xr.function.Consumer<Integer> callback =
-                    shadowNode.getPointerCaptureStateCallback();
-
-            if (callback == null) {
-                return null;
-            }
-
-            return callback::accept;
+            return mPointerCaptureStateCallback;
         }
 
         @Nullable
         public Executor getExecutor() {
-            return shadowNode.getInputExecutor();
+            return mExecutor;
         }
 
         @Nullable
         public ReformOptions getReformOptions() {
-            com.android.extensions.xr.node.ReformOptions options =
-                    nodeRepository.getReformOptions(realNode);
+            return mReformOptions;
+        }
+    }
 
-            if (options == null) {
-                return null;
-            }
+    /**
+     * A fake implementation of the XR extensions Node transaction.
+     *
+     * <p>All modifications happen immediately and not when the transaction is applied.
+     */
+    @SuppressWarnings("NotCloseable")
+    public static class FakeNodeTransaction implements NodeTransaction {
+        FakeNode mLastFakeNode = null;
+        boolean mApplied = false;
 
-            return NodeTypeConverter.toLibrary(options);
+        private FakeNodeTransaction() {}
+
+        @Override
+        @NonNull
+        public NodeTransaction setParent(@NonNull Node node, @Nullable Node parent) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mParent = (FakeNode) parent;
+            return this;
+        }
+
+        /**
+         * @deprecated This method is no longer supported.
+         */
+        @Override
+        @NonNull
+        @Deprecated
+        public NodeTransaction setEnvironment(
+                @NonNull Node node, @Nullable androidx.xr.extensions.asset.EnvironmentToken token) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mEnvironment = token;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setPosition(@NonNull Node node, float x, float y, float z) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mXPosition = x;
+            ((FakeNode) node).mYPosition = y;
+            ((FakeNode) node).mZPosition = z;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setOrientation(
+                @NonNull Node node, float x, float y, float z, float w) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mXOrientation = x;
+            ((FakeNode) node).mYOrientation = y;
+            ((FakeNode) node).mZOrientation = z;
+            ((FakeNode) node).mWOrientation = w;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        // TODO(b/354731545): Cover this with an AndroidXREntity test
+        public NodeTransaction setScale(@NonNull Node node, float sx, float sy, float sz) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mXScale = sx;
+            ((FakeNode) node).mYScale = sy;
+            ((FakeNode) node).mZScale = sz;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setVisibility(@NonNull Node node, boolean isVisible) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mIsVisible = isVisible;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setAlpha(@NonNull Node node, float value) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mAlpha = value;
+            return this;
+        }
+
+        /**
+         * @deprecated This method is no longer supported.
+         */
+        @Override
+        @NonNull
+        @Deprecated
+        public NodeTransaction setGltfModel(
+                @NonNull Node node,
+                @NonNull androidx.xr.extensions.asset.GltfModelToken gltfModelToken) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mGltfModel = gltfModelToken;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setName(@NonNull Node node, @NonNull String name) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mName = name;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setPassthroughState(
+                @NonNull Node node,
+                float passthroughOpacity,
+                @PassthroughState.Mode int passthroughMode) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mPassthroughOpacity = passthroughOpacity;
+            ((FakeNode) node).mPassthroughMode = passthroughMode;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setSurfacePackage(
+                @Nullable Node node,
+                @NonNull SurfaceControlViewHost.SurfacePackage surfacePackage) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mSurfacePackage = surfacePackage;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setWindowBounds(
+                @NonNull SurfaceControlViewHost.SurfacePackage surfacePackage,
+                int widthPx,
+                int heightPx) {
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setAnchorId(@NonNull Node node, @Nullable IBinder anchorId) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mAnchorId = anchorId;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction enableReform(@NonNull Node node, @NonNull ReformOptions options) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mReformOptions = options;
+            ((FakeReformOptions) options).mOptionsApplied = true;
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setReformSize(@NonNull Node node, @NonNull Vec3 reformSize) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mReformOptions.setCurrentSize(reformSize);
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction disableReform(@NonNull Node node) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mReformOptions = new FakeReformOptions(null, null);
+            return this;
+        }
+
+        @Override
+        @NonNull
+        public NodeTransaction setCornerRadius(@NonNull Node node, float cornerRadius) {
+            mLastFakeNode = (FakeNode) node;
+            ((FakeNode) node).mCornerRadius = cornerRadius;
+            return this;
+        }
+
+        @Override
+        public void apply() {
+            mApplied = true;
+        }
+
+        @Override
+        public void close() {}
+    }
+
+    /** A fake implementation of the XR extensions NodeTransform. */
+    public static class FakeNodeTransform implements NodeTransform {
+        Mat4f mTransform;
+
+        public FakeNodeTransform(@NonNull Mat4f transform) {
+            mTransform = transform;
+        }
+
+        @Override
+        @NonNull
+        public Mat4f getTransform() {
+            return mTransform;
+        }
+
+        @Override
+        public long getTimestamp() {
+            return 0;
+        }
+    }
+
+    /** A fake implementation of the XR extensions GltfModelToken. */
+    public static class FakeGltfModelToken implements androidx.xr.extensions.asset.GltfModelToken {
+        String mUrl;
+
+        public FakeGltfModelToken(@NonNull String url) {
+            mUrl = url;
+        }
+
+        @NonNull
+        public String getUrl() {
+            return mUrl;
+        }
+    }
+
+    /** A fake implementation of the XR extensions EnvironmentToken. */
+    public static class FakeEnvironmentToken
+            implements androidx.xr.extensions.asset.EnvironmentToken {
+        String mUrl;
+
+        public FakeEnvironmentToken(@NonNull String url) {
+            this.mUrl = url;
+        }
+
+        @NonNull
+        public String getUrl() {
+            return mUrl;
         }
     }
 
@@ -912,6 +1111,396 @@
         }
     }
 
+    /** Fake input event. */
+    public static class FakeInputEvent implements InputEvent {
+        int mSource;
+        int mPointerType;
+        long mTimestamp;
+        Vec3 mOrigin;
+        Vec3 mDirection;
+        FakeHitInfo mHitInfo;
+        FakeHitInfo mSecondaryHitInfo;
+        int mDispatchFlags;
+        int mAction;
+
+        @Override
+        public int getSource() {
+            return mSource;
+        }
+
+        @Override
+        public int getPointerType() {
+            return mPointerType;
+        }
+
+        @Override
+        public long getTimestamp() {
+            return mTimestamp;
+        }
+
+        @Override
+        @NonNull
+        public Vec3 getOrigin() {
+            return mOrigin;
+        }
+
+        @Override
+        @NonNull
+        public Vec3 getDirection() {
+            return mDirection;
+        }
+
+        @Override
+        @Nullable
+        public HitInfo getHitInfo() {
+            return mHitInfo;
+        }
+
+        @Override
+        @Nullable
+        public HitInfo getSecondaryHitInfo() {
+            return mSecondaryHitInfo;
+        }
+
+        @Override
+        public int getDispatchFlags() {
+            return mDispatchFlags;
+        }
+
+        @Override
+        public int getAction() {
+            return mAction;
+        }
+
+        public void setDispatchFlags(int dispatchFlags) {
+            mDispatchFlags = dispatchFlags;
+        }
+
+        public void setOrigin(@NonNull Vec3 origin) {
+            mOrigin = origin;
+        }
+
+        public void setDirection(@NonNull Vec3 direction) {
+            mDirection = direction;
+        }
+
+        public void setFakeHitInfo(@NonNull FakeHitInfo hitInfo) {
+            mHitInfo = hitInfo;
+        }
+
+        public void setTimestamp(long timestamp) {
+            mTimestamp = timestamp;
+        }
+
+        /** Fake hit info. */
+        public static class FakeHitInfo implements InputEvent.HitInfo {
+            int mSubspaceImpressNodeId;
+            Node mInputNode;
+            Vec3 mHitPosition;
+            Mat4f mTransform;
+
+            @Override
+            public int getSubspaceImpressNodeId() {
+                return mSubspaceImpressNodeId;
+            }
+
+            @Override
+            @NonNull
+            public Node getInputNode() {
+                return mInputNode;
+            }
+
+            @Override
+            @Nullable
+            public Vec3 getHitPosition() {
+                return mHitPosition;
+            }
+
+            @Override
+            @NonNull
+            public Mat4f getTransform() {
+                return mTransform;
+            }
+
+            public void setSubspaceImpressNodeId(int subspaceImpressNodeId) {
+                mSubspaceImpressNodeId = subspaceImpressNodeId;
+            }
+
+            public void setInputNode(@NonNull Node inputNode) {
+                mInputNode = inputNode;
+            }
+
+            public void setHitPosition(@Nullable Vec3 hitPosition) {
+                mHitPosition = hitPosition;
+            }
+
+            public void setTransform(@NonNull Mat4f transform) {
+                mTransform = transform;
+            }
+        }
+    }
+
+    /** Fake ReformOptions. */
+    public static class FakeReformOptions implements ReformOptions {
+
+        int mEnabledReforms;
+        int mReformFlags;
+        int mScaleWithDistanceMode = SCALE_WITH_DISTANCE_MODE_DEFAULT;
+        Vec3 mCurrentSize;
+        Vec3 mMinimumSize;
+        Vec3 mMaximumSize;
+        float mFixedAspectRatio;
+        boolean mForceShowResizeOverlay;
+        Consumer<ReformEvent> mConsumer;
+        Executor mExecutor;
+
+        boolean mOptionsApplied = true;
+
+        FakeReformOptions(Consumer<ReformEvent> consumer, Executor executor) {
+            this.mConsumer = consumer;
+            this.mExecutor = executor;
+        }
+
+        @Override
+        public int getEnabledReform() {
+            return mEnabledReforms;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setEnabledReform(int i) {
+            mEnabledReforms = i;
+            return this;
+        }
+
+        @Override
+        public int getFlags() {
+            return mReformFlags;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setFlags(int i) {
+            mOptionsApplied = false;
+            mReformFlags = i;
+            return this;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getCurrentSize() {
+            return mCurrentSize;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setCurrentSize(@NonNull Vec3 vec3) {
+            mOptionsApplied = false;
+            mCurrentSize = vec3;
+            return this;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getMinimumSize() {
+            return mMinimumSize;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setMinimumSize(@NonNull Vec3 vec3) {
+            mOptionsApplied = false;
+            mMinimumSize = vec3;
+            return this;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getMaximumSize() {
+            return mMaximumSize;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setMaximumSize(@NonNull Vec3 vec3) {
+            mOptionsApplied = false;
+            mMaximumSize = vec3;
+            return this;
+        }
+
+        @Override
+        public float getFixedAspectRatio() {
+            return mFixedAspectRatio;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setFixedAspectRatio(float fixedAspectRatio) {
+            mFixedAspectRatio = fixedAspectRatio;
+            return this;
+        }
+
+        @Override
+        @SuppressWarnings("GetterSetterNames")
+        public boolean getForceShowResizeOverlay() {
+            return mForceShowResizeOverlay;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setForceShowResizeOverlay(boolean show) {
+            mForceShowResizeOverlay = show;
+            return this;
+        }
+
+        @NonNull
+        @Override
+        public Consumer<ReformEvent> getEventCallback() {
+            return mConsumer;
+        }
+
+        @Override
+        @NonNull
+        @SuppressLint("InvalidNullabilityOverride")
+        public ReformOptions setEventCallback(@NonNull Consumer<ReformEvent> consumer) {
+            mConsumer = consumer;
+            return this;
+        }
+
+        @NonNull
+        @Override
+        public Executor getEventExecutor() {
+            return mExecutor;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setEventExecutor(@NonNull Executor executor) {
+            mExecutor = executor;
+            return this;
+        }
+
+        @Override
+        public int getScaleWithDistanceMode() {
+            return mScaleWithDistanceMode;
+        }
+
+        @Override
+        @NonNull
+        public ReformOptions setScaleWithDistanceMode(int scaleWithDistanceMode) {
+            mScaleWithDistanceMode = scaleWithDistanceMode;
+            return this;
+        }
+    }
+
+    /** Fake ReformEvent. */
+    public static class FakeReformEvent implements ReformEvent {
+
+        int mType;
+        int mState;
+        int mId;
+        Vec3 mOrigin = new Vec3(0f, 0f, 0f);
+        Vec3 mInitialRayOrigin = mOrigin;
+        Vec3 mProposedPosition = mOrigin;
+        Vec3 mOnes = new Vec3(1f, 1f, 1f);
+        Vec3 mInitialRayDirection = mOnes;
+        Vec3 mProposedScale = mOnes;
+        Vec3 mProposedSize = mOnes;
+        Vec3 mTwos = new Vec3(2f, 2f, 2f);
+        Vec3 mCurrentRayOrigin = mTwos;
+        Vec3 mThrees = new Vec3(3f, 3f, 3f);
+        Vec3 mCurrentRayDirection = mThrees;
+        Quatf mIdentity = new Quatf(0f, 0f, 0f, 1f);
+        Quatf mProposedOrientation = mIdentity;
+
+        public void setType(int type) {
+            mType = type;
+        }
+
+        public void setState(int state) {
+            mState = state;
+        }
+
+        public void setProposedPosition(@NonNull Vec3 proposedPosition) {
+            mProposedPosition = proposedPosition;
+        }
+
+        public void setProposedScale(@NonNull Vec3 proposedScale) {
+            mProposedScale = proposedScale;
+        }
+
+        public void setProposedOrientation(@NonNull Quatf proposedOrientation) {
+            mProposedOrientation = proposedOrientation;
+        }
+
+        public void setProposedSize(@NonNull Vec3 proposedSize) {
+            mProposedSize = proposedSize;
+        }
+
+        @Override
+        public int getType() {
+            return mType;
+        }
+
+        @Override
+        public int getState() {
+            return mState;
+        }
+
+        @Override
+        public int getId() {
+            return mId;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getInitialRayOrigin() {
+            return mInitialRayOrigin;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getInitialRayDirection() {
+            return mInitialRayDirection;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getCurrentRayOrigin() {
+            return mCurrentRayOrigin;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getCurrentRayDirection() {
+            return mCurrentRayDirection;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getProposedPosition() {
+            return mProposedPosition;
+        }
+
+        @NonNull
+        @Override
+        public Quatf getProposedOrientation() {
+            return mProposedOrientation;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getProposedScale() {
+            return mProposedScale;
+        }
+
+        @NonNull
+        @Override
+        public Vec3 getProposedSize() {
+            return mProposedSize;
+        }
+    }
+
     /** A fake implementation of the XR extensions SpatialState. */
     public static class FakeSpatialState implements SpatialState {
         Bounds mBounds;
diff --git a/xr/scenecore/scenecore/api/restricted_current.txt b/xr/scenecore/scenecore/api/restricted_current.txt
index efe659b..68c19fe 100644
--- a/xr/scenecore/scenecore/api/restricted_current.txt
+++ b/xr/scenecore/scenecore/api/restricted_current.txt
@@ -618,44 +618,42 @@
     method public androidx.xr.scenecore.AnchorPlacement createForPlanes(optional java.util.Set<java.lang.Integer> planeTypeFilter, optional java.util.Set<java.lang.Integer> planeSemanticFilter);
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class BaseActivityPose<RtActivityPoseType extends androidx.xr.scenecore.JxrPlatformAdapter.ActivityPose> implements androidx.xr.scenecore.ActivityPose {
-    ctor public BaseActivityPose(RtActivityPoseType rtActivityPose);
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract sealed class BaseActivityPose<RtActivityPoseType extends androidx.xr.scenecore.JxrPlatformAdapter.ActivityPose> implements androidx.xr.scenecore.ActivityPose {
     method public androidx.xr.runtime.math.Pose getActivitySpacePose();
     method public androidx.xr.runtime.math.Pose transformPoseTo(androidx.xr.runtime.math.Pose pose, androidx.xr.scenecore.ActivityPose destination);
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class BaseEntity<RtEntityType extends androidx.xr.scenecore.JxrPlatformAdapter.Entity> extends androidx.xr.scenecore.BaseActivityPose<androidx.xr.scenecore.JxrPlatformAdapter.ActivityPose> implements androidx.xr.scenecore.Entity {
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract sealed class BaseEntity<RtEntityType extends androidx.xr.scenecore.JxrPlatformAdapter.Entity> extends androidx.xr.scenecore.BaseActivityPose<androidx.xr.scenecore.JxrPlatformAdapter.ActivityPose> implements androidx.xr.scenecore.Entity {
     method public void addChild(androidx.xr.scenecore.Entity child);
     method public boolean addComponent(androidx.xr.scenecore.Component component);
     method public void dispose();
-    method public float getAlpha(int relativeTo);
+    method public float getActivitySpaceAlpha();
+    method public float getAlpha();
     method public java.util.List<androidx.xr.scenecore.Component> getComponents();
     method public <T extends androidx.xr.scenecore.Component> java.util.List<T> getComponentsOfType(Class<? extends T> type);
     method public androidx.xr.scenecore.Entity? getParent();
-    method public androidx.xr.runtime.math.Pose getPose(int relativeTo);
-    method public float getScale(int relativeTo);
-    method @Deprecated public float getWorldSpaceScale();
+    method public androidx.xr.runtime.math.Pose getPose();
+    method public float getScale();
+    method public androidx.xr.scenecore.Dimensions getSize();
+    method public float getWorldSpaceScale();
     method public boolean isHidden(boolean includeParents);
     method public void removeAllComponents();
     method public void removeComponent(androidx.xr.scenecore.Component component);
-    method public void setAlpha(float alpha, int relativeTo);
+    method public void setAlpha(float alpha);
     method public void setContentDescription(String text);
     method public void setHidden(boolean hidden);
     method public void setParent(androidx.xr.scenecore.Entity? parent);
-    method public void setPose(androidx.xr.runtime.math.Pose pose, int relativeTo);
-    method public void setScale(float scale, int relativeTo);
+    method public void setPose(androidx.xr.runtime.math.Pose pose);
+    method public void setScale(float scale);
+    method public void setSize(androidx.xr.scenecore.Dimensions dimensions);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract sealed class BasePanelEntity<RtPanelEntityType extends androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity> extends androidx.xr.scenecore.BaseEntity<androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity> {
     method public final float getCornerRadius();
-    method @Deprecated public final androidx.xr.runtime.math.Vector3 getPixelDensity();
-    method @Deprecated public final androidx.xr.scenecore.PixelDimensions getPixelDimensions();
-    method public final androidx.xr.scenecore.Dimensions getSize();
-    method public final androidx.xr.scenecore.PixelDimensions getSizeInPixels();
+    method public final androidx.xr.runtime.math.Vector3 getPixelDensity();
+    method public final androidx.xr.scenecore.PixelDimensions getPixelDimensions();
     method public final void setCornerRadius(float radius);
-    method @Deprecated public final void setPixelDimensions(androidx.xr.scenecore.PixelDimensions pxDimensions);
-    method public final void setSize(androidx.xr.scenecore.Dimensions dimensions);
-    method public final void setSizeInPixels(androidx.xr.scenecore.PixelDimensions pixelDimensions);
+    method public final void setPixelDimensions(androidx.xr.scenecore.PixelDimensions pxDimensions);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class CameraView extends androidx.xr.scenecore.BaseActivityPose<androidx.xr.scenecore.JxrPlatformAdapter.CameraViewActivityPose> {
@@ -715,42 +713,36 @@
     method public void addChild(androidx.xr.scenecore.Entity child);
     method public boolean addComponent(androidx.xr.scenecore.Component component);
     method public void dispose();
-    method public default float getAlpha();
-    method public float getAlpha(optional int relativeTo);
+    method public float getActivitySpaceAlpha();
+    method public float getAlpha();
     method public java.util.List<androidx.xr.scenecore.Component> getComponents();
     method public <T extends androidx.xr.scenecore.Component> java.util.List<T> getComponentsOfType(Class<? extends T> type);
     method public androidx.xr.scenecore.Entity? getParent();
-    method public default androidx.xr.runtime.math.Pose getPose();
-    method public androidx.xr.runtime.math.Pose getPose(optional int relativeTo);
-    method public default float getScale();
-    method public float getScale(optional int relativeTo);
-    method @Deprecated public float getWorldSpaceScale();
+    method public androidx.xr.runtime.math.Pose getPose();
+    method public float getScale();
+    method public androidx.xr.scenecore.Dimensions getSize();
+    method public float getWorldSpaceScale();
     method public boolean isHidden(optional boolean includeParents);
     method public void removeAllComponents();
     method public void removeComponent(androidx.xr.scenecore.Component component);
-    method public default void setAlpha(float alpha);
-    method public void setAlpha(float alpha, optional int relativeTo);
+    method public void setAlpha(float alpha);
     method public void setContentDescription(String text);
     method public void setHidden(boolean hidden);
     method public void setParent(androidx.xr.scenecore.Entity? parent);
-    method public default void setPose(androidx.xr.runtime.math.Pose pose);
-    method public void setPose(androidx.xr.runtime.math.Pose pose, optional int relativeTo);
-    method public default void setScale(float scale);
-    method public void setScale(float scale, optional int relativeTo);
+    method public void setPose(androidx.xr.runtime.math.Pose pose);
+    method public void setScale(float scale);
+    method public void setSize(androidx.xr.scenecore.Dimensions dimensions);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ExrImage implements androidx.xr.scenecore.Image {
     method public static androidx.xr.scenecore.ExrImage create(androidx.xr.scenecore.Session session, String name);
-    method @MainThread public static com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.ExrImage> createFromPackage(androidx.xr.scenecore.Session session, byte[] assetData, String assetKey);
-    method @MainThread public static com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.ExrImage> createFromPackage(androidx.xr.scenecore.Session session, String name);
-    method @MainThread public androidx.xr.scenecore.CubeMapTexture getReflectionTexture();
+    method public androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource getImage();
+    property public androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource image;
     field public static final androidx.xr.scenecore.ExrImage.Companion Companion;
   }
 
   public static final class ExrImage.Companion {
     method public androidx.xr.scenecore.ExrImage create(androidx.xr.scenecore.Session session, String name);
-    method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.ExrImage> createFromPackage(androidx.xr.scenecore.Session session, byte[] assetData, String assetKey);
-    method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.ExrImage> createFromPackage(androidx.xr.scenecore.Session session, String name);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Fov {
@@ -771,13 +763,13 @@
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class GltfModel implements androidx.xr.scenecore.Model {
-    method @MainThread public static com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.GltfModel> create(androidx.xr.scenecore.Session session, byte[] assetData, String assetKey);
     method @MainThread public static com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.GltfModel> create(androidx.xr.scenecore.Session session, String name);
+    method public androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource getModel();
+    property public androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource model;
     field public static final androidx.xr.scenecore.GltfModel.Companion Companion;
   }
 
   public static final class GltfModel.Companion {
-    method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.GltfModel> create(androidx.xr.scenecore.Session session, byte[] assetData, String assetKey);
     method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.GltfModel> create(androidx.xr.scenecore.Session session, String name);
   }
 
@@ -785,7 +777,7 @@
     method @MainThread public static androidx.xr.scenecore.GltfModelEntity create(androidx.xr.scenecore.Session session, androidx.xr.scenecore.GltfModel model);
     method @MainThread public static androidx.xr.scenecore.GltfModelEntity create(androidx.xr.scenecore.Session session, androidx.xr.scenecore.GltfModel model, optional androidx.xr.runtime.math.Pose pose);
     method public int getAnimationState();
-    method @MainThread public void setMaterialOverride(androidx.xr.scenecore.Material material, String meshName);
+    method @MainThread public void setMaterialOverride(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource material, String meshName);
     method @MainThread public void startAnimation(boolean loop);
     method @MainThread public void startAnimation(boolean loop, optional String? animationName);
     method @MainThread public void stopAnimation();
@@ -904,8 +896,7 @@
     method public androidx.xr.scenecore.JxrPlatformAdapter.InteractableComponent createInteractableComponent(java.util.concurrent.Executor, androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener);
     method public androidx.xr.scenecore.JxrPlatformAdapter.LoggingEntity createLoggingEntity(androidx.xr.runtime.math.Pose);
     method public androidx.xr.scenecore.JxrPlatformAdapter.MovableComponent createMovableComponent(boolean, boolean, java.util.Set<androidx.xr.scenecore.JxrPlatformAdapter.AnchorPlacement!>, boolean);
-    method public androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity createPanelEntity(android.content.Context, androidx.xr.runtime.math.Pose, android.view.View, androidx.xr.scenecore.JxrPlatformAdapter.Dimensions, String, androidx.xr.scenecore.JxrPlatformAdapter.Entity);
-    method public androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity createPanelEntity(android.content.Context, androidx.xr.runtime.math.Pose, android.view.View, androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions, String, androidx.xr.scenecore.JxrPlatformAdapter.Entity);
+    method public androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity createPanelEntity(androidx.xr.runtime.math.Pose, android.view.View, androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions, androidx.xr.scenecore.JxrPlatformAdapter.Dimensions, String, android.content.Context, androidx.xr.scenecore.JxrPlatformAdapter.Entity);
     method public androidx.xr.scenecore.JxrPlatformAdapter.AnchorEntity createPersistedAnchorEntity(java.util.UUID, java.time.Duration);
     method public androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent createPointerCaptureComponent(java.util.concurrent.Executor, androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent.StateListener, androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener);
     method public androidx.xr.scenecore.JxrPlatformAdapter.ResizableComponent createResizableComponent(androidx.xr.scenecore.JxrPlatformAdapter.Dimensions, androidx.xr.scenecore.JxrPlatformAdapter.Dimensions);
@@ -922,29 +913,24 @@
     method public androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity getMainPanelEntity();
     method public androidx.xr.scenecore.JxrPlatformAdapter.MediaPlayerExtensionsWrapper getMediaPlayerExtensionsWrapper();
     method public androidx.xr.scenecore.JxrPlatformAdapter.PerceptionSpaceActivityPose getPerceptionSpaceActivityPose();
-    method public androidx.xr.scenecore.JxrPlatformAdapter.TextureResource? getReflectionTextureFromIbl(androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource);
     method public androidx.xr.scenecore.JxrPlatformAdapter.SoundPoolExtensionsWrapper getSoundPoolExtensionsWrapper();
     method public androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities getSpatialCapabilities();
     method public androidx.xr.scenecore.JxrPlatformAdapter.SpatialEnvironment getSpatialEnvironment();
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource!>? loadExrImageByAssetName(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource!>? loadExrImageByAssetNameSplitEngine(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource!>? loadExrImageByByteArraySplitEngine(byte[], String);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource!>? loadGltfByAssetName(String);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource!>? loadGltfByAssetNameSplitEngine(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource!>? loadGltfByByteArray(byte[], String);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.TextureResource!>? loadTexture(String, androidx.xr.scenecore.JxrPlatformAdapter.TextureSampler);
     method public void removeSpatialCapabilitiesChangedListener(java.util.function.Consumer<androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities!>);
     method public void requestFullSpaceMode();
     method public void requestHomeSpaceMode();
-    method public void setAlphaMap(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.scenecore.JxrPlatformAdapter.TextureResource);
     method public void setAlphaStepMultiplier(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
+    method public void setAlphaStepU(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.runtime.math.Vector4);
+    method public void setAlphaStepV(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.runtime.math.Vector4);
     method public android.os.Bundle setFullSpaceMode(android.os.Bundle);
     method public android.os.Bundle setFullSpaceModeWithEnvironmentInherited(android.os.Bundle);
-    method public void setNormalBoundary(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
     method public void setNormalMap(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.scenecore.JxrPlatformAdapter.TextureResource);
     method public void setNormalSpeed(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
     method public void setNormalTiling(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
-    method public void setNormalZ(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
     method public void setPreferredAspectRatio(android.app.Activity, float);
     method public void setReflectionCube(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.scenecore.JxrPlatformAdapter.TextureResource);
     method public void startRenderer();
@@ -1050,27 +1036,23 @@
     method public boolean addComponent(androidx.xr.scenecore.JxrPlatformAdapter.Component);
     method public void addInputEventListener(java.util.concurrent.Executor, androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener);
     method public void dispose();
-    method public default float getAlpha();
-    method public float getAlpha(int);
+    method public float getActivitySpaceAlpha();
+    method public float getAlpha();
     method public java.util.List<androidx.xr.scenecore.JxrPlatformAdapter.Entity!> getChildren();
     method public androidx.xr.scenecore.JxrPlatformAdapter.Entity? getParent();
-    method public default androidx.xr.runtime.math.Pose getPose();
-    method public androidx.xr.runtime.math.Pose getPose(int);
-    method public default androidx.xr.runtime.math.Vector3 getScale();
-    method public androidx.xr.runtime.math.Vector3 getScale(int);
+    method public androidx.xr.runtime.math.Pose getPose();
+    method public androidx.xr.runtime.math.Vector3 getScale();
     method public boolean isHidden(boolean);
     method public void removeAllComponents();
     method public void removeComponent(androidx.xr.scenecore.JxrPlatformAdapter.Component);
     method public void removeInputEventListener(androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener);
-    method public default void setAlpha(float);
-    method public void setAlpha(float, int);
+    method public void setAlpha(float);
     method public void setContentDescription(String);
     method public void setHidden(boolean);
     method public void setParent(androidx.xr.scenecore.JxrPlatformAdapter.Entity?);
-    method public default void setPose(androidx.xr.runtime.math.Pose);
-    method public void setPose(androidx.xr.runtime.math.Pose, int);
-    method public default void setScale(androidx.xr.runtime.math.Vector3);
-    method public void setScale(androidx.xr.runtime.math.Vector3, int);
+    method public void setPose(androidx.xr.runtime.math.Pose);
+    method public void setScale(androidx.xr.runtime.math.Vector3);
+    method public void setSize(androidx.xr.scenecore.JxrPlatformAdapter.Dimensions);
   }
 
   public static interface JxrPlatformAdapter.ExrImageResource extends androidx.xr.scenecore.JxrPlatformAdapter.Resource {
@@ -1173,12 +1155,11 @@
 
   public static interface JxrPlatformAdapter.PanelEntity extends androidx.xr.scenecore.JxrPlatformAdapter.Entity {
     method public float getCornerRadius();
-    method @Deprecated public androidx.xr.runtime.math.Vector3 getPixelDensity();
+    method public androidx.xr.runtime.math.Vector3 getPixelDensity();
+    method public androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions getPixelDimensions();
     method public androidx.xr.scenecore.JxrPlatformAdapter.Dimensions getSize();
-    method public androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions getSizeInPixels();
     method public void setCornerRadius(float);
-    method public void setSize(androidx.xr.scenecore.JxrPlatformAdapter.Dimensions);
-    method public void setSizeInPixels(androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions);
+    method public void setPixelDimensions(androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions);
   }
 
   public static interface JxrPlatformAdapter.PerceptionSpaceActivityPose extends androidx.xr.scenecore.JxrPlatformAdapter.ActivityPose {
@@ -1265,12 +1246,6 @@
     method public int play(android.media.SoundPool, int, androidx.xr.scenecore.JxrPlatformAdapter.SoundFieldAttributes, float, int, int, float);
   }
 
-  public static class JxrPlatformAdapter.Space {
-    field public static final int ACTIVITY = 1; // 0x1
-    field public static final int PARENT = 0; // 0x0
-    field public static final int REAL_WORLD = 2; // 0x2
-  }
-
   public static class JxrPlatformAdapter.SpatialCapabilities {
     ctor public JxrPlatformAdapter.SpatialCapabilities(int);
     method public boolean hasCapability(int);
@@ -1308,11 +1283,7 @@
 
   public static class JxrPlatformAdapter.SpatialEnvironment.SpatialEnvironmentPreference {
     ctor public JxrPlatformAdapter.SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource?, androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource?);
-    ctor public JxrPlatformAdapter.SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource?, androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource?, androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource?, String?, String?);
     field public final androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource? geometry;
-    field public final String? geometryAnimationName;
-    field public final androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource? geometryMaterial;
-    field public final String? geometryMeshName;
     field public final androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource? skybox;
   }
 
@@ -1408,10 +1379,6 @@
     field public int wrapModeT;
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Material {
-    ctor public Material(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource? material);
-  }
-
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Model {
   }
 
@@ -1459,24 +1426,16 @@
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class PanelEntity extends androidx.xr.scenecore.BasePanelEntity<androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity> {
-    method @Deprecated public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name);
-    method @Deprecated public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name, optional androidx.xr.runtime.math.Pose pose);
-    method public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions dimensions, String name);
-    method public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions dimensions, String name, optional androidx.xr.runtime.math.Pose pose);
-    method public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.PixelDimensions pixelDimensions, String name);
-    method public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.PixelDimensions pixelDimensions, String name, optional androidx.xr.runtime.math.Pose pose);
+    method public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name);
+    method public static final androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name, optional androidx.xr.runtime.math.Pose pose);
     method public final boolean isMainPanelEntity();
     property public final boolean isMainPanelEntity;
     field public static final androidx.xr.scenecore.PanelEntity.Companion Companion;
   }
 
   public static final class PanelEntity.Companion {
-    method @Deprecated public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name);
-    method @Deprecated public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name, optional androidx.xr.runtime.math.Pose pose);
-    method public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions dimensions, String name);
-    method public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions dimensions, String name, optional androidx.xr.runtime.math.Pose pose);
-    method public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.PixelDimensions pixelDimensions, String name);
-    method public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.PixelDimensions pixelDimensions, String name, optional androidx.xr.runtime.math.Pose pose);
+    method public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name);
+    method public androidx.xr.scenecore.PanelEntity create(androidx.xr.scenecore.Session session, android.view.View view, androidx.xr.scenecore.Dimensions surfaceDimensionsPx, androidx.xr.scenecore.Dimensions dimensions, String name, optional androidx.xr.runtime.math.Pose pose);
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class PerceptionSpace extends androidx.xr.scenecore.BaseActivityPose<androidx.xr.scenecore.JxrPlatformAdapter.PerceptionSpaceActivityPose> {
@@ -1648,16 +1607,6 @@
     field public static final String TAG = "SoundFieldAttributes";
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Space {
-    property public static int ACTIVITY;
-    property public static int PARENT;
-    property public static int REAL_WORLD;
-    field public static final int ACTIVITY = 1; // 0x1
-    field public static final androidx.xr.scenecore.Space INSTANCE;
-    field public static final int PARENT = 0; // 0x0
-    field public static final int REAL_WORLD = 2; // 0x2
-  }
-
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class SpatialAudioTrack {
     ctor public SpatialAudioTrack();
     method public static androidx.xr.scenecore.PointSourceAttributes? getPointSourceAttributes(androidx.xr.scenecore.Session session, android.media.AudioTrack track);
@@ -1765,9 +1714,6 @@
 
   public static final class SpatialEnvironment.SpatialEnvironmentPreference {
     ctor public SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.scenecore.ExrImage? skybox, androidx.xr.scenecore.GltfModel? geometry);
-    ctor public SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.scenecore.ExrImage? skybox, androidx.xr.scenecore.GltfModel? geometry, optional androidx.xr.scenecore.Material? geometryMaterial);
-    ctor public SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.scenecore.ExrImage? skybox, androidx.xr.scenecore.GltfModel? geometry, optional androidx.xr.scenecore.Material? geometryMaterial, optional String? geometryMeshName);
-    ctor public SpatialEnvironment.SpatialEnvironmentPreference(androidx.xr.scenecore.ExrImage? skybox, androidx.xr.scenecore.GltfModel? geometry, optional androidx.xr.scenecore.Material? geometryMaterial, optional String? geometryMeshName, optional String? geometryAnimationName);
     method public androidx.xr.scenecore.GltfModel? getGeometry();
     method public androidx.xr.scenecore.ExrImage? getSkybox();
     property public androidx.xr.scenecore.GltfModel? geometry;
@@ -1887,14 +1833,10 @@
 
   public static final class SurfaceEntity.StereoMode {
     property public static int MONO;
-    property public static int MULTIVIEW_LEFT_PRIMARY;
-    property public static int MULTIVIEW_RIGHT_PRIMARY;
     property public static int SIDE_BY_SIDE;
     property public static int TOP_BOTTOM;
     field public static final androidx.xr.scenecore.SurfaceEntity.StereoMode INSTANCE;
     field public static final int MONO = 0; // 0x0
-    field public static final int MULTIVIEW_LEFT_PRIMARY = 4; // 0x4
-    field public static final int MULTIVIEW_RIGHT_PRIMARY = 5; // 0x5
     field public static final int SIDE_BY_SIDE = 2; // 0x2
     field public static final int TOP_BOTTOM = 1; // 0x1
   }
@@ -1902,6 +1844,12 @@
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Texture {
     method @MainThread public static final com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.Texture> create(androidx.xr.scenecore.Session session, String name, androidx.xr.scenecore.TextureSampler sampler);
     method @MainThread public void dispose();
+    method public final androidx.xr.scenecore.TextureSampler getSampler();
+    method public final java.lang.ref.WeakReference<androidx.xr.scenecore.Session> getSession();
+    method public final androidx.xr.scenecore.JxrPlatformAdapter.TextureResource getTexture();
+    property public final androidx.xr.scenecore.TextureSampler sampler;
+    property public final java.lang.ref.WeakReference<androidx.xr.scenecore.Session> session;
+    property public final androidx.xr.scenecore.JxrPlatformAdapter.TextureResource texture;
     field public static final androidx.xr.scenecore.Texture.Companion Companion;
   }
 
@@ -2012,22 +1960,25 @@
     field public static final int REPEAT = 1; // 0x1
   }
 
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class WaterMaterial extends androidx.xr.scenecore.Material {
-    method @MainThread public static com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.WaterMaterial> create(androidx.xr.scenecore.Session session, boolean isAlphaMapVersion);
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class WaterMaterial {
+    method @MainThread public static com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.WaterMaterial> create(androidx.xr.scenecore.Session session, boolean transparent);
     method @MainThread public void dispose();
-    method @MainThread public void setAlphaMap(androidx.xr.scenecore.Texture alphaMap);
+    method public androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource getMaterial();
+    method public androidx.xr.scenecore.Session getSession();
     method @MainThread public void setAlphaStepMultiplier(float alphaStepMultiplier);
-    method @MainThread public void setNormalBoundary(float normalBoundary);
+    method @MainThread public void setAlphaStepU(androidx.xr.runtime.math.Vector4 alphaStepU);
+    method @MainThread public void setAlphaStepV(androidx.xr.runtime.math.Vector4 alphaStepV);
     method @MainThread public void setNormalMap(androidx.xr.scenecore.Texture normalMap);
     method @MainThread public void setNormalSpeed(float normalSpeed);
     method @MainThread public void setNormalTiling(float normalTiling);
-    method @MainThread public void setNormalZ(float normalZ);
     method @MainThread public void setReflectionCube(androidx.xr.scenecore.CubeMapTexture reflectionCube);
+    property public androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource material;
+    property public androidx.xr.scenecore.Session session;
     field public static final androidx.xr.scenecore.WaterMaterial.Companion Companion;
   }
 
   public static final class WaterMaterial.Companion {
-    method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.WaterMaterial> create(androidx.xr.scenecore.Session session, boolean isAlphaMapVersion);
+    method @MainThread public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.WaterMaterial> create(androidx.xr.scenecore.Session session, boolean transparent);
   }
 
 }
@@ -2050,21 +2001,22 @@
     method public void addChildren(java.util.List<androidx.xr.scenecore.JxrPlatformAdapter.Entity!>);
     method public boolean addComponent(androidx.xr.scenecore.JxrPlatformAdapter.Component);
     method public void dispose();
-    method public float getAlpha(int);
+    method public float getActivitySpaceAlpha();
+    method public float getAlpha();
     method public java.util.List<androidx.xr.scenecore.JxrPlatformAdapter.Entity!> getChildren();
     method public androidx.xr.scenecore.JxrPlatformAdapter.Entity? getParent();
-    method public androidx.xr.runtime.math.Pose getPose(int);
-    method public androidx.xr.runtime.math.Vector3 getScale(int);
+    method public androidx.xr.runtime.math.Pose getPose();
+    method public androidx.xr.runtime.math.Vector3 getScale();
     method public boolean isHidden(boolean);
     method public void removeAllComponents();
     method protected void removeChildInternal(androidx.xr.scenecore.JxrPlatformAdapter.Entity);
     method public void removeComponent(androidx.xr.scenecore.JxrPlatformAdapter.Component);
-    method public void setAlpha(float, int);
+    method public void setAlpha(float);
     method public void setContentDescription(String);
     method public void setHidden(boolean);
     method public void setParent(androidx.xr.scenecore.JxrPlatformAdapter.Entity?);
-    method public void setPose(androidx.xr.runtime.math.Pose, int);
-    method public void setScale(androidx.xr.runtime.math.Vector3, int);
+    method public void setPose(androidx.xr.runtime.math.Pose);
+    method public void setScale(androidx.xr.runtime.math.Vector3);
     method protected final void setScaleInternal(androidx.xr.runtime.math.Vector3);
   }
 
@@ -2076,10 +2028,9 @@
     method public void addSpatialCapabilitiesChangedListener(java.util.concurrent.Executor, java.util.function.Consumer<androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities!>);
     method public androidx.xr.scenecore.JxrPlatformAdapter.TextureResource? borrowReflectionTexture();
     method public static androidx.xr.scenecore.impl.JxrPlatformAdapterAxr create(android.app.Activity, java.util.concurrent.ScheduledExecutorService);
-    method @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.scenecore.impl.JxrPlatformAdapterAxr create(android.app.Activity, java.util.concurrent.ScheduledExecutorService, androidx.xr.extensions.node.Node, androidx.xr.extensions.node.Node);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.scenecore.impl.JxrPlatformAdapterAxr create(android.app.Activity, java.util.concurrent.ScheduledExecutorService, androidx.xr.extensions.node.Node, androidx.xr.extensions.node.Node);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.scenecore.impl.JxrPlatformAdapterAxr create(android.app.Activity, java.util.concurrent.ScheduledExecutorService, androidx.xr.extensions.XrExtensions, com.google.ar.imp.apibindings.ImpressApi?, androidx.xr.scenecore.impl.perception.PerceptionLibrary, com.google.androidxr.splitengine.SplitEngineSubspaceManager?, com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer?);
     method public static androidx.xr.scenecore.impl.JxrPlatformAdapterAxr create(android.app.Activity, java.util.concurrent.ScheduledExecutorService, boolean);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.scenecore.impl.JxrPlatformAdapterAxr create(android.app.Activity, java.util.concurrent.ScheduledExecutorService, com.android.extensions.xr.node.Node, com.android.extensions.xr.node.Node);
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static androidx.xr.scenecore.impl.JxrPlatformAdapterAxr create(android.app.Activity, java.util.concurrent.ScheduledExecutorService, com.android.extensions.xr.XrExtensions, com.google.ar.imp.apibindings.ImpressApi?, androidx.xr.scenecore.impl.perception.PerceptionLibrary, com.google.androidxr.splitengine.SplitEngineSubspaceManager?, com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer?);
     method public androidx.xr.scenecore.JxrPlatformAdapter.ActivityPanelEntity createActivityPanelEntity(androidx.xr.runtime.math.Pose, androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions, String, android.app.Activity, androidx.xr.scenecore.JxrPlatformAdapter.Entity);
     method public androidx.xr.scenecore.JxrPlatformAdapter.AnchorEntity createAnchorEntity(androidx.xr.arcore.Anchor);
     method public androidx.xr.scenecore.JxrPlatformAdapter.AnchorEntity createAnchorEntity(androidx.xr.scenecore.JxrPlatformAdapter.Dimensions, androidx.xr.scenecore.JxrPlatformAdapter.PlaneType, androidx.xr.scenecore.JxrPlatformAdapter.PlaneSemantic, java.time.Duration);
@@ -2089,8 +2040,7 @@
     method public androidx.xr.scenecore.JxrPlatformAdapter.InteractableComponent createInteractableComponent(java.util.concurrent.Executor, androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener);
     method public androidx.xr.scenecore.JxrPlatformAdapter.LoggingEntity createLoggingEntity(androidx.xr.runtime.math.Pose);
     method public androidx.xr.scenecore.JxrPlatformAdapter.MovableComponent createMovableComponent(boolean, boolean, java.util.Set<androidx.xr.scenecore.JxrPlatformAdapter.AnchorPlacement!>, boolean);
-    method public androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity createPanelEntity(android.content.Context, androidx.xr.runtime.math.Pose, android.view.View, androidx.xr.scenecore.JxrPlatformAdapter.Dimensions, String, androidx.xr.scenecore.JxrPlatformAdapter.Entity);
-    method public androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity createPanelEntity(android.content.Context, androidx.xr.runtime.math.Pose, android.view.View, androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions, String, androidx.xr.scenecore.JxrPlatformAdapter.Entity);
+    method public androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity createPanelEntity(androidx.xr.runtime.math.Pose, android.view.View, androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions, androidx.xr.scenecore.JxrPlatformAdapter.Dimensions, String, android.content.Context, androidx.xr.scenecore.JxrPlatformAdapter.Entity);
     method public androidx.xr.scenecore.JxrPlatformAdapter.AnchorEntity createPersistedAnchorEntity(java.util.UUID, java.time.Duration);
     method public androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent createPointerCaptureComponent(java.util.concurrent.Executor, androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent.StateListener, androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener);
     method public androidx.xr.scenecore.JxrPlatformAdapter.ResizableComponent createResizableComponent(androidx.xr.scenecore.JxrPlatformAdapter.Dimensions, androidx.xr.scenecore.JxrPlatformAdapter.Dimensions);
@@ -2110,30 +2060,25 @@
     method public long getNativeInstance();
     method public long getNativeSession();
     method public androidx.xr.scenecore.JxrPlatformAdapter.PerceptionSpaceActivityPose getPerceptionSpaceActivityPose();
-    method public androidx.xr.scenecore.JxrPlatformAdapter.TextureResource? getReflectionTextureFromIbl(androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource);
     method public androidx.xr.scenecore.JxrPlatformAdapter.SoundPoolExtensionsWrapper getSoundPoolExtensionsWrapper();
     method public androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities getSpatialCapabilities();
     method public androidx.xr.scenecore.JxrPlatformAdapter.SpatialEnvironment getSpatialEnvironment();
     method public androidx.xr.scenecore.impl.perception.ViewProjections? getStereoViewsInOpenXrUnboundedSpace();
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource!>? loadExrImageByAssetName(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource!>? loadExrImageByAssetNameSplitEngine(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource!>? loadExrImageByByteArraySplitEngine(byte[], String);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource!>? loadGltfByAssetName(String);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource!>? loadGltfByAssetNameSplitEngine(String);
-    method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource!>? loadGltfByByteArray(byte[], String);
     method public com.google.common.util.concurrent.ListenableFuture<androidx.xr.scenecore.JxrPlatformAdapter.TextureResource!>? loadTexture(String, androidx.xr.scenecore.JxrPlatformAdapter.TextureSampler);
     method public void removeSpatialCapabilitiesChangedListener(java.util.function.Consumer<androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities!>);
     method public void requestFullSpaceMode();
     method public void requestHomeSpaceMode();
-    method public void setAlphaMap(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.scenecore.JxrPlatformAdapter.TextureResource);
     method public void setAlphaStepMultiplier(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
+    method public void setAlphaStepU(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.runtime.math.Vector4);
+    method public void setAlphaStepV(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.runtime.math.Vector4);
     method public android.os.Bundle setFullSpaceMode(android.os.Bundle);
     method public android.os.Bundle setFullSpaceModeWithEnvironmentInherited(android.os.Bundle);
-    method public void setNormalBoundary(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
     method public void setNormalMap(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.scenecore.JxrPlatformAdapter.TextureResource);
     method public void setNormalSpeed(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
     method public void setNormalTiling(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
-    method public void setNormalZ(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, float);
     method public void setPreferredAspectRatio(android.app.Activity, float);
     method public void setReflectionCube(androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource, androidx.xr.scenecore.JxrPlatformAdapter.TextureResource);
     method public void setSplitEngineSubspaceManager(com.google.androidxr.splitengine.SplitEngineSubspaceManager?);
@@ -2151,14 +2096,6 @@
 
 }
 
-package androidx.xr.scenecore.impl.extensions {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class XrExtensionsProvider {
-    method public static com.android.extensions.xr.XrExtensions? getXrExtensions();
-  }
-
-}
-
 package androidx.xr.scenecore.impl.perception {
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Anchor {
diff --git a/xr/scenecore/scenecore/build.gradle b/xr/scenecore/scenecore/build.gradle
index da7d72c..106ecab 100644
--- a/xr/scenecore/scenecore/build.gradle
+++ b/xr/scenecore/scenecore/build.gradle
@@ -70,10 +70,9 @@
     androidTestImplementation("androidx.appcompat:appcompat:1.2.0")
     androidTestImplementation(project(":xr:scenecore:scenecore-testing"))
 
-    // For com.android.xr.extensions.
-    compileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-    testCompileOnly(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.jar")))
-    testImplementation(files(new File(AndroidXConfig.getPrebuiltsRoot(project), "androidx/xr/extensions/com.android.extensions.xr.host.test.jar")))
+    // For androidx.xr.extensions.
+    compileOnly(project(':xr:xr-stubs'))
+    testImplementation(project(':xr:xr-stubs'))
 }
 
 android {
diff --git a/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PerceptionLibraryTest.java b/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PerceptionLibraryTest.java
index 80f5ed3..a048196 100644
--- a/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PerceptionLibraryTest.java
+++ b/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PerceptionLibraryTest.java
@@ -26,7 +26,6 @@
 import androidx.test.ext.junit.rules.ActivityScenarioRule;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
-import androidx.test.filters.SdkSuppress;
 import androidx.xr.scenecore.impl.perception.exceptions.FailedToInitializeException;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
 
@@ -44,7 +43,6 @@
 import java.util.concurrent.ExecutionException;
 
 /** This tests the Java/JNI interface of the perception library, with a fake native library. */
-@SdkSuppress(minSdkVersion = 29)
 @LargeTest
 @RunWith(AndroidJUnit4.class)
 public final class PerceptionLibraryTest {
diff --git a/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PlaneTest.java b/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PlaneTest.java
index b6d3954..0e0027a 100644
--- a/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PlaneTest.java
+++ b/xr/scenecore/scenecore/src/androidTest/java/androidx/xr/scenecore/impl/perception/PlaneTest.java
@@ -22,7 +22,6 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
-import androidx.test.filters.SdkSuppress;
 
 import org.junit.After;
 import org.junit.BeforeClass;
@@ -30,7 +29,6 @@
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
 
-@SdkSuppress(minSdkVersion = 29)
 @LargeTest
 @RunWith(AndroidJUnit4.class)
 public final class PlaneTest {
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivityPanelEntity.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivityPanelEntity.kt
deleted file mode 100644
index 0b7db8f..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivityPanelEntity.kt
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore
-
-import android.app.Activity
-import android.content.Intent
-import android.graphics.Rect
-import android.os.Bundle
-import androidx.annotation.RestrictTo
-import androidx.xr.runtime.math.Pose
-
-/**
- * ActivityPanelEntity creates a spatial panel for embedding an Activity in Android XR. Users can
- * either use an intent to launch an activity in the given panel or provide an instance of activity
- * to move into this panel. Calling dispose() on this entity will destroy the underlying activity.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class ActivityPanelEntity
-private constructor(
-    private val rtActivityPanelEntity: JxrPlatformAdapter.ActivityPanelEntity,
-    entityManager: EntityManager,
-) : PanelEntity(rtActivityPanelEntity, entityManager) {
-
-    /**
-     * Launches an activity in the given panel. Subsequent calls to this method will replace the
-     * already existing activity in the panel with the new one. If the intent fails to launch the
-     * activity, the panel will not be visible. Note this will not update the dimensions of the
-     * surface underlying the panel. The Activity will be letterboxed as required to fit the size of
-     * the panel. The underlying surface can be resized by calling setPixelDimensions().
-     *
-     * @param intent Intent to launch the activity.
-     * @param bundle Bundle to pass to the activity, can be null.
-     */
-    @JvmOverloads
-    public fun launchActivity(intent: Intent, bundle: Bundle? = null) {
-        rtActivityPanelEntity.launchActivity(intent, bundle)
-    }
-
-    /**
-     * Moves the given activity into this panel. Note this will not update the dimensions of the
-     * surface underlying the panel. The Activity will be letterboxed as required to fit the size of
-     * the panel. The underlying surface can be resized by calling setPixelDimensions().
-     *
-     * @param activity Activity to move into this panel.
-     */
-    public fun moveActivity(activity: Activity) {
-        rtActivityPanelEntity.moveActivity(activity)
-    }
-
-    public companion object {
-        /**
-         * Factory method for ActivityPanelEntity.
-         *
-         * @param adapter JxrPlatformAdapter to use.
-         * @param windowBoundsPx Bounds for the underlying surface for the given view.
-         * @param name Name of this panel.
-         * @param hostActivity Activity which created this panel.
-         * @param pose Pose for this panel, relative to its parent.
-         */
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            windowBoundsPx: PixelDimensions,
-            name: String,
-            hostActivity: Activity,
-            pose: Pose = Pose.Identity,
-        ): ActivityPanelEntity =
-            ActivityPanelEntity(
-                adapter.createActivityPanelEntity(
-                    pose,
-                    windowBoundsPx.toRtPixelDimensions(),
-                    name,
-                    hostActivity,
-                    adapter.activitySpaceRootImpl,
-                ),
-                entityManager,
-            )
-
-        // TODO(b/352629832): Update windowBoundsPx to be a PixelDimensions
-        /**
-         * Public factory function for a spatial ActivityPanelEntity.
-         *
-         * @param session Session to create the ActivityPanelEntity in.
-         * @param windowBoundsPx Bounds for the panel window in pixels.
-         * @param name Name of the panel.
-         * @param pose Pose of this entity relative to its parent, default value is Identity.
-         * @return an ActivityPanelEntity instance.
-         */
-        @JvmOverloads
-        @JvmStatic
-        public fun create(
-            session: Session,
-            windowBoundsPx: Rect,
-            name: String,
-            pose: Pose = Pose.Identity,
-        ): ActivityPanelEntity =
-            ActivityPanelEntity.create(
-                session.platformAdapter,
-                session.entityManager,
-                PixelDimensions(windowBoundsPx.width(), windowBoundsPx.height()),
-                name,
-                session.activity,
-                pose,
-            )
-    }
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivityPose.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivityPose.kt
index 29ee36c..2c3b3a21 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivityPose.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivityPose.kt
@@ -52,7 +52,7 @@
  * ActivityPose.
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public abstract class BaseActivityPose<out RtActivityPoseType : JxrPlatformAdapter.ActivityPose>(
+public sealed class BaseActivityPose<out RtActivityPoseType : JxrPlatformAdapter.ActivityPose>(
     internal val rtActivityPose: RtActivityPoseType
 ) : ActivityPose {
     private companion object {
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivitySpace.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivitySpace.kt
deleted file mode 100644
index b44ff12..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ActivitySpace.kt
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-@file:Suppress("BanConcurrentHashMap")
-
-package androidx.xr.scenecore
-
-import androidx.annotation.RestrictTo
-import java.util.concurrent.ConcurrentHashMap
-import java.util.concurrent.ConcurrentMap
-import java.util.concurrent.Executor
-import java.util.function.Consumer
-
-/**
- * ActivitySpace is an Entity used to track the system-managed pose and boundary of the volume
- * associated with this Spatialized Activity. The Application cannot directly control this volume,
- * but the system might update it in response to the User moving it or entering or exiting FullSpace
- * mode.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class ActivitySpace
-private constructor(
-    rtActivitySpace: JxrPlatformAdapter.ActivitySpace,
-    entityManager: EntityManager,
-) : BaseEntity<JxrPlatformAdapter.ActivitySpace>(rtActivitySpace, entityManager) {
-
-    internal companion object {
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager
-        ): ActivitySpace = ActivitySpace(adapter.activitySpace, entityManager)
-    }
-
-    private val boundsListeners:
-        ConcurrentMap<
-            Consumer<Dimensions>,
-            JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener
-        > =
-        ConcurrentHashMap()
-
-    /**
-     * The listener registered when using the deprecated registerOnBoundsChangedListener method. We
-     * keep this reference so it can be removed using the corresponding unregister method.
-     */
-    // TODO: b/370538244 - remove with deprecated spatial state callbacks
-    private var registeredBoundsListener: Consumer<Dimensions>? = null
-
-    /**
-     * Retrieves a copy of the current bounds of this ActivitySpace.
-     *
-     * @return [Dimensions] representing the current bounds of this ActivitySpace.
-     */
-    // TODO b/370618648: remove suppression after API review is complete.
-    public fun getBounds(): Dimensions = rtEntity.bounds.toDimensions()
-
-    /**
-     * Adds the given [Consumer] as a listener to be invoked when this ActivitySpace's current
-     * boundary changes. [Consumer#accept(Dimensions)] will be invoked on the main thread.
-     *
-     * @param listener The Consumer to be invoked when this ActivitySpace's current boundary
-     *   changes.
-     */
-    // TODO b/370618648: remove suppression after API review is complete.
-    public fun addBoundsChangedListener(listener: Consumer<Dimensions>): Unit =
-        addBoundsChangedListener(HandlerExecutor.mainThreadExecutor, listener)
-
-    /**
-     * Adds the given [Consumer] as a listener to be invoked when this ActivitySpace's current
-     * boundary changes. [Consumer#accept(Dimensions)] will be invoked on the given executor.
-     *
-     * @param callbackExecutor The executor on which to invoke the listener on.
-     * @param listener The Consumer to be invoked when this ActivitySpace's current boundary
-     *   changes.
-     */
-    // TODO b/370618648: remove suppression after API review is complete.
-    public fun addBoundsChangedListener(
-        callbackExecutor: Executor,
-        listener: Consumer<Dimensions>
-    ) {
-        val rtListener: JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener =
-            JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener { rtDimensions ->
-                callbackExecutor.execute { listener.accept(rtDimensions.toDimensions()) }
-            }
-        boundsListeners.compute(
-            listener,
-            { _, _ ->
-                rtEntity.addOnBoundsChangedListener(rtListener)
-                rtListener
-            },
-        )
-    }
-
-    /**
-     * Releases the given [Consumer] from receiving updates when the ActivitySpace's boundary
-     * changes.
-     *
-     * @param listener The Consumer to be removed from receiving updates.
-     */
-    // TODO b/370618648: remove suppression after API review is complete.
-    public fun removeBoundsChangedListener(listener: Consumer<Dimensions>): Unit {
-        boundsListeners.computeIfPresent(
-            listener,
-            { _, rtListener ->
-                rtEntity.removeOnBoundsChangedListener(rtListener)
-                null // returning null from computeIfPresent removes this entry from the Map
-            },
-        )
-    }
-
-    /**
-     * Sets a callback to be invoked when the bounds of the ActivitySpace change. The callback will
-     * be dispatched on the UI thread.
-     *
-     * @param listener A ((Dimensions) -> Unit) callback, where Dimensions are in meters.
-     */
-    // TODO: b/370538244 - remove with deprecated spatial state callbacks
-    @Suppress("Deprecation")
-    @Deprecated(message = "use addBoundsChangedListener(Consumer<Dimensions>)")
-    public fun registerOnBoundsChangedListener(listener: OnBoundsChangeListener) {
-        if (registeredBoundsListener != null) unregisterOnBoundsChangedListener()
-        registeredBoundsListener =
-            Consumer<Dimensions> { bounds -> listener.onBoundsChanged(bounds) }
-        addBoundsChangedListener(registeredBoundsListener!!)
-    }
-
-    /** Clears the listener set by [registerOnBoundsChangedListener]. */
-    // TODO: b/370538244 - remove with deprecated spatial state callbacks
-    @Deprecated(message = "use removeBoundsChangedListener(Consumer<Dimensions>)")
-    public fun unregisterOnBoundsChangedListener() {
-        if (registeredBoundsListener != null) {
-            removeBoundsChangedListener(registeredBoundsListener!!)
-            registeredBoundsListener = null
-        }
-    }
-
-    /**
-     * Registers a listener to be called when the underlying space has moved or changed.
-     *
-     * @param listener The listener to register if non-null, else stops listening if null.
-     * @param executor The executor to run the listener on. Defaults to SceneCore executor if null.
-     */
-    @JvmOverloads
-    @Suppress("ExecutorRegistration")
-    public fun setOnSpaceUpdatedListener(
-        listener: OnSpaceUpdatedListener?,
-        executor: Executor? = null,
-    ) {
-        rtEntity.setOnSpaceUpdatedListener(listener?.let { { it.onSpaceUpdated() } }, executor)
-    }
-}
-
-// TODO: b/370538244 - remove with deprecated spatial state callbacks
-@Deprecated(message = "Use addBoundsChangedListener(Consumer<Dimensions>)")
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public fun interface OnBoundsChangeListener {
-    public fun onBoundsChanged(bounds: Dimensions) // Dimensions are in meters.
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/AnchorEntity.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/AnchorEntity.kt
deleted file mode 100644
index 2558164..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/AnchorEntity.kt
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore
-
-import android.util.Log
-import androidx.annotation.IntDef
-import androidx.annotation.RestrictTo
-import androidx.xr.arcore.Anchor
-import androidx.xr.runtime.Session as PerceptionSession
-import java.time.Duration
-import java.util.UUID
-import java.util.concurrent.Executor
-import java.util.concurrent.atomic.AtomicReference
-
-/**
- * An AnchorEntity is created to track a Pose relative to some position or surface in the "Real
- * World." Children of this Entity will remain positioned relative to that location in the real
- * world, for the purposes of creating Augmented Reality experiences.
- *
- * Note that Anchors are only relative to the "real world", and not virtual environments. Also,
- * calling setParent() on an AnchorEntity has no effect, as the parenting of an Anchor is controlled
- * by the system.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class AnchorEntity
-private constructor(rtEntity: JxrPlatformAdapter.AnchorEntity, entityManager: EntityManager) :
-    BaseEntity<JxrPlatformAdapter.AnchorEntity>(rtEntity, entityManager) {
-    private val state = AtomicReference(rtEntity.state.fromRtState())
-    private val persistState = AtomicReference(rtEntity.persistState.fromRtPersistState())
-
-    private var onStateChangedListener: OnStateChangedListener? = null
-
-    /** Specifies the current tracking state of the Anchor. */
-    @Target(AnnotationTarget.TYPE)
-    @IntDef(State.ANCHORED, State.UNANCHORED, State.TIMEDOUT, State.ERROR)
-    @Retention(AnnotationRetention.SOURCE)
-    internal annotation class StateValue
-
-    public object State {
-        /**
-         * The ANCHORED state means that this Anchor is being actively tracked and updated by the
-         * perception stack. The application should expect children to maintain their relative
-         * positioning to the system's best understanding of a pose in the real world.
-         */
-        public const val ANCHORED: Int = 0
-        /**
-         * An UNANCHORED state could mean that the perception stack hasn't found an anchor for this
-         * Space, that it has lost tracking.
-         */
-        public const val UNANCHORED: Int = 1
-        /**
-         * The AnchorEntity timed out while searching for an underlying anchor. This it is not
-         * possible to recover the AnchorEntity.
-         */
-        public const val TIMEDOUT: Int = 2
-        /**
-         * The ERROR state means that something has gone wrong and this AnchorEntity is invalid
-         * without the possibility of recovery.
-         */
-        public const val ERROR: Int = 3
-        /**
-         * The PERMISSIONS_NOT_GRANTED state means that the user has not granted the necessary
-         * permissions i.e. SCENE_UNDERSTANDING to create this AnchorEntity.
-         */
-        public const val PERMISSIONS_NOT_GRANTED: Int = 4
-    }
-
-    /** Specifies the current persist state of the Anchor. */
-    public enum class PersistState {
-        /** The anchor hasn't been requested to persist. */
-        PERSIST_NOT_REQUESTED,
-        /** The anchor is requested to persist but hasn't been persisted yet. */
-        PERSIST_PENDING,
-        /** The anchor is persisted successfully. */
-        PERSISTED,
-    }
-
-    /** Returns the current tracking state for this AnchorEntity. */
-    public fun getState(): @StateValue Int = state.get()
-
-    /** Registers a listener callback to be issued when an anchor's state changes. */
-    @Suppress("ExecutorRegistration")
-    public fun setOnStateChangedListener(onStateChangedListener: OnStateChangedListener?) {
-        this.onStateChangedListener = onStateChangedListener
-        if (state.get() == State.PERMISSIONS_NOT_GRANTED) {
-            onStateChangedListener?.onStateChanged(State.PERMISSIONS_NOT_GRANTED)
-        }
-    }
-
-    /** Updates the current state. */
-    private fun setState(newState: @StateValue Int) {
-        state.set(newState)
-        onStateChangedListener?.onStateChanged(newState)
-    }
-
-    /** Gets the current PersistState. */
-    public fun getPersistState(): PersistState = persistState.get()
-
-    /**
-     * Requests to persist the anchor. If the anchor's State is not ANCHORED, no request will be
-     * sent and null is returned. If the request is sent successfully, returns an UUID of the anchor
-     * immediately; otherwise returns null. After this call, client should use getPersistState() to
-     * check the PersistState of the anchor. If the anchor's PersistState becomes PERSISTED before
-     * the app is closed the anchor can be recreated in a new session by calling
-     * Session.createPersistedAnchorEntity(uuid). If the PersistState doesn't become PERSISTED
-     * before the app is closed, the recreation will fail.
-     */
-    public fun persist(): UUID? {
-        if (state.get() != State.ANCHORED) {
-            Log.e(TAG, "Cannot persist an anchor that is not in the ANCHORED state.")
-            return null
-        }
-        val uuid = rtEntity.persist()
-        if (uuid == null) {
-            Log.e(TAG, "Failed to get a UUID for the anchor.")
-            return null
-        }
-
-        rtEntity.registerPersistStateChangeListener { newRtPersistState ->
-            persistState.set(newRtPersistState.fromRtPersistState())
-        }
-        return uuid
-    }
-
-    /**
-     * Loads the ARCore for XR Anchor using a Jetpack XR Runtime session.
-     *
-     * @param session the Jetpack XR Runtime session to load the Anchor from.
-     * @return the ARCore for XR Anchor corresponding to the native pointer.
-     */
-    // TODO(b/373711152) : Remove this method once the ARCore for XR API migration is done.
-    public fun getAnchor(session: PerceptionSession): Anchor {
-        return Anchor.loadFromNativePointer(session, rtEntity.nativePointer())
-    }
-
-    public companion object {
-        private const val TAG = "AnchorEntity"
-
-        /**
-         * Factory method for AnchorEntity.
-         *
-         * @param adapter JxrPlatformAdapter to use.
-         * @param bounds Bounds for this Anchor Entity.
-         * @param planeType Orientation for the plane to which this Anchor should attach.
-         * @param planeSemantic Semantics for the plane to which this Anchor should attach.
-         * @param timeout Maximum time to search for the anchor, if a suitable plane is not found
-         *   within the timeout time the AnchorEntity state will be set to TIMED_OUT.
-         */
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            bounds: Dimensions,
-            planeType: @PlaneTypeValue Int,
-            planeSemantic: @PlaneSemanticValue Int,
-            timeout: Duration = Duration.ZERO,
-        ): AnchorEntity {
-            val rtAnchorEntity =
-                adapter.createAnchorEntity(
-                    bounds.toRtDimensions(),
-                    planeType.toRtPlaneType(),
-                    planeSemantic.toRtPlaneSemantic(),
-                    timeout,
-                )
-            return create(rtAnchorEntity, entityManager)
-        }
-
-        /**
-         * Factory method for AnchorEntity.
-         *
-         * @param anchor Anchor to create an AnchorEntity for.
-         */
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            anchor: Anchor,
-        ): AnchorEntity {
-            val rtAnchorEntity = adapter.createAnchorEntity(anchor)
-            return create(rtAnchorEntity, entityManager)
-        }
-
-        /**
-         * Factory method for AnchorEntity.
-         *
-         * @param rtAnchorEntity Runtime AnchorEntity instance.
-         */
-        internal fun create(
-            rtAnchorEntity: JxrPlatformAdapter.AnchorEntity,
-            entityManager: EntityManager,
-        ): AnchorEntity {
-            val anchorEntity = AnchorEntity(rtAnchorEntity, entityManager)
-            rtAnchorEntity.setOnStateChangedListener { newRtState ->
-                when (newRtState) {
-                    JxrPlatformAdapter.AnchorEntity.State.UNANCHORED ->
-                        anchorEntity.setState(State.UNANCHORED)
-                    JxrPlatformAdapter.AnchorEntity.State.ANCHORED ->
-                        anchorEntity.setState(State.ANCHORED)
-                    JxrPlatformAdapter.AnchorEntity.State.TIMED_OUT ->
-                        anchorEntity.setState(State.TIMEDOUT)
-                    JxrPlatformAdapter.AnchorEntity.State.ERROR ->
-                        anchorEntity.setState(State.ERROR)
-                    JxrPlatformAdapter.AnchorEntity.State.PERMISSIONS_NOT_GRANTED ->
-                        anchorEntity.setState(State.PERMISSIONS_NOT_GRANTED)
-                }
-            }
-            return anchorEntity
-        }
-
-        /**
-         * Factory method for AnchorEntity.
-         *
-         * @param adapter JxrPlatformAdapter to use.
-         * @param uuid UUID of the persisted Anchor Entity to create.
-         * @param timeout Maximum time to search for the anchor, if a persisted anchor isn't located
-         *   within the timeout time the AnchorEntity state will be set to TIMED_OUT.
-         */
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            uuid: UUID,
-            timeout: Duration = Duration.ZERO,
-        ): AnchorEntity {
-            val rtAnchorEntity = adapter.createPersistedAnchorEntity(uuid, timeout)
-            val anchorEntity = AnchorEntity(rtAnchorEntity, entityManager)
-            rtAnchorEntity.setOnStateChangedListener { newRtState ->
-                when (newRtState) {
-                    JxrPlatformAdapter.AnchorEntity.State.UNANCHORED ->
-                        anchorEntity.setState(State.UNANCHORED)
-                    JxrPlatformAdapter.AnchorEntity.State.ANCHORED ->
-                        anchorEntity.setState(State.ANCHORED)
-                    JxrPlatformAdapter.AnchorEntity.State.TIMED_OUT ->
-                        anchorEntity.setState(State.TIMEDOUT)
-                    JxrPlatformAdapter.AnchorEntity.State.ERROR ->
-                        anchorEntity.setState(State.ERROR)
-                    JxrPlatformAdapter.AnchorEntity.State.PERMISSIONS_NOT_GRANTED ->
-                        anchorEntity.setState(State.PERMISSIONS_NOT_GRANTED)
-                }
-            }
-            return anchorEntity
-        }
-
-        /**
-         * Public factory function for an AnchorEntity which searches for a location to create an
-         * Anchor among the tracked planes available to the perception system.
-         *
-         * Note that this function will fail if the application has not been granted the
-         * "android.permission.SCENE_UNDERSTANDING" permission. Consider using PermissionHelper to
-         * help request permission from the User.
-         *
-         * @param session Session to create the AnchorEntity in.
-         * @param bounds Bounds for this AnchorEntity.
-         * @param planeType Orientation of plane to which this Anchor should attach.
-         * @param planeSemantic Semantics of the plane to which this Anchor should attach.
-         * @param timeout The amount of time as a [Duration] to search for the a suitable plane to
-         *   attach to. If a plane is not found within the timeout, the returned AnchorEntity state
-         *   will be set to AnchorEntity.State.TIMEDOUT. It may take longer than the timeout period
-         *   before the anchor state is updated. If the timeout duration is zero it will search for
-         *   the anchor indefinitely.
-         */
-        @JvmStatic
-        @JvmOverloads
-        public fun create(
-            session: Session,
-            bounds: Dimensions,
-            planeType: @PlaneTypeValue Int,
-            planeSemantic: @PlaneSemanticValue Int,
-            timeout: Duration = Duration.ZERO,
-        ): AnchorEntity {
-            return AnchorEntity.create(
-                session.platformAdapter,
-                session.entityManager,
-                bounds,
-                planeType,
-                planeSemantic,
-                timeout,
-            )
-        }
-
-        /**
-         * Public factory function for an AnchorEntity which uses an Anchor from ARCore for XR.
-         *
-         * @param session Session to create the AnchorEntity in.
-         * @param anchor The PerceptionAnchor to use for this AnchorEntity.
-         */
-        @JvmStatic
-        public fun create(session: Session, anchor: Anchor): AnchorEntity {
-            return AnchorEntity.create(session.platformAdapter, session.entityManager, anchor)
-        }
-    }
-
-    /**
-     * Extension function that converts [JxrPlatformAdapter.AnchorEntity.State] to
-     * [AnchorEntity.State].
-     */
-    private fun JxrPlatformAdapter.AnchorEntity.State.fromRtState() =
-        when (this) {
-            JxrPlatformAdapter.AnchorEntity.State.UNANCHORED -> State.UNANCHORED
-            JxrPlatformAdapter.AnchorEntity.State.ANCHORED -> State.ANCHORED
-            JxrPlatformAdapter.AnchorEntity.State.TIMED_OUT -> State.TIMEDOUT
-            JxrPlatformAdapter.AnchorEntity.State.ERROR -> State.ERROR
-            JxrPlatformAdapter.AnchorEntity.State.PERMISSIONS_NOT_GRANTED ->
-                State.PERMISSIONS_NOT_GRANTED
-        }
-
-    /**
-     * Extension function that converts [JxrPlatformAdapter.AnchorEntity.PersistState] to
-     * [AnchorEntity.PersistState].
-     */
-    private fun JxrPlatformAdapter.AnchorEntity.PersistState.fromRtPersistState() =
-        when (this) {
-            JxrPlatformAdapter.AnchorEntity.PersistState.PERSIST_NOT_REQUESTED ->
-                PersistState.PERSIST_NOT_REQUESTED
-            JxrPlatformAdapter.AnchorEntity.PersistState.PERSIST_PENDING ->
-                PersistState.PERSIST_PENDING
-            JxrPlatformAdapter.AnchorEntity.PersistState.PERSISTED -> PersistState.PERSISTED
-        }
-
-    /**
-     * Registers a listener to be called when the Anchor moves relative to its underlying space.
-     *
-     * <p> The callback is triggered by any anchor movements such as those made by the underlying
-     * perception stack to maintain the anchor's position relative to the real world. Any cached
-     * data relative to the activity space or any other "space" should be updated when this callback
-     * is triggered.
-     *
-     * @param listener The listener to register if non-null, else stops listening if null.
-     * @param executor The executor to run the listener on. Defaults to SceneCore executor if null.
-     */
-    @JvmOverloads
-    @Suppress("ExecutorRegistration")
-    public fun setOnSpaceUpdatedListener(
-        listener: OnSpaceUpdatedListener?,
-        executor: Executor? = null,
-    ) {
-        rtEntity.setOnSpaceUpdatedListener(listener?.let { { it.onSpaceUpdated() } }, executor)
-    }
-}
-
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public fun interface OnStateChangedListener {
-    public fun onStateChanged(newState: @AnchorEntity.StateValue Int)
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ContentlessEntity.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ContentlessEntity.kt
deleted file mode 100644
index ab23133..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ContentlessEntity.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore
-
-import androidx.annotation.RestrictTo
-import androidx.xr.runtime.math.Pose
-
-/**
- * An Entity that itself has no content. ContentlessEntity is useful for organizing the placement,
- * movement of a group of SceneCore Entities.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class ContentlessEntity
-private constructor(rtEntity: JxrPlatformAdapter.Entity, entityManager: EntityManager) :
-    BaseEntity<JxrPlatformAdapter.Entity>(rtEntity, entityManager) {
-    public companion object {
-        /** Factory method to create ContentlessEntity entities. */
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            name: String,
-            pose: Pose = Pose.Identity,
-        ): Entity =
-            ContentlessEntity(
-                adapter.createEntity(pose, name, adapter.activitySpaceRootImpl),
-                entityManager,
-            )
-
-        /**
-         * Public factory function for creating a content-less entity. This entity is used as a
-         * connection point for attaching children entities and managing them (i.e. setPose()) as a
-         * group.
-         *
-         * @param session Session to create the ContentlessEntity in.
-         * @param name Name of the entity.
-         * @param pose Initial pose of the entity.
-         */
-        @JvmOverloads
-        @JvmStatic
-        public fun create(session: Session, name: String, pose: Pose = Pose.Identity): Entity =
-            ContentlessEntity.create(session.platformAdapter, session.entityManager, name, pose)
-    }
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/CubeMapTexture.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/CubeMapTexture.kt
index c530bd2..f3af628 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/CubeMapTexture.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/CubeMapTexture.kt
@@ -19,16 +19,18 @@
 import androidx.annotation.MainThread
 import androidx.annotation.RestrictTo
 import androidx.xr.scenecore.JxrPlatformAdapter.TextureResource as RtTextureResource
+import java.lang.ref.WeakReference
 
 /** [CubeMapTexture] represents a cube map texture that can be used with materials. */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class CubeMapTexture internal constructor(texture: RtTextureResource, session: Session) :
+public class CubeMapTexture
+internal constructor(texture: RtTextureResource, session: WeakReference<Session>) :
     Texture(texture, TextureSampler.create(), session) {
 
     public companion object {
         internal fun borrowReflectionTexture(
             platformAdapter: JxrPlatformAdapter,
-            session: Session,
+            session: WeakReference<Session>,
         ): CubeMapTexture {
             // TODO(b/396116100): Handle null return from borrow reflection texture.
             return CubeMapTexture(platformAdapter.borrowReflectionTexture()!!, session)
@@ -49,7 +51,9 @@
         @MainThread
         @JvmStatic
         public fun borrowReflectionTexture(session: Session): CubeMapTexture {
-            return borrowReflectionTexture(session.platformAdapter, session)
+            // The WeakReference prevents the Session (and its Activity) from being held in memory
+            // indefinitely.
+            return borrowReflectionTexture(session.platformAdapter, WeakReference(session))
         }
     }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Entity.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Entity.kt
index f3fa27e..cedf4d0 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Entity.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Entity.kt
@@ -14,15 +14,35 @@
  * limitations under the License.
  */
 
-@file:Suppress("BanConcurrentHashMap")
+@file:Suppress("BanConcurrentHashMap", "Deprecation")
 
 package androidx.xr.scenecore
 
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import android.graphics.Rect
+import android.os.Bundle
 import android.util.Log
+import android.view.Surface
+import android.view.View
+import androidx.annotation.IntDef
+import androidx.annotation.MainThread
 import androidx.annotation.RestrictTo
+import androidx.xr.arcore.Anchor
+import androidx.xr.runtime.Session as PerceptionSession
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity as RtEntity
+import androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource
+import androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity as RtPanelEntity
+import java.time.Duration
+import java.util.UUID
+import java.util.concurrent.ConcurrentHashMap
+import java.util.concurrent.ConcurrentMap
+import java.util.concurrent.Executor
+import java.util.concurrent.atomic.AtomicReference
+import java.util.function.Consumer
 
 /**
  * Interface for a spatial Entity. An Entity's [Pose]s are represented as being relative to their
@@ -59,44 +79,18 @@
     /* TODO b/362296608: Add a getChildren() method. */
 
     /**
-     * Sets the pose for this Entity. The pose given is set relative to the space provided.
-     *
-     * @param pose The [Pose] offset from the parent.
-     * @param relativeTo Set the pose relative to given Space. Default value is the parent space.
-     */
-    public fun setPose(pose: Pose, @SpaceValue relativeTo: Int = Space.PARENT)
-
-    /**
      * Sets the pose for this Entity, relative to its parent.
      *
      * @param pose The [Pose] offset from the parent.
      */
-    public fun setPose(pose: Pose): Unit = setPose(pose, Space.PARENT)
-
-    /**
-     * Returns the pose for this entity, relative to the provided space.
-     *
-     * @param relativeTo Get the pose relative to given Space. Default value is the parent space.
-     * @return Current [Pose] of the entity relative to the given space.
-     */
-    public fun getPose(@SpaceValue relativeTo: Int = Space.PARENT): Pose
+    public fun setPose(pose: Pose)
 
     /**
      * Returns the pose for this entity, relative to its parent.
      *
      * @return Current [Pose] offset from the parent.
      */
-    public fun getPose(): Pose = getPose(Space.PARENT)
-
-    /**
-     * Sets the scale of this entity relative to given space. This value will affect the rendering
-     * of this Entity's children. As the scale increases, this will uniformly stretch the content of
-     * the Entity.
-     *
-     * @param scale The uniform scale factor.
-     * @param relativeTo Set the scale relative to given Space. Default value is the parent space.
-     */
-    public fun setScale(scale: Float, @SpaceValue relativeTo: Int = Space.PARENT)
+    public fun getPose(): Pose
 
     /**
      * Sets the scale of this entity relative to its parent. This value will affect the rendering of
@@ -105,22 +99,14 @@
      *
      * @param scale The uniform scale factor from the parent.
      */
-    public fun setScale(scale: Float): Unit = setScale(scale, Space.PARENT)
-
-    /**
-     * Returns the scale of this entity, relative to given space.
-     *
-     * @param relativeTo Get the scale relative to given Space. Default value is the parent space.
-     * @return Current uniform scale applied to self and children.
-     */
-    public fun getScale(@SpaceValue relativeTo: Int = Space.PARENT): Float
+    public fun setScale(scale: Float)
 
     /**
      * Returns the local scale of this entity, not inclusive of the parent's scale.
      *
      * @return Current uniform scale applied to self and children.
      */
-    public fun getScale(): Float = getScale(Space.PARENT)
+    public fun getScale(): Float
 
     /**
      * Returns the accumulated scale of this Entity. This value includes the parent's world space
@@ -128,18 +114,19 @@
      *
      * @return Total uniform scale applied to self and children.
      */
-    @Deprecated("Use getScale(Space.REAL_WORLD) instead.") public fun getWorldSpaceScale(): Float
+    public fun getWorldSpaceScale(): Float
 
     /**
-     * Sets the alpha transparency of the Entity relative to given space. Values are in the range
-     * [0, 1] with 0 being fully transparent and 1 being fully opaque.
+     * Sets the dimensions in pixels for the Entity.
      *
-     * This value will affect the rendering of this Entity's children. Children of this node will
-     * have their alpha levels multiplied by this value and any alpha of this entity's ancestors.
-     *
-     * @param relativeTo Sets alpha relative to given Space. Default value is the parent space.
+     * @param dimensions Dimensions in pixels. (Z will be ignored)
+     * @deprecated ("This method is deprecated. Use BasePanelEntity<*>.setPixelDimensions()
+     *   instead.")
      */
-    public fun setAlpha(alpha: Float, @SpaceValue relativeTo: Int = Space.PARENT)
+    public fun setSize(dimensions: Dimensions)
+
+    /** Returns the dimensions (in meters) for this Entity. */
+    public fun getSize(): Dimensions
 
     /**
      * Sets the alpha transparency of the Entity and its children. Values are in the range [0, 1]
@@ -148,14 +135,7 @@
      * This value will affect the rendering of this Entity's children. Children of this node will
      * have their alpha levels multiplied by this value and any alpha of this entity's ancestors.
      */
-    public fun setAlpha(alpha: Float): Unit = setAlpha(alpha, Space.PARENT)
-
-    /**
-     * Returns the alpha transparency set for this Entity, relative to given space.
-     *
-     * @param relativeTo Gets alpha relative to given Space. Default value is the parent space.
-     */
-    public fun getAlpha(@SpaceValue relativeTo: Int = Space.PARENT): Float
+    public fun setAlpha(alpha: Float)
 
     /**
      * Returns the alpha transparency set for this Entity.
@@ -163,7 +143,18 @@
      * This does not necessarily equal the perceived alpha of the entity as the entity may have some
      * alpha difference applied from its parent or the system.
      */
-    public fun getAlpha(): Float = getAlpha(Space.PARENT)
+    public fun getAlpha(): Float
+
+    /**
+     * Returns the global alpha of this entity computed by multiplying the parent's global alpha to
+     * this entity's local alpha.
+     *
+     * This does not necessarily equal the perceived alpha of the entity as the entity may have some
+     * alpha difference applied from the system.
+     *
+     * @return Total [Float] alpha applied to this entity.
+     */
+    public fun getActivitySpaceAlpha(): Float
 
     /**
      * Sets the local hidden state of this Entity. When true, this Entity and all descendants will
@@ -232,12 +223,148 @@
     public fun removeAllComponents()
 }
 
+/**
+ * ActivitySpace is an Entity used to track the system-managed pose and boundary of the volume
+ * associated with this Spatialized Activity. The Application cannot directly control this volume,
+ * but the system might update it in response to the User moving it or entering or exiting FullSpace
+ * mode.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public class ActivitySpace
+private constructor(
+    rtActivitySpace: JxrPlatformAdapter.ActivitySpace,
+    entityManager: EntityManager,
+) : BaseEntity<JxrPlatformAdapter.ActivitySpace>(rtActivitySpace, entityManager) {
+
+    internal companion object {
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager
+        ): ActivitySpace = ActivitySpace(adapter.activitySpace, entityManager)
+    }
+
+    private val boundsListeners:
+        ConcurrentMap<
+            Consumer<Dimensions>,
+            JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener
+        > =
+        ConcurrentHashMap()
+
+    /**
+     * The listener registered when using the deprecated registerOnBoundsChangedListener method. We
+     * keep this reference so it can be removed using the corresponding unregister method.
+     */
+    // TODO: b/370538244 - remove with deprecated spatial state callbacks
+    private var registeredBoundsListener: Consumer<Dimensions>? = null
+
+    /**
+     * Retrieves a copy of the current bounds of this ActivitySpace.
+     *
+     * @return [Dimensions] representing the current bounds of this ActivitySpace.
+     */
+    // TODO b/370618648: remove suppression after API review is complete.
+    public fun getBounds(): Dimensions = rtEntity.bounds.toDimensions()
+
+    /**
+     * Adds the given [Consumer] as a listener to be invoked when this ActivitySpace's current
+     * boundary changes. [Consumer#accept(Dimensions)] will be invoked on the main thread.
+     *
+     * @param listener The Consumer to be invoked when this ActivitySpace's current boundary
+     *   changes.
+     */
+    // TODO b/370618648: remove suppression after API review is complete.
+    public fun addBoundsChangedListener(listener: Consumer<Dimensions>): Unit =
+        addBoundsChangedListener(HandlerExecutor.mainThreadExecutor, listener)
+
+    /**
+     * Adds the given [Consumer] as a listener to be invoked when this ActivitySpace's current
+     * boundary changes. [Consumer#accept(Dimensions)] will be invoked on the given executor.
+     *
+     * @param callbackExecutor The executor on which to invoke the listener on.
+     * @param listener The Consumer to be invoked when this ActivitySpace's current boundary
+     *   changes.
+     */
+    // TODO b/370618648: remove suppression after API review is complete.
+    public fun addBoundsChangedListener(
+        callbackExecutor: Executor,
+        listener: Consumer<Dimensions>
+    ) {
+        val rtListener: JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener =
+            JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener { rtDimensions ->
+                callbackExecutor.execute { listener.accept(rtDimensions.toDimensions()) }
+            }
+        boundsListeners.compute(
+            listener,
+            { _, _ ->
+                rtEntity.addOnBoundsChangedListener(rtListener)
+                rtListener
+            },
+        )
+    }
+
+    /**
+     * Releases the given [Consumer] from receiving updates when the ActivitySpace's boundary
+     * changes.
+     *
+     * @param listener The Consumer to be removed from receiving updates.
+     */
+    // TODO b/370618648: remove suppression after API review is complete.
+    public fun removeBoundsChangedListener(listener: Consumer<Dimensions>): Unit {
+        boundsListeners.computeIfPresent(
+            listener,
+            { _, rtListener ->
+                rtEntity.removeOnBoundsChangedListener(rtListener)
+                null // returning null from computeIfPresent removes this entry from the Map
+            },
+        )
+    }
+
+    /**
+     * Sets a callback to be invoked when the bounds of the ActivitySpace change. The callback will
+     * be dispatched on the UI thread.
+     *
+     * @param listener A ((Dimensions) -> Unit) callback, where Dimensions are in meters.
+     */
+    // TODO: b/370538244 - remove with deprecated spatial state callbacks
+    @Deprecated(message = "use addBoundsChangedListener(Consumer<Dimensions>)")
+    public fun registerOnBoundsChangedListener(listener: OnBoundsChangeListener) {
+        if (registeredBoundsListener != null) unregisterOnBoundsChangedListener()
+        registeredBoundsListener =
+            Consumer<Dimensions> { bounds -> listener.onBoundsChanged(bounds) }
+        addBoundsChangedListener(registeredBoundsListener!!)
+    }
+
+    /** Clears the listener set by [registerOnBoundsChangedListener]. */
+    // TODO: b/370538244 - remove with deprecated spatial state callbacks
+    @Deprecated(message = "use removeBoundsChangedListener(Consumer<Dimensions>)")
+    public fun unregisterOnBoundsChangedListener() {
+        if (registeredBoundsListener != null) {
+            removeBoundsChangedListener(registeredBoundsListener!!)
+            registeredBoundsListener = null
+        }
+    }
+
+    /**
+     * Registers a listener to be called when the underlying space has moved or changed.
+     *
+     * @param listener The listener to register if non-null, else stops listening if null.
+     * @param executor The executor to run the listener on. Defaults to SceneCore executor if null.
+     */
+    @JvmOverloads
+    @Suppress("ExecutorRegistration")
+    public fun setOnSpaceUpdatedListener(
+        listener: OnSpaceUpdatedListener?,
+        executor: Executor? = null,
+    ) {
+        rtEntity.setOnSpaceUpdatedListener(listener?.let { { it.onSpaceUpdated() } }, executor)
+    }
+}
+
 /** The BaseEntity is an implementation of Entity interface that wraps a platform entity. */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public abstract class BaseEntity<out RtEntityType : RtEntity>
-internal constructor(
+public sealed class BaseEntity<out RtEntityType : RtEntity>(
     internal val rtEntity: RtEntityType,
-    private val entityManager: EntityManager,
+    internal val entityManager: EntityManager,
 ) : Entity, BaseActivityPose<JxrPlatformAdapter.ActivityPose>(rtEntity) {
 
     init {
@@ -248,6 +375,7 @@
         private const val TAG = "BaseEntity"
     }
 
+    private var dimensions: Dimensions = Dimensions()
     private val componentList = mutableListOf<Component>()
 
     override fun setParent(parent: Entity?) {
@@ -275,33 +403,42 @@
         rtEntity.addChild(child.rtEntity)
     }
 
-    override fun setPose(pose: Pose, @SpaceValue relativeTo: Int) {
-        rtEntity.setPose(pose, relativeTo.toRtSpace())
+    override fun setPose(pose: Pose) {
+        rtEntity.setPose(pose)
     }
 
-    override fun getPose(@SpaceValue relativeTo: Int): Pose {
-        return rtEntity.getPose(relativeTo.toRtSpace())
+    override fun getPose(): Pose {
+        return rtEntity.pose
     }
 
-    override fun setScale(scale: Float, relativeTo: Int) {
-        rtEntity.setScale(Vector3(scale, scale, scale), relativeTo.toRtSpace())
+    override fun setScale(scale: Float) {
+        rtEntity.setScale(Vector3(scale, scale, scale))
     }
 
-    override fun getScale(@SpaceValue relativeTo: Int): Float {
-        return rtEntity.getScale(relativeTo.toRtSpace()).x
+    override fun getScale(): Float {
+        return rtEntity.scale.x
     }
 
-    @Deprecated("Use getScale(relativeTo) instead.", ReplaceWith("getScale(Space.REAL_WORLD)"))
     override fun getWorldSpaceScale(): Float {
         return rtEntity.worldSpaceScale.x
     }
 
-    override fun setAlpha(alpha: Float, @SpaceValue relativeTo: Int) {
-        rtEntity.setAlpha(alpha, relativeTo.toRtSpace())
+    // TODO: b/356874139 - remove this method
+    override fun setSize(dimensions: Dimensions) {
+        rtEntity.setSize(dimensions.toRtDimensions())
+        this.dimensions = dimensions
     }
 
-    override fun getAlpha(@SpaceValue relativeTo: Int): Float =
-        rtEntity.getAlpha(relativeTo.toRtSpace())
+    // TODO: b/328620113 - Get the dimensions from EntityImpl.
+    override fun getSize(): Dimensions = dimensions
+
+    override fun setAlpha(alpha: Float) {
+        rtEntity.alpha = alpha
+    }
+
+    override fun getAlpha(): Float = rtEntity.alpha
+
+    override fun getActivitySpaceAlpha(): Float = rtEntity.activitySpaceAlpha
 
     override fun setHidden(hidden: Boolean): Unit = rtEntity.setHidden(hidden)
 
@@ -344,6 +481,969 @@
     override fun setContentDescription(text: String) {}
 }
 
+/**
+ * An Entity that itself has no content. ContentlessEntity is useful for organizing the placement,
+ * movement of a group of SceneCore Entities.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public class ContentlessEntity
+private constructor(rtEntity: RtEntity, entityManager: EntityManager) :
+    BaseEntity<RtEntity>(rtEntity, entityManager) {
+    public companion object {
+        /** Factory method to create ContentlessEntity entities. */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            name: String,
+            pose: Pose = Pose.Identity,
+        ): Entity =
+            ContentlessEntity(
+                adapter.createEntity(pose, name, adapter.activitySpaceRootImpl),
+                entityManager,
+            )
+
+        /**
+         * Public factory function for creating a content-less entity. This entity is used as a
+         * connection point for attaching children entities and managing them (i.e. setPose()) as a
+         * group.
+         *
+         * @param session Session to create the ContentlessEntity in.
+         * @param name Name of the entity.
+         * @param pose Initial pose of the entity.
+         */
+        @JvmOverloads
+        @JvmStatic
+        public fun create(session: Session, name: String, pose: Pose = Pose.Identity): Entity =
+            ContentlessEntity.create(session.platformAdapter, session.entityManager, name, pose)
+    }
+}
+
+/** Provides implementations for common Panel functionality. */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public sealed class BasePanelEntity<out RtPanelEntityType : RtPanelEntity>(
+    private val rtPanelEntity: RtPanelEntityType,
+    entityManager: EntityManager,
+) : BaseEntity<RtPanelEntity>(rtPanelEntity, entityManager) {
+
+    /**
+     * Sets the corner radius of the PanelEntity.
+     *
+     * @param radius The radius of the corners, in meters.
+     * @throws IllegalArgumentException if radius is <= 0.0f.
+     */
+    public fun setCornerRadius(radius: Float) {
+        rtPanelEntity.setCornerRadius(radius)
+    }
+
+    /** Gets the corner radius of this PanelEntity in meters. Has a default value of 0. */
+    public fun getCornerRadius(): Float {
+        return rtPanelEntity.cornerRadius
+    }
+
+    /**
+     * Returns the dimensions of the view underlying this PanelEntity.
+     *
+     * @return The current (width, height) of the underlying surface in pixels.
+     */
+    public fun getPixelDimensions(): PixelDimensions {
+        return rtPanelEntity.getPixelDimensions().toPixelDimensions()
+    }
+
+    /**
+     * Sets the pixel (not Dp) dimensions of the view underlying this PanelEntity. Calling this
+     * might cause the layout of the Panel contents to change. Updating this will not cause the
+     * scale or pixel density to change.
+     *
+     * @param pxDimensions The [PixelDimensions] of the underlying surface to set.
+     */
+    public fun setPixelDimensions(pxDimensions: PixelDimensions) {
+        rtPanelEntity.setPixelDimensions(pxDimensions.toRtPixelDimensions())
+    }
+
+    /**
+     * Gets the number of pixels per meter for this panel. This value reflects changes to scale,
+     * including parent scale.
+     *
+     * @return Vector3 scale applied to pixels within the Panel. (Z will be 0)
+     */
+    public fun getPixelDensity(): Vector3 {
+        return rtPanelEntity.pixelDensity
+    }
+
+    /**
+     * Returns the spatial size of this Panel in meters. This includes any scaling applied to this
+     * panel by itself or its parents, which might be set via changes to setScale.
+     *
+     * @return [Dimensions] size of this panel in meters. (Z will be 0)
+     */
+    override fun getSize(): Dimensions {
+        return rtPanelEntity.getSize().toDimensions()
+    }
+}
+
+/**
+ * GltfModelEntity is a concrete implementation of Entity that hosts a glTF model.
+ *
+ * Note: The size property of this Entity is always reported as {0, 0, 0}, regardless of the actual
+ * size of the model.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public class GltfModelEntity
+private constructor(rtEntity: JxrPlatformAdapter.GltfEntity, entityManager: EntityManager) :
+    BaseEntity<JxrPlatformAdapter.GltfEntity>(rtEntity, entityManager) {
+    // TODO: b/362368652 - Add an OnAnimationEvent() Listener interface
+
+    /** Specifies the current animation state of the GltfModelEntity. */
+    @IntDef(AnimationState.PLAYING, AnimationState.STOPPED)
+    @Retention(AnnotationRetention.SOURCE)
+    internal annotation class AnimationStateValue
+
+    public object AnimationState {
+        public const val PLAYING: Int = 0
+        public const val STOPPED: Int = 1
+    }
+
+    public companion object {
+        /**
+         * Factory method for GltfModelEntity.
+         *
+         * @param adapter Jetpack XR platform adapter.
+         * @param model [GltfModel] which this entity will display.
+         * @param pose Pose for this [GltfModelEntity], relative to its parent.
+         */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            model: GltfModel,
+            pose: Pose = Pose.Identity,
+        ): GltfModelEntity =
+            GltfModelEntity(
+                adapter.createGltfEntity(pose, model.model, adapter.activitySpaceRootImpl),
+                entityManager,
+            )
+
+        /**
+         * Public factory function for a [GltfModelEntity].
+         *
+         * This method must be called from the main thread.
+         * https://developer.android.com/guide/components/processes-and-threads
+         *
+         * @param session Session to create the [GltfModel] in.
+         * @param model The [GltfModel] this Entity is referencing.
+         * @param pose The initial pose of the entity.
+         * @return a GltfModelEntity instance
+         */
+        @MainThread
+        @JvmStatic
+        @JvmOverloads
+        public fun create(
+            session: Session,
+            model: GltfModel,
+            pose: Pose = Pose.Identity,
+        ): GltfModelEntity =
+            GltfModelEntity.create(session.platformAdapter, session.entityManager, model, pose)
+    }
+
+    /** Returns the current animation state of this glTF entity. */
+    @AnimationStateValue
+    public fun getAnimationState(): Int {
+        return when (rtEntity.animationState) {
+            JxrPlatformAdapter.GltfEntity.AnimationState.PLAYING -> return AnimationState.PLAYING
+            JxrPlatformAdapter.GltfEntity.AnimationState.STOPPED -> return AnimationState.STOPPED
+            else -> AnimationState.STOPPED
+        }
+    }
+
+    /**
+     * Starts the animation with the given name.
+     *
+     * This method must be called from the main thread.
+     * https://developer.android.com/guide/components/processes-and-threads
+     *
+     * @param animationName The name of the animation to start. If null, the first animation found
+     *   in the glTF will be played.
+     * @param loop Whether the animation should loop.
+     */
+    @MainThread
+    @JvmOverloads
+    public fun startAnimation(loop: Boolean, animationName: String? = null) {
+        rtEntity.startAnimation(loop, animationName)
+    }
+
+    /**
+     * Stops the animation of the glTF entity.
+     *
+     * This method must be called from the main thread.
+     * https://developer.android.com/guide/components/processes-and-threads
+     */
+    @MainThread
+    public fun stopAnimation() {
+        rtEntity.stopAnimation()
+    }
+
+    /**
+     * Sets a material override for a mesh in the glTF model.
+     *
+     * This method must be called from the main thread.
+     * https://developer.android.com/guide/components/processes-and-threads
+     *
+     * If the material is not created or the mesh name is not found in the glTF model, this method
+     * will throw an IllegalStateException.
+     *
+     * @param material The material to use for the mesh.
+     * @param meshName The name of the mesh to use the material for.
+     */
+    @MainThread
+    public fun setMaterialOverride(material: MaterialResource, meshName: String) {
+        rtEntity.setMaterialOverride(material, meshName)
+    }
+}
+
+/**
+ * SurfaceEntity is a concrete implementation of Entity that hosts a StereoSurface Canvas. The
+ * entity creates and owns an Android Surface into which the application can render stereo image
+ * content. This Surface is then texture mapped to the canvas, and if a stereoscopic StereoMode is
+ * specified, then the User will see left and right eye content mapped to the appropriate display.
+ *
+ * Note that it is not currently possible to synchronize CanvasShape and StereoMode changes with
+ * application rendering or video decoding. Applications are advised to carefully hide this entity
+ * around transitions to manage glitchiness.
+ *
+ * @property canvasShape The [CanvasShape] which describes the mesh to which the Surface is mapped.
+ * @property stereoMode The [StereoMode] which describes how parts of the surface are displayed to
+ *   the user's eyes.
+ * @property dimensions The dimensions of the canvas in the local spatial coordinate system of the
+ *   entity.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public class SurfaceEntity
+private constructor(
+    rtEntity: JxrPlatformAdapter.SurfaceEntity,
+    entityManager: EntityManager,
+    canvasShape: CanvasShape,
+) : BaseEntity<JxrPlatformAdapter.SurfaceEntity>(rtEntity, entityManager) {
+
+    /** Represents the shape of the Canvas that backs a SurfaceEntity. */
+    public abstract class CanvasShape private constructor() {
+        public open val dimensions: Dimensions = Dimensions(0.0f, 0.0f, 0.0f)
+
+        // A Quad-shaped canvas. Width and height are represented in the local spatial coordinate
+        // system of the entity. (0,0,0) is the center of the canvas.
+        public class Quad(public val width: Float, public val height: Float) : CanvasShape() {
+            override val dimensions: Dimensions
+                get() = Dimensions(width, height, 0.0f)
+        }
+
+        // An inwards-facing sphere-shaped canvas, centered at (0,0,0) in the local coordinate
+        // space.
+        // This is intended to be used by setting the entity's pose to the user's head pose.
+        // Radius is represented in the local spatial coordinate system of the entity.
+        // The center of the Surface will be mapped to (0, 0, -radius) in the local coordinate
+        // space,
+        // and UV's are applied from positive X to negative X in an equirectangular projection.
+        public class Vr360Sphere(public val radius: Float) : CanvasShape() {
+            override val dimensions: Dimensions
+                get() = Dimensions(radius * 2, radius * 2, radius * 2)
+        }
+
+        // An inwards-facing hemisphere-shaped canvas, where (0,0,0) is the center of the base of
+        // the
+        // hemisphere. Radius is represented in the local spatial coordinate system of the entity.
+        // This is intended to be used by setting the entity's pose to the user's head pose.
+        // The center of the Surface will be mapped to (0, 0, -radius) in the local coordinate
+        // space,
+        // and UV's are applied from positive X to negative X in an equirectangular projection.
+        public class Vr180Hemisphere(public val radius: Float) : CanvasShape() {
+            override val dimensions: Dimensions
+                get() = Dimensions(radius * 2, radius * 2, radius)
+        }
+    }
+
+    /**
+     * Specifies how the surface content will be routed for stereo viewing. Applications must render
+     * into the surface in accordance with what is specified here in order for the compositor to
+     * correctly produce a stereoscopic view to the user.
+     *
+     * Values here match values from androidx.media3.common.C.StereoMode in
+     * //third_party/java/android_libs/media:common
+     */
+    @IntDef(StereoMode.MONO, StereoMode.TOP_BOTTOM, StereoMode.SIDE_BY_SIDE)
+    @Retention(AnnotationRetention.SOURCE)
+    internal annotation class StereoModeValue
+
+    public object StereoMode {
+        // Each eye will see the entire surface (no separation)
+        public const val MONO: Int = 0
+        // The [bottom, top] halves of the surface will map to [left, right] eyes
+        public const val TOP_BOTTOM: Int = 1
+        // The [left, right] halves of the surface will map to [left, right] eyes
+        public const val SIDE_BY_SIDE: Int = 2
+    }
+
+    public companion object {
+        private fun getRtStereoMode(stereoMode: Int): Int {
+            return when (stereoMode) {
+                StereoMode.MONO -> JxrPlatformAdapter.SurfaceEntity.StereoMode.MONO
+                StereoMode.TOP_BOTTOM -> JxrPlatformAdapter.SurfaceEntity.StereoMode.TOP_BOTTOM
+                else -> JxrPlatformAdapter.SurfaceEntity.StereoMode.SIDE_BY_SIDE
+            }
+        }
+
+        /**
+         * Factory method for SurfaceEntity.
+         *
+         * @param adapter JxrPlatformAdapter to use.
+         * @param entityManager A SceneCore EntityManager
+         * @param stereoMode An [Int] which defines how surface subregions map to eyes
+         * @param pose Pose for this StereoSurface entity, relative to its parent.
+         * @param canvasShape The [CanvasShape] which describes the spatialized shape of the canvas.
+         */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            stereoMode: Int = StereoMode.SIDE_BY_SIDE,
+            pose: Pose = Pose.Identity,
+            canvasShape: CanvasShape = CanvasShape.Quad(1.0f, 1.0f),
+        ): SurfaceEntity {
+            val rtCanvasShape =
+                when (canvasShape) {
+                    is CanvasShape.Quad ->
+                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Quad(
+                            canvasShape.width,
+                            canvasShape.height
+                        )
+                    is CanvasShape.Vr360Sphere ->
+                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr360Sphere(canvasShape.radius)
+                    is CanvasShape.Vr180Hemisphere ->
+                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr180Hemisphere(
+                            canvasShape.radius
+                        )
+                    else -> throw IllegalArgumentException("Unsupported canvas shape: $canvasShape")
+                }
+            return SurfaceEntity(
+                adapter.createSurfaceEntity(
+                    getRtStereoMode(stereoMode),
+                    rtCanvasShape,
+                    pose,
+                    adapter.activitySpaceRootImpl,
+                ),
+                entityManager,
+                canvasShape,
+            )
+        }
+
+        /**
+         * Public factory function for a SurfaceEntity.
+         *
+         * This method must be called from the main thread.
+         * https://developer.android.com/guide/components/processes-and-threads
+         *
+         * @param session Session to create the SurfaceEntity in.
+         * @param stereoMode Stereo mode for the surface.
+         * @param pose Pose of this entity relative to its parent, default value is Identity.
+         * @param canvasShape The [CanvasShape] which describes the spatialized shape of the canvas.
+         * @return a SurfaceEntity instance
+         */
+        @MainThread
+        @JvmOverloads
+        @JvmStatic
+        public fun create(
+            session: Session,
+            stereoMode: Int = SurfaceEntity.StereoMode.SIDE_BY_SIDE,
+            pose: Pose = Pose.Identity,
+            canvasShape: CanvasShape = CanvasShape.Quad(1.0f, 1.0f),
+        ): SurfaceEntity =
+            SurfaceEntity.create(
+                session.platformAdapter,
+                session.entityManager,
+                stereoMode,
+                pose,
+                canvasShape,
+            )
+    }
+
+    /**
+     * Controls how the surface content will be routed for stereo viewing. Applications must render
+     * into the surface in accordance with what is specified here in order for the compositor to
+     * correctly produce a stereoscopic view to the user.
+     *
+     * Values must be one of the values from [StereoMode].
+     */
+    public var stereoMode: Int
+        get() = rtEntity.stereoMode
+        @MainThread
+        set(value) {
+            rtEntity.stereoMode = getRtStereoMode(value)
+        }
+
+    /**
+     * Returns the dimensions of the Entity.
+     *
+     * This is the size of the canvas in the local spatial coordinate system of the entity. This
+     * field cannot be directly set - to update the dimensions of the canvas, update the value of
+     * [canvasShape].
+     */
+    public val dimensions: Dimensions
+        get() = rtEntity.dimensions.toDimensions()
+
+    /**
+     * The shape of the canvas that backs the Entity.
+     *
+     * Updating this value will alter the dimensions of the Entity.
+     */
+    public var canvasShape: CanvasShape = canvasShape
+        @MainThread
+        set(value) {
+            val rtCanvasShape =
+                when (value) {
+                    is CanvasShape.Quad ->
+                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Quad(value.width, value.height)
+                    is CanvasShape.Vr360Sphere ->
+                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr360Sphere(value.radius)
+                    is CanvasShape.Vr180Hemisphere ->
+                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr180Hemisphere(value.radius)
+                    else -> throw IllegalArgumentException("Unsupported canvas shape: $value")
+                }
+            rtEntity.setCanvasShape(rtCanvasShape)
+            field = value
+        }
+
+    /**
+     * Returns a surface into which the application can render stereo image content.
+     *
+     * This method must be called from the main thread.
+     * https://developer.android.com/guide/components/processes-and-threads
+     */
+    @MainThread
+    public fun getSurface(): Surface {
+        return rtEntity.surface
+    }
+}
+
+/** PanelEntity creates a spatial panel in Android XR. */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public open class PanelEntity
+internal constructor(
+    rtEntity: JxrPlatformAdapter.PanelEntity,
+    entityManager: EntityManager,
+    // TODO(ricknels): move isMainPanelEntity check to JxrPlatformAdapter.
+    public val isMainPanelEntity: Boolean = false,
+) : BasePanelEntity<JxrPlatformAdapter.PanelEntity>(rtEntity, entityManager) {
+
+    public companion object {
+        /**
+         * Factory method for PanelEntity.
+         *
+         * @param adapter JxrPlatformAdapter to use.
+         * @param view View to insert in this panel.
+         * @param surfaceDimensionsPx Dimensions for the underlying surface for the given view.
+         * @param dimensions The size of this spatial Panel Entity in Meters.
+         * @param name Name of this panel.
+         * @param context Activity which created this panel.
+         * @param pose Pose for this panel, relative to its parent.
+         */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            view: View,
+            surfaceDimensionsPx: Dimensions,
+            dimensions: Dimensions,
+            name: String,
+            context: Context,
+            pose: Pose = Pose.Identity,
+        ): PanelEntity =
+            PanelEntity(
+                adapter.createPanelEntity(
+                    pose,
+                    view,
+                    PixelDimensions(
+                            surfaceDimensionsPx.width.toInt(),
+                            surfaceDimensionsPx.height.toInt()
+                        )
+                        .toRtPixelDimensions(),
+                    dimensions.toRtDimensions(),
+                    name,
+                    context,
+                    adapter.activitySpaceRootImpl,
+                ),
+                entityManager,
+            )
+
+        // TODO(b/352629832): Update surfaceDimensionsPx to be a PixelDimensions
+        /**
+         * Public factory function for a spatialized PanelEntity.
+         *
+         * @param session Session to create the PanelEntity in.
+         * @param view View to embed in this panel entity.
+         * @param surfaceDimensionsPx Dimensions for the underlying surface for the given view.
+         * @param dimensions Dimensions for the panel in meters.
+         * @param name Name of the panel.
+         * @param pose Pose of this entity relative to its parent, default value is Identity.
+         * @return a PanelEntity instance.
+         */
+        @JvmOverloads
+        @JvmStatic
+        public fun create(
+            session: Session,
+            view: View,
+            surfaceDimensionsPx: Dimensions,
+            dimensions: Dimensions,
+            name: String,
+            pose: Pose = Pose.Identity,
+        ): PanelEntity =
+            PanelEntity.create(
+                session.platformAdapter,
+                session.entityManager,
+                view,
+                surfaceDimensionsPx,
+                dimensions,
+                name,
+                session.activity,
+                pose,
+            )
+
+        /** Returns the PanelEntity backed by the main window for the Activity. */
+        internal fun createMainPanelEntity(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+        ): PanelEntity =
+            PanelEntity(adapter.mainPanelEntity, entityManager, isMainPanelEntity = true)
+    }
+}
+
+/**
+ * ActivityPanelEntity creates a spatial panel for embedding an Activity in Android XR. Users can
+ * either use an intent to launch an activity in the given panel or provide an instance of activity
+ * to move into this panel. Calling dispose() on this entity will destroy the underlying activity.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public class ActivityPanelEntity
+private constructor(
+    private val rtActivityPanelEntity: JxrPlatformAdapter.ActivityPanelEntity,
+    entityManager: EntityManager,
+) : PanelEntity(rtActivityPanelEntity, entityManager) {
+
+    /**
+     * Launches an activity in the given panel. Subsequent calls to this method will replace the
+     * already existing activity in the panel with the new one. If the intent fails to launch the
+     * activity, the panel will not be visible. Note this will not update the dimensions of the
+     * surface underlying the panel. The Activity will be letterboxed as required to fit the size of
+     * the panel. The underlying surface can be resized by calling setPixelDimensions().
+     *
+     * @param intent Intent to launch the activity.
+     * @param bundle Bundle to pass to the activity, can be null.
+     */
+    @JvmOverloads
+    public fun launchActivity(intent: Intent, bundle: Bundle? = null) {
+        rtActivityPanelEntity.launchActivity(intent, bundle)
+    }
+
+    /**
+     * Moves the given activity into this panel. Note this will not update the dimensions of the
+     * surface underlying the panel. The Activity will be letterboxed as required to fit the size of
+     * the panel. The underlying surface can be resized by calling setPixelDimensions().
+     *
+     * @param activity Activity to move into this panel.
+     */
+    public fun moveActivity(activity: Activity) {
+        rtActivityPanelEntity.moveActivity(activity)
+    }
+
+    public companion object {
+        /**
+         * Factory method for ActivityPanelEntity.
+         *
+         * @param adapter JxrPlatformAdapter to use.
+         * @param windowBoundsPx Bounds for the underlying surface for the given view.
+         * @param name Name of this panel.
+         * @param hostActivity Activity which created this panel.
+         * @param pose Pose for this panel, relative to its parent.
+         */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            windowBoundsPx: PixelDimensions,
+            name: String,
+            hostActivity: Activity,
+            pose: Pose = Pose.Identity,
+        ): ActivityPanelEntity =
+            ActivityPanelEntity(
+                adapter.createActivityPanelEntity(
+                    pose,
+                    windowBoundsPx.toRtPixelDimensions(),
+                    name,
+                    hostActivity,
+                    adapter.activitySpaceRootImpl,
+                ),
+                entityManager,
+            )
+
+        // TODO(b/352629832): Update windowBoundsPx to be a PixelDimensions
+        /**
+         * Public factory function for a spatial ActivityPanelEntity.
+         *
+         * @param session Session to create the ActivityPanelEntity in.
+         * @param windowBoundsPx Bounds for the panel window in pixels.
+         * @param name Name of the panel.
+         * @param pose Pose of this entity relative to its parent, default value is Identity.
+         * @return an ActivityPanelEntity instance.
+         */
+        @JvmOverloads
+        @JvmStatic
+        public fun create(
+            session: Session,
+            windowBoundsPx: Rect,
+            name: String,
+            pose: Pose = Pose.Identity,
+        ): ActivityPanelEntity =
+            ActivityPanelEntity.create(
+                session.platformAdapter,
+                session.entityManager,
+                PixelDimensions(windowBoundsPx.width(), windowBoundsPx.height()),
+                name,
+                session.activity,
+                pose,
+            )
+    }
+}
+
+/** TODO - Convert AnchorEntity into a Space (This will remove setParent) */
+
+/**
+ * An AnchorEntity is created to track a Pose relative to some position or surface in the "Real
+ * World." Children of this Entity will remain positioned relative to that location in the real
+ * world, for the purposes of creating Augmented Reality experiences.
+ *
+ * Note that Anchors are only relative to the "real world", and not virtual environments. Also,
+ * calling setParent() on an AnchorEntity has no effect, as the parenting of an Anchor is controlled
+ * by the system.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public class AnchorEntity
+private constructor(rtEntity: JxrPlatformAdapter.AnchorEntity, entityManager: EntityManager) :
+    BaseEntity<JxrPlatformAdapter.AnchorEntity>(rtEntity, entityManager) {
+    private val state = AtomicReference(rtEntity.state.fromRtState())
+    private val persistState = AtomicReference(rtEntity.persistState.fromRtPersistState())
+
+    private var onStateChangedListener: OnStateChangedListener? = null
+
+    /** Specifies the current tracking state of the Anchor. */
+    @Target(AnnotationTarget.TYPE)
+    @IntDef(State.ANCHORED, State.UNANCHORED, State.TIMEDOUT, State.ERROR)
+    @Retention(AnnotationRetention.SOURCE)
+    internal annotation class StateValue
+
+    public object State {
+        /**
+         * The ANCHORED state means that this Anchor is being actively tracked and updated by the
+         * perception stack. The application should expect children to maintain their relative
+         * positioning to the system's best understanding of a pose in the real world.
+         */
+        public const val ANCHORED: Int = 0
+        /**
+         * An UNANCHORED state could mean that the perception stack hasn't found an anchor for this
+         * Space, that it has lost tracking.
+         */
+        public const val UNANCHORED: Int = 1
+        /**
+         * The AnchorEntity timed out while searching for an underlying anchor. This it is not
+         * possible to recover the AnchorEntity.
+         */
+        public const val TIMEDOUT: Int = 2
+        /**
+         * The ERROR state means that something has gone wrong and this AnchorEntity is invalid
+         * without the possibility of recovery.
+         */
+        public const val ERROR: Int = 3
+        /**
+         * The PERMISSIONS_NOT_GRANTED state means that the user has not granted the necessary
+         * permissions i.e. SCENE_UNDERSTANDING to create this AnchorEntity.
+         */
+        public const val PERMISSIONS_NOT_GRANTED: Int = 4
+    }
+
+    /** Specifies the current persist state of the Anchor. */
+    public enum class PersistState {
+        /** The anchor hasn't been requested to persist. */
+        PERSIST_NOT_REQUESTED,
+        /** The anchor is requested to persist but hasn't been persisted yet. */
+        PERSIST_PENDING,
+        /** The anchor is persisted successfully. */
+        PERSISTED,
+    }
+
+    /** Returns the current tracking state for this AnchorEntity. */
+    public fun getState(): @StateValue Int = state.get()
+
+    /** Registers a listener callback to be issued when an anchor's state changes. */
+    @Suppress("ExecutorRegistration")
+    public fun setOnStateChangedListener(onStateChangedListener: OnStateChangedListener?) {
+        this.onStateChangedListener = onStateChangedListener
+        if (state.get() == State.PERMISSIONS_NOT_GRANTED) {
+            onStateChangedListener?.onStateChanged(State.PERMISSIONS_NOT_GRANTED)
+        }
+    }
+
+    /** Updates the current state. */
+    private fun setState(newState: @StateValue Int) {
+        state.set(newState)
+        onStateChangedListener?.onStateChanged(newState)
+    }
+
+    /** Gets the current PersistState. */
+    public fun getPersistState(): PersistState = persistState.get()
+
+    /**
+     * Requests to persist the anchor. If the anchor's State is not ANCHORED, no request will be
+     * sent and null is returned. If the request is sent successfully, returns an UUID of the anchor
+     * immediately; otherwise returns null. After this call, client should use getPersistState() to
+     * check the PersistState of the anchor. If the anchor's PersistState becomes PERSISTED before
+     * the app is closed the anchor can be recreated in a new session by calling
+     * Session.createPersistedAnchorEntity(uuid). If the PersistState doesn't become PERSISTED
+     * before the app is closed, the recreation will fail.
+     */
+    public fun persist(): UUID? {
+        if (state.get() != State.ANCHORED) {
+            Log.e(TAG, "Cannot persist an anchor that is not in the ANCHORED state.")
+            return null
+        }
+        val uuid = rtEntity.persist()
+        if (uuid == null) {
+            Log.e(TAG, "Failed to get a UUID for the anchor.")
+            return null
+        }
+
+        rtEntity.registerPersistStateChangeListener { newRtPersistState ->
+            persistState.set(newRtPersistState.fromRtPersistState())
+        }
+        return uuid
+    }
+
+    /**
+     * Loads the ARCore for XR Anchor using a Jetpack XR Runtime session.
+     *
+     * @param session the Jetpack XR Runtime session to load the Anchor from.
+     * @return the ARCore for XR Anchor corresponding to the native pointer.
+     */
+    // TODO(b/373711152) : Remove this method once the ARCore for XR API migration is done.
+    public fun getAnchor(session: PerceptionSession): Anchor {
+        return Anchor.loadFromNativePointer(session, rtEntity.nativePointer())
+    }
+
+    public companion object {
+        private const val TAG = "AnchorEntity"
+
+        /**
+         * Factory method for AnchorEntity.
+         *
+         * @param adapter JxrPlatformAdapter to use.
+         * @param bounds Bounds for this Anchor Entity.
+         * @param planeType Orientation for the plane to which this Anchor should attach.
+         * @param planeSemantic Semantics for the plane to which this Anchor should attach.
+         * @param timeout Maximum time to search for the anchor, if a suitable plane is not found
+         *   within the timeout time the AnchorEntity state will be set to TIMED_OUT.
+         */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            bounds: Dimensions,
+            planeType: @PlaneTypeValue Int,
+            planeSemantic: @PlaneSemanticValue Int,
+            timeout: Duration = Duration.ZERO,
+        ): AnchorEntity {
+            val rtAnchorEntity =
+                adapter.createAnchorEntity(
+                    bounds.toRtDimensions(),
+                    planeType.toRtPlaneType(),
+                    planeSemantic.toRtPlaneSemantic(),
+                    timeout,
+                )
+            return create(rtAnchorEntity, entityManager)
+        }
+
+        /**
+         * Factory method for AnchorEntity.
+         *
+         * @param anchor Anchor to create an AnchorEntity for.
+         */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            anchor: Anchor,
+        ): AnchorEntity {
+            val rtAnchorEntity = adapter.createAnchorEntity(anchor)
+            return create(rtAnchorEntity, entityManager)
+        }
+
+        /**
+         * Factory method for AnchorEntity.
+         *
+         * @param rtAnchorEntity Runtime AnchorEntity instance.
+         */
+        internal fun create(
+            rtAnchorEntity: JxrPlatformAdapter.AnchorEntity,
+            entityManager: EntityManager,
+        ): AnchorEntity {
+            val anchorEntity = AnchorEntity(rtAnchorEntity, entityManager)
+            rtAnchorEntity.setOnStateChangedListener { newRtState ->
+                when (newRtState) {
+                    JxrPlatformAdapter.AnchorEntity.State.UNANCHORED ->
+                        anchorEntity.setState(State.UNANCHORED)
+                    JxrPlatformAdapter.AnchorEntity.State.ANCHORED ->
+                        anchorEntity.setState(State.ANCHORED)
+                    JxrPlatformAdapter.AnchorEntity.State.TIMED_OUT ->
+                        anchorEntity.setState(State.TIMEDOUT)
+                    JxrPlatformAdapter.AnchorEntity.State.ERROR ->
+                        anchorEntity.setState(State.ERROR)
+                    JxrPlatformAdapter.AnchorEntity.State.PERMISSIONS_NOT_GRANTED ->
+                        anchorEntity.setState(State.PERMISSIONS_NOT_GRANTED)
+                }
+            }
+            return anchorEntity
+        }
+
+        /**
+         * Factory method for AnchorEntity.
+         *
+         * @param adapter JxrPlatformAdapter to use.
+         * @param uuid UUID of the persisted Anchor Entity to create.
+         * @param timeout Maximum time to search for the anchor, if a persisted anchor isn't located
+         *   within the timeout time the AnchorEntity state will be set to TIMED_OUT.
+         */
+        internal fun create(
+            adapter: JxrPlatformAdapter,
+            entityManager: EntityManager,
+            uuid: UUID,
+            timeout: Duration = Duration.ZERO,
+        ): AnchorEntity {
+            val rtAnchorEntity = adapter.createPersistedAnchorEntity(uuid, timeout)
+            val anchorEntity = AnchorEntity(rtAnchorEntity, entityManager)
+            rtAnchorEntity.setOnStateChangedListener { newRtState ->
+                when (newRtState) {
+                    JxrPlatformAdapter.AnchorEntity.State.UNANCHORED ->
+                        anchorEntity.setState(State.UNANCHORED)
+                    JxrPlatformAdapter.AnchorEntity.State.ANCHORED ->
+                        anchorEntity.setState(State.ANCHORED)
+                    JxrPlatformAdapter.AnchorEntity.State.TIMED_OUT ->
+                        anchorEntity.setState(State.TIMEDOUT)
+                    JxrPlatformAdapter.AnchorEntity.State.ERROR ->
+                        anchorEntity.setState(State.ERROR)
+                    JxrPlatformAdapter.AnchorEntity.State.PERMISSIONS_NOT_GRANTED ->
+                        anchorEntity.setState(State.PERMISSIONS_NOT_GRANTED)
+                }
+            }
+            return anchorEntity
+        }
+
+        /**
+         * Public factory function for an AnchorEntity which searches for a location to create an
+         * Anchor among the tracked planes available to the perception system.
+         *
+         * Note that this function will fail if the application has not been granted the
+         * "android.permission.SCENE_UNDERSTANDING" permission. Consider using PermissionHelper to
+         * help request permission from the User.
+         *
+         * @param session Session to create the AnchorEntity in.
+         * @param bounds Bounds for this AnchorEntity.
+         * @param planeType Orientation of plane to which this Anchor should attach.
+         * @param planeSemantic Semantics of the plane to which this Anchor should attach.
+         * @param timeout The amount of time as a [Duration] to search for the a suitable plane to
+         *   attach to. If a plane is not found within the timeout, the returned AnchorEntity state
+         *   will be set to AnchorEntity.State.TIMEDOUT. It may take longer than the timeout period
+         *   before the anchor state is updated. If the timeout duration is zero it will search for
+         *   the anchor indefinitely.
+         */
+        @JvmStatic
+        @JvmOverloads
+        public fun create(
+            session: Session,
+            bounds: Dimensions,
+            planeType: @PlaneTypeValue Int,
+            planeSemantic: @PlaneSemanticValue Int,
+            timeout: Duration = Duration.ZERO,
+        ): AnchorEntity {
+            return AnchorEntity.create(
+                session.platformAdapter,
+                session.entityManager,
+                bounds,
+                planeType,
+                planeSemantic,
+                timeout,
+            )
+        }
+
+        /**
+         * Public factory function for an AnchorEntity which uses an Anchor from ARCore for XR.
+         *
+         * @param session Session to create the AnchorEntity in.
+         * @param anchor The PerceptionAnchor to use for this AnchorEntity.
+         */
+        @JvmStatic
+        public fun create(session: Session, anchor: Anchor): AnchorEntity {
+            return AnchorEntity.create(session.platformAdapter, session.entityManager, anchor)
+        }
+    }
+
+    /**
+     * Extension function that converts [JxrPlatformAdapter.AnchorEntity.State] to
+     * [AnchorEntity.State].
+     */
+    private fun JxrPlatformAdapter.AnchorEntity.State.fromRtState() =
+        when (this) {
+            JxrPlatformAdapter.AnchorEntity.State.UNANCHORED -> State.UNANCHORED
+            JxrPlatformAdapter.AnchorEntity.State.ANCHORED -> State.ANCHORED
+            JxrPlatformAdapter.AnchorEntity.State.TIMED_OUT -> State.TIMEDOUT
+            JxrPlatformAdapter.AnchorEntity.State.ERROR -> State.ERROR
+            JxrPlatformAdapter.AnchorEntity.State.PERMISSIONS_NOT_GRANTED ->
+                State.PERMISSIONS_NOT_GRANTED
+        }
+
+    /**
+     * Extension function that converts [JxrPlatformAdapter.AnchorEntity.PersistState] to
+     * [AnchorEntity.PersistState].
+     */
+    private fun JxrPlatformAdapter.AnchorEntity.PersistState.fromRtPersistState() =
+        when (this) {
+            JxrPlatformAdapter.AnchorEntity.PersistState.PERSIST_NOT_REQUESTED ->
+                PersistState.PERSIST_NOT_REQUESTED
+            JxrPlatformAdapter.AnchorEntity.PersistState.PERSIST_PENDING ->
+                PersistState.PERSIST_PENDING
+            JxrPlatformAdapter.AnchorEntity.PersistState.PERSISTED -> PersistState.PERSISTED
+        }
+
+    /**
+     * Registers a listener to be called when the Anchor moves relative to its underlying space.
+     *
+     * <p> The callback is triggered by any anchor movements such as those made by the underlying
+     * perception stack to maintain the anchor's position relative to the real world. Any cached
+     * data relative to the activity space or any other "space" should be updated when this callback
+     * is triggered.
+     *
+     * @param listener The listener to register if non-null, else stops listening if null.
+     * @param executor The executor to run the listener on. Defaults to SceneCore executor if null.
+     */
+    @JvmOverloads
+    @Suppress("ExecutorRegistration")
+    public fun setOnSpaceUpdatedListener(
+        listener: OnSpaceUpdatedListener?,
+        executor: Executor? = null,
+    ) {
+        rtEntity.setOnSpaceUpdatedListener(listener?.let { { it.onSpaceUpdated() } }, executor)
+    }
+}
+
+// TODO: b/370538244 - remove with deprecated spatial state callbacks
+@Deprecated(message = "Use addBoundsChangedListener(Consumer<Dimensions>)")
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public fun interface OnBoundsChangeListener {
+    public fun onBoundsChanged(bounds: Dimensions) // Dimensions are in meters.
+}
+
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
+public fun interface OnStateChangedListener {
+    public fun onStateChanged(newState: @AnchorEntity.StateValue Int)
+}
+
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public fun interface OnSpaceUpdatedListener {
     public fun onSpaceUpdated()
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ExrImage.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ExrImage.kt
index d04e91e..26c975b 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ExrImage.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/ExrImage.kt
@@ -16,11 +16,8 @@
 
 package androidx.xr.scenecore
 
-import androidx.annotation.MainThread
 import androidx.annotation.RestrictTo
-import androidx.concurrent.futures.ResolvableFuture
 import androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource as RtExrImage
-import com.google.common.util.concurrent.ListenableFuture
 
 /** Interface for image formats in SceneCore. */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Image
@@ -32,35 +29,7 @@
 // TODO(b/319269278): Make this and GltfModel derive from a common Resource base class which has
 //                    async helpers.
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class ExrImage
-internal constructor(internal val image: RtExrImage, internal val session: Session? = null) :
-    Image {
-
-    /**
-     * Returns the reflection texture from a preprocessed EXR image.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     *
-     * @return a CubeMapTexture.
-     * @throws IllegalStateException if the reflection texture couldn't be retrieved or if the EXR
-     *   image was not preprocessed.
-     */
-    @MainThread
-    public fun getReflectionTexture(): CubeMapTexture {
-        if (session == null) {
-            throw IllegalStateException(
-                "Can only retrieve reflection texture from preprocessed EXR images."
-            )
-        }
-        val reflectionTexture = session.platformAdapter.getReflectionTextureFromIbl(image)
-        if (reflectionTexture == null) {
-            throw IllegalStateException(
-                "Failed to retrieve reflection texture from the preprocessed EXR image."
-            )
-        }
-        return CubeMapTexture(reflectionTexture, session)
-    }
+public class ExrImage internal constructor(public val image: RtExrImage) : Image {
 
     public companion object {
         internal fun create(runtime: JxrPlatformAdapter, name: String): ExrImage {
@@ -69,35 +38,6 @@
             return ExrImage(exrImageFuture!!.get())
         }
 
-        // ResolvableFuture is marked as RestrictTo(LIBRARY_GROUP_PREFIX), which is intended for
-        // classes
-        // within AndroidX. We're in the process of migrating to AndroidX. Without suppressing this
-        // warning, however, we get a build error - go/bugpattern/RestrictTo.
-        @SuppressWarnings("RestrictTo")
-        internal fun createAsync(
-            platformAdapter: JxrPlatformAdapter,
-            name: String,
-            session: Session,
-        ): ListenableFuture<ExrImage> {
-            return createExrImageFuture(
-                platformAdapter.loadExrImageByAssetNameSplitEngine(name)!!,
-                session,
-            )
-        }
-
-        @SuppressWarnings("RestrictTo")
-        internal fun createAsync(
-            platformAdapter: JxrPlatformAdapter,
-            byteArray: ByteArray,
-            assetKey: String,
-            session: Session,
-        ): ListenableFuture<ExrImage> {
-            return createExrImageFuture(
-                platformAdapter.loadExrImageByByteArraySplitEngine(byteArray, assetKey)!!,
-                session,
-            )
-        }
-
         /**
          * Public factory function for an EXRImage, where the EXR is loaded from a local file.
          *
@@ -108,69 +48,6 @@
         @JvmStatic
         public fun create(session: Session, name: String): ExrImage =
             ExrImage.create(session.platformAdapter, name)
-
-        /**
-         * Public factory function for a preprocessed EXRImage, where the preprocessed EXRImage is
-         * asynchronously loaded.
-         *
-         * This method must be called from the main thread.
-         * https://developer.android.com/guide/components/processes-and-threads
-         *
-         * @param session The [Session] to use for loading the asset.
-         * @param name The URL or asset-relative path of a the preprocessed EXR image to be loaded
-         * @return a ListenableFuture<ExrImage>. Listeners will be called on the main thread if
-         *   Runnable::run is supplied.
-         */
-        @MainThread
-        @JvmStatic
-        public fun createFromPackage(session: Session, name: String): ListenableFuture<ExrImage> {
-            return ExrImage.createAsync(session.platformAdapter, name, session)
-        }
-
-        /**
-         * Public factory function for a preprocessed EXRImage, where the preprocessed EXRImage is
-         * asynchronously loaded.
-         *
-         * This method must be called from the main thread.
-         * https://developer.android.com/guide/components/processes-and-threads
-         *
-         * @param session The [Session] to use for loading the asset.
-         * @param assetData The byte array of the preprocessed EXR image to be loaded.
-         * @param assetKey The key of the preprocessed EXR image to be loaded. This is used to
-         *   identify the asset in the [SceneCore] cache.
-         * @return a ListenableFuture<ExrImage>. Listeners will be called on the main thread if
-         *   Runnable::run is supplied.
-         */
-        @MainThread
-        @JvmStatic
-        public fun createFromPackage(
-            session: Session,
-            assetData: ByteArray,
-            assetKey: String,
-        ): ListenableFuture<ExrImage> {
-            return ExrImage.createAsync(session.platformAdapter, assetData, assetKey, session)
-        }
-
-        private fun createExrImageFuture(
-            exrImageResourceFuture: ListenableFuture<RtExrImage>,
-            session: Session,
-        ): ListenableFuture<ExrImage> {
-            val exrImageFuture = ResolvableFuture.create<ExrImage>()
-
-            exrImageResourceFuture.addListener(
-                {
-                    try {
-                        exrImageFuture.set(ExrImage(exrImageResourceFuture.get(), session))
-                    } catch (e: Exception) {
-                        if (e is InterruptedException) Thread.currentThread().interrupt()
-                        exrImageFuture.setException(e)
-                    }
-                },
-                Runnable::run,
-            )
-
-            return exrImageFuture
-        }
     }
 
     override fun equals(other: Any?): Boolean {
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/GltfModelEntity.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/GltfModelEntity.kt
deleted file mode 100644
index 515562a..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/GltfModelEntity.kt
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore
-
-import androidx.annotation.IntDef
-import androidx.annotation.MainThread
-import androidx.annotation.RestrictTo
-import androidx.xr.runtime.math.Pose
-
-/**
- * GltfModelEntity is a concrete implementation of Entity that hosts a glTF model.
- *
- * Note: The size property of this Entity is always reported as {0, 0, 0}, regardless of the actual
- * size of the model.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class GltfModelEntity
-private constructor(rtEntity: JxrPlatformAdapter.GltfEntity, entityManager: EntityManager) :
-    BaseEntity<JxrPlatformAdapter.GltfEntity>(rtEntity, entityManager) {
-    // TODO: b/362368652 - Add an OnAnimationEvent() Listener interface
-
-    /** Specifies the current animation state of the GltfModelEntity. */
-    @IntDef(AnimationState.PLAYING, AnimationState.STOPPED)
-    @Retention(AnnotationRetention.SOURCE)
-    internal annotation class AnimationStateValue
-
-    public object AnimationState {
-        public const val PLAYING: Int = 0
-        public const val STOPPED: Int = 1
-    }
-
-    public companion object {
-        /**
-         * Factory method for GltfModelEntity.
-         *
-         * @param adapter Jetpack XR platform adapter.
-         * @param model [GltfModel] which this entity will display.
-         * @param pose Pose for this [GltfModelEntity], relative to its parent.
-         */
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            model: GltfModel,
-            pose: Pose = Pose.Identity,
-        ): GltfModelEntity =
-            GltfModelEntity(
-                adapter.createGltfEntity(pose, model.model, adapter.activitySpaceRootImpl),
-                entityManager,
-            )
-
-        /**
-         * Public factory function for a [GltfModelEntity].
-         *
-         * This method must be called from the main thread.
-         * https://developer.android.com/guide/components/processes-and-threads
-         *
-         * @param session Session to create the [GltfModel] in.
-         * @param model The [GltfModel] this Entity is referencing.
-         * @param pose The initial pose of the entity.
-         * @return a GltfModelEntity instance
-         */
-        @MainThread
-        @JvmStatic
-        @JvmOverloads
-        public fun create(
-            session: Session,
-            model: GltfModel,
-            pose: Pose = Pose.Identity,
-        ): GltfModelEntity =
-            GltfModelEntity.create(session.platformAdapter, session.entityManager, model, pose)
-    }
-
-    /** Returns the current animation state of this glTF entity. */
-    @AnimationStateValue
-    public fun getAnimationState(): Int {
-        return when (rtEntity.animationState) {
-            JxrPlatformAdapter.GltfEntity.AnimationState.PLAYING -> return AnimationState.PLAYING
-            JxrPlatformAdapter.GltfEntity.AnimationState.STOPPED -> return AnimationState.STOPPED
-            else -> AnimationState.STOPPED
-        }
-    }
-
-    /**
-     * Starts the animation with the given name.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     *
-     * @param animationName The name of the animation to start. If null, the first animation found
-     *   in the glTF will be played.
-     * @param loop Whether the animation should loop.
-     */
-    @MainThread
-    @JvmOverloads
-    public fun startAnimation(loop: Boolean, animationName: String? = null) {
-        rtEntity.startAnimation(loop, animationName)
-    }
-
-    /**
-     * Stops the animation of the glTF entity.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     */
-    @MainThread
-    public fun stopAnimation() {
-        rtEntity.stopAnimation()
-    }
-
-    /**
-     * Sets a material override for a mesh in the glTF model.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     *
-     * If the material is not created or the mesh name is not found in the glTF model, this method
-     * will throw an IllegalStateException.
-     *
-     * @param material The material to use for the mesh.
-     * @param meshName The name of the mesh to use the material for.
-     */
-    @MainThread
-    public fun setMaterialOverride(material: Material, meshName: String) {
-        rtEntity.setMaterialOverride(material.material!!, meshName)
-    }
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/JxrPlatformAdapter.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/JxrPlatformAdapter.java
index 920958d..0906650 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/JxrPlatformAdapter.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/JxrPlatformAdapter.java
@@ -35,6 +35,7 @@
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Vector3;
+import androidx.xr.runtime.math.Vector4;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
@@ -108,17 +109,6 @@
     @Nullable
     ListenableFuture<GltfModelResource> loadGltfByAssetNameSplitEngine(@NonNull String assetName);
 
-    /**
-     * Loads glTF Asset from a provided byte array. The future returned by this method will fire
-     * listeners on the UI thread if Runnable::run is supplied.
-     */
-    // TODO(b/397746548): Add InputStream support for loading glTFs.
-    // Suppressed to allow CompletableFuture.
-    @SuppressWarnings({"AndroidJdkLibsChecker", "AsyncSuffixFuture"})
-    @Nullable
-    ListenableFuture<GltfModelResource> loadGltfByByteArray(
-            @NonNull byte[] assetData, @NonNull String assetKey);
-
     /** Loads an ExrImage for the given asset name from the assets folder. */
     // Suppressed to allow CompletableFuture.
     @SuppressWarnings({"AndroidJdkLibsChecker", "AsyncSuffixFuture"})
@@ -126,22 +116,6 @@
     ListenableFuture<ExrImageResource> loadExrImageByAssetName(@NonNull String assetName);
 
     /**
-     * Loads an ExrImage for the given asset name from the assets folder using the Split Engine
-     * route.
-     */
-    @SuppressWarnings("AsyncSuffixFuture")
-    @Nullable
-    ListenableFuture<ExrImageResource> loadExrImageByAssetNameSplitEngine(
-            @NonNull String assetName);
-
-    /** Loads an ExrImage from a provided byte array using the Split Engine route. */
-    // Suppressed to allow CompletableFuture.
-    @SuppressWarnings({"AndroidJdkLibsChecker", "AsyncSuffixFuture"})
-    @Nullable
-    ListenableFuture<ExrImageResource> loadExrImageByByteArraySplitEngine(
-            @NonNull byte[] assetData, @NonNull String assetKey);
-
-    /**
      * Loads a texture resource for the given asset name or URL. The future returned by this method
      * will fire listeners on the UI thread if Runnable::run is supplied.
      */
@@ -157,17 +131,13 @@
     /** Destroys the given texture resource. */
     void destroyTexture(@NonNull TextureResource texture);
 
-    /** Returns the reflection texture from the given IBL. */
-    @Nullable
-    TextureResource getReflectionTextureFromIbl(@NonNull ExrImageResource iblToken);
-
     /**
      * Creates a water material by querying it from the system's built-in materials. The future
      * returned by this method will fire listeners on the UI thread if Runnable::run is supplied.
      */
     @SuppressWarnings({"AndroidJdkLibsChecker", "AsyncSuffixFuture"})
     @Nullable
-    ListenableFuture<MaterialResource> createWaterMaterial(boolean isAlphaMapVersion);
+    ListenableFuture<MaterialResource> createWaterMaterial(boolean transparent);
 
     /** Destroys the given water material resource. */
     void destroyWaterMaterial(@NonNull MaterialResource material);
@@ -185,18 +155,15 @@
     /** Sets the normal speed for the water material. */
     void setNormalSpeed(@NonNull MaterialResource material, float normalSpeed);
 
+    /** Sets the alpha step of the U coordinate for the water material. */
+    void setAlphaStepU(@NonNull MaterialResource material, @NonNull Vector4 alphaStepU);
+
+    /** Sets the alpha step of the V coordinate for the water material. */
+    void setAlphaStepV(@NonNull MaterialResource material, @NonNull Vector4 alphaStepV);
+
     /** Sets the alpha step multiplier for the water material. */
     void setAlphaStepMultiplier(@NonNull MaterialResource material, float alphaStepMultiplier);
 
-    /** Sets the alpha map for the water material. */
-    void setAlphaMap(@NonNull MaterialResource material, @NonNull TextureResource alphaMap);
-
-    /** Sets the normal z for the water material. */
-    void setNormalZ(@NonNull MaterialResource material, float normalZ);
-
-    /** Sets the normal boundary for the water material. */
-    void setNormalBoundary(@NonNull MaterialResource material, float normalBoundary);
-
     /**
      * A factory function to create a SceneCore GltfEntity. The parent may be the activity space or
      * GltfEntity in the scene.
@@ -249,39 +216,22 @@
     /**
      * A factory function to create a platform PanelEntity. The parent can be any entity.
      *
-     * @param context Application Context.
      * @param pose Initial pose of the panel.
      * @param view View inflating this panel.
+     * @param surfaceDimensionsPx Dimensions for the underlying surface for the given view.
      * @param dimensions Size of the panel in meters.
      * @param name Name of the panel.
+     * @param context Application Context.
      * @param parent Parent entity.
      */
     @NonNull
     PanelEntity createPanelEntity(
-            @NonNull Context context,
             @NonNull Pose pose,
             @NonNull View view,
+            @NonNull PixelDimensions surfaceDimensionsPx,
             @NonNull Dimensions dimensions,
             @NonNull String name,
-            @NonNull Entity parent);
-
-    /**
-     * A factory function to create a platform PanelEntity. The parent can be any entity.
-     *
-     * @param context Application Context.
-     * @param pose Initial pose of the panel.
-     * @param view View inflating this panel.
-     * @param pixelDimensions Dimensions for the underlying surface for the given view in pixels.
-     * @param name Name of the panel.
-     * @param parent Parent entity.
-     */
-    @NonNull
-    PanelEntity createPanelEntity(
-            @NonNull Context context,
-            @NonNull Pose pose,
-            @NonNull View view,
-            @NonNull PixelDimensions pixelDimensions,
-            @NonNull String name,
+            @SuppressWarnings("ContextFirst") @NonNull Context context,
             @NonNull Entity parent);
 
     /** Get the PanelEntity associated with the main window for the Activity. */
@@ -916,50 +866,21 @@
     /** Interface for a SceneCore Entity */
     interface Entity extends ActivityPose {
 
-        /** Returns the pose for this entity, relative to the given space. */
-        @NonNull
-        Pose getPose(@SpaceValue int relativeTo);
-
         /** Returns the pose for this entity, relative to its parent. */
         @NonNull
-        default Pose getPose() {
-            return getPose(Space.PARENT);
-        }
-
-        /** Updates the pose (position and rotation) of the Entity relative to the given space. */
-        void setPose(@NonNull Pose pose, @SpaceValue int relativeTo);
+        Pose getPose();
 
         /** Updates the pose (position and rotation) of the Entity relative to its parent. */
-        default void setPose(@NonNull Pose pose) {
-            setPose(pose, Space.PARENT);
-        }
+        void setPose(@NonNull Pose pose);
 
         /**
-         * Returns the scale of this entity, relative to the given space.
+         * Returns the scale of this entity, relative to its parent. Note that this doesn't include
+         * the parent's scale.
          *
-         * @return Current [Vector3] scale relative to the given space.
+         * @return Current [Vector3] scale applied to self and children.
          */
         @NonNull
-        Vector3 getScale(@SpaceValue int relativeTo);
-
-        /**
-         * Returns the scale of this entity, relative to its parent.
-         *
-         * @return Current [Vector3] scale relative to the parent.
-         */
-        @NonNull
-        default Vector3 getScale() {
-            return getScale(Space.PARENT);
-        }
-
-        /**
-         * Sets the scale of this entity relative to the given space. This value will affect the
-         * rendering of this Entity's children. As the scale increases, this will stretch the
-         * content of the Entity.
-         *
-         * @param scale The [Vector3] scale factor relative to the given space.
-         */
-        void setScale(@NonNull Vector3 scale, @SpaceValue int relativeTo);
+        Vector3 getScale();
 
         /**
          * Sets the scale of this entity relative to its parent. This value will affect the
@@ -968,9 +889,7 @@
          *
          * @param scale The [Vector3] scale factor from the parent.
          */
-        default void setScale(@NonNull Vector3 scale) {
-            setScale(scale, Space.PARENT);
-        }
+        void setScale(@NonNull Vector3 scale);
 
         /**
          * Add given Entity as child. The child Entity's pose will be relative to the pose of its
@@ -1003,33 +922,24 @@
         List<Entity> getChildren();
 
         /**
-         * Returns the effective alpha transparency level of the entity, relative to the given
-         * space.
+         * Sets the size for the given Entity.
          *
-         * @param relativeTo The space in which to evaluate the alpha.
+         * @param dimensions Dimensions for the Entity in meters.
          */
-        float getAlpha(@SpaceValue int relativeTo);
+        void setSize(@NonNull Dimensions dimensions);
 
         /** Returns the set alpha transparency level for this Entity. */
-        default float getAlpha() {
-            return getAlpha(Space.PARENT);
-        }
-
-        /**
-         * Sets the alpha transparency for the given Entity, relative to the given space.
-         *
-         * @param alpha Alpha transparency level for the Entity.
-         */
-        void setAlpha(float alpha, @SpaceValue int relativeTo);
+        float getAlpha();
 
         /**
          * Sets the alpha transparency for the given Entity.
          *
          * @param alpha Alpha transparency level for the Entity.
          */
-        default void setAlpha(float alpha) {
-            setAlpha(alpha, Space.PARENT);
-        }
+        void setAlpha(float alpha);
+
+        /** Returns the total alpha transparency level for this Entity. */
+        float getActivitySpaceAlpha();
 
         /**
          * Sets the local hidden state of this Entity. When true, this Entity and all descendants
@@ -1113,44 +1023,10 @@
              */
             @Nullable public final ExrImageResource skybox;
 
-            /**
-             * The material to override a given mesh in the geometry. If null, the material will not
-             * override any mesh.
-             */
-            @Nullable public final MaterialResource geometryMaterial;
-
-            /**
-             * The name of the mesh to override with the material. If null, the material will not
-             * override any mesh.
-             */
-            @Nullable public final String geometryMeshName;
-
-            /**
-             * The name of the animation to play on the geometry. If null, the geometry will not
-             * play any animation. Note that the animation will be played in loop.
-             */
-            @Nullable public final String geometryAnimationName;
-
             public SpatialEnvironmentPreference(
                     @Nullable ExrImageResource skybox, @Nullable GltfModelResource geometry) {
                 this.skybox = skybox;
                 this.geometry = geometry;
-                this.geometryMaterial = null;
-                this.geometryMeshName = null;
-                this.geometryAnimationName = null;
-            }
-
-            public SpatialEnvironmentPreference(
-                    @Nullable ExrImageResource skybox,
-                    @Nullable GltfModelResource geometry,
-                    @Nullable MaterialResource geometryMaterial,
-                    @Nullable String geometryMeshName,
-                    @Nullable String geometryAnimationName) {
-                this.skybox = skybox;
-                this.geometry = geometry;
-                this.geometryMaterial = geometryMaterial;
-                this.geometryMeshName = geometryMeshName;
-                this.geometryAnimationName = geometryAnimationName;
             }
 
             @Override
@@ -1161,10 +1037,7 @@
                 if (o instanceof SpatialEnvironmentPreference) {
                     SpatialEnvironmentPreference other = (SpatialEnvironmentPreference) o;
                     return Objects.equals(other.skybox, skybox)
-                            && Objects.equals(other.geometry, geometry)
-                            && Objects.equals(other.geometryMaterial, geometryMaterial)
-                            && Objects.equals(other.geometryMeshName, geometryMeshName)
-                            && Objects.equals(other.geometryAnimationName, geometryAnimationName);
+                            && Objects.equals(other.geometry, geometry);
                 }
                 return false;
             }
@@ -1452,7 +1325,7 @@
          * @return The current [PixelDimensions] of the underlying surface.
          */
         @NonNull
-        PixelDimensions getSizeInPixels();
+        PixelDimensions getPixelDimensions();
 
         /**
          * Sets the pixel (not Dp) dimensions of the view underlying this PanelEntity. Calling this
@@ -1461,7 +1334,7 @@
          *
          * @param dimensions The [PixelDimensions] of the underlying surface to set.
          */
-        void setSizeInPixels(@NonNull PixelDimensions dimensions);
+        void setPixelDimensions(@NonNull PixelDimensions dimensions);
 
         /**
          * Sets a corner radius on all four corners of this PanelEntity.
@@ -1479,10 +1352,8 @@
          * including parent scale.
          *
          * @return Vector3 scale applied to pixels within the Panel. (Z will be 0)
-         * @deprecated This method will be removed in a future release.
          */
         @NonNull
-        @Deprecated
         Vector3 getPixelDensity();
 
         /**
@@ -1493,13 +1364,6 @@
          */
         @NonNull
         Dimensions getSize();
-
-        /**
-         * Sets the spatial size of this Panel in meters.
-         *
-         * @param dimensions [Dimensions] size of this panel in meters. (Z will be 0)
-         */
-        void setSize(@NonNull Dimensions dimensions);
     }
 
     /** Interface for a SceneCore ActivityPanel entity. */
@@ -1602,10 +1466,6 @@
             int TOP_BOTTOM = 1;
             // The [left, right] halves of the surface will map to [left, right] eyes
             int SIDE_BY_SIDE = 2;
-            // Multiview video, [primary, auxiliary] views will map to [left, right] eyes
-            int MULTIVIEW_LEFT_PRIMARY = 4;
-            // Multiview video, [primary, auxiliary] views will map to [right, left] eyes
-            int MULTIVIEW_RIGHT_PRIMARY = 5;
         }
 
         /**
@@ -2701,26 +2561,4 @@
     /** Returns a [MediaPlayerExtensionsWrapper] instance. */
     @NonNull
     MediaPlayerExtensionsWrapper getMediaPlayerExtensionsWrapper();
-
-    /** Specifies the coordinate space for pose and scale transformations. */
-    @RestrictTo(RestrictTo.Scope.LIBRARY)
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef({Space.PARENT, Space.ACTIVITY, Space.REAL_WORLD})
-    public @interface SpaceValue {}
-
-    /** Coordinate spaces in which to apply the transformation values. */
-    public class Space {
-        /** The local coordinate space of an [Entity], relative to its parent. */
-        public static final int PARENT = 0;
-
-        /** The global coordinate space, at the root of the scene graph for the activity. */
-        public static final int ACTIVITY = 1;
-
-        /**
-         * The global coordinate space, unscaled, at the root of the scene graph of the activity.
-         */
-        public static final int REAL_WORLD = 2;
-
-        private Space() {}
-    }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Model.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Model.kt
index 714b5ce8..b185995 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Model.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Model.kt
@@ -36,7 +36,7 @@
 //                     playback animation from the integer index.
 // TODO: b/362368652 - Add an interface which returns a list of available animation names
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class GltfModel internal constructor(internal val model: RtGltfModel) : Model {
+public class GltfModel internal constructor(public val model: RtGltfModel) : Model {
 
     public companion object {
         @Deprecated(
@@ -58,16 +58,25 @@
             platformAdapter: JxrPlatformAdapter,
             name: String,
         ): ListenableFuture<GltfModel> {
-            return createModelFuture(platformAdapter.loadGltfByAssetNameSplitEngine(name)!!)
-        }
+            val gltfResourceFuture = platformAdapter.loadGltfByAssetNameSplitEngine(name)
+            val modelFuture = ResolvableFuture.create<GltfModel>()
 
-        @SuppressWarnings("RestrictTo")
-        internal fun createAsync(
-            platformAdapter: JxrPlatformAdapter,
-            assetData: ByteArray,
-            assetKey: String,
-        ): ListenableFuture<GltfModel> {
-            return createModelFuture(platformAdapter.loadGltfByByteArray(assetData, assetKey)!!)
+            // TODO: b/375070346 - remove this `!!` when we're sure the future is non-null.
+            gltfResourceFuture!!.addListener(
+                {
+                    try {
+                        val gltfResource = gltfResourceFuture.get()
+                        modelFuture.set(GltfModel(gltfResource))
+                    } catch (e: Exception) {
+                        if (e is InterruptedException) {
+                            Thread.currentThread().interrupt()
+                        }
+                        modelFuture.setException(e)
+                    }
+                },
+                Runnable::run,
+            )
+            return modelFuture
         }
 
         /**
@@ -90,51 +99,6 @@
         public fun create(session: Session, name: String): ListenableFuture<GltfModel> {
             return GltfModel.createAsync(session.platformAdapter, name)
         }
-
-        /**
-         * Public factory function for a [GltfModel], where the glTF is asynchronously loaded.
-         *
-         * This method must be called from the main thread.
-         * https://developer.android.com/guide/components/processes-and-threads
-         *
-         * Currently, only binary glTF (.glb) files are supported.
-         *
-         * @param session The [Session] to use for loading the model.
-         * @param assetData The byte array data of a binary glTF (.glb) model to be loaded.
-         * @param assetKey The key to use for the model. This is used to identify the model in the
-         *   [SceneCore] cache.
-         * @return a ListenableFuture<GltfModel>. Listeners will be called on the main thread if
-         *   Runnable::run is supplied.
-         */
-        @MainThread
-        @JvmStatic
-        public fun create(
-            session: Session,
-            assetData: ByteArray,
-            assetKey: String,
-        ): ListenableFuture<GltfModel> {
-            return GltfModel.createAsync(session.platformAdapter, assetData, assetKey)
-        }
-
-        private fun createModelFuture(
-            gltfResourceFuture: ListenableFuture<RtGltfModel>
-        ): ListenableFuture<GltfModel> {
-            val modelFuture = ResolvableFuture.create<GltfModel>()
-
-            gltfResourceFuture.addListener(
-                {
-                    try {
-                        modelFuture.set(GltfModel(gltfResourceFuture.get()))
-                    } catch (e: Exception) {
-                        if (e is InterruptedException) Thread.currentThread().interrupt()
-                        modelFuture.setException(e)
-                    }
-                },
-                Runnable::run,
-            )
-
-            return modelFuture
-        }
     }
 
     override fun equals(other: Any?): Boolean {
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/PanelEntity.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/PanelEntity.kt
deleted file mode 100644
index e8cec8f..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/PanelEntity.kt
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore
-
-import android.content.Context
-import android.view.View
-import androidx.annotation.RestrictTo
-import androidx.xr.runtime.math.Pose
-import androidx.xr.runtime.math.Vector3
-
-/** Provides implementations for common Panel functionality. */
-@Suppress("DEPRECATION")
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public sealed class BasePanelEntity<out RtPanelEntityType : JxrPlatformAdapter.PanelEntity>(
-    private val rtPanelEntity: RtPanelEntityType,
-    entityManager: EntityManager,
-) : BaseEntity<JxrPlatformAdapter.PanelEntity>(rtPanelEntity, entityManager) {
-
-    /**
-     * Sets the corner radius of the PanelEntity.
-     *
-     * @param radius The radius of the corners, in meters.
-     * @throws IllegalArgumentException if radius is <= 0.0f.
-     */
-    public fun setCornerRadius(radius: Float) {
-        rtPanelEntity.setCornerRadius(radius)
-    }
-
-    /** Gets the corner radius of this PanelEntity in meters. Has a default value of 0. */
-    public fun getCornerRadius(): Float {
-        return rtPanelEntity.cornerRadius
-    }
-
-    /**
-     * Returns the dimensions in local space, in unscaled meters for this panel entity.
-     *
-     * <p>
-     * Users of this api can convert this entity's local space dimensions to real world meters by
-     * multiplying the local space dimensions with relative scale of this entity in unscaled world
-     * space i.e. real meters = local space dimensions getScale(Space.REAL_WORLD) and vice versa.
-     * For example a panel entity 1x1 dimensions in local space will look 2x2 meters in real world
-     * if the relative scale applied to this entity in the world space is 2.
-     */
-    public fun getSize(): Dimensions {
-        return rtPanelEntity.size.toDimensions()
-    }
-
-    /** Returns the dimensions in Pixels for this panel entity. */
-    public fun getSizeInPixels(): PixelDimensions {
-        return rtPanelEntity.sizeInPixels.toPixelDimensions()
-    }
-
-    /**
-     * Returns the dimensions of the view underlying this PanelEntity.
-     *
-     * @return The current (width, height) of the underlying surface in pixels.
-     */
-    @Deprecated("Use getSizeInPixels() instead.", ReplaceWith("getSizeInPixels()"))
-    public fun getPixelDimensions(): PixelDimensions {
-        return getSizeInPixels()
-    }
-
-    /**
-     * Sets the pixel (not Dp) dimensions of the view underlying this PanelEntity. Calling this
-     * might cause the layout of the Panel contents to change. Updating this will not cause the
-     * scale or pixel density to change.
-     *
-     * @param pxDimensions The [PixelDimensions] of the underlying surface to set.
-     */
-    @Deprecated("Use setSizeInPixels instead.", ReplaceWith("setSizeInPixels(pxDimensions)"))
-    public fun setPixelDimensions(pxDimensions: PixelDimensions) {
-        setSizeInPixels(pxDimensions)
-    }
-
-    /**
-     * Gets the number of pixels per meter for this panel. This value reflects changes to scale,
-     * including parent scale.
-     *
-     * @return Vector3 scale applied to pixels within the Panel. (Z will be 0)
-     */
-    @Deprecated("This api will be removed in a future release.")
-    public fun getPixelDensity(): Vector3 {
-        return rtPanelEntity.pixelDensity
-    }
-
-    /**
-     * Sets the size in meters for the surface on which the View is laid out. The dimensions
-     * provided are unscaled meters in the local space.
-     *
-     * <p>
-     * Users of this api can convert this entity's local space dimensions to real world meters by
-     * multiplying the local space dimensions with relative scale of this entity in unscaled world
-     * space i.e. real meters = local space dimensions * getScale(Space.REAL_WORLD) and vice versa.
-     * For example a panel entity 1x1 dimensions in local space will look 2x2 meters in real world
-     * if the relative scale applied to this entity in the world space is 2.
-     *
-     * @param dimensions Dimensions in meters in local space.
-     */
-    public fun setSize(dimensions: Dimensions) {
-        rtPanelEntity.setSize(dimensions.toRtDimensions())
-    }
-
-    /**
-     * Sets the size in pixels for the surface on which the view is laid out. This essentially sets
-     * the resolution of underlying surface. The dimensions provided are in pixels.
-     *
-     * <p>
-     * This API doesn't do any scale compensation to pixel dimensions provided.
-     *
-     * @param pixelDimensions Dimensions in pixels.
-     */
-    public fun setSizeInPixels(pixelDimensions: PixelDimensions) {
-        rtPanelEntity.setSizeInPixels(pixelDimensions.toRtPixelDimensions())
-    }
-}
-
-/** PanelEntity creates a spatial panel in Android XR. */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public open class PanelEntity
-internal constructor(
-    rtEntity: JxrPlatformAdapter.PanelEntity,
-    entityManager: EntityManager,
-    // TODO(ricknels): move isMainPanelEntity check to JxrPlatformAdapter.
-    public val isMainPanelEntity: Boolean = false,
-) : BasePanelEntity<JxrPlatformAdapter.PanelEntity>(rtEntity, entityManager) {
-
-    public companion object {
-        internal fun create(
-            context: Context,
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            view: View,
-            dimensions: Dimensions,
-            name: String,
-            pose: Pose = Pose.Identity,
-        ): PanelEntity =
-            PanelEntity(
-                adapter.createPanelEntity(
-                    context,
-                    pose,
-                    view,
-                    dimensions.toRtDimensions(),
-                    name,
-                    adapter.activitySpaceRootImpl,
-                ),
-                entityManager,
-            )
-
-        internal fun create(
-            context: Context,
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            view: View,
-            pixelDimensions: PixelDimensions,
-            name: String,
-            pose: Pose = Pose.Identity,
-        ): PanelEntity =
-            PanelEntity(
-                adapter.createPanelEntity(
-                    context,
-                    pose,
-                    view,
-                    pixelDimensions.toRtPixelDimensions(),
-                    name,
-                    adapter.activitySpaceRootImpl,
-                ),
-                entityManager,
-            )
-
-        /**
-         * Public factory function for a spatialized PanelEntity.
-         *
-         * @param session Session to create the PanelEntity in.
-         * @param view View to embed in this panel entity.
-         * @param dimensions Dimensions for the underlying surface for the given view in meters.
-         * @param name Name of the panel.
-         * @param pose Pose of this entity relative to its parent, default value is Identity.
-         * @return a PanelEntity instance.
-         */
-        @JvmOverloads
-        @JvmStatic
-        public fun create(
-            session: Session,
-            view: View,
-            dimensions: Dimensions,
-            name: String,
-            pose: Pose = Pose.Identity,
-        ): PanelEntity =
-            PanelEntity.create(
-                session.activity,
-                session.platformAdapter,
-                session.entityManager,
-                view,
-                dimensions,
-                name,
-                pose,
-            )
-
-        /**
-         * Public factory function for a spatialized PanelEntity.
-         *
-         * @param session Session to create the PanelEntity in.
-         * @param view View to embed in this panel entity.
-         * @param pixelDimensions Dimensions for the underlying surface for the given view in
-         *   pixels.
-         * @param name Name of the panel.
-         * @param pose Pose of this entity relative to its parent, default value is Identity.
-         * @return a PanelEntity instance.
-         */
-        @JvmOverloads
-        @JvmStatic
-        public fun create(
-            session: Session,
-            view: View,
-            pixelDimensions: PixelDimensions,
-            name: String,
-            pose: Pose = Pose.Identity,
-        ): PanelEntity =
-            PanelEntity.create(
-                session.activity,
-                session.platformAdapter,
-                session.entityManager,
-                view,
-                pixelDimensions,
-                name,
-                pose,
-            )
-
-        /**
-         * Public factory function for a spatialized PanelEntity.
-         *
-         * @param session Session to create the PanelEntity in.
-         * @param view View to embed in this panel entity.
-         * @param surfaceDimensionsPx Dimensions for the underlying surface for the given view.
-         * @param dimensions Dimensions for the panel in meters.
-         * @param name Name of the panel.
-         * @param pose Pose of this entity relative to its parent, default value is Identity.
-         * @return a PanelEntity instance.
-         * @deprecated Use create(session, view, pixelDimensions, name, pose) instead.
-         */
-        @JvmOverloads
-        @JvmStatic
-        @Deprecated(
-            "Use create(session, view, pixelDimensions, name, pose) instead.",
-            ReplaceWith("create(session, view, pixelDimensions, name, pose)"),
-        )
-        public fun create(
-            session: Session,
-            view: View,
-            surfaceDimensionsPx: Dimensions,
-            @Suppress("UNUSED_PARAMETER") dimensions: Dimensions,
-            name: String,
-            pose: Pose = Pose.Identity,
-        ): PanelEntity =
-            PanelEntity.create(
-                session.activity,
-                session.platformAdapter,
-                session.entityManager,
-                view,
-                PixelDimensions(
-                    surfaceDimensionsPx.width.toInt(),
-                    surfaceDimensionsPx.height.toInt()
-                ),
-                name,
-                pose,
-            )
-
-        /** Returns the PanelEntity backed by the main window for the Activity. */
-        internal fun createMainPanelEntity(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-        ): PanelEntity =
-            PanelEntity(adapter.mainPanelEntity, entityManager, isMainPanelEntity = true)
-    }
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Space.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Space.kt
deleted file mode 100644
index 9221ef2..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Space.kt
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore
-
-import androidx.annotation.IntDef
-import androidx.annotation.RestrictTo
-
-@IntDef(Space.PARENT, Space.ACTIVITY, Space.REAL_WORLD)
-@Retention(AnnotationRetention.SOURCE)
-internal annotation class SpaceValue
-
-/** Coordinate spaces in which to apply the transformation values. */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public object Space {
-    /** The local coordinate space of an [Entity], relative to its parent. */
-    public const val PARENT: Int = 0
-    /** The global coordinate space, at the root of the scene graph for the activity. */
-    public const val ACTIVITY: Int = 1
-    /** The global coordinate space, unscaled, at the root of the scene graph of the activity. */
-    public const val REAL_WORLD: Int = 2
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/SpatialEnvironment.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/SpatialEnvironment.kt
index 3a2ab1d..d1b42b7 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/SpatialEnvironment.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/SpatialEnvironment.kt
@@ -85,23 +85,10 @@
      *   null, it will be all black.
      * @param geometry The preferred geometry for the environment based on a pre-loaded [GltfModel].
      *   If null, there will be no geometry.
-     * @param geometryMaterial The material to override a given mesh in the geometry. If null, the
-     *   material will not override any mesh.
-     * @param geometryMeshName The name of the mesh to override with the material. If null, the
-     *   material will not override any mesh.
-     * @param geometryAnimationName The name of the animation to play on the geometry. If null, the
-     *   geometry will not play any animation. Note that the animation will be played in loop.
-     * @throws IllegalStateException if the material is not properly set up and if the geometry glTF
-     *   model does not contain the mesh or the animation name.
      */
-    public class SpatialEnvironmentPreference
-    @JvmOverloads
-    constructor(
+    public class SpatialEnvironmentPreference(
         public val skybox: ExrImage?,
         public val geometry: GltfModel?,
-        internal val geometryMaterial: Material? = null,
-        internal val geometryMeshName: String? = null,
-        internal val geometryAnimationName: String? = null,
     ) {
 
         override fun equals(other: Any?): Boolean {
@@ -343,7 +330,8 @@
      * application, meaning the default system environment will be displayed instead.
      *
      * If the given [SpatialEnvironmentPreference] is not null, but all of its properties are null,
-     * then the spatial environment will consist of a black skybox and no geometry.
+     * then the spatial environment will consist of a black skybox and no geometry
+     * [isSpatialEnvironmentPreferenceActive] is true.
      *
      * Changes to the Environment state will be notified via listeners added with
      * [addOnSpatialEnvironmentChangedListener].
@@ -446,13 +434,7 @@
 
 internal fun SpatialEnvironment.SpatialEnvironmentPreference.toRtSpatialEnvironmentPreference():
     RtSpatialEnvironmentPreference {
-    return RtSpatialEnvironmentPreference(
-        skybox?.image,
-        geometry?.model,
-        geometryMaterial?.material,
-        geometryMeshName,
-        geometryAnimationName,
-    )
+    return RtSpatialEnvironmentPreference(skybox?.image, geometry?.model)
 }
 
 internal fun RtSpatialEnvironmentPreference.toSpatialEnvironmentPreference():
@@ -460,9 +442,6 @@
     return SpatialEnvironment.SpatialEnvironmentPreference(
         skybox?.let { ExrImage(it) },
         geometry?.let { GltfModel(it) },
-        geometryMaterial?.let { Material(it) },
-        geometryMeshName,
-        geometryAnimationName,
     )
 }
 
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/SurfaceEntity.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/SurfaceEntity.kt
deleted file mode 100644
index 482c685..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/SurfaceEntity.kt
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore
-
-import android.view.Surface
-import androidx.annotation.IntDef
-import androidx.annotation.MainThread
-import androidx.annotation.RestrictTo
-import androidx.xr.runtime.math.Pose
-
-/**
- * SurfaceEntity is a concrete implementation of Entity that hosts a StereoSurface Canvas. The
- * entity creates and owns an Android Surface into which the application can render stereo image
- * content. This Surface is then texture mapped to the canvas, and if a stereoscopic StereoMode is
- * specified, then the User will see left and right eye content mapped to the appropriate display.
- *
- * Note that it is not currently possible to synchronize CanvasShape and StereoMode changes with
- * application rendering or video decoding. Applications are advised to carefully hide this entity
- * around transitions to manage glitchiness.
- *
- * @property canvasShape The [CanvasShape] which describes the mesh to which the Surface is mapped.
- * @property stereoMode The [StereoMode] which describes how parts of the surface are displayed to
- *   the user's eyes.
- * @property dimensions The dimensions of the canvas in the local spatial coordinate system of the
- *   entity.
- */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class SurfaceEntity
-private constructor(
-    rtEntity: JxrPlatformAdapter.SurfaceEntity,
-    entityManager: EntityManager,
-    canvasShape: CanvasShape,
-) : BaseEntity<JxrPlatformAdapter.SurfaceEntity>(rtEntity, entityManager) {
-
-    /** Represents the shape of the Canvas that backs a SurfaceEntity. */
-    public abstract class CanvasShape private constructor() {
-        public open val dimensions: Dimensions = Dimensions(0.0f, 0.0f, 0.0f)
-
-        // A Quad-shaped canvas. Width and height are represented in the local spatial coordinate
-        // system of the entity. (0,0,0) is the center of the canvas.
-        public class Quad(public val width: Float, public val height: Float) : CanvasShape() {
-            override val dimensions: Dimensions
-                get() = Dimensions(width, height, 0.0f)
-        }
-
-        // An inwards-facing sphere-shaped canvas, centered at (0,0,0) in the local coordinate
-        // space.
-        // This is intended to be used by setting the entity's pose to the user's head pose.
-        // Radius is represented in the local spatial coordinate system of the entity.
-        // The center of the Surface will be mapped to (0, 0, -radius) in the local coordinate
-        // space,
-        // and UV's are applied from positive X to negative X in an equirectangular projection.
-        public class Vr360Sphere(public val radius: Float) : CanvasShape() {
-            override val dimensions: Dimensions
-                get() = Dimensions(radius * 2, radius * 2, radius * 2)
-        }
-
-        // An inwards-facing hemisphere-shaped canvas, where (0,0,0) is the center of the base of
-        // the
-        // hemisphere. Radius is represented in the local spatial coordinate system of the entity.
-        // This is intended to be used by setting the entity's pose to the user's head pose.
-        // The center of the Surface will be mapped to (0, 0, -radius) in the local coordinate
-        // space,
-        // and UV's are applied from positive X to negative X in an equirectangular projection.
-        public class Vr180Hemisphere(public val radius: Float) : CanvasShape() {
-            override val dimensions: Dimensions
-                get() = Dimensions(radius * 2, radius * 2, radius)
-        }
-    }
-
-    /**
-     * Specifies how the surface content will be routed for stereo viewing. Applications must render
-     * into the surface in accordance with what is specified here in order for the compositor to
-     * correctly produce a stereoscopic view to the user.
-     *
-     * Values here match values from androidx.media3.common.C.StereoMode in
-     * //third_party/java/android_libs/media:common
-     */
-    @IntDef(StereoMode.MONO, StereoMode.TOP_BOTTOM, StereoMode.SIDE_BY_SIDE)
-    @Retention(AnnotationRetention.SOURCE)
-    internal annotation class StereoModeValue
-
-    public object StereoMode {
-        // Each eye will see the entire surface (no separation)
-        public const val MONO: Int = 0
-        // The [bottom, top] halves of the surface will map to [left, right] eyes
-        public const val TOP_BOTTOM: Int = 1
-        // The [left, right] halves of the surface will map to [left, right] eyes
-        public const val SIDE_BY_SIDE: Int = 2
-        // Multiview video, [primary, auxiliary] views will map to [left, right] eyes
-        public const val MULTIVIEW_LEFT_PRIMARY: Int = 4
-        // Multiview video, [primary, auxiliary] views will map to [right, left] eyes
-        public const val MULTIVIEW_RIGHT_PRIMARY: Int = 5
-    }
-
-    public companion object {
-        private fun getRtStereoMode(stereoMode: Int): Int {
-            return when (stereoMode) {
-                StereoMode.MONO -> JxrPlatformAdapter.SurfaceEntity.StereoMode.MONO
-                StereoMode.TOP_BOTTOM -> JxrPlatformAdapter.SurfaceEntity.StereoMode.TOP_BOTTOM
-                StereoMode.MULTIVIEW_LEFT_PRIMARY ->
-                    JxrPlatformAdapter.SurfaceEntity.StereoMode.MULTIVIEW_LEFT_PRIMARY
-                StereoMode.MULTIVIEW_RIGHT_PRIMARY ->
-                    JxrPlatformAdapter.SurfaceEntity.StereoMode.MULTIVIEW_RIGHT_PRIMARY
-                else -> JxrPlatformAdapter.SurfaceEntity.StereoMode.SIDE_BY_SIDE
-            }
-        }
-
-        /**
-         * Factory method for SurfaceEntity.
-         *
-         * @param adapter JxrPlatformAdapter to use.
-         * @param entityManager A SceneCore EntityManager
-         * @param stereoMode An [Int] which defines how surface subregions map to eyes
-         * @param pose Pose for this StereoSurface entity, relative to its parent.
-         * @param canvasShape The [CanvasShape] which describes the spatialized shape of the canvas.
-         */
-        internal fun create(
-            adapter: JxrPlatformAdapter,
-            entityManager: EntityManager,
-            stereoMode: Int = StereoMode.SIDE_BY_SIDE,
-            pose: Pose = Pose.Identity,
-            canvasShape: CanvasShape = CanvasShape.Quad(1.0f, 1.0f),
-        ): SurfaceEntity {
-            val rtCanvasShape =
-                when (canvasShape) {
-                    is CanvasShape.Quad ->
-                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Quad(
-                            canvasShape.width,
-                            canvasShape.height
-                        )
-                    is CanvasShape.Vr360Sphere ->
-                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr360Sphere(canvasShape.radius)
-                    is CanvasShape.Vr180Hemisphere ->
-                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr180Hemisphere(
-                            canvasShape.radius
-                        )
-                    else -> throw IllegalArgumentException("Unsupported canvas shape: $canvasShape")
-                }
-            return SurfaceEntity(
-                adapter.createSurfaceEntity(
-                    getRtStereoMode(stereoMode),
-                    rtCanvasShape,
-                    pose,
-                    adapter.activitySpaceRootImpl,
-                ),
-                entityManager,
-                canvasShape,
-            )
-        }
-
-        /**
-         * Public factory function for a SurfaceEntity.
-         *
-         * This method must be called from the main thread.
-         * https://developer.android.com/guide/components/processes-and-threads
-         *
-         * @param session Session to create the SurfaceEntity in.
-         * @param stereoMode Stereo mode for the surface.
-         * @param pose Pose of this entity relative to its parent, default value is Identity.
-         * @param canvasShape The [CanvasShape] which describes the spatialized shape of the canvas.
-         * @return a SurfaceEntity instance
-         */
-        @MainThread
-        @JvmOverloads
-        @JvmStatic
-        public fun create(
-            session: Session,
-            stereoMode: Int = SurfaceEntity.StereoMode.SIDE_BY_SIDE,
-            pose: Pose = Pose.Identity,
-            canvasShape: CanvasShape = CanvasShape.Quad(1.0f, 1.0f),
-        ): SurfaceEntity =
-            SurfaceEntity.create(
-                session.platformAdapter,
-                session.entityManager,
-                stereoMode,
-                pose,
-                canvasShape,
-            )
-    }
-
-    /**
-     * Controls how the surface content will be routed for stereo viewing. Applications must render
-     * into the surface in accordance with what is specified here in order for the compositor to
-     * correctly produce a stereoscopic view to the user.
-     *
-     * Values must be one of the values from [StereoMode].
-     */
-    public var stereoMode: Int
-        get() = rtEntity.stereoMode
-        @MainThread
-        set(value) {
-            rtEntity.stereoMode = getRtStereoMode(value)
-        }
-
-    /**
-     * Returns the dimensions of the Entity.
-     *
-     * This is the size of the canvas in the local spatial coordinate system of the entity. This
-     * field cannot be directly set - to update the dimensions of the canvas, update the value of
-     * [canvasShape].
-     */
-    public val dimensions: Dimensions
-        get() = rtEntity.dimensions.toDimensions()
-
-    /**
-     * The shape of the canvas that backs the Entity.
-     *
-     * Updating this value will alter the dimensions of the Entity.
-     */
-    public var canvasShape: CanvasShape = canvasShape
-        @MainThread
-        set(value) {
-            val rtCanvasShape =
-                when (value) {
-                    is CanvasShape.Quad ->
-                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Quad(value.width, value.height)
-                    is CanvasShape.Vr360Sphere ->
-                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr360Sphere(value.radius)
-                    is CanvasShape.Vr180Hemisphere ->
-                        JxrPlatformAdapter.SurfaceEntity.CanvasShape.Vr180Hemisphere(value.radius)
-                    else -> throw IllegalArgumentException("Unsupported canvas shape: $value")
-                }
-            rtEntity.setCanvasShape(rtCanvasShape)
-            field = value
-        }
-
-    /**
-     * Returns a surface into which the application can render stereo image content.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     */
-    @MainThread
-    public fun getSurface(): Surface {
-        return rtEntity.surface
-    }
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Texture.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Texture.kt
index b90dc72f..f3dbdb2 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Texture.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Texture.kt
@@ -21,15 +21,16 @@
 import androidx.concurrent.futures.ResolvableFuture
 import androidx.xr.scenecore.JxrPlatformAdapter.TextureResource as RtTextureResource
 import com.google.common.util.concurrent.ListenableFuture
+import java.lang.ref.WeakReference
 
 /** [Texture] represents a texture that can be used with materials. */
 @Suppress("NotCloseable")
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public open class Texture
 internal constructor(
-    internal val texture: RtTextureResource,
-    internal val sampler: TextureSampler = TextureSampler.create(),
-    internal val session: Session,
+    public val texture: RtTextureResource,
+    public val sampler: TextureSampler = TextureSampler.create(),
+    public val session: WeakReference<Session>,
 ) {
 
     /**
@@ -45,7 +46,7 @@
     // TODO(b/376277201): Provide Session.GltfModel.dispose().
     @MainThread
     public open fun dispose() {
-        session.platformAdapter.destroyTexture(texture)
+        session.get()!!.platformAdapter.destroyTexture(texture)
     }
 
     public companion object {
@@ -54,7 +55,7 @@
             platformAdapter: JxrPlatformAdapter,
             name: String,
             sampler: TextureSampler,
-            session: Session,
+            session: WeakReference<Session>,
         ): ListenableFuture<Texture> {
             val textureResourceFuture =
                 platformAdapter.loadTexture(name, sampler.toRtTextureSampler())
@@ -96,7 +97,9 @@
             name: String,
             sampler: TextureSampler,
         ): ListenableFuture<Texture> {
-            return createAsync(session.platformAdapter, name, sampler, session)
+            // The WeakReference prevents the Session (and its Activity) from being held in memory
+            // indefinitely.
+            return createAsync(session.platformAdapter, name, sampler, WeakReference(session))
         }
     }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Utils.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Utils.kt
index 8bbcca2..4f57e27 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Utils.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/Utils.kt
@@ -82,16 +82,6 @@
     }
 }
 
-/** Extension function that converts [Space] value to [JxrPlatformAdapter.Space] value. */
-internal fun Int.toRtSpace(): Int {
-    return when (this) {
-        Space.PARENT -> JxrPlatformAdapter.Space.PARENT
-        Space.ACTIVITY -> JxrPlatformAdapter.Space.ACTIVITY
-        Space.REAL_WORLD -> JxrPlatformAdapter.Space.REAL_WORLD
-        else -> error("Unknown Space Value: $this")
-    }
-}
-
 /** Extension function that converts a [RtMoveEvent] to a [MoveEvent]. */
 internal fun RtMoveEvent.toMoveEvent(entityManager: EntityManager): MoveEvent {
 
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/WaterMaterial.kt b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/WaterMaterial.kt
index e40e9e4..fdab0f3 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/WaterMaterial.kt
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/WaterMaterial.kt
@@ -19,23 +19,16 @@
 import androidx.annotation.MainThread
 import androidx.annotation.RestrictTo
 import androidx.concurrent.futures.ResolvableFuture
-import androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource as RtMaterial
+import androidx.xr.runtime.math.Vector4
+import androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource as RtMaterialResource
 import com.google.common.util.concurrent.ListenableFuture
 
-/** Represents a Material in SceneCore. */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public open class Material(internal val material: RtMaterial?)
-
 /** A Material which implements a water effect. */
 // TODO(b/396201066): Add unit tests for this class if we end up making it public.
 @Suppress("NotCloseable")
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class WaterMaterial
-internal constructor(
-    internal val materialResource: RtMaterial,
-    internal val isAlphaMapVersion: Boolean,
-    internal val session: Session,
-) : Material(materialResource) {
+internal constructor(public val material: RtMaterialResource, public val session: Session) {
 
     /**
      * Disposes the given water material resource.
@@ -50,7 +43,7 @@
     // TODO(b/376277201): Provide Session.GltfModel.dispose().
     @MainThread
     public fun dispose() {
-        session.platformAdapter.destroyWaterMaterial(materialResource)
+        session.platformAdapter.destroyWaterMaterial(material)
     }
 
     /**
@@ -63,7 +56,7 @@
      */
     @MainThread
     public fun setReflectionCube(reflectionCube: CubeMapTexture) {
-        session.platformAdapter.setReflectionCube(materialResource, reflectionCube.texture)
+        session.platformAdapter.setReflectionCube(material, reflectionCube.texture)
     }
 
     /**
@@ -76,7 +69,7 @@
      */
     @MainThread
     public fun setNormalMap(normalMap: Texture) {
-        session.platformAdapter.setNormalMap(materialResource, normalMap.texture)
+        session.platformAdapter.setNormalMap(material, normalMap.texture)
     }
 
     /**
@@ -89,7 +82,7 @@
      */
     @MainThread
     public fun setNormalTiling(normalTiling: Float) {
-        session.platformAdapter.setNormalTiling(materialResource, normalTiling)
+        session.platformAdapter.setNormalTiling(material, normalTiling)
     }
 
     /**
@@ -102,87 +95,46 @@
      */
     @MainThread
     public fun setNormalSpeed(normalSpeed: Float) {
-        session.platformAdapter.setNormalSpeed(materialResource, normalSpeed)
+        session.platformAdapter.setNormalSpeed(material, normalSpeed)
     }
 
     /**
-     * Sets the alpha step multiplier for the alpha map version of the water material.
+     * Sets the alpha step U for the water material.
+     *
+     * This method must be called from the main thread.
+     * https://developer.android.com/guide/components/processes-and-threads
+     *
+     * @param alphaStepU The alpha step U.
+     */
+    @MainThread
+    public fun setAlphaStepU(alphaStepU: Vector4) {
+        session.platformAdapter.setAlphaStepU(material, alphaStepU)
+    }
+
+    /**
+     * Sets the alpha step V for the water material.
+     *
+     * This method must be called from the main thread.
+     * https://developer.android.com/guide/components/processes-and-threads
+     *
+     * @param alphaStepV The alpha step V.
+     */
+    @MainThread
+    public fun setAlphaStepV(alphaStepV: Vector4) {
+        session.platformAdapter.setAlphaStepV(material, alphaStepV)
+    }
+
+    /**
+     * Sets the alpha step multiplier for the water material.
      *
      * This method must be called from the main thread.
      * https://developer.android.com/guide/components/processes-and-threads
      *
      * @param alphaStepMultiplier The alpha step multiplier.
-     * @throws IllegalStateException if the water material is not the alpha map version.
      */
     @MainThread
     public fun setAlphaStepMultiplier(alphaStepMultiplier: Float) {
-        if (isAlphaMapVersion) {
-            session.platformAdapter.setAlphaStepMultiplier(materialResource, alphaStepMultiplier)
-        } else {
-            throw IllegalStateException(
-                "The alpha step multiplier can only be set for alpha map version of the water material."
-            )
-        }
-    }
-
-    /**
-     * Sets the alpha map for the alpha map version of the water material.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     *
-     * @param alphaMap The alpha map.
-     * @throws IllegalStateException if the water material is not the alpha map version.
-     */
-    @MainThread
-    public fun setAlphaMap(alphaMap: Texture) {
-        if (isAlphaMapVersion) {
-            session.platformAdapter.setAlphaMap(materialResource, alphaMap.texture)
-        } else {
-            throw IllegalStateException(
-                "The alpha map can only be set for alpha map version of the water material."
-            )
-        }
-    }
-
-    /**
-     * Sets the normal z for the alpha map version of the water material.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     *
-     * @param normalZ The normal z.
-     * @throws IllegalStateException if the water material is not the alpha map version.
-     */
-    @MainThread
-    public fun setNormalZ(normalZ: Float) {
-        if (isAlphaMapVersion) {
-            session.platformAdapter.setNormalZ(materialResource, normalZ)
-        } else {
-            throw IllegalStateException(
-                "The normal Z can only be set for alpha map version of the water material.."
-            )
-        }
-    }
-
-    /**
-     * Sets the normal boundary for the alpha map version of the water material.
-     *
-     * This method must be called from the main thread.
-     * https://developer.android.com/guide/components/processes-and-threads
-     *
-     * @param normalBoundary The normal boundary.
-     * @throws IllegalStateException if the water material is not the alpha map version.
-     */
-    @MainThread
-    public fun setNormalBoundary(normalBoundary: Float) {
-        if (isAlphaMapVersion) {
-            session.platformAdapter.setNormalBoundary(materialResource, normalBoundary)
-        } else {
-            throw IllegalStateException(
-                "The normal boundary can only be set for alpha map version of the water material."
-            )
-        }
+        session.platformAdapter.setAlphaStepMultiplier(material, alphaStepMultiplier)
     }
 
     public companion object {
@@ -193,10 +145,10 @@
         @SuppressWarnings("RestrictTo")
         internal fun createAsync(
             platformAdapter: JxrPlatformAdapter,
-            isAlphaMapVersion: Boolean,
+            transparent: Boolean,
             session: Session,
         ): ListenableFuture<WaterMaterial> {
-            val materialResourceFuture = platformAdapter.createWaterMaterial(isAlphaMapVersion)
+            val materialResourceFuture = platformAdapter.createWaterMaterial(transparent)
             val materialFuture = ResolvableFuture.create<WaterMaterial>()
 
             // TODO: b/375070346 - remove this `!!` when we're sure the future is non-null.
@@ -204,7 +156,7 @@
                 {
                     try {
                         val material = materialResourceFuture.get()
-                        materialFuture.set(WaterMaterial(material, isAlphaMapVersion, session))
+                        materialFuture.set(WaterMaterial(material, session))
                     } catch (e: Exception) {
                         if (e is InterruptedException) {
                             Thread.currentThread().interrupt()
@@ -224,18 +176,17 @@
          * This method must be called from the main thread.
          * https://developer.android.com/guide/components/processes-and-threads
          *
+         * Currently, only URLs and relative paths from the android_assets/ directory are supported.
+         *
          * @param session The [Session] to use for loading the model.
-         * @param isAlphaMapVersion If the water material should be the alpha map version or not.
+         * @param transparent If the water material should have transparency or not.
          * @return a ListenableFuture<WaterMaterial>. Listeners will be called on the main thread if
          *   Runnable::run is supplied.
          */
         @MainThread
         @JvmStatic
-        public fun create(
-            session: Session,
-            isAlphaMapVersion: Boolean,
-        ): ListenableFuture<WaterMaterial> {
-            return WaterMaterial.createAsync(session.platformAdapter, isAlphaMapVersion, session)
+        public fun create(session: Session, transparent: Boolean): ListenableFuture<WaterMaterial> {
+            return WaterMaterial.createAsync(session.platformAdapter, transparent, session)
         }
     }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/common/BaseEntity.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/common/BaseEntity.java
index 8819cd0..8fa2041 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/common/BaseEntity.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/common/BaseEntity.java
@@ -25,8 +25,6 @@
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter.Component;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
-import androidx.xr.scenecore.JxrPlatformAdapter.Space;
-import androidx.xr.scenecore.JxrPlatformAdapter.SpaceValue;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -81,12 +79,12 @@
             Log.e("RealityCoreRuntime", "Cannot set non-BaseEntity as a parent of a BaseEntity");
             return;
         }
-        if (mParent != null) {
-            mParent.removeChildInternal(this);
+        if (this.mParent != null) {
+            this.mParent.removeChildInternal(this);
         }
-        mParent = (BaseEntity) parent;
-        if (mParent != null) {
-            mParent.addChildInternal(this);
+        this.mParent = (BaseEntity) parent;
+        if (this.mParent != null) {
+            this.mParent.addChildInternal(this);
         }
     }
 
@@ -104,13 +102,13 @@
 
     @Override
     @NonNull
-    public Pose getPose(@SpaceValue int relativeTo) {
+    public Pose getPose() {
         return mPose;
     }
 
     @Override
-    public void setPose(@NonNull Pose pose, @SpaceValue int relativeTo) {
-        mPose = pose;
+    public void setPose(@NonNull Pose pose) {
+        this.mPose = pose;
     }
 
     @Override
@@ -125,76 +123,38 @@
         return mParent.getActivitySpacePose()
                 .compose(
                         new Pose(
-                                mPose.getTranslation().times(mParent.getWorldSpaceScale()),
-                                mPose.getRotation()));
+                                this.mPose.getTranslation().times(mParent.getWorldSpaceScale()),
+                                this.mPose.getRotation()));
     }
 
     @Override
     @NonNull
-    public Vector3 getScale(@SpaceValue int relativeTo) {
-        switch (relativeTo) {
-            case Space.PARENT:
-                return mScale;
-            case Space.ACTIVITY:
-                return getActivitySpaceScale();
-            case Space.REAL_WORLD:
-                return getWorldSpaceScale();
-            default:
-                throw new IllegalArgumentException("Unsupported relativeTo value: " + relativeTo);
-        }
+    public Vector3 getScale() {
+        return mScale;
     }
 
     @Override
-    public void setScale(@NonNull Vector3 scale, @SpaceValue int relativeTo) {
-        switch (relativeTo) {
-            case Space.PARENT:
-                mScale = scale;
-                break;
-            case Space.ACTIVITY:
-                mScale = scale.div(getActivitySpaceScale());
-                break;
-            case Space.REAL_WORLD:
-                mScale = scale.div(getWorldSpaceScale());
-                break;
-            default:
-                throw new IllegalArgumentException("Unsupported relativeTo value: " + relativeTo);
-        }
+    public void setScale(@NonNull Vector3 scale) {
+        this.mScale = scale;
     }
 
     // Purely sets the value of the scale.
     protected final void setScaleInternal(@NonNull Vector3 scale) {
-        mScale = scale;
+        this.mScale = scale;
     }
 
     @Override
-    public float getAlpha(@SpaceValue int relativeTo) {
-        switch (relativeTo) {
-            case Space.PARENT:
-                return mAlpha;
-            case Space.ACTIVITY:
-            case Space.REAL_WORLD:
-                return getActivitySpaceAlpha();
-            default:
-                throw new IllegalArgumentException("Unsupported relativeTo value: " + relativeTo);
-        }
+    public float getAlpha() {
+        return mAlpha;
     }
 
     @Override
-    public void setAlpha(float alpha, @SpaceValue int relativeTo) {
-        switch (relativeTo) {
-            case Space.PARENT:
-                mAlpha = alpha;
-                break;
-            case Space.ACTIVITY:
-            case Space.REAL_WORLD:
-                mAlpha = alpha / getActivitySpaceAlpha();
-                break;
-            default:
-                throw new IllegalArgumentException("Unsupported relativeTo value: " + relativeTo);
-        }
+    public void setAlpha(float alpha) {
+        this.mAlpha = alpha;
     }
 
-    private float getActivitySpaceAlpha() {
+    @Override
+    public float getActivitySpaceAlpha() {
         if (mParent == null) {
             return mAlpha;
         }
@@ -207,7 +167,7 @@
         if (mParent == null) {
             throw new IllegalStateException("Cannot get scale in WorldSpace with a null parent");
         }
-        return mParent.getWorldSpaceScale().times(mScale);
+        return mParent.getWorldSpaceScale().times(this.mScale);
     }
 
     @Override
@@ -216,7 +176,7 @@
         if (mParent == null) {
             throw new IllegalStateException("Cannot get scale in ActivitySpace with a null parent");
         }
-        return mParent.getActivitySpaceScale().times(mScale);
+        return mParent.getActivitySpaceScale().times(this.mScale);
     }
 
     @Override
@@ -229,7 +189,7 @@
 
     @Override
     public void setHidden(boolean hidden) {
-        mHidden = hidden;
+        this.mHidden = hidden;
     }
 
     @Override
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivityPanelEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivityPanelEntityImpl.java
index e34343d..fdf93d7 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivityPanelEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivityPanelEntityImpl.java
@@ -22,16 +22,14 @@
 import android.os.Bundle;
 import android.util.Log;
 
-import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
+import androidx.xr.extensions.space.ActivityPanel;
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivityPanelEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-import com.android.extensions.xr.space.ActivityPanel;
-
 import java.util.Objects;
 import java.util.concurrent.ScheduledExecutorService;
 
@@ -54,7 +52,7 @@
         super(node, extensions, entityManager, executor);
         // We need to notify our base class of the pixelDimensions, even though the Extensions are
         // initialized in the factory method. (ext.ActivityPanel.setWindowBounds, etc)
-        super.setSizeInPixels(windowBoundsPx);
+        super.setPixelDimensions(windowBoundsPx);
         float cornerRadius = getDefaultCornerRadiusInMeters();
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
             transaction
@@ -68,7 +66,7 @@
     }
 
     @Override
-    public void launchActivity(@NonNull Intent intent, @Nullable Bundle bundle) {
+    public void launchActivity(Intent intent, @Nullable Bundle bundle) {
         // Note that launching an Activity into the Panel doesn't actually update the size. The
         // application is expected to set the size of the ActivityPanel at construction time, before
         // launching an Activity into it. The Activity will then render into the size the
@@ -78,7 +76,7 @@
     }
 
     @Override
-    public void moveActivity(@NonNull Activity activity) {
+    public void moveActivity(Activity activity) {
         // Note that moving an Activity into the Panel doesn't actually update the size. The
         // application
         // should explicitly call setPixelDimensions() to update the size of an ActivityPanel.
@@ -86,9 +84,9 @@
     }
 
     @Override
-    public void setSizeInPixels(@NonNull PixelDimensions dimensions) {
+    public void setPixelDimensions(PixelDimensions dimensions) {
         PixelDimensions oldDimensions = mPixelDimensions;
-        super.setSizeInPixels(dimensions);
+        super.setPixelDimensions(dimensions);
 
         // Avoid updating the bounds if we were called with the same values.
         if (Objects.equals(oldDimensions, dimensions)) {
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivitySpaceImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivitySpaceImpl.java
index 1dcf18b..120e958 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivitySpaceImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ActivitySpaceImpl.java
@@ -19,17 +19,15 @@
 import android.util.Log;
 
 import androidx.annotation.NonNull;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.space.Bounds;
+import androidx.xr.extensions.space.SpatialState;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivitySpace;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
-import androidx.xr.scenecore.JxrPlatformAdapter.SpaceValue;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.space.Bounds;
-import com.android.extensions.xr.space.SpatialState;
 
 import java.util.Collections;
 import java.util.HashSet;
@@ -43,7 +41,7 @@
  *
  * <p>This is used to create an entity that contains the task node.
  */
-@SuppressWarnings({"UnnecessarilyFullyQualified"})
+@SuppressWarnings({"deprecation", "UnnecessarilyFullyQualified"}) // TODO(b/373435470): Remove
 final class ActivitySpaceImpl extends SystemSpaceEntityImpl implements ActivitySpace {
 
     private static final String TAG = "ActivitySpaceImpl";
@@ -91,7 +89,7 @@
     }
 
     @Override
-    public void setScale(@NonNull Vector3 scale, @SpaceValue int relativeTo) {
+    public void setScale(@NonNull Vector3 scale) {
         // TODO(b/349391097): make this behavior consistent with AnchorEntityImpl
         Log.e(TAG, "Cannot set scale for the ActivitySpace.");
     }
@@ -103,7 +101,6 @@
         super.dispose();
     }
 
-    @NonNull
     @Override
     public Dimensions getBounds() {
         // The bounds are kept in sync with the Extensions in the onBoundsChangedEvent callback. We
@@ -113,8 +110,7 @@
                 oldBounds -> {
                     if (oldBounds == null) {
                         Bounds bounds = mSpatialStateProvider.get().getBounds();
-                        return new Dimensions(
-                                bounds.getWidth(), bounds.getHeight(), bounds.getDepth());
+                        return new Dimensions(bounds.width, bounds.height, bounds.depth);
                     }
                     return oldBounds;
                 });
@@ -141,10 +137,7 @@
         Dimensions newDimensions =
                 mBounds.updateAndGet(
                         oldBounds ->
-                                new Dimensions(
-                                        newBounds.getWidth(),
-                                        newBounds.getHeight(),
-                                        newBounds.getDepth()));
+                                new Dimensions(newBounds.width, newBounds.height, newBounds.depth));
         for (OnBoundsChangedListener listener : mBoundsListeners) {
             listener.onBoundsChanged(newDimensions);
         }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AnchorEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AnchorEntityImpl.java
index 506f7d4..2974d09 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AnchorEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AnchorEntityImpl.java
@@ -26,25 +26,24 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.content.ContextCompat;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.runtime.openxr.ExportableAnchor;
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivitySpace;
 import androidx.xr.scenecore.JxrPlatformAdapter.AnchorEntity;
+import androidx.xr.scenecore.JxrPlatformAdapter.AnchorEntity.OnStateChangedListener;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneSemantic;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneType;
-import androidx.xr.scenecore.JxrPlatformAdapter.SpaceValue;
 import androidx.xr.scenecore.impl.perception.Anchor;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Plane;
 import androidx.xr.scenecore.impl.perception.Plane.PlaneData;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.time.Duration;
@@ -575,17 +574,17 @@
 
     @NonNull
     @Override
-    public Pose getPose(@SpaceValue int relativeTo) {
+    public Pose getPose() {
         throw new UnsupportedOperationException("Cannot get 'pose' on an AnchorEntity.");
     }
 
     @Override
-    public void setPose(@NonNull Pose pose, @SpaceValue int relativeTo) {
+    public void setPose(@NonNull Pose pose) {
         throw new UnsupportedOperationException("Cannot set 'pose' on an AnchorEntity.");
     }
 
     @Override
-    public void setScale(@NonNull Vector3 scale, @SpaceValue int relativeTo) {
+    public void setScale(@NonNull Vector3 scale) {
         // TODO(b/349391097): make this behavior consistent with ActivitySpaceImpl
         throw new UnsupportedOperationException("Cannot set 'scale' on an AnchorEntity.");
     }
@@ -654,7 +653,8 @@
         // entity
         // was always null so does not need to be reset.
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
-            transaction.setAnchorId(mNode, null).setParent(mNode, null).apply();
+            transaction.setAnchorId(mNode, null);
+            transaction.setParent(mNode, null).apply();
         }
         super.dispose();
     }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AndroidXrEntity.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AndroidXrEntity.java
index 53bdbdb..c44de0a 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AndroidXrEntity.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AndroidXrEntity.java
@@ -19,26 +19,22 @@
 import android.util.Log;
 
 import androidx.annotation.NonNull;
+import androidx.xr.extensions.Consumer;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.InputEvent;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
+import androidx.xr.extensions.node.ReformEvent;
+import androidx.xr.extensions.node.ReformOptions;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
 import androidx.xr.runtime.math.Vector3;
-import androidx.xr.scenecore.JxrPlatformAdapter.ActivitySpace;
+import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener;
-import androidx.xr.scenecore.JxrPlatformAdapter.PerceptionSpaceActivityPose;
 import androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent;
-import androidx.xr.scenecore.JxrPlatformAdapter.Space;
-import androidx.xr.scenecore.JxrPlatformAdapter.SpaceValue;
 import androidx.xr.scenecore.common.BaseEntity;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.function.Consumer;
-import com.android.extensions.xr.node.InputEvent;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-import com.android.extensions.xr.node.ReformEvent;
-import com.android.extensions.xr.node.ReformOptions;
-
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
@@ -78,65 +74,33 @@
         mEntityManager.setEntityForNode(node, this);
     }
 
-    @NonNull
     @Override
-    public Pose getPose(@SpaceValue int relativeTo) {
-        switch (relativeTo) {
-            case Space.PARENT:
-                return super.getPose(relativeTo);
-            case Space.ACTIVITY:
-                return getPoseInActivitySpace();
-            case Space.REAL_WORLD:
-                return getPoseInPerceptionSpace();
-            default:
-                throw new IllegalArgumentException("Unsupported relativeTo value: " + relativeTo);
-        }
-    }
-
-    @Override
-    public void setPose(@NonNull Pose pose, @SpaceValue int relativeTo) {
+    public void setPose(@NonNull Pose pose) {
         // TODO: b/321268237 - Minimize the number of node transactions
-        Pose localPose;
-        switch (relativeTo) {
-            case Space.PARENT:
-                localPose = pose;
-                break;
-            case Space.ACTIVITY:
-                localPose = getLocalPoseForActivitySpacePose(pose);
-                break;
-            case Space.REAL_WORLD:
-                localPose = getLocalPoseForPerceptionSpacePose(pose);
-                break;
-            default:
-                throw new IllegalArgumentException("Unsupported relativeTo value: " + relativeTo);
-        }
-        super.setPose(localPose, Space.PARENT);
+        super.setPose(pose);
 
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
             transaction
                     .setPosition(
                             mNode,
-                            localPose.getTranslation().getX(),
-                            localPose.getTranslation().getY(),
-                            localPose.getTranslation().getZ())
+                            pose.getTranslation().getX(),
+                            pose.getTranslation().getY(),
+                            pose.getTranslation().getZ())
                     .setOrientation(
                             mNode,
-                            localPose.getRotation().getX(),
-                            localPose.getRotation().getY(),
-                            localPose.getRotation().getZ(),
-                            localPose.getRotation().getW())
+                            pose.getRotation().getX(),
+                            pose.getRotation().getY(),
+                            pose.getRotation().getZ(),
+                            pose.getRotation().getW())
                     .apply();
         }
     }
 
     @Override
-    public void setScale(@NonNull Vector3 scale, @SpaceValue int relativeTo) {
-        super.setScale(scale, relativeTo);
-        Vector3 localScale = super.getScale(Space.PARENT);
+    public void setScale(@NonNull Vector3 scale) {
+        super.setScale(scale);
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
-            transaction
-                    .setScale(mNode, localScale.getX(), localScale.getY(), localScale.getZ())
-                    .apply();
+            transaction.setScale(mNode, scale.getX(), scale.getY(), scale.getZ()).apply();
         }
     }
 
@@ -159,42 +123,16 @@
         return xrParent.getPoseInActivitySpace()
                 .compose(
                         new Pose(
-                                getPose(Space.PARENT)
-                                        .getTranslation()
-                                        .times(xrParent.getActivitySpaceScale()),
-                                getPose(Space.PARENT).getRotation()));
+                                getPose().getTranslation().times(xrParent.getActivitySpaceScale()),
+                                getPose().getRotation()));
     }
 
-    private Pose getPoseInPerceptionSpace() {
-        PerceptionSpaceActivityPose perceptionSpaceActivityPose =
-                mEntityManager
-                        .getSystemSpaceActivityPoseOfType(PerceptionSpaceActivityPose.class)
-                        .get(0);
-        return transformPoseTo(new Pose(), perceptionSpaceActivityPose);
-    }
-
-    private Pose getLocalPoseForActivitySpacePose(Pose pose) {
-        if (!(getParent() instanceof AndroidXrEntity)) {
-            throw new IllegalStateException(
-                    "Cannot get pose in Activity Space with a non-AndroidXrEntity parent");
-        }
-        AndroidXrEntity xrParent = (AndroidXrEntity) getParent();
-        ActivitySpace activitySpace =
-                mEntityManager.getSystemSpaceActivityPoseOfType(ActivitySpace.class).get(0);
-        return activitySpace.transformPoseTo(pose, xrParent);
-    }
-
-    private Pose getLocalPoseForPerceptionSpacePose(Pose pose) {
-        if (!(getParent() instanceof AndroidXrEntity)) {
-            throw new IllegalStateException(
-                    "Cannot get pose in Activity Space with a non-AndroidXrEntity parent");
-        }
-        AndroidXrEntity xrParent = (AndroidXrEntity) getParent();
-        PerceptionSpaceActivityPose perceptionSpaceActivityPose =
-                mEntityManager
-                        .getSystemSpaceActivityPoseOfType(PerceptionSpaceActivityPose.class)
-                        .get(0);
-        return perceptionSpaceActivityPose.transformPoseTo(pose, xrParent);
+    /**
+     * This method should be called when the ActivitySpace's underlying base space has been updated.
+     * For example, this method should be called when the task node moves in XrExtensions.
+     */
+    public void onActivitySpaceUpdated() {
+        // Defaults to a no-op.
     }
 
     // Returns the underlying extension Node for the Entity.
@@ -216,20 +154,29 @@
 
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
             if (xrParent == null) {
-                NodeTransaction unused =
-                        transaction.setVisibility(mNode, false).setParent(mNode, null);
+                transaction.setVisibility(mNode, false).setParent(mNode, null);
             } else {
-                NodeTransaction unused = transaction.setParent(mNode, xrParent.getNode());
+                transaction.setParent(mNode, xrParent.getNode());
             }
             transaction.apply();
         }
     }
 
     @Override
-    public void setAlpha(float alpha, @SpaceValue int relativeTo) {
-        super.setAlpha(alpha, relativeTo);
+    public void setSize(@NonNull Dimensions dimensions) {
+        // TODO: b/326479171: Uncomment when extensions implement setSize.
+        // try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
+        //   transaction.setSize(mNode, dimensions.width, dimensions.height,
+        // dimensions.depth).apply();
+        // }
+    }
+
+    @Override
+    public void setAlpha(float alpha) {
+        super.setAlpha(alpha);
+
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
-            transaction.setAlpha(mNode, super.getAlpha(relativeTo)).apply();
+            transaction.setAlpha(mNode, alpha).apply();
         }
     }
 
@@ -242,10 +189,10 @@
                 if (hidden) {
                     // Since this entity is being hidden, disable reform and the highlights around
                     // the node.
-                    NodeTransaction unused = transaction.disableReform(mNode);
+                    transaction.disableReform(mNode);
                 } else {
                     // Enables reform and the highlights around the node.
-                    NodeTransaction unused = transaction.enableReform(mNode, mReformOptions);
+                    transaction.enableReform(mNode, mReformOptions);
                 }
             }
             transaction.setVisibility(mNode, !hidden).apply();
@@ -361,7 +308,7 @@
         mNode.stopListeningForInput();
         mReformEventConsumerMap.clear();
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
-            NodeTransaction unused = transaction.disableReform(mNode);
+            transaction.disableReform(mNode);
         }
 
         // SystemSpaceEntityImpls (Anchors, ActivitySpace, etc) should have null parents.
@@ -396,8 +343,7 @@
                                                     reformEvent.getProposedOrientation().x,
                                                     reformEvent.getProposedOrientation().y,
                                                     reformEvent.getProposedOrientation().z,
-                                                    reformEvent.getProposedOrientation().w)),
-                                    Space.PARENT);
+                                                    reformEvent.getProposedOrientation().w)));
                             // Update the cached scale of the entity.
                             super.setScaleInternal(
                                     new Vector3(
@@ -423,10 +369,10 @@
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
             if (mReformOptions.getEnabledReform() == 0) {
                 // Disables reform and the highlights around the node.
-                NodeTransaction unused = transaction.disableReform(mNode);
+                transaction.disableReform(mNode);
             } else {
                 // Enables reform and the highlights around the node.
-                NodeTransaction unused = transaction.enableReform(mNode, mReformOptions);
+                transaction.enableReform(mNode, mReformOptions);
             }
             transaction.apply();
         }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImpl.java
index c2df7e3..9ebcad34 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImpl.java
@@ -20,13 +20,12 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.xr.extensions.media.AudioTrackExtensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.AudioTrackExtensionsWrapper;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.PointSourceAttributes;
 import androidx.xr.scenecore.JxrPlatformAdapter.SoundFieldAttributes;
 
-import com.android.extensions.xr.media.AudioTrackExtensions;
-
 /** Implementation of the {@link AudioTrackExtensionsWrapper} */
 final class AudioTrackExtensionsWrapperImpl implements AudioTrackExtensionsWrapper {
 
@@ -42,7 +41,7 @@
     @Nullable
     @Override
     public PointSourceAttributes getPointSourceAttributes(@NonNull AudioTrack audioTrack) {
-        com.android.extensions.xr.media.PointSourceAttributes extAttributes =
+        androidx.xr.extensions.media.PointSourceAttributes extAttributes =
                 mExtensions.getPointSourceAttributes(audioTrack);
 
         if (extAttributes == null) {
@@ -61,7 +60,7 @@
     @Nullable
     @Override
     public SoundFieldAttributes getSoundFieldAttributes(@NonNull AudioTrack audioTrack) {
-        com.android.extensions.xr.media.SoundFieldAttributes extAttributes =
+        androidx.xr.extensions.media.SoundFieldAttributes extAttributes =
                 mExtensions.getSoundFieldAttributes(audioTrack);
 
         if (extAttributes == null) {
@@ -81,7 +80,7 @@
     @NonNull
     public AudioTrack.Builder setPointSourceAttributes(
             @NonNull AudioTrack.Builder builder, @NonNull PointSourceAttributes attributes) {
-        com.android.extensions.xr.media.PointSourceAttributes extAttributes =
+        androidx.xr.extensions.media.PointSourceAttributes extAttributes =
                 MediaUtils.convertPointSourceAttributesToExtensions(attributes);
 
         return mExtensions.setPointSourceAttributes(builder, extAttributes);
@@ -91,7 +90,7 @@
     @NonNull
     public AudioTrack.Builder setSoundFieldAttributes(
             @NonNull AudioTrack.Builder builder, @NonNull SoundFieldAttributes attributes) {
-        com.android.extensions.xr.media.SoundFieldAttributes extAttributes =
+        androidx.xr.extensions.media.SoundFieldAttributes extAttributes =
                 MediaUtils.convertSoundFieldAttributesToExtensions(attributes);
 
         return mExtensions.setSoundFieldAttributes(builder, extAttributes);
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/BasePanelEntity.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/BasePanelEntity.java
index c7dd01f..99b30f5 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/BasePanelEntity.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/BasePanelEntity.java
@@ -24,18 +24,18 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RequiresApi;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import java.util.concurrent.ScheduledExecutorService;
 
 /** BasePanelEntity provides implementations of capabilities common to PanelEntities. */
+@SuppressWarnings("deprecation") // TODO(b/373435470): Remove
 abstract class BasePanelEntity extends AndroidXrEntity implements PanelEntity {
     private static final float DEFAULT_CORNER_RADIUS_DP = 32.0f;
     protected PixelDimensions mPixelDimensions;
@@ -49,7 +49,7 @@
         super(node, extensions, entityManager, executor);
     }
 
-    protected float getDefaultPixelDensity() {
+    private float getDefaultPixelDensity() {
         return mExtensions
                 .getConfig()
                 .defaultPixelsPerMeter(Resources.getSystem().getDisplayMetrics().density);
@@ -91,9 +91,7 @@
         return radiusPixels / getDefaultPixelDensity();
     }
 
-    @NonNull
     @Override
-    @Deprecated
     public Vector3 getPixelDensity() {
         Vector3 scale = getWorldSpaceScale();
         float defaultPixelDensity = getDefaultPixelDensity();
@@ -103,31 +101,28 @@
                 defaultPixelDensity / scale.getZ());
     }
 
-    @NonNull
     @Override
     public Dimensions getSize() {
-        float pixelDensity = getDefaultPixelDensity();
+        Vector3 pixelDensity = getPixelDensity();
         return new Dimensions(
-                mPixelDimensions.width / pixelDensity, mPixelDimensions.height / pixelDensity, 0);
+                mPixelDimensions.width / pixelDensity.getX(),
+                mPixelDimensions.height / pixelDensity.getY(),
+                0);
     }
 
     @Override
     public void setSize(@NonNull Dimensions dimensions) {
-        float pixelDensity = getDefaultPixelDensity();
-        setSizeInPixels(
-                new PixelDimensions(
-                        (int) (dimensions.width * pixelDensity),
-                        (int) (dimensions.height * pixelDensity)));
+        // TODO(b/352630025): remove this method.
+        setPixelDimensions(new PixelDimensions((int) dimensions.width, (int) dimensions.height));
     }
 
-    @NonNull
     @Override
-    public PixelDimensions getSizeInPixels() {
+    public PixelDimensions getPixelDimensions() {
         return mPixelDimensions;
     }
 
     @Override
-    public void setSizeInPixels(@NonNull PixelDimensions dimensions) {
+    public void setPixelDimensions(PixelDimensions dimensions) {
         mPixelDimensions = dimensions;
     }
 
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/EntityManager.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/EntityManager.java
index d81bc4b..aaacd1d 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/EntityManager.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/EntityManager.java
@@ -20,12 +20,10 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.xr.extensions.node.NodeTypeConverter;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivityPose;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 
-import com.android.extensions.xr.node.Node;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -44,20 +42,6 @@
     /**
      * Returns the {@link Entity} associated with the given {@link Node}.
      *
-     * @deprecated Use the {@link Node} overload instead.
-     * @param node the {@link Node} to get the associated {@link Entity} for.
-     * @return the {@link Entity} associated with the given {@link Node}, or null if no such {@link
-     *     Entity} exists.
-     */
-    @Nullable
-    @Deprecated
-    Entity getEntityForNode(@NonNull androidx.xr.extensions.node.Node node) {
-        return mNodeEntityMap.get(NodeTypeConverter.toFramework(node));
-    }
-
-    /**
-     * Returns the {@link Entity} associated with the given {@link Node}.
-     *
      * @param node the {@link Node} to get the associated {@link Entity} for.
      * @return the {@link Entity} associated with the given {@link Node}, or null if no such {@link
      *     Entity} exists.
@@ -70,18 +54,6 @@
     /**
      * Sets the {@link Entity} associated with the given {@link Node}.
      *
-     * @deprecated Use the {@link Node} overload instead.
-     * @param node the {@link Node} to set the associated {@link Entity} for.
-     * @param entity the {@link Entity} to associate with the given {@link Node}.
-     */
-    @Deprecated
-    void setEntityForNode(@NonNull androidx.xr.extensions.node.Node node, @NonNull Entity entity) {
-        mNodeEntityMap.put(NodeTypeConverter.toFramework(node), entity);
-    }
-
-    /**
-     * Sets the {@link Entity} associated with the given {@link Node}.
-     *
      * @param node the {@link Node} to set the associated {@link Entity} for.
      * @param entity the {@link Entity} to associate with the given {@link Node}.
      */
@@ -107,16 +79,6 @@
         return mNodeEntityMap.values();
     }
 
-    /**
-     * Removes the given {@link androidx.xr.extensions.node.Node} from the map.
-     *
-     * @deprecated Use the {@link Node} overload instead.
-     */
-    @Deprecated
-    void removeEntityForNode(@NonNull androidx.xr.extensions.node.Node node) {
-        mNodeEntityMap.remove(NodeTypeConverter.toFramework(node));
-    }
-
     /** Removes the given {@link Node} from the map. */
     void removeEntityForNode(@NonNull Node node) {
         mNodeEntityMap.remove(node);
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ExrImageResourceImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ExrImageResourceImpl.java
index 1e7ce10..9628d57 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ExrImageResourceImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ExrImageResourceImpl.java
@@ -27,13 +27,13 @@
 @SuppressWarnings({"deprecation", "UnnecessarilyFullyQualified"}) // TODO(b/373435470): Remove
 final class ExrImageResourceImpl implements ExrImageResource {
     // Note: right now the "environment" format accessible through the XRExtensions layer is .EXR
-    private final com.android.extensions.xr.asset.EnvironmentToken mToken;
+    private final androidx.xr.extensions.asset.EnvironmentToken mToken;
 
-    ExrImageResourceImpl(com.android.extensions.xr.asset.EnvironmentToken token) {
+    ExrImageResourceImpl(androidx.xr.extensions.asset.EnvironmentToken token) {
         mToken = token;
     }
 
-    public com.android.extensions.xr.asset.EnvironmentToken getToken() {
+    public androidx.xr.extensions.asset.EnvironmentToken getToken() {
         return mToken;
     }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ExrImageResourceImplSplitEngine.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ExrImageResourceImplSplitEngine.java
deleted file mode 100644
index 84bc3d5..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ExrImageResourceImplSplitEngine.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore.impl;
-
-import androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource;
-
-/**
- * Implementation of a SceneCore ExrImageResource for the Split Engine.
- *
- * <p>EXR Images are high dynamic range images that can be used as environmental skyboxes, and can
- * be used for Image Based Lighting.
- */
-final class ExrImageResourceImplSplitEngine implements ExrImageResource {
-    private final long mToken;
-
-    ExrImageResourceImplSplitEngine(long token) {
-        mToken = token;
-    }
-
-    public long getExtensionImageToken() {
-        return mToken;
-    }
-}
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImpl.java
index a6b370d7..68523e5 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImpl.java
@@ -20,13 +20,12 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.GltfEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import java.util.concurrent.ScheduledExecutorService;
 
 /**
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImplSplitEngine.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImplSplitEngine.java
index 9c651c5..6c5b539 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImplSplitEngine.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfEntityImplSplitEngine.java
@@ -20,13 +20,12 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.GltfEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.androidxr.splitengine.SubspaceNode;
 import com.google.ar.imp.apibindings.ImpressApi;
@@ -72,7 +71,7 @@
 
         try (NodeTransaction transaction = extensions.createNodeTransaction()) {
             // Make the Entity node a parent of the subspace node.
-            transaction.setParent(mSubspace.getSubspaceNodeActual(), mNode).apply();
+            transaction.setParent(mSubspace.subspaceNode, mNode).apply();
         }
         mModelImpressNode =
                 impressApi.instanceGltfModel(gltfModelResource.getExtensionModelToken());
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfModelResourceImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfModelResourceImpl.java
index df3cacd..175d95d 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfModelResourceImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/GltfModelResourceImpl.java
@@ -25,13 +25,13 @@
  */
 @SuppressWarnings({"deprecation", "UnnecessarilyFullyQualified"}) // TODO(b/373435470): Remove
 final class GltfModelResourceImpl implements GltfModelResource {
-    private final com.android.extensions.xr.asset.GltfModelToken mToken;
+    private final androidx.xr.extensions.asset.GltfModelToken mToken;
 
-    GltfModelResourceImpl(com.android.extensions.xr.asset.GltfModelToken token) {
+    GltfModelResourceImpl(androidx.xr.extensions.asset.GltfModelToken token) {
         mToken = token;
     }
 
-    public com.android.extensions.xr.asset.GltfModelToken getExtensionModelToken() {
+    public androidx.xr.extensions.asset.GltfModelToken getExtensionModelToken() {
         return mToken;
     }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxr.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxr.java
index 1f4c420..7d7f5fa 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxr.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxr.java
@@ -32,21 +32,20 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.concurrent.futures.ResolvableFuture;
 import androidx.xr.arcore.Anchor;
-import androidx.xr.extensions.node.NodeTypeConverter;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.XrExtensionsProvider;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
+import androidx.xr.extensions.space.ActivityPanel;
+import androidx.xr.extensions.space.ActivityPanelLaunchParameters;
+import androidx.xr.extensions.space.SpatialState;
 import androidx.xr.runtime.math.Pose;
+import androidx.xr.runtime.math.Vector4;
 import androidx.xr.scenecore.JxrPlatformAdapter;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.impl.perception.ViewProjections;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-import com.android.extensions.xr.space.ActivityPanel;
-import com.android.extensions.xr.space.ActivityPanelLaunchParameters;
-import com.android.extensions.xr.space.SpatialState;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.apibindings.ImpressApi;
 import com.google.ar.imp.apibindings.ImpressApiImpl;
@@ -67,9 +66,7 @@
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
@@ -88,7 +85,6 @@
 public class JxrPlatformAdapterAxr implements JxrPlatformAdapter {
     private static final String TAG = "JxrPlatformAdapterAxr";
     private static final String SPLIT_ENGINE_LIBRARY_NAME = "impress_api_jni";
-    private static final boolean IS_SKYBOX_MIGRATION_PERIOD_OVER = false;
 
     private final ActivitySpaceImpl mActivitySpace;
     private final HeadActivityPoseImpl mHeadActivityPose;
@@ -111,7 +107,7 @@
     private final ImpressApi mImpressApi;
     private final Map<Consumer<SpatialCapabilities>, Executor>
             mSpatialCapabilitiesChangedListeners = new ConcurrentHashMap<>();
-    @VisibleForTesting final ListenableFuture<ExrImageResource> mNullSkyboxResourceFuture;
+    private final ListenableFuture<ExrImageResource> mNullSkyboxResourceFuture;
 
     @Nullable private Activity mActivity;
     private SplitEngineSubspaceManager mSplitEngineSubspaceManager;
@@ -166,12 +162,14 @@
         mEntityManager = entityManager;
         mPerceptionLibrary = perceptionLibrary;
         mTaskWindowLeashNode = taskWindowLeashNode;
+        mNullSkyboxResourceFuture = loadExrImageByAssetName("images/black_skybox.exr");
         mEnvironment =
                 new SpatialEnvironmentImpl(
                         activity,
                         extensions,
                         rootSceneNode,
                         mLazySpatialStateProvider,
+                        mNullSkyboxResourceFuture,
                         useSplitEngine);
         mActivitySpace =
                 new ActivitySpaceImpl(
@@ -205,7 +203,7 @@
                         perceptionLibrary));
         mCameraActivityPoses.forEach(mEntityManager::addSystemSpaceActivityPose);
         mUseSplitEngine = useSplitEngine;
-        mOpenXrReferenceSpaceType = extensions.getOpenXrWorldReferenceSpaceType();
+        mOpenXrReferenceSpaceType = extensions.getOpenXrWorldSpaceType();
 
         mMainPanelEntity =
                 new MainPanelEntityImpl(
@@ -236,26 +234,6 @@
             mImpressApi.setup(mSplitEngineRenderer.getView());
             mEnvironment.onSplitEngineReady(mSplitEngineSubspaceManager, mImpressApi);
         }
-        // TODO(b/396483557): This is a temporary measure to not break clients while they migrate to
-        // the
-        // Split Engine route.
-        if (useSplitEngine && IS_SKYBOX_MIGRATION_PERIOD_OVER) {
-            mNullSkyboxResourceFuture =
-                    loadExrImageByAssetNameSplitEngine(
-                            "images/preprocessed_black_skybox_android_xr_scenecore.zip");
-        } else {
-            mNullSkyboxResourceFuture =
-                    loadExrImageByAssetName("images/black_skybox_android_xr_scenecore.exr");
-        }
-        mNullSkyboxResourceFuture.addListener(
-                () -> {
-                    try {
-                        mEnvironment.onNullSkyboxResourceReady(mNullSkyboxResourceFuture.get());
-                    } catch (ExecutionException | InterruptedException e) {
-                        Log.e(TAG, "Failed to get null skybox resource.");
-                    }
-                },
-                Executors.newSingleThreadExecutor());
     }
 
     /** Create a new @c JxrPlatformAdapterAxr. */
@@ -292,33 +270,6 @@
                 useSplitEngine);
     }
 
-    /**
-     * Create a new @c JxrPlatformAdapterAxr.
-     *
-     * @deprecated use {@link #create(Activity, ScheduledExecutorService, Node, Node)} instead.
-     */
-    @NonNull
-    @Deprecated
-    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-    public static JxrPlatformAdapterAxr create(
-            @NonNull Activity activity,
-            @NonNull ScheduledExecutorService executor,
-            @NonNull androidx.xr.extensions.node.Node rootSceneNode,
-            @NonNull androidx.xr.extensions.node.Node taskWindowLeashNode) {
-        return create(
-                activity,
-                executor,
-                XrExtensionsProvider.getXrExtensions(),
-                null,
-                new EntityManager(),
-                new PerceptionLibrary(),
-                null,
-                null,
-                NodeTypeConverter.toFramework(rootSceneNode),
-                NodeTypeConverter.toFramework(taskWindowLeashNode),
-                /* useSplitEngine= */ false);
-    }
-
     /** Create a new @c JxrPlatformAdapterAxr. */
     @NonNull
     @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
@@ -435,7 +386,7 @@
     }
 
     private static GltfModelResourceImpl getModelResourceFromToken(
-            com.android.extensions.xr.asset.GltfModelToken token) {
+            androidx.xr.extensions.asset.GltfModelToken token) {
         return new GltfModelResourceImpl(token);
     }
 
@@ -445,15 +396,10 @@
     }
 
     private static ExrImageResourceImpl getExrImageResourceFromToken(
-            com.android.extensions.xr.asset.EnvironmentToken token) {
+            androidx.xr.extensions.asset.EnvironmentToken token) {
         return new ExrImageResourceImpl(token);
     }
 
-    private static ExrImageResourceImplSplitEngine getExrImageResourceFromTokenSplitEngine(
-            long token) {
-        return new ExrImageResourceImplSplitEngine(token);
-    }
-
     private static TextureResourceImpl getTextureResourceFromToken(long token) {
         return new TextureResourceImpl(token);
     }
@@ -467,7 +413,8 @@
     // It is synchronized because we assume this.spatialState cannot be updated elsewhere during the
     // execution of this method.
     @VisibleForTesting
-    synchronized void onSpatialStateChanged(@NonNull SpatialState newSpatialState) {
+    synchronized void onSpatialStateChanged(
+            @NonNull androidx.xr.extensions.space.SpatialState newSpatialState) {
         SpatialState previousSpatialState = mSpatialState.getAndSet(newSpatialState);
 
         boolean spatialCapabilitiesChanged =
@@ -516,7 +463,7 @@
 
     private void setSpatialStateCallback() {
         Handler mainHandler = new Handler(Looper.getMainLooper());
-        mExtensions.setSpatialStateCallback(
+        mExtensions.registerSpatialStateCallback(
                 mActivity, this::onSpatialStateChanged, mainHandler::post);
     }
 
@@ -568,7 +515,7 @@
     @NonNull
     public LoggingEntity createLoggingEntity(@NonNull Pose pose) {
         LoggingEntityImpl entity = new LoggingEntityImpl();
-        entity.setPose(pose, Space.PARENT);
+        entity.setPose(pose);
         return entity;
     }
 
@@ -689,7 +636,7 @@
             return null;
         }
 
-        CompletableFuture<com.android.extensions.xr.asset.GltfModelToken> tokenFuture;
+        CompletableFuture<androidx.xr.extensions.asset.GltfModelToken> tokenFuture;
         try {
             tokenFuture = mExtensions.loadGltfModel(asset, asset.available(), 0, assetName);
             // Unfortunately, there is no way to avoid "leaking" this future, since we want to
@@ -714,15 +661,52 @@
     @Nullable
     public ListenableFuture<GltfModelResource> loadGltfByAssetNameSplitEngine(
             @NonNull String name) {
-        return loadGltfModel(() -> mImpressApi.loadGltfModel(name));
-    }
+        ResolvableFuture<GltfModelResource> gltfModelResourceFuture = ResolvableFuture.create();
+        // TODO:b/374216912 - Consider calling setFuture() here to catch if the application calls
+        // cancel() on the return value from this function, so we can propagate the cancelation
+        // message
+        // to the Impress API.
 
-    @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
-    @Override
-    @Nullable
-    public ListenableFuture<GltfModelResource> loadGltfByByteArray(
-            @NonNull byte[] assetData, @NonNull String assetKey) {
-        return loadGltfModel(() -> mImpressApi.loadGltfModel(assetData, assetKey));
+        if (!Looper.getMainLooper().isCurrentThread()) {
+            throw new IllegalStateException("This method must be called on the main thread.");
+        }
+
+        ListenableFuture<Long> gltfTokenFuture;
+        try {
+            gltfTokenFuture = mImpressApi.loadGltfModel(name);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Failed to load glTF model with error: " + e.getMessage());
+            // TODO:b/375070346 - make this method NonNull and set the gltfModelResourceFuture to an
+            // exception and return that.
+            return null;
+        }
+
+        gltfTokenFuture.addListener(
+                () -> {
+                    try {
+                        long gltfToken = gltfTokenFuture.get();
+                        gltfModelResourceFuture.set(
+                                getModelResourceFromTokenSplitEngine(gltfToken));
+                    } catch (Exception e) {
+                        if (e instanceof InterruptedException) {
+                            Thread.currentThread().interrupt();
+                        }
+                        Log.e(TAG, "Failed to load glTF model with error: " + e.getMessage());
+                        gltfModelResourceFuture.setException(e);
+                    }
+                },
+                // It's convenient for the main application for us to dispatch their listeners on
+                // the main
+                // thread, because they are required to call back to Impress from there, and it's
+                // likely
+                // that they will want to call back into the SDK to create entities from within a
+                // listener.
+                // We defensively post to the main thread here, but in practice this should not
+                // cause a
+                // thread hop because the Impress API already dispatches its callbacks to the main
+                // thread.
+                mActivity::runOnUiThread);
+        return gltfModelResourceFuture;
     }
 
     // TODO: b/376504646 - Delete this method once we've migrated to a SplitEngine backed skybox.
@@ -745,7 +729,7 @@
             return null;
         }
 
-        CompletableFuture<com.android.extensions.xr.asset.EnvironmentToken> tokenFuture;
+        CompletableFuture<androidx.xr.extensions.asset.EnvironmentToken> tokenFuture;
         try {
             // NOTE: At the moment, extensions.loadEnvironment expects a .EXR file explicitly. This
             //       will need to be updated as support for GLTF environment geometry is added by
@@ -773,25 +757,6 @@
     @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
     @Override
     @Nullable
-    public ListenableFuture<ExrImageResource> loadExrImageByAssetNameSplitEngine(
-            @NonNull String assetName) {
-        return loadExrImage(() -> mImpressApi.loadImageBasedLightingAsset(assetName));
-    }
-
-    @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
-    @Override
-    @Nullable
-    public ListenableFuture<ExrImageResource> loadExrImageByByteArraySplitEngine(
-            @NonNull byte[] assetData, @NonNull String assetKey) {
-        return loadExrImage(() -> mImpressApi.loadImageBasedLightingAsset(assetData, assetKey));
-    }
-
-    // ResolvableFuture is marked as RestrictTo(LIBRARY_GROUP_PREFIX), which is intended for classes
-    // within AndroidX. We're in the process of migrating to AndroidX. Without suppressing this
-    // warning, however, we get a build error - go/bugpattern/RestrictTo.
-    @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
-    @Override
-    @Nullable
     public ListenableFuture<TextureResource> loadTexture(
             @NonNull String path, @NonNull TextureSampler sampler) {
         ResolvableFuture<TextureResource> textureResourceFuture = ResolvableFuture.create();
@@ -864,7 +829,7 @@
     @SuppressWarnings({"RestrictTo", "AsyncSuffixFuture"})
     @Override
     @Nullable
-    public ListenableFuture<MaterialResource> createWaterMaterial(boolean isAlphaMapVersion) {
+    public ListenableFuture<MaterialResource> createWaterMaterial(boolean transparent) {
         ResolvableFuture<MaterialResource> materialResourceFuture = ResolvableFuture.create();
         // TODO:b/374216912 - Consider calling setFuture() here to catch if the application calls
         // cancel() on the return value from this function, so we can propagate the cancelation
@@ -877,7 +842,7 @@
 
         ListenableFuture<WaterMaterial> materialFuture;
         try {
-            materialFuture = mImpressApi.createWaterMaterial(isAlphaMapVersion);
+            materialFuture = mImpressApi.createWaterMaterial(transparent);
         } catch (RuntimeException e) {
             Log.e(TAG, "Failed to load water material with error: " + e.getMessage());
             // TODO:b/375070346 - make this method NonNull and set the textureResourceFuture to an
@@ -968,6 +933,32 @@
     }
 
     @Override
+    public void setAlphaStepU(@NonNull MaterialResource material, @NonNull Vector4 alphaStepU) {
+        if (!(material instanceof MaterialResourceImpl)) {
+            throw new IllegalArgumentException("MaterialResource is not a MaterialResourceImpl");
+        }
+        mImpressApi.setAlphaStepUOnWaterMaterial(
+                ((MaterialResourceImpl) material).getMaterialToken(),
+                alphaStepU.getX(),
+                alphaStepU.getY(),
+                alphaStepU.getZ(),
+                alphaStepU.getW());
+    }
+
+    @Override
+    public void setAlphaStepV(@NonNull MaterialResource material, @NonNull Vector4 alphaStepV) {
+        if (!(material instanceof MaterialResourceImpl)) {
+            throw new IllegalArgumentException("MaterialResource is not a MaterialResourceImpl");
+        }
+        mImpressApi.setAlphaStepVOnWaterMaterial(
+                ((MaterialResourceImpl) material).getMaterialToken(),
+                alphaStepV.getX(),
+                alphaStepV.getY(),
+                alphaStepV.getZ(),
+                alphaStepV.getW());
+    }
+
+    @Override
     public void setAlphaStepMultiplier(
             @NonNull MaterialResource material, float alphaStepMultiplier) {
         if (!(material instanceof MaterialResourceImpl)) {
@@ -978,50 +969,6 @@
     }
 
     @Override
-    public void setAlphaMap(@NonNull MaterialResource material, @NonNull TextureResource alphaMap) {
-        if (!(material instanceof MaterialResourceImpl)) {
-            throw new IllegalArgumentException("MaterialResource is not a MaterialResourceImpl");
-        }
-        if (!(alphaMap instanceof TextureResourceImpl)) {
-            throw new IllegalArgumentException("TextureResource is not a TextureResourceImpl");
-        }
-        mImpressApi.setAlphaMapOnWaterMaterial(
-                ((MaterialResourceImpl) material).getMaterialToken(),
-                ((TextureResourceImpl) alphaMap).getTextureToken());
-    }
-
-    @Override
-    public void setNormalZ(@NonNull MaterialResource material, float normalZ) {
-        if (!(material instanceof MaterialResourceImpl)) {
-            throw new IllegalArgumentException("MaterialResource is not a MaterialResourceImpl");
-        }
-        mImpressApi.setNormalZOnWaterMaterial(
-                ((MaterialResourceImpl) material).getMaterialToken(), normalZ);
-    }
-
-    @Override
-    public void setNormalBoundary(@NonNull MaterialResource material, float normalBoundary) {
-        if (!(material instanceof MaterialResourceImpl)) {
-            throw new IllegalArgumentException("MaterialResource is not a MaterialResourceImpl");
-        }
-        mImpressApi.setNormalBoundaryOnWaterMaterial(
-                ((MaterialResourceImpl) material).getMaterialToken(), normalBoundary);
-    }
-
-    @Override
-    @Nullable
-    public TextureResource getReflectionTextureFromIbl(@NonNull ExrImageResource iblToken) {
-        ExrImageResourceImplSplitEngine exrImageResource =
-                (ExrImageResourceImplSplitEngine) iblToken;
-        Texture texture =
-                mImpressApi.getReflectionTextureFromIbl(exrImageResource.getExtensionImageToken());
-        if (texture == null) {
-            return null;
-        }
-        return getTextureResourceFromToken(texture.getNativeHandle());
-    }
-
-    @Override
     @NonNull
     public GltfEntity createGltfEntity(
             @NonNull Pose pose, @NonNull GltfModelResource model, @Nullable Entity parentEntity) {
@@ -1041,7 +988,7 @@
                         mExtensions,
                         mEntityManager,
                         mExecutor);
-        entity.setPose(pose, Space.PARENT);
+        entity.setPose(pose);
         return entity;
     }
 
@@ -1063,52 +1010,27 @@
     @Override
     @NonNull
     public PanelEntity createPanelEntity(
-            @NonNull Context context,
             @NonNull Pose pose,
             @NonNull View view,
+            @NonNull PixelDimensions surfaceDimensionsPx,
             @NonNull Dimensions dimensions,
             @NonNull String name,
+            @SuppressWarnings("ContextFirst") @NonNull Context context,
             @NonNull Entity parent) {
 
         Node node = mExtensions.createNode();
         PanelEntity panelEntity =
                 new PanelEntityImpl(
-                        context,
                         node,
                         view,
                         mExtensions,
                         mEntityManager,
-                        dimensions,
+                        surfaceDimensionsPx,
                         name,
-                        mExecutor);
-        panelEntity.setParent(parent);
-        panelEntity.setPose(pose, Space.PARENT);
-        return panelEntity;
-    }
-
-    @Override
-    @NonNull
-    public PanelEntity createPanelEntity(
-            @NonNull Context context,
-            @NonNull Pose pose,
-            @NonNull View view,
-            @NonNull PixelDimensions pixelDimensions,
-            @NonNull String name,
-            @NonNull Entity parent) {
-
-        Node node = mExtensions.createNode();
-        PanelEntity panelEntity =
-                new PanelEntityImpl(
                         context,
-                        node,
-                        view,
-                        mExtensions,
-                        mEntityManager,
-                        pixelDimensions,
-                        name,
                         mExecutor);
         panelEntity.setParent(parent);
-        panelEntity.setPose(pose, Space.PARENT);
+        panelEntity.setPose(pose);
         return panelEntity;
     }
 
@@ -1207,7 +1129,7 @@
                         windowBoundsPx,
                         mExecutor);
         activityPanelEntity.setParent(parent);
-        activityPanelEntity.setPose(pose, Space.PARENT);
+        activityPanelEntity.setPose(pose);
         return activityPanelEntity;
     }
 
@@ -1259,7 +1181,7 @@
         // This entity is used to back JXR Core's ContentlessEntity.
         Entity entity = new AndroidXrEntity(node, mExtensions, mEntityManager, mExecutor) {};
         entity.setParent(parent);
-        entity.setPose(pose, Space.PARENT);
+        entity.setPose(pose);
         return entity;
     }
 
@@ -1293,13 +1215,13 @@
     @Override
     @NonNull
     public Bundle setFullSpaceMode(@NonNull Bundle bundle) {
-        return mExtensions.setFullSpaceStartMode(bundle);
+        return mExtensions.setFullSpaceMode(bundle);
     }
 
     @Override
     @NonNull
     public Bundle setFullSpaceModeWithEnvironmentInherited(@NonNull Bundle bundle) {
-        return mExtensions.setFullSpaceStartModeWithEnvironmentInherited(bundle);
+        return mExtensions.setFullSpaceModeWithEnvironmentInherited(bundle);
     }
 
     @Override
@@ -1338,8 +1260,8 @@
         mEntityManager.getAllEntities().forEach(Entity::dispose);
         mEntityManager.clear();
         if (mSplitEngineRenderer != null && mSplitEngineSubspaceManager != null) {
-            mSplitEngineSubspaceManager.destroy();
             mSplitEngineRenderer.destroy();
+            mSplitEngineSubspaceManager.destroy();
         }
     }
 
@@ -1434,7 +1356,7 @@
                         mExecutor,
                         stereoMode,
                         canvasShape);
-        entity.setPose(pose, Space.PARENT);
+        entity.setPose(pose);
         return entity;
     }
 
@@ -1460,93 +1382,7 @@
                         mExtensions,
                         mEntityManager,
                         mExecutor);
-        entity.setPose(pose, Space.PARENT);
+        entity.setPose(pose);
         return entity;
     }
-
-    // ResolvableFuture is marked as RestrictTo(LIBRARY_GROUP_PREFIX), which is intended for classes
-    // within AndroidX. We're in the process of migrating to AndroidX. Without suppressing this
-    // warning, however, we get a build error - go/bugpattern/RestrictTo.
-    @SuppressWarnings({
-        "RestrictTo",
-        "FutureReturnValueIgnored",
-    })
-    @Nullable
-    private ListenableFuture<GltfModelResource> loadGltfModel(
-            Supplier<ListenableFuture<Long>> modelLoader) {
-        if (!Looper.getMainLooper().isCurrentThread()) {
-            throw new IllegalStateException("This method must be called on the main thread.");
-        }
-
-        ResolvableFuture<GltfModelResource> gltfModelResourceFuture = ResolvableFuture.create();
-
-        ListenableFuture<Long> gltfTokenFuture;
-        try {
-            gltfTokenFuture = modelLoader.get();
-        } catch (RuntimeException e) {
-            Log.e(TAG, "Failed to load glTF model: " + e.getMessage());
-            return null;
-        }
-
-        gltfTokenFuture.addListener(
-                () -> {
-                    try {
-                        long gltfToken = gltfTokenFuture.get();
-                        gltfModelResourceFuture.set(
-                                getModelResourceFromTokenSplitEngine(gltfToken));
-                    } catch (Exception e) {
-                        if (e instanceof InterruptedException) {
-                            Thread.currentThread().interrupt();
-                        }
-                        Log.e(TAG, "Failed to load glTF model: " + e.getMessage());
-                        gltfModelResourceFuture.setException(e);
-                    }
-                },
-                mActivity::runOnUiThread);
-
-        return gltfModelResourceFuture;
-    }
-
-    // ResolvableFuture is marked as RestrictTo(LIBRARY_GROUP_PREFIX), which is intended for classes
-    // within AndroidX. We're in the process of migrating to AndroidX. Without suppressing this
-    // warning, however, we get a build error - go/bugpattern/RestrictTo.
-    @SuppressWarnings({
-        "RestrictTo",
-        "FutureReturnValueIgnored",
-    })
-    @Nullable
-    private ListenableFuture<ExrImageResource> loadExrImage(
-            Supplier<ListenableFuture<Long>> assetLoader) {
-        if (!Looper.getMainLooper().isCurrentThread()) {
-            throw new IllegalStateException("This method must be called on the main thread.");
-        }
-
-        ResolvableFuture<ExrImageResource> exrImageResourceFuture = ResolvableFuture.create();
-
-        ListenableFuture<Long> exrImageTokenFuture;
-        try {
-            exrImageTokenFuture = assetLoader.get();
-        } catch (RuntimeException e) {
-            Log.e(TAG, "Failed to load EXR image: " + e.getMessage());
-            return null;
-        }
-
-        exrImageTokenFuture.addListener(
-                () -> {
-                    try {
-                        long exrImageToken = exrImageTokenFuture.get();
-                        exrImageResourceFuture.set(
-                                getExrImageResourceFromTokenSplitEngine(exrImageToken));
-                    } catch (Exception e) {
-                        if (e instanceof InterruptedException) {
-                            Thread.currentThread().interrupt();
-                        }
-                        Log.e(TAG, "Failed to load EXR image: " + e.getMessage());
-                        exrImageResourceFuture.setException(e);
-                    }
-                },
-                mActivity::runOnUiThread);
-
-        return exrImageResourceFuture;
-    }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/LoggingEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/LoggingEntityImpl.java
index 7831b91..fd56405 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/LoggingEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/LoggingEntityImpl.java
@@ -21,10 +21,10 @@
 import androidx.annotation.NonNull;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivityPose;
+import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener;
 import androidx.xr.scenecore.JxrPlatformAdapter.LoggingEntity;
-import androidx.xr.scenecore.JxrPlatformAdapter.SpaceValue;
 import androidx.xr.scenecore.common.BaseEntity;
 
 import java.util.List;
@@ -41,20 +41,15 @@
 
     @NonNull
     @Override
-    public Pose getPose(@SpaceValue int relativeTo) {
-        Log.i(
-                TAG,
-                "Getting Logging Entity pose: "
-                        + super.getPose(relativeTo)
-                        + " relativeTo: "
-                        + relativeTo);
-        return super.getPose(relativeTo);
+    public Pose getPose() {
+        Log.i(TAG, "Getting Logging Entity pose: " + super.getPose());
+        return super.getPose();
     }
 
     @Override
-    public void setPose(@NonNull Pose pose, @SpaceValue int relativeTo) {
-        Log.i(TAG, "Setting Logging Entity pose to: " + pose + " relativeTo: " + relativeTo);
-        super.setPose(pose, relativeTo);
+    public void setPose(@NonNull Pose pose) {
+        Log.i(TAG, "Setting Logging Entity pose to: " + pose);
+        super.setPose(pose);
     }
 
     @NonNull
@@ -112,6 +107,11 @@
     }
 
     @Override
+    public void setSize(@NonNull Dimensions dimensions) {
+        Log.i(TAG, "Set size to " + dimensions);
+    }
+
+    @Override
     public void addInputEventListener(
             @NonNull Executor executor, @NonNull InputEventListener consumer) {
         Log.i(TAG, "Add input consumer " + consumer + " executor " + executor);
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MainPanelEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MainPanelEntityImpl.java
index f864f9e..c81d97f 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MainPanelEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MainPanelEntityImpl.java
@@ -19,15 +19,14 @@
 import android.app.Activity;
 import android.graphics.Rect;
 
-import androidx.annotation.NonNull;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
+import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import java.util.concurrent.ScheduledExecutorService;
 
 /**
@@ -35,6 +34,7 @@
  * node. The content of this PanelEntity is assumed to have been previously defined and associated
  * with the Window Leash Node.
  */
+@SuppressWarnings("deprecation") // TODO(b/373435470): Remove
 final class MainPanelEntityImpl extends BasePanelEntity implements PanelEntity {
     Activity mRuntimeActivity;
 
@@ -52,7 +52,7 @@
         //   Note that this requires MinAPI 30.
         // TODO(b/352827267): Enforce minSDK API strategy - go/androidx-api-guidelines#compat-newapi
         Rect bounds = getBoundsFromWindowManager();
-        super.setSizeInPixels(new PixelDimensions(bounds.width(), bounds.height()));
+        super.setPixelDimensions(new PixelDimensions(bounds.width(), bounds.height()));
         float cornerRadius = getDefaultCornerRadiusInMeters();
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
             transaction.setCornerRadius(node, cornerRadius).apply();
@@ -64,19 +64,18 @@
         return mRuntimeActivity.getWindowManager().getCurrentWindowMetrics().getBounds();
     }
 
-    @NonNull
     @Override
     public Dimensions getSize() {
         // The main panel bounds can change in HSM without JXRCore. Always read the bounds from the
         // WindowManager.
         Rect bounds = getBoundsFromWindowManager();
-        float pixelDensity = getDefaultPixelDensity();
-        return new Dimensions(bounds.width() / pixelDensity, bounds.height() / pixelDensity, 0);
+        Vector3 pixelDensity = getPixelDensity();
+        return new Dimensions(
+                bounds.width() / pixelDensity.getX(), bounds.height() / pixelDensity.getY(), 0);
     }
 
-    @NonNull
     @Override
-    public PixelDimensions getSizeInPixels() {
+    public PixelDimensions getPixelDimensions() {
         // The main panel bounds can change in HSM without JXRCore. Always read the bounds from the
         // WindowManager.
         Rect bounds = getBoundsFromWindowManager();
@@ -84,11 +83,11 @@
     }
 
     @Override
-    public void setSizeInPixels(@NonNull PixelDimensions dimensions) {
+    public void setPixelDimensions(PixelDimensions dimensions) {
         // TODO: b/376126162 - Consider calling setPixelDimensions() either when setMainWindowSize's
         // callback is called, or when the next spatial state callback with the expected size is
         // called.
-        super.setSizeInPixels(dimensions);
+        super.setPixelDimensions(dimensions);
         // TODO: b/376934871 - Check async results.
         mExtensions.setMainWindowSize(
                 mRuntimeActivity,
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImpl.java
index ac2b3fc1..099b304 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImpl.java
@@ -19,12 +19,11 @@
 import android.media.MediaPlayer;
 
 import androidx.annotation.NonNull;
+import androidx.xr.extensions.media.MediaPlayerExtensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.MediaPlayerExtensionsWrapper;
 import androidx.xr.scenecore.JxrPlatformAdapter.PointSourceAttributes;
 import androidx.xr.scenecore.JxrPlatformAdapter.SoundFieldAttributes;
 
-import com.android.extensions.xr.media.MediaPlayerExtensions;
-
 /** Implementation of the {@link MediaPlayerExtensionsWrapper}. */
 final class MediaPlayerExtensionsWrapperImpl implements MediaPlayerExtensionsWrapper {
 
@@ -37,18 +36,18 @@
     @Override
     public void setPointSourceAttributes(
             @NonNull MediaPlayer mediaPlayer, @NonNull PointSourceAttributes attributes) {
-        com.android.extensions.xr.media.PointSourceAttributes extAttributes =
+        androidx.xr.extensions.media.PointSourceAttributes extAttributes =
                 MediaUtils.convertPointSourceAttributesToExtensions(attributes);
 
-        MediaPlayer unused = mExtensions.setPointSourceAttributes(mediaPlayer, extAttributes);
+        mExtensions.setPointSourceAttributes(mediaPlayer, extAttributes);
     }
 
     @Override
     public void setSoundFieldAttributes(
             @NonNull MediaPlayer mediaPlayer, @NonNull SoundFieldAttributes attributes) {
-        com.android.extensions.xr.media.SoundFieldAttributes extAttributes =
+        androidx.xr.extensions.media.SoundFieldAttributes extAttributes =
                 MediaUtils.convertSoundFieldAttributesToExtensions(attributes);
 
-        MediaPlayer unused = mExtensions.setSoundFieldAttributes(mediaPlayer, extAttributes);
+        mExtensions.setSoundFieldAttributes(mediaPlayer, extAttributes);
     }
 }
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaUtils.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaUtils.java
index 6640187..52010dc 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaUtils.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MediaUtils.java
@@ -17,14 +17,13 @@
 package androidx.xr.scenecore.impl;
 
 import androidx.annotation.RestrictTo;
+import androidx.xr.extensions.media.PointSourceAttributes;
+import androidx.xr.extensions.media.SoundFieldAttributes;
+import androidx.xr.extensions.media.SpatializerExtensions;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatializerConstants;
 
-import com.android.extensions.xr.media.PointSourceAttributes;
-import com.android.extensions.xr.media.SoundFieldAttributes;
-import com.android.extensions.xr.media.SpatializerExtensions;
-import com.android.extensions.xr.node.Node;
-
 /** Utils for the runtime media class conversions. */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class MediaUtils {
@@ -47,6 +46,7 @@
                 .build();
     }
 
+    @SpatializerExtensions.AmbisonicsOrder
     static int convertAmbisonicsOrderToExtensions(
             @SpatializerConstants.AmbisonicsOrder int ambisonicsOrder) {
         switch (ambisonicsOrder) {
@@ -63,7 +63,8 @@
     }
 
     @SpatializerConstants.SourceType
-    static int convertExtensionsToSourceType(int extensionsSourceType) {
+    static int convertExtensionsToSourceType(
+            @SpatializerExtensions.SourceType int extensionsSourceType) {
         switch (extensionsSourceType) {
             case SpatializerExtensions.SOURCE_TYPE_BYPASS:
                 return SpatializerConstants.SOURCE_TYPE_BYPASS;
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MovableComponentImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MovableComponentImpl.java
index 77ec63c..f575610 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MovableComponentImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/MovableComponentImpl.java
@@ -24,6 +24,11 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.xr.extensions.Consumer;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.ReformEvent;
+import androidx.xr.extensions.node.ReformOptions;
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
 import androidx.xr.runtime.math.Vector3;
@@ -37,20 +42,11 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneSemantic;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneType;
 import androidx.xr.scenecore.JxrPlatformAdapter.Ray;
-import androidx.xr.scenecore.JxrPlatformAdapter.Space;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Plane;
 import androidx.xr.scenecore.impl.perception.Plane.PlaneData;
 import androidx.xr.scenecore.impl.perception.Session;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.function.Consumer;
-import com.android.extensions.xr.node.ReformEvent;
-import com.android.extensions.xr.node.ReformOptions;
-import com.android.extensions.xr.node.Vec3;
-
-import com.google.errorprone.annotations.CanIgnoreReturnValue;
-
 import java.util.EnumMap;
 import java.util.List;
 import java.util.Map;
@@ -135,28 +131,27 @@
                         : reformFlags;
         reformFlags =
                 mScaleInZ ? reformFlags | ReformOptions.FLAG_SCALE_WITH_DISTANCE : reformFlags;
-        ReformOptions unused = reformOptions.setFlags(reformFlags);
-        unused =
-                reformOptions
-                        .setEnabledReform(
-                                reformOptions.getEnabledReform() | ReformOptions.ALLOW_MOVE)
-                        .setScaleWithDistanceMode(
-                                translateScaleWithDistanceMode(mScaleWithDistanceMode));
+        reformOptions.setFlags(reformFlags);
+        reformOptions.setEnabledReform(reformOptions.getEnabledReform() | ReformOptions.ALLOW_MOVE);
+        reformOptions.setScaleWithDistanceMode(
+                translateScaleWithDistanceMode(mScaleWithDistanceMode));
 
         // TODO: b/348037292 - Remove this special case for PanelEntityImpl.
         if (entity instanceof PanelEntityImpl && mCurrentSize == null) {
             mCurrentSize = ((PanelEntityImpl) entity).getSize();
         }
         if (mCurrentSize != null) {
-            unused =
-                    reformOptions.setCurrentSize(
-                            new Vec3(mCurrentSize.width, mCurrentSize.height, mCurrentSize.depth));
+            reformOptions.setCurrentSize(
+                    new Vec3(mCurrentSize.width, mCurrentSize.height, mCurrentSize.depth));
         }
         if (mUserAnchorable && mSystemMovable && mReformEventConsumer == null) {
-            mReformEventConsumer = reformEvent -> getUpdatedReformEventPoseAndParent(reformEvent);
+            mReformEventConsumer =
+                    reformEvent -> {
+                        Pair<Pose, Entity> unused = getUpdatedReformEventPoseAndParent(reformEvent);
+                    };
         }
-        mLastPose = entity.getPose(Space.PARENT);
-        mLastScale = entity.getScale(Space.PARENT);
+        mLastPose = entity.getPose();
+        mLastScale = entity.getScale();
         ((AndroidXrEntity) entity).updateReformOptions();
         if (mReformEventConsumer != null) {
             ((AndroidXrEntity) entity)
@@ -168,9 +163,8 @@
     @Override
     public void onDetach(@NonNull Entity entity) {
         ReformOptions reformOptions = ((AndroidXrEntity) entity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setEnabledReform(
-                        reformOptions.getEnabledReform() & ~ReformOptions.ALLOW_MOVE);
+        reformOptions.setEnabledReform(
+                reformOptions.getEnabledReform() & ~ReformOptions.ALLOW_MOVE);
         // Clear any flags that were set by this component.
         int reformFlags = reformOptions.getFlags();
         reformFlags =
@@ -179,7 +173,7 @@
                         : reformFlags;
         reformFlags =
                 mScaleInZ ? reformFlags & ~ReformOptions.FLAG_SCALE_WITH_DISTANCE : reformFlags;
-        unused = reformOptions.setFlags(reformFlags);
+        reformOptions.setFlags(reformFlags);
         ((AndroidXrEntity) entity).updateReformOptions();
         if (mReformEventConsumer != null) {
             ((AndroidXrEntity) entity).removeReformEventConsumer(mReformEventConsumer);
@@ -196,9 +190,8 @@
             return;
         }
         ReformOptions reformOptions = ((AndroidXrEntity) mEntity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setCurrentSize(
-                        new Vec3(dimensions.width, dimensions.height, dimensions.depth));
+        reformOptions.setCurrentSize(
+                new Vec3(dimensions.width, dimensions.height, dimensions.depth));
         ((AndroidXrEntity) mEntity).updateReformOptions();
     }
 
@@ -218,9 +211,8 @@
             return;
         }
         ReformOptions reformOptions = ((AndroidXrEntity) mEntity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setScaleWithDistanceMode(
-                        translateScaleWithDistanceMode(scaleWithDistanceMode));
+        reformOptions.setScaleWithDistanceMode(
+                translateScaleWithDistanceMode(scaleWithDistanceMode));
         ((AndroidXrEntity) mEntity).updateReformOptions();
     }
 
@@ -320,7 +312,6 @@
         mMoveEventListenersMap.remove(moveEventListener);
     }
 
-    @CanIgnoreReturnValue
     private Pair<Pose, Entity> getUpdatedReformEventPoseAndParent(ReformEvent reformEvent) {
         if (reformEvent.getState() == ReformEvent.REFORM_STATE_END && shouldRenderPlaneShadow()) {
             mPanelShadowRenderer.destroy();
@@ -330,7 +321,7 @@
                         reformEvent.getProposedPosition(), reformEvent.getProposedOrientation());
         Pair<Pose, Entity> updatedEntity = updatePoseWithPlanes(proposedPose, reformEvent);
         if (mSystemMovable) {
-            mEntity.setPose(updatedEntity.first, Space.PARENT);
+            mEntity.setPose(updatedEntity.first);
         }
         return updatedEntity;
     }
@@ -412,8 +403,7 @@
             // TODO: b/367754233 - Revisit if this needs to use ActivitySpaceScale or
             // WorldSpaceScale.
             mEntity.setScale(
-                    mEntity.getWorldSpaceScale().div(mActivitySpaceImpl.getWorldSpaceScale()),
-                    Space.PARENT);
+                    mEntity.getWorldSpaceScale().div(mActivitySpaceImpl.getWorldSpaceScale()));
             mEntity.setParent(mActivitySpaceImpl);
             checkAndDisposeAnchorEntity();
             mCreatedAnchorEntity = null;
@@ -496,7 +486,7 @@
         // the
         // anchor entity's scale.
         Vector3 entityScale = mEntity.getWorldSpaceScale();
-        mEntity.setScale(entityScale, Space.PARENT);
+        mEntity.setScale(entityScale);
         Quaternion planeRotation =
                 RuntimeUtils.fromPerceptionPose(anchorablePlaneData.centerPose).getRotation();
         Pose rotatedPose =
@@ -581,7 +571,8 @@
         }
     }
 
-    private static int translateScaleWithDistanceMode(@ScaleWithDistanceMode int scale) {
+    private static @ReformOptions.ScaleWithDistanceMode int translateScaleWithDistanceMode(
+            @ScaleWithDistanceMode int scale) {
         switch (scale) {
             case ScaleWithDistanceMode.DMM:
                 return ReformOptions.SCALE_WITH_DISTANCE_MODE_DMM;
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelEntityImpl.java
index fb2bf0c..3bb3f7c 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelEntityImpl.java
@@ -27,14 +27,12 @@
 import android.window.OnBackInvokedDispatcher;
 
 import androidx.annotation.NonNull;
-import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.scenecore.JxrPlatformAdapter.PanelEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import java.util.Objects;
 import java.util.concurrent.ScheduledExecutorService;
 
@@ -50,81 +48,26 @@
     private final SurfaceControlViewHost mSurfaceControlViewHost;
 
     PanelEntityImpl(
-            @NonNull Context context,
             Node node,
             @NonNull View view,
             XrExtensions extensions,
             EntityManager entityManager,
             PixelDimensions surfaceDimensionsPx,
             @NonNull String name,
+            @SuppressWarnings("ContextFirst") @NonNull Context context,
             ScheduledExecutorService executor) {
         super(node, extensions, entityManager, executor);
-        mSurfaceControlViewHost =
+        SurfaceControlViewHost surfaceControlViewHost =
                 new SurfaceControlViewHost(
                         context, Objects.requireNonNull(context.getDisplay()), new Binder());
-        setupSurfaceControlViewHostAndCornerRadius(view, surfaceDimensionsPx, name);
-        setDefaultOnBackInvokedCallback(view);
-    }
-
-    PanelEntityImpl(
-            @NonNull Context context,
-            Node node,
-            @NonNull View view,
-            XrExtensions extensions,
-            EntityManager entityManager,
-            Dimensions surfaceDimensions,
-            @NonNull String name,
-            ScheduledExecutorService executor) {
-        super(node, extensions, entityManager, executor);
-        float unscaledPixelDensity = getDefaultPixelDensity();
-        PixelDimensions surfaceDimensionsPx =
-                new PixelDimensions(
-                        (int) (surfaceDimensions.width * unscaledPixelDensity),
-                        (int) (surfaceDimensions.height * unscaledPixelDensity));
-        mSurfaceControlViewHost =
-                new SurfaceControlViewHost(
-                        context, Objects.requireNonNull(context.getDisplay()), new Binder());
-        setupSurfaceControlViewHostAndCornerRadius(view, surfaceDimensionsPx, name);
-        setDefaultOnBackInvokedCallback(view);
-    }
-
-    // TODO(b/352827267): Enforce minSDK API strategy - go/androidx-api-guidelines#compat-newapi
-    private void setupSurfaceControlViewHostAndCornerRadius(
-            @NonNull View view,
-            @NonNull PixelDimensions surfaceDimensionsPx,
-            @NonNull String name) {
-        mSurfaceControlViewHost.setView(
-                view, surfaceDimensionsPx.width, surfaceDimensionsPx.height);
-
-        SurfacePackage surfacePackage =
-                Objects.requireNonNull(mSurfaceControlViewHost.getSurfacePackage());
-
-        // We need to manually inform our base class of the pixelDimensions, even though the
-        // Extensions
-        // are initialized in the factory method. (ext.setWindowBounds, etc)
-        super.setSizeInPixels(surfaceDimensionsPx);
-        float cornerRadius = getDefaultCornerRadiusInMeters();
-        try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
-            transaction
-                    .setName(mNode, name)
-                    .setSurfacePackage(mNode, surfacePackage)
-                    .setWindowBounds(
-                            surfacePackage, surfaceDimensionsPx.width, surfaceDimensionsPx.height)
-                    .setVisibility(mNode, true)
-                    .setCornerRadius(mNode, cornerRadius)
-                    .apply();
-        } finally {
-            surfacePackage.release();
-        }
-        super.setCornerRadiusValue(cornerRadius);
-    }
-
-    @SuppressWarnings("deprecation") // TODO: b/398052385 - Replace deprecate onBackPressed.
-    private void setDefaultOnBackInvokedCallback(View view) {
+        surfaceControlViewHost.setView(view, surfaceDimensionsPx.width, surfaceDimensionsPx.height);
         OnBackInvokedCallback onBackInvokedCallback =
-                () -> {
-                    if (view.getContext() instanceof Activity) {
-                        ((Activity) view.getContext()).onBackPressed();
+                new OnBackInvokedCallback() {
+                    @Override
+                    public void onBackInvoked() {
+                        if (view.getContext() instanceof Activity) {
+                            ((Activity) view.getContext()).onBackPressed();
+                        }
                     }
                 };
         OnBackInvokedDispatcher backDispatcher = view.findOnBackInvokedDispatcher();
@@ -132,11 +75,38 @@
             backDispatcher.registerOnBackInvokedCallback(
                     OnBackInvokedDispatcher.PRIORITY_DEFAULT, onBackInvokedCallback);
         }
+
+        SurfacePackage surfacePackage =
+                Objects.requireNonNull(surfaceControlViewHost.getSurfacePackage());
+
+        // We need to manually inform our base class of the pixelDimensions, even though the
+        // Extensions
+        // are initialized in the factory method. (ext.setWindowBounds, etc)
+        super.setPixelDimensions(surfaceDimensionsPx);
+        float cornerRadius = getDefaultCornerRadiusInMeters();
+        try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
+            transaction
+                    .setName(node, name)
+                    .setSurfacePackage(node, surfacePackage)
+                    .setWindowBounds(
+                            surfacePackage, surfaceDimensionsPx.width, surfaceDimensionsPx.height)
+                    .setVisibility(node, true)
+                    .setCornerRadius(node, cornerRadius)
+                    .apply();
+        }
+
+        // TODO (b/392642541): Handle surfacePackage release in the case where there is an exception
+        // on
+        // the NodeTransaction.
+        surfacePackage.release();
+        super.setCornerRadiusValue(cornerRadius);
+        mSurfaceControlViewHost = surfaceControlViewHost;
     }
 
+    // TODO(b/352827267): Enforce minSDK API strategy - go/androidx-api-guidelines#compat-newapi
     @Override
-    public void setSizeInPixels(@NonNull PixelDimensions dimensions) {
-        super.setSizeInPixels(dimensions);
+    public void setPixelDimensions(PixelDimensions dimensions) {
+        super.setPixelDimensions(dimensions);
 
         SurfacePackage surfacePackage =
                 Objects.requireNonNull(mSurfaceControlViewHost.getSurfacePackage());
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelShadowRenderer.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelShadowRenderer.java
index e00b7c5..fb5700d 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelShadowRenderer.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/PanelShadowRenderer.java
@@ -28,13 +28,12 @@
 import android.view.SurfaceControlViewHost.SurfacePackage;
 import android.view.View;
 
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Vector3;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import java.util.Objects;
 
 /** Class for rendering the border of a panel onto a perception plane. */
@@ -103,7 +102,7 @@
                 getUpdatedPanelPoseInActivitySpace(openXrToProposedPanel, openXrtoPlane);
         try (NodeTransaction transaction = mExtensions.createNodeTransaction()) {
             if (!mIsVisible) {
-                NodeTransaction unused = transaction.setVisibility(mPanelShadowNode, true);
+                transaction.setVisibility(mPanelShadowNode, true);
                 mIsVisible = true;
             }
             transaction
@@ -151,12 +150,12 @@
         // Scale the panel shadow to the size of the PanelEntity in the activity space.
         Vector3 entityScale = panelEntity.getWorldSpaceScale();
         float sizeX =
-                panelEntity.getSizeInPixels().width
+                panelEntity.getPixelDimensions().width
                                 * entityScale.getX()
                                 / mActivitySpaceImpl.getWorldSpaceScale().getX()
                         + PANEL_BORDER_ADDED_MARGIN;
         float sizeZ =
-                panelEntity.getSizeInPixels().height
+                panelEntity.getPixelDimensions().height
                                 * entityScale.getZ()
                                 / mActivitySpaceImpl.getWorldSpaceScale().getX()
                         + PANEL_BORDER_ADDED_MARGIN;
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ResizableComponentImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ResizableComponentImpl.java
index 56d45d7..ef036c3 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ResizableComponentImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/ResizableComponentImpl.java
@@ -19,19 +19,17 @@
 import android.util.Log;
 
 import androidx.annotation.NonNull;
+import androidx.xr.extensions.Consumer;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.NodeTransaction;
+import androidx.xr.extensions.node.ReformEvent;
+import androidx.xr.extensions.node.ReformOptions;
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.ResizableComponent;
 import androidx.xr.scenecore.JxrPlatformAdapter.ResizeEvent;
 import androidx.xr.scenecore.JxrPlatformAdapter.ResizeEventListener;
-import androidx.xr.scenecore.JxrPlatformAdapter.Space;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.function.Consumer;
-import com.android.extensions.xr.node.NodeTransaction;
-import com.android.extensions.xr.node.ReformEvent;
-import com.android.extensions.xr.node.ReformOptions;
-import com.android.extensions.xr.node.Vec3;
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
@@ -77,9 +75,8 @@
         }
         mEntity = entity;
         ReformOptions reformOptions = ((AndroidXrEntity) entity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setEnabledReform(
-                        reformOptions.getEnabledReform() | ReformOptions.ALLOW_RESIZE);
+        reformOptions.setEnabledReform(
+                reformOptions.getEnabledReform() | ReformOptions.ALLOW_RESIZE);
 
         // Update the current size if it's not set.
         // TODO: b/348037292 - Remove this special case for PanelEntityImpl.
@@ -88,16 +85,13 @@
             // TODO: b/350563642 - Add checks that size is within minsize and maxsize.
         }
         if (mCurrentSize != null) {
-            unused =
-                    reformOptions.setCurrentSize(
-                            new Vec3(mCurrentSize.width, mCurrentSize.height, mCurrentSize.depth));
+            reformOptions.setCurrentSize(
+                    new Vec3(mCurrentSize.width, mCurrentSize.height, mCurrentSize.depth));
         }
-        unused =
-                reformOptions
-                        .setMinimumSize(new Vec3(mMinSize.width, mMinSize.height, mMinSize.depth))
-                        .setMaximumSize(new Vec3(mMaxSize.width, mMaxSize.height, mMaxSize.depth))
-                        .setFixedAspectRatio(mFixedAspectRatio)
-                        .setForceShowResizeOverlay(mForceShowResizeOverlay);
+        reformOptions.setMinimumSize(new Vec3(mMinSize.width, mMinSize.height, mMinSize.depth));
+        reformOptions.setMaximumSize(new Vec3(mMaxSize.width, mMaxSize.height, mMaxSize.depth));
+        reformOptions.setFixedAspectRatio(mFixedAspectRatio);
+        reformOptions.setForceShowResizeOverlay(mForceShowResizeOverlay);
         ((AndroidXrEntity) entity).updateReformOptions();
         if (mReformEventConsumer != null) {
             ((AndroidXrEntity) entity).addReformEventConsumer(mReformEventConsumer, mExecutor);
@@ -108,9 +102,8 @@
     @Override
     public void onDetach(@NonNull Entity entity) {
         ReformOptions reformOptions = ((AndroidXrEntity) entity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setEnabledReform(
-                        reformOptions.getEnabledReform() & ~ReformOptions.ALLOW_RESIZE);
+        reformOptions.setEnabledReform(
+                reformOptions.getEnabledReform() & ~ReformOptions.ALLOW_RESIZE);
         ((AndroidXrEntity) entity).updateReformOptions();
         if (mReformEventConsumer != null) {
             ((AndroidXrEntity) entity).removeReformEventConsumer(mReformEventConsumer);
@@ -127,8 +120,7 @@
             return;
         }
         ReformOptions reformOptions = ((AndroidXrEntity) mEntity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setCurrentSize(new Vec3(size.width, size.height, size.depth));
+        reformOptions.setCurrentSize(new Vec3(size.width, size.height, size.depth));
         ((AndroidXrEntity) mEntity).updateReformOptions();
     }
 
@@ -140,9 +132,7 @@
             return;
         }
         ReformOptions reformOptions = ((AndroidXrEntity) mEntity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setMinimumSize(
-                        new Vec3(minSize.width, minSize.height, minSize.depth));
+        reformOptions.setMinimumSize(new Vec3(minSize.width, minSize.height, minSize.depth));
         ((AndroidXrEntity) mEntity).updateReformOptions();
     }
 
@@ -154,9 +144,7 @@
             return;
         }
         ReformOptions reformOptions = ((AndroidXrEntity) mEntity).getReformOptions();
-        ReformOptions unused =
-                reformOptions.setMaximumSize(
-                        new Vec3(maxSize.width, maxSize.height, maxSize.depth));
+        reformOptions.setMaximumSize(new Vec3(maxSize.width, maxSize.height, maxSize.depth));
         ((AndroidXrEntity) mEntity).updateReformOptions();
     }
 
@@ -168,7 +156,7 @@
             return;
         }
         ReformOptions reformOptions = ((AndroidXrEntity) mEntity).getReformOptions();
-        ReformOptions unused = reformOptions.setFixedAspectRatio(fixedAspectRatio);
+        reformOptions.setFixedAspectRatio(fixedAspectRatio);
         ((AndroidXrEntity) mEntity).updateReformOptions();
     }
 
@@ -190,7 +178,7 @@
             return;
         }
         ReformOptions reformOptions = ((AndroidXrEntity) mEntity).getReformOptions();
-        ReformOptions unused = reformOptions.setForceShowResizeOverlay(show);
+        reformOptions.setForceShowResizeOverlay(show);
         ((AndroidXrEntity) mEntity).updateReformOptions();
     }
 
@@ -222,7 +210,7 @@
                             break;
                         case ReformEvent.REFORM_STATE_END:
                             if (mAutoHideContent) {
-                                mEntity.setAlpha(mEntity.getAlpha(Space.PARENT), Space.PARENT);
+                                mEntity.setAlpha(mEntity.getAlpha());
                             }
                             break;
                         default:
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/RuntimeUtils.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/RuntimeUtils.java
index b671c05..b9548f2 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/RuntimeUtils.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/RuntimeUtils.java
@@ -20,6 +20,15 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.xr.extensions.environment.EnvironmentVisibilityState;
+import androidx.xr.extensions.environment.PassthroughVisibilityState;
+import androidx.xr.extensions.node.InputEvent.Action;
+import androidx.xr.extensions.node.InputEvent.PointerType;
+import androidx.xr.extensions.node.InputEvent.Source;
+import androidx.xr.extensions.node.Mat4f;
+import androidx.xr.extensions.node.Quatf;
+import androidx.xr.extensions.node.ReformEvent;
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
@@ -34,13 +43,6 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities;
 import androidx.xr.scenecore.impl.perception.Plane;
 
-import com.android.extensions.xr.environment.EnvironmentVisibilityState;
-import com.android.extensions.xr.environment.PassthroughVisibilityState;
-import com.android.extensions.xr.node.Mat4f;
-import com.android.extensions.xr.node.Quatf;
-import com.android.extensions.xr.node.ReformEvent;
-import com.android.extensions.xr.node.Vec3;
-
 final class RuntimeUtils {
     private RuntimeUtils() {}
 
@@ -108,8 +110,7 @@
 
     @Nullable
     private static HitInfo getHitInfo(
-            com.android.extensions.xr.node.InputEvent.HitInfo xrHitInfo,
-            EntityManager entityManager) {
+            androidx.xr.extensions.node.InputEvent.HitInfo xrHitInfo, EntityManager entityManager) {
         if (xrHitInfo == null
                 || xrHitInfo.getInputNode() == null
                 || xrHitInfo.getTransform() == null) {
@@ -131,14 +132,14 @@
     /**
      * Converts an XR InputEvent to a JXRCore InputEvent.
      *
-     * @param xrInputEvent an {@link com.android.extensions.xr.node.InputEvent} instance to be
+     * @param xrInputEvent an {@link androidx.xr.extensions.node.InputEvent} instance to be
      *     converted.
      * @param entityManager an {@link EntityManager} instance to look up entities.
      * @return a {@link androidx.xr.scenecore.JXRCoreRuntime.InputEvent} instance representing the
      *     input event.
      */
     static InputEvent getInputEvent(
-            @NonNull com.android.extensions.xr.node.InputEvent xrInputEvent,
+            @NonNull androidx.xr.extensions.node.InputEvent xrInputEvent,
             @NonNull EntityManager entityManager) {
         Vector3 origin = getVector3(xrInputEvent.getOrigin());
         Vector3 direction = getVector3(xrInputEvent.getDirection());
@@ -162,19 +163,19 @@
     }
 
     @InputEvent.Source
-    static int getInputEventSource(int xrInputEventSource) {
+    static int getInputEventSource(@Source int xrInputEventSource) {
         switch (xrInputEventSource) {
-            case com.android.extensions.xr.node.InputEvent.SOURCE_UNKNOWN:
+            case androidx.xr.extensions.node.InputEvent.SOURCE_UNKNOWN:
                 return InputEvent.SOURCE_UNKNOWN;
-            case com.android.extensions.xr.node.InputEvent.SOURCE_HEAD:
+            case androidx.xr.extensions.node.InputEvent.SOURCE_HEAD:
                 return InputEvent.SOURCE_HEAD;
-            case com.android.extensions.xr.node.InputEvent.SOURCE_CONTROLLER:
+            case androidx.xr.extensions.node.InputEvent.SOURCE_CONTROLLER:
                 return InputEvent.SOURCE_CONTROLLER;
-            case com.android.extensions.xr.node.InputEvent.SOURCE_HANDS:
+            case androidx.xr.extensions.node.InputEvent.SOURCE_HANDS:
                 return InputEvent.SOURCE_HANDS;
-            case com.android.extensions.xr.node.InputEvent.SOURCE_MOUSE:
+            case androidx.xr.extensions.node.InputEvent.SOURCE_MOUSE:
                 return InputEvent.SOURCE_MOUSE;
-            case com.android.extensions.xr.node.InputEvent.SOURCE_GAZE_AND_GESTURE:
+            case androidx.xr.extensions.node.InputEvent.SOURCE_GAZE_AND_GESTURE:
                 return InputEvent.SOURCE_GAZE_AND_GESTURE;
             default:
                 throw new IllegalArgumentException(
@@ -183,13 +184,13 @@
     }
 
     @InputEvent.PointerType
-    static int getInputEventPointerType(int xrInputEventPointerType) {
+    static int getInputEventPointerType(@PointerType int xrInputEventPointerType) {
         switch (xrInputEventPointerType) {
-            case com.android.extensions.xr.node.InputEvent.POINTER_TYPE_DEFAULT:
+            case androidx.xr.extensions.node.InputEvent.POINTER_TYPE_DEFAULT:
                 return InputEvent.POINTER_TYPE_DEFAULT;
-            case com.android.extensions.xr.node.InputEvent.POINTER_TYPE_LEFT:
+            case androidx.xr.extensions.node.InputEvent.POINTER_TYPE_LEFT:
                 return InputEvent.POINTER_TYPE_LEFT;
-            case com.android.extensions.xr.node.InputEvent.POINTER_TYPE_RIGHT:
+            case androidx.xr.extensions.node.InputEvent.POINTER_TYPE_RIGHT:
                 return InputEvent.POINTER_TYPE_RIGHT;
             default:
                 throw new IllegalArgumentException(
@@ -198,21 +199,21 @@
     }
 
     @InputEvent.Action
-    static int getInputEventAction(int xrInputEventAction) {
+    static int getInputEventAction(@Action int xrInputEventAction) {
         switch (xrInputEventAction) {
-            case com.android.extensions.xr.node.InputEvent.ACTION_DOWN:
+            case androidx.xr.extensions.node.InputEvent.ACTION_DOWN:
                 return InputEvent.ACTION_DOWN;
-            case com.android.extensions.xr.node.InputEvent.ACTION_UP:
+            case androidx.xr.extensions.node.InputEvent.ACTION_UP:
                 return InputEvent.ACTION_UP;
-            case com.android.extensions.xr.node.InputEvent.ACTION_MOVE:
+            case androidx.xr.extensions.node.InputEvent.ACTION_MOVE:
                 return InputEvent.ACTION_MOVE;
-            case com.android.extensions.xr.node.InputEvent.ACTION_CANCEL:
+            case androidx.xr.extensions.node.InputEvent.ACTION_CANCEL:
                 return InputEvent.ACTION_CANCEL;
-            case com.android.extensions.xr.node.InputEvent.ACTION_HOVER_MOVE:
+            case androidx.xr.extensions.node.InputEvent.ACTION_HOVER_MOVE:
                 return InputEvent.ACTION_HOVER_MOVE;
-            case com.android.extensions.xr.node.InputEvent.ACTION_HOVER_ENTER:
+            case androidx.xr.extensions.node.InputEvent.ACTION_HOVER_ENTER:
                 return InputEvent.ACTION_HOVER_ENTER;
-            case com.android.extensions.xr.node.InputEvent.ACTION_HOVER_EXIT:
+            case androidx.xr.extensions.node.InputEvent.ACTION_HOVER_EXIT:
                 return InputEvent.ACTION_HOVER_EXIT;
             default:
                 throw new IllegalArgumentException(
@@ -221,7 +222,7 @@
     }
 
     @ResizeEvent.ResizeState
-    static int getResizeEventState(int resizeState) {
+    static int getResizeEventState(@ReformEvent.ReformState int resizeState) {
         switch (resizeState) {
             case ReformEvent.REFORM_STATE_UNKNOWN:
                 return ResizeEvent.RESIZE_STATE_UNKNOWN;
@@ -237,7 +238,10 @@
     }
 
     static Matrix4 getMatrix(Mat4f xrMatrix) {
-        float[] matrixData = xrMatrix.getFlattenedMatrix();
+        float[] matrixData = new float[16];
+        for (int i = 0; i < 4; i++) {
+            System.arraycopy(xrMatrix.m[i], 0, matrixData, i * 4, 4);
+        }
         return new Matrix4(matrixData);
     }
 
@@ -313,34 +317,34 @@
     /**
      * Converts from the Extensions spatial capabilities to the runtime spatial capabilities.
      *
-     * @param extCapabilities a {@link com.android.extensions.xr.space.SpatialCapabilities} instance
-     *     to be converted.
+     * @param extCapabilities a {@link androidx.xr.extensions.space.SpatialCapabilities} instance to
+     *     be converted.
      */
     static SpatialCapabilities convertSpatialCapabilities(
-            com.android.extensions.xr.space.SpatialCapabilities extCapabilities) {
+            androidx.xr.extensions.space.SpatialCapabilities extCapabilities) {
         @SpatialCapabilities.SpatialCapability int capabilities = 0;
         if (extCapabilities.get(
-                com.android.extensions.xr.space.SpatialCapabilities.SPATIAL_UI_CAPABLE)) {
+                androidx.xr.extensions.space.SpatialCapabilities.SPATIAL_UI_CAPABLE)) {
             capabilities |= SpatialCapabilities.SPATIAL_CAPABILITY_UI;
         }
         if (extCapabilities.get(
-                com.android.extensions.xr.space.SpatialCapabilities.SPATIAL_3D_CONTENTS_CAPABLE)) {
+                androidx.xr.extensions.space.SpatialCapabilities.SPATIAL_3D_CONTENTS_CAPABLE)) {
             capabilities |= SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT;
         }
         if (extCapabilities.get(
-                com.android.extensions.xr.space.SpatialCapabilities.PASSTHROUGH_CONTROL_CAPABLE)) {
+                androidx.xr.extensions.space.SpatialCapabilities.PASSTHROUGH_CONTROL_CAPABLE)) {
             capabilities |= SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL;
         }
         if (extCapabilities.get(
-                com.android.extensions.xr.space.SpatialCapabilities.APP_ENVIRONMENTS_CAPABLE)) {
+                androidx.xr.extensions.space.SpatialCapabilities.APP_ENVIRONMENTS_CAPABLE)) {
             capabilities |= SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT;
         }
         if (extCapabilities.get(
-                com.android.extensions.xr.space.SpatialCapabilities.SPATIAL_AUDIO_CAPABLE)) {
+                androidx.xr.extensions.space.SpatialCapabilities.SPATIAL_AUDIO_CAPABLE)) {
             capabilities |= SpatialCapabilities.SPATIAL_CAPABILITY_SPATIAL_AUDIO;
         }
         if (extCapabilities.get(
-                com.android.extensions.xr.space.SpatialCapabilities
+                androidx.xr.extensions.space.SpatialCapabilities
                         .SPATIAL_ACTIVITY_EMBEDDING_CAPABLE)) {
             capabilities |= SpatialCapabilities.SPATIAL_CAPABILITY_EMBED_ACTIVITY;
         }
@@ -353,10 +357,10 @@
      * visibility state.
      *
      * @param environmentState a {@link
-     *     com.android.extensions.xr.environment.EnvironmentVisibilityState} instance to be
-     *     converted.
+     *     androidx.xr.extensions.environment.EnvironmentVisibilityState} instance to be converted.
      */
-    static boolean getIsSpatialEnvironmentPreferenceActive(int environmentState) {
+    static boolean getIsSpatialEnvironmentPreferenceActive(
+            @EnvironmentVisibilityState.State int environmentState) {
         return environmentState == EnvironmentVisibilityState.APP_VISIBLE;
     }
 
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImpl.java
index 3f81d52..59bad36 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImpl.java
@@ -18,12 +18,11 @@
 
 import android.media.SoundPool;
 
+import androidx.xr.extensions.media.SoundPoolExtensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PointSourceAttributes;
 import androidx.xr.scenecore.JxrPlatformAdapter.SoundFieldAttributes;
 import androidx.xr.scenecore.JxrPlatformAdapter.SoundPoolExtensionsWrapper;
 
-import com.android.extensions.xr.media.SoundPoolExtensions;
-
 /** Implementation of {@link SoundPoolExtensionsWrapper}. */
 final class SoundPoolExtensionsWrapperImpl implements SoundPoolExtensionsWrapper {
 
@@ -42,7 +41,7 @@
             int priority,
             int loop,
             float rate) {
-        com.android.extensions.xr.media.PointSourceAttributes extAttributes =
+        androidx.xr.extensions.media.PointSourceAttributes extAttributes =
                 MediaUtils.convertPointSourceAttributesToExtensions(attributes);
         return mExtensions.playAsPointSource(
                 soundPool, soundId, extAttributes, volume, priority, loop, rate);
@@ -57,7 +56,7 @@
             int priority,
             int loop,
             float rate) {
-        com.android.extensions.xr.media.SoundFieldAttributes extAttributes =
+        androidx.xr.extensions.media.SoundFieldAttributes extAttributes =
                 MediaUtils.convertSoundFieldAttributesToExtensions(attributes);
 
         return mExtensions.playAsSoundField(
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SpatialEnvironmentImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SpatialEnvironmentImpl.java
index 24962d4..accb540 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SpatialEnvironmentImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SpatialEnvironmentImpl.java
@@ -23,21 +23,19 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
+import androidx.xr.extensions.XrExtensionResult;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.environment.EnvironmentVisibilityState;
+import androidx.xr.extensions.environment.PassthroughVisibilityState;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.NodeTransaction;
+import androidx.xr.extensions.passthrough.PassthroughState;
+import androidx.xr.extensions.space.SpatialState;
 import androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource;
 import androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource;
-import androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialEnvironment;
 
-import com.android.extensions.xr.XrExtensionResult;
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.environment.EnvironmentVisibilityState;
-import com.android.extensions.xr.environment.PassthroughVisibilityState;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransaction;
-import com.android.extensions.xr.passthrough.PassthroughState;
-import com.android.extensions.xr.space.SpatialState;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.androidxr.splitengine.SubspaceNode;
 import com.google.ar.imp.apibindings.ImpressApi;
@@ -49,6 +47,7 @@
 import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.ExecutionException;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 
@@ -64,9 +63,9 @@
     public static final String PASSTHROUGH_NODE_NAME = "EnvironmentPassthroughNode";
     @VisibleForTesting final Node mPassthroughNode;
     private final XrExtensions mXrExtensions;
+    private final Node mRootEnvironmentNode;
     private final boolean mUseSplitEngine;
     @Nullable private Activity mActivity;
-    private Node mRootEnvironmentNode;
     // Used to represent the geometry
     private Node mGeometryNode;
     // the "xrExtensions.setEnvironment" call effectively makes a node into a skybox
@@ -94,6 +93,7 @@
             Collections.synchronizedSet(new HashSet<>());
 
     // Assets used to turn the skybox black when devs pass in null for the skybox.
+    private ListenableFuture<ExrImageResource> mNullSkyboxResourceFuture;
     private ExrImageResource mNullSkyboxResource = null;
 
     SpatialEnvironmentImpl(
@@ -101,6 +101,7 @@
             @NonNull XrExtensions xrExtensions,
             @NonNull Node rootSceneNode,
             @NonNull Supplier<SpatialState> spatialStateProvider,
+            @NonNull ListenableFuture<ExrImageResource> nullSkyboxResourceFuture,
             boolean useSplitEngine) {
         mActivity = activity;
         mXrExtensions = xrExtensions;
@@ -110,6 +111,7 @@
         mSkyboxNode = xrExtensions.createNode();
         mUseSplitEngine = useSplitEngine;
         mSpatialStateProvider = spatialStateProvider;
+        mNullSkyboxResourceFuture = nullSkyboxResourceFuture;
 
         try (NodeTransaction transaction = xrExtensions.createNodeTransaction()) {
             transaction
@@ -303,7 +305,7 @@
      * skybox is null, this method unsets the client skybox preference, resulting in the system
      * skybox being used.
      */
-    private void applySkyboxLegacy(@Nullable ExrImageResourceImpl skybox) {
+    private void applySkybox(@Nullable ExrImageResourceImpl skybox) {
         // We need to create a new node here because we can't re-use the old CPM node when changing
         // geometry and skybox.
         try (NodeTransaction transaction = mXrExtensions.createNodeTransaction()) {
@@ -312,33 +314,17 @@
 
         mSkyboxNode = mXrExtensions.createNode();
         try (NodeTransaction transaction = mXrExtensions.createNodeTransaction()) {
-            NodeTransaction unused = transaction.setName(mSkyboxNode, SKYBOX_NODE_NAME);
+            transaction
+                    .setName(mSkyboxNode, SKYBOX_NODE_NAME)
+                    .setParent(mSkyboxNode, mRootEnvironmentNode);
             if (skybox != null) {
-                unused = transaction.setEnvironment(mSkyboxNode, skybox.getToken());
+                transaction.setEnvironment(mSkyboxNode, skybox.getToken());
             }
             transaction.apply();
         }
     }
 
     /**
-     * Updates the system's preferred IBL asset. This applies a skybox that has been generated from
-     * a preprocessed EXR image through SplitEngine. If skybox is null, this method clears the
-     * preferred IBL selection, resulting in the system skybox being used.
-     */
-    private void applySkyboxSplitEngine(@Nullable ExrImageResourceImplSplitEngine skybox) {
-        if (!Looper.getMainLooper().isCurrentThread()) {
-            throw new IllegalStateException("This method must be called on the main thread.");
-        }
-
-        // The skybox is not modeled by a node in the Split Engine, so we don't update mSkyboxNode
-        // here.
-        mImpressApi.clearPreferredEnvironmentIblAsset();
-        if (skybox != null) {
-            mImpressApi.setPreferredEnvironmentLight(skybox.getExtensionImageToken());
-        }
-    }
-
-    /**
      * Stages updates to the CPM graph for the Environment to reflect a new geometry preference. If
      * geometry is null, this method unsets the client geometry preference, resulting in the system
      * geometry being used.
@@ -351,9 +337,11 @@
         }
         mGeometryNode = mXrExtensions.createNode();
         try (NodeTransaction transaction = mXrExtensions.createNodeTransaction()) {
-            NodeTransaction unused = transaction.setName(mGeometryNode, GEOMETRY_NODE_NAME);
+            transaction
+                    .setName(mGeometryNode, GEOMETRY_NODE_NAME)
+                    .setParent(mGeometryNode, mRootEnvironmentNode);
             if (geometry != null) {
-                unused = transaction.setGltfModel(mGeometryNode, geometry.getExtensionModelToken());
+                transaction.setGltfModel(mGeometryNode, geometry.getExtensionModelToken());
             }
             transaction.apply();
         }
@@ -366,11 +354,7 @@
      *
      * @throws IllegalStateException if called on a thread other than the main thread.
      */
-    private void applyGeometrySplitEngine(
-            @Nullable GltfModelResourceImplSplitEngine geometry,
-            @Nullable MaterialResource material,
-            @Nullable String meshName,
-            @Nullable String animationName) {
+    private void applyGeometrySplitEngine(@Nullable GltfModelResourceImplSplitEngine geometry) {
         if (!Looper.getMainLooper().isCurrentThread()) {
             throw new IllegalStateException("This method must be called on the main thread.");
         }
@@ -393,19 +377,12 @@
 
         try (NodeTransaction transaction = mXrExtensions.createNodeTransaction()) {
             transaction
-                    .setName(
-                            mGeometrySubspaceSplitEngine.getSubspaceNodeActual(),
-                            GEOMETRY_NODE_NAME)
-                    .setPosition(
-                            mGeometrySubspaceSplitEngine.getSubspaceNodeActual(), 0.0f, 0.0f, 0.0f)
-                    .setScale(
-                            mGeometrySubspaceSplitEngine.getSubspaceNodeActual(), 1.0f, 1.0f, 1.0f)
+                    .setName(mGeometrySubspaceSplitEngine.subspaceNode, GEOMETRY_NODE_NAME)
+                    .setParent(mGeometrySubspaceSplitEngine.subspaceNode, mRootEnvironmentNode)
+                    .setPosition(mGeometrySubspaceSplitEngine.subspaceNode, 0.0f, 0.0f, 0.0f)
+                    .setScale(mGeometrySubspaceSplitEngine.subspaceNode, 1.0f, 1.0f, 1.0f)
                     .setOrientation(
-                            mGeometrySubspaceSplitEngine.getSubspaceNodeActual(),
-                            0.0f,
-                            0.0f,
-                            0.0f,
-                            1.0f)
+                            mGeometrySubspaceSplitEngine.subspaceNode, 0.0f, 0.0f, 0.0f, 1.0f)
                     .apply();
         }
 
@@ -413,24 +390,13 @@
             int modelImpressNode =
                     mImpressApi.instanceGltfModel(
                             geometry.getExtensionModelToken(), /* enableCollider= */ false);
-            if (material != null && meshName != null) {
-                MaterialResourceImpl materialImpl = (MaterialResourceImpl) material;
-                mImpressApi.setMaterialOverride(
-                        modelImpressNode, materialImpl.getMaterialToken(), meshName);
-            }
-            if (animationName != null) {
-                ListenableFuture<Void> unused =
-                        mImpressApi.animateGltfModel(modelImpressNode, animationName, true);
-            }
             mImpressApi.setImpressNodeParent(modelImpressNode, mGeometrySubspaceImpressNode);
         }
 
         if (prevGeometrySubspaceSplitEngine != null && prevGeometrySubspaceImpressNode != -1) {
             // Detach the previous geometry subspace from the root environment node.
             try (NodeTransaction transaction = mXrExtensions.createNodeTransaction()) {
-                transaction
-                        .setParent(prevGeometrySubspaceSplitEngine.getSubspaceNodeActual(), null)
-                        .apply();
+                transaction.setParent(prevGeometrySubspaceSplitEngine.subspaceNode, null).apply();
             }
             // Destroying the subspace will also destroy the underlying Impress node for the
             // Environment
@@ -447,10 +413,6 @@
         mImpressApi = api;
     }
 
-    void onNullSkyboxResourceReady(ExrImageResource nullSkyboxResource) {
-        mNullSkyboxResource = nullSkyboxResource;
-    }
-
     @Override
     @NonNull
     @CanIgnoreReturnValue
@@ -470,11 +432,6 @@
         ExrImageResource newSkybox = newPreference == null ? null : newPreference.skybox;
         ExrImageResource prevSkybox =
                 mSpatialEnvironmentPreference == null ? null : mSpatialEnvironmentPreference.skybox;
-        MaterialResource newMaterial =
-                newPreference == null ? null : newPreference.geometryMaterial;
-        String newMeshName = newPreference == null ? null : newPreference.geometryMeshName;
-        String newAnimationName =
-                newPreference == null ? null : newPreference.geometryAnimationName;
 
         // TODO(b/329907079): Map GltfModelResourceImplSplitEngine to GltfModelResource in Impl
         // Layer
@@ -491,31 +448,15 @@
         }
 
         // TODO b/329907079: Map ExrImageResourceImpl to ExrImageResource in Impl Layer
-        // TODO(b/396483557): Don't allow use of ExrImageResourceImpl when SplitEngine is enabled.
-        // This
-        // is a temporary measure to not break clients while they migrate to the Split Engine route.
-        if (newSkybox != null) {
-            if (mUseSplitEngine
-                    && !((newSkybox instanceof ExrImageResourceImplSplitEngine)
-                            || (newSkybox instanceof ExrImageResourceImpl))) {
-                throw new IllegalArgumentException(
-                        "SplitEngine is enabled but the prefererred skybox is not of type"
-                                + " ExrImageResourceImplSplitEngine or ExrImageResourceImpl.");
-            } else if (!mUseSplitEngine && !(newSkybox instanceof ExrImageResourceImpl)) {
-                throw new IllegalArgumentException(
-                        "SplitEngine is disabled but the prefererred skybox is not of type"
-                                + " ExrImageResourceImpl.");
-            }
+        if (newSkybox != null && !(newSkybox instanceof ExrImageResourceImpl)) {
+            throw new IllegalArgumentException(
+                    "The prefererred skybox is not of type ExrImageResourceImpl.");
         }
 
         if (!Objects.equals(newGeometry, prevGeometry)) {
             // TODO: b/354711945 - Remove this check once we migrate completely to SplitEngine
             if (mUseSplitEngine) {
-                applyGeometrySplitEngine(
-                        (GltfModelResourceImplSplitEngine) newGeometry,
-                        newMaterial,
-                        newMeshName,
-                        newAnimationName);
+                applyGeometrySplitEngine((GltfModelResourceImplSplitEngine) newGeometry);
             } else {
                 applyGeometryLegacy((GltfModelResourceImpl) newGeometry);
             }
@@ -526,85 +467,36 @@
                 || (mSpatialEnvironmentPreference == null && newPreference != null)) {
             // If the preference object is non-null but contains a null skybox, we set a black
             // skybox.
-            if (newSkybox == null && newPreference != null) {
+            if (mNullSkyboxResourceFuture == null) {
+                Log.e(TAG, "Failed to get null skybox resource.");
+            } else if (newSkybox == null && newPreference != null) {
                 // Lazy initialization of the null skybox resource.
                 if (mNullSkyboxResource == null) {
-                    Log.e(TAG, "Black skybox resource is needed before it finishes loading.");
+                    try {
+                        mNullSkyboxResource = mNullSkyboxResourceFuture.get();
+                    } catch (ExecutionException | InterruptedException e) {
+                        Log.e(TAG, "Failed to get null skybox resource.");
+                    }
                 }
                 // Set the skybox to a black texture
                 if (mNullSkyboxResource != null) {
                     newSkybox = mNullSkyboxResource;
                 }
             }
-
-            // TODO(b/396483557): Don't allow use of applySkyboxLegacy when SplitEngine is enabled.
-            // This
-            // is a temporary measure to not break clients while they migrate to the Split Engine
-            // route.
-            // For the null case, Split Engine could be enabled but a non Split Engine skybox could
-            // be
-            // set. In that case only the skybox node would not be null and the legacy path would be
-            // followed.
-            if (newSkybox == null) {
-                if (mUseSplitEngine && mSkyboxNode == null) {
-                    applySkyboxSplitEngine(null);
-                } else {
-                    applySkyboxLegacy(null);
-                }
-            } else {
-                // For the non null case, Split Engine could be enabled but a non Split Engine
-                // skybox could
-                // be set. In that case newSkybox would be an instance of ExrImageResourceImpl and
-                // the
-                // legacy
-                // path would be followed.
-                if (mUseSplitEngine && (newSkybox instanceof ExrImageResourceImplSplitEngine)) {
-                    applySkyboxSplitEngine((ExrImageResourceImplSplitEngine) newSkybox);
-                } else {
-                    applySkyboxLegacy((ExrImageResourceImpl) newSkybox);
-                }
-            }
+            applySkybox((ExrImageResourceImpl) newSkybox);
         }
 
         try (NodeTransaction transaction = mXrExtensions.createNodeTransaction()) {
             if (newSkybox == null && newGeometry == null) {
-                if (mUseSplitEngine) {
-                    mImpressApi.clearPreferredEnvironmentIblAsset();
-                }
                 mXrExtensions.detachSpatialEnvironment(
                         mActivity,
                         (result) -> logXrExtensionResult("detachSpatialEnvironment", result),
                         Runnable::run);
             } else {
-                // Create a new root node for the environment and attach the children of the old
-                // root node
-                // to the new root node if they exist. This is necessary because the system will
-                // only
-                // trigger an environment transition if the root environment node changes.
-                Node newRootEnvironmentNode = mXrExtensions.createNode();
-                if (mSkyboxNode != null) {
-                    NodeTransaction unused =
-                            transaction.setParent(mSkyboxNode, newRootEnvironmentNode);
-                }
-                if (mGeometrySubspaceSplitEngine != null) {
-                    NodeTransaction unused =
-                            transaction.setParent(
-                                    mGeometrySubspaceSplitEngine.getSubspaceNodeActual(),
-                                    newRootEnvironmentNode);
-                }
-                if (mGeometryNode != null) {
-                    NodeTransaction unused =
-                            transaction.setParent(mGeometryNode, newRootEnvironmentNode);
-                }
-                transaction.apply();
                 mXrExtensions.attachSpatialEnvironment(
                         mActivity,
-                        newRootEnvironmentNode,
-                        (result) -> {
-                            // Update the root environment node to the new root node.
-                            mRootEnvironmentNode = newRootEnvironmentNode;
-                            logXrExtensionResult("attachSpatialEnvironment", result);
-                        },
+                        mRootEnvironmentNode,
+                        (result) -> logXrExtensionResult("attachSpatialEnvironment", result),
                         Runnable::run);
             }
         }
@@ -678,14 +570,11 @@
         if (mUseSplitEngine) {
             if (mGeometrySubspaceSplitEngine != null) {
                 try (NodeTransaction transaction = mXrExtensions.createNodeTransaction()) {
-                    transaction
-                            .setParent(mGeometrySubspaceSplitEngine.getSubspaceNodeActual(), null)
-                            .apply();
+                    transaction.setParent(mGeometrySubspaceSplitEngine.subspaceNode, null).apply();
                 }
                 mSplitEngineSubspaceManager.deleteSubspace(mGeometrySubspaceSplitEngine.subspaceId);
                 mGeometrySubspaceSplitEngine = null;
                 mImpressApi.destroyImpressNode(mGeometrySubspaceImpressNode);
-                mImpressApi.clearPreferredEnvironmentIblAsset();
             }
         }
         mActivePassthroughOpacity = null;
@@ -697,7 +586,6 @@
                     .setParent(mPassthroughNode, null)
                     .apply();
         }
-        mRootEnvironmentNode = null;
         mGeometrySubspaceSplitEngine = null;
         mGeometrySubspaceImpressNode = 0;
         mSplitEngineSubspaceManager = null;
@@ -706,6 +594,7 @@
         mIsSpatialEnvironmentPreferenceActive = false;
         mOnPassthroughOpacityChangedListeners.clear();
         mOnSpatialEnvironmentChangedListeners.clear();
+        mNullSkyboxResourceFuture = null;
         mNullSkyboxResource = null;
         // TODO: b/376934871 - Check async results.
         mXrExtensions.detachSpatialEnvironment(mActivity, (result) -> {}, Runnable::run);
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SurfaceEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SurfaceEntityImpl.java
index cb491b3..184462a 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SurfaceEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SurfaceEntityImpl.java
@@ -18,14 +18,13 @@
 
 import android.view.Surface;
 
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.NodeTransaction;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.SurfaceEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.SurfaceEntity.CanvasShape;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.NodeTransaction;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.androidxr.splitengine.SubspaceNode;
 import com.google.ar.imp.apibindings.ImpressApi;
@@ -75,7 +74,7 @@
 
         try (NodeTransaction transaction = extensions.createNodeTransaction()) {
             // Make the Entity node a parent of the subspace node.
-            transaction.setParent(mSubspace.getSubspaceNodeActual(), mNode).apply();
+            transaction.setParent(mSubspace.subspaceNode, mNode).apply();
         }
 
         // This is broken up into two steps to limit the size of the Impress Surface
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SystemSpaceEntityImpl.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SystemSpaceEntityImpl.java
index d481ac6..f7706592 100644
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SystemSpaceEntityImpl.java
+++ b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/SystemSpaceEntityImpl.java
@@ -16,24 +16,20 @@
 
 package androidx.xr.scenecore.impl;
 
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-
 import android.util.Log;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.xr.extensions.XrExtensions;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-
 import java.io.Closeable;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
 
 /**
  * A parentless system-controlled JXRCore Entity that defines its own coordinate space.
@@ -49,9 +45,6 @@
     Closeable mNodeTransformCloseable;
     private OnSpaceUpdatedListener mSpaceUpdatedListener;
     private Executor mSpaceUpdatedExecutor;
-    // TODO: b/377554103 - Remove delay once the subscription API are in sync with the node
-    // creation.
-    static final int SUBSCRIPTION_DELAY_MS = 30; // milliseconds
 
     SystemSpaceEntityImpl(
             Node node,
@@ -125,20 +118,13 @@
      * @param node The node to subscribe to.
      * @param executor The executor to run the callback on.
      */
-    private void subscribeToNodeTransform(Node node, ScheduledExecutorService executor) {
-        // Ensure that the subscription is created after the node is created in SpF.
-        ScheduledFuture<?> unused =
-                executor.schedule(
-                        () ->
-                                mNodeTransformCloseable =
-                                        node.subscribeToTransform(
-                                                (transform) ->
-                                                        setOpenXrReferenceSpacePose(
-                                                                RuntimeUtils.getMatrix(
-                                                                        transform.getTransform())),
-                                                executor),
-                        SUBSCRIPTION_DELAY_MS,
-                        MILLISECONDS);
+    private void subscribeToNodeTransform(Node node, Executor executor) {
+        mNodeTransformCloseable =
+                node.subscribeToTransform(
+                        (transform) ->
+                                setOpenXrReferenceSpacePose(
+                                        RuntimeUtils.getMatrix(transform.getTransform())),
+                        executor);
     }
 
     @NonNull
diff --git a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/extensions/XrExtensionsProvider.java b/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/extensions/XrExtensionsProvider.java
deleted file mode 100644
index 4d3989a..0000000
--- a/xr/scenecore/scenecore/src/main/java/androidx/xr/scenecore/impl/extensions/XrExtensionsProvider.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore.impl.extensions;
-
-import android.util.Log;
-
-import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
-
-import com.android.extensions.xr.XrExtensions;
-
-/** Provides the OEM implementation of {@link XrExtensions}. */
-@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
-public class XrExtensionsProvider {
-    private XrExtensionsProvider() {}
-
-    /**
-     * Returns the OEM implementation of {@link XrExtensions} or returns null if no implementation
-     * is found.
-     */
-    @Nullable
-    public static XrExtensions getXrExtensions() {
-        try {
-            return XrExtensionsInstance.getInstance();
-        } catch (NoClassDefFoundError e) {
-            Log.w("XrExtensionsProvider", "No XrExtensions implementation found.", e);
-            return null;
-        }
-    }
-
-    private static class XrExtensionsInstance {
-        private XrExtensionsInstance() {}
-
-        private static class XrExtensionsHolder {
-            public static final XrExtensions INSTANCE = new XrExtensions();
-        }
-
-        private static XrExtensions getInstance() {
-            return XrExtensionsHolder.INSTANCE;
-        }
-    }
-}
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityManagerTest.kt b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityManagerTest.kt
index 8997a22..8ce0872 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityManagerTest.kt
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityManagerTest.kt
@@ -17,10 +17,7 @@
 package androidx.xr.scenecore
 
 import android.app.Activity
-import android.content.Context
-import android.view.View
 import android.widget.TextView
-import androidx.xr.runtime.math.Pose
 import com.google.common.truth.Truth.assertThat
 import com.google.common.util.concurrent.Futures
 import kotlin.time.Duration.Companion.seconds
@@ -38,7 +35,7 @@
 @RunWith(RobolectricTestRunner::class)
 class EntityManagerTest {
     private val activity = Robolectric.buildActivity(Activity::class.java).create().start().get()
-    private val mockPlatformAdapter = mock<JxrPlatformAdapter>()
+    private val mockRuntime = mock<JxrPlatformAdapter>()
     private val mockGltfModelEntityImpl = mock<JxrPlatformAdapter.GltfEntity>()
     private val mockPanelEntityImpl = mock<JxrPlatformAdapter.PanelEntity>()
     private val mockAnchorEntityImpl = mock<JxrPlatformAdapter.AnchorEntity>()
@@ -56,39 +53,29 @@
 
     @Before
     fun setUp() {
-        whenever(mockPlatformAdapter.spatialEnvironment).thenReturn(mock())
-        whenever(mockPlatformAdapter.activitySpace).thenReturn(mock())
-        whenever(mockPlatformAdapter.activitySpaceRootImpl).thenReturn(mock())
-        whenever(mockPlatformAdapter.headActivityPose).thenReturn(mock())
-        whenever(mockPlatformAdapter.perceptionSpaceActivityPose).thenReturn(mock())
-        whenever(mockPlatformAdapter.loadGltfByAssetNameSplitEngine(Mockito.anyString()))
+        whenever(mockRuntime.spatialEnvironment).thenReturn(mock())
+        whenever(mockRuntime.activitySpace).thenReturn(mock())
+        whenever(mockRuntime.activitySpaceRootImpl).thenReturn(mock())
+        whenever(mockRuntime.headActivityPose).thenReturn(mock())
+        whenever(mockRuntime.perceptionSpaceActivityPose).thenReturn(mock())
+        whenever(mockRuntime.loadGltfByAssetNameSplitEngine(Mockito.anyString()))
             .thenReturn(Futures.immediateFuture(mock()))
-        whenever(mockPlatformAdapter.createGltfEntity(any(), any(), any()))
+        whenever(mockRuntime.createGltfEntity(any(), any(), any()))
             .thenReturn(mockGltfModelEntityImpl)
-        whenever(
-                mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
-                )
-            )
+        whenever(mockRuntime.createPanelEntity(any(), any(), any(), any(), any(), any(), any()))
             .thenReturn(mockPanelEntityImpl)
-        whenever(mockPlatformAdapter.createAnchorEntity(any(), any(), any(), any()))
+        whenever(mockRuntime.createAnchorEntity(any(), any(), any(), any()))
             .thenReturn(mockAnchorEntityImpl)
         whenever(mockAnchorEntityImpl.state)
             .thenReturn(JxrPlatformAdapter.AnchorEntity.State.UNANCHORED)
         whenever(mockAnchorEntityImpl.persistState)
             .thenReturn(JxrPlatformAdapter.AnchorEntity.PersistState.PERSIST_NOT_REQUESTED)
-        whenever(mockPlatformAdapter.createActivityPanelEntity(any(), any(), any(), any(), any()))
+        whenever(mockRuntime.createActivityPanelEntity(any(), any(), any(), any(), any()))
             .thenReturn(mockActivityPanelEntity)
-        whenever(mockPlatformAdapter.createEntity(any(), any(), any()))
-            .thenReturn(mockContentlessEntity)
-        whenever(mockPlatformAdapter.mainPanelEntity).thenReturn(mockPanelEntityImpl)
-        session = Session.create(activity, mockPlatformAdapter)
-        activitySpace = ActivitySpace.create(mockPlatformAdapter, entityManager)
+        whenever(mockRuntime.createEntity(any(), any(), any())).thenReturn(mockContentlessEntity)
+        whenever(mockRuntime.mainPanelEntity).thenReturn(mockPanelEntityImpl)
+        session = Session.create(activity, mockRuntime)
+        activitySpace = ActivitySpace.create(mockRuntime, entityManager)
     }
 
     @Test
@@ -234,24 +221,25 @@
     private fun createPanelEntity() {
         panelEntity =
             PanelEntity.create(
-                activity,
-                mockPlatformAdapter,
+                mockRuntime,
                 entityManager,
                 TextView(activity),
-                PixelDimensions(720, 480),
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
                 "test",
+                activity,
             )
     }
 
     private fun createGltfEntity() {
         gltfModel = GltfModel.create(session, "test.glb").get()
-        gltfModelEntity = GltfModelEntity.create(mockPlatformAdapter, entityManager, gltfModel)
+        gltfModelEntity = GltfModelEntity.create(mockRuntime, entityManager, gltfModel)
     }
 
     private fun createAnchorEntity() {
         anchorEntity =
             AnchorEntity.create(
-                mockPlatformAdapter,
+                mockRuntime,
                 entityManager,
                 Dimensions(),
                 PlaneType.ANY,
@@ -263,7 +251,7 @@
     private fun createActivityPanelEntity() {
         activityPanelEntity =
             ActivityPanelEntity.create(
-                mockPlatformAdapter,
+                mockRuntime,
                 entityManager,
                 PixelDimensions(640, 480),
                 "test",
@@ -272,6 +260,6 @@
     }
 
     private fun createContentlessEntity() {
-        contentlessEntity = ContentlessEntity.create(mockPlatformAdapter, entityManager, "test")
+        contentlessEntity = ContentlessEntity.create(mockRuntime, entityManager, "test")
     }
 }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityTest.kt b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityTest.kt
index 4ed0938..4fc43fe 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityTest.kt
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/EntityTest.kt
@@ -17,9 +17,7 @@
 package androidx.xr.scenecore
 
 import android.app.Activity
-import android.content.Context
 import android.content.Intent
-import android.view.View
 import android.widget.TextView
 import androidx.xr.runtime.math.Pose
 import androidx.xr.runtime.math.Vector3
@@ -34,7 +32,6 @@
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
-import org.mockito.ArgumentMatchers.eq
 import org.mockito.Mockito
 import org.mockito.kotlin.any
 import org.mockito.kotlin.argumentCaptor
@@ -84,12 +81,13 @@
         var getAlphaCalled: Boolean = false
         var setHiddenCalled: Boolean = false
         var getHiddenCalled: Boolean = false
+        var getActivitySpaceAlphaCalled: Boolean = false
         var getWorldSpaceScaleCalled: Boolean = false
         var getActivitySpaceScaleCalled: Boolean = false
 
-        override fun setPose(pose: Pose, @SpaceValue space: Int) {}
+        override fun setPose(pose: Pose) {}
 
-        override fun getPose(@SpaceValue space: Int): Pose {
+        override fun getPose(): Pose {
             return Pose()
         }
 
@@ -104,26 +102,29 @@
             return Pose()
         }
 
-        override fun getAlpha(@SpaceValue space: Int): Float = 1.0f.apply { getAlphaCalled = true }
+        override fun setSize(dimensions: JxrPlatformAdapter.Dimensions) {}
 
-        override fun setAlpha(alpha: Float, @SpaceValue space: Int) {
+        override fun getAlpha(): Float = 1.0f.apply { getAlphaCalled = true }
+
+        override fun setAlpha(alpha: Float) {
             setAlphaCalled = true
         }
 
-        override fun isHidden(includeParents: Boolean): Boolean {
-            getHiddenCalled = true
-            return false
-        }
+        override fun isHidden(includeParents: Boolean): Boolean =
+            false.apply { getHiddenCalled = true }
 
         override fun setHidden(hidden: Boolean) {
             setHiddenCalled = true
         }
 
-        override fun setScale(scale: Vector3, @SpaceValue space: Int) {
+        override fun getActivitySpaceAlpha(): Float =
+            1.0f.apply { getActivitySpaceAlphaCalled = true }
+
+        override fun setScale(scale: Vector3) {
             setScaleCalled = true
         }
 
-        override fun getScale(@SpaceValue space: Int): Vector3 {
+        override fun getScale(): Vector3 {
             getScaleCalled = true
             return Vector3()
         }
@@ -209,12 +210,13 @@
             .thenReturn(mockGltfModelEntityImpl)
         whenever(
                 mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any()
                 )
             )
             .thenReturn(mockPanelEntityImpl)
@@ -237,12 +239,13 @@
         gltfModelEntity = GltfModelEntity.create(mockPlatformAdapter, entityManager, gltfModel)
         panelEntity =
             PanelEntity.create(
-                context = activity,
-                adapter = mockPlatformAdapter,
+                mockPlatformAdapter,
                 entityManager = entityManager,
-                view = TextView(activity),
-                pixelDimensions = PixelDimensions(720, 480),
-                name = "test",
+                TextView(activity),
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
+                "test",
+                activity,
             )
         anchorEntity =
             AnchorEntity.create(
@@ -373,35 +376,33 @@
         val pose = Pose.Identity
 
         panelEntity.setPose(pose)
-        gltfModelEntity.setPose(pose, Space.PARENT)
-        anchorEntity.setPose(pose, Space.ACTIVITY)
-        activityPanelEntity.setPose(pose, Space.REAL_WORLD)
+        gltfModelEntity.setPose(pose)
+        anchorEntity.setPose(pose)
+        activityPanelEntity.setPose(pose)
 
-        verify(mockPanelEntityImpl).setPose(any(), eq(JxrPlatformAdapter.Space.PARENT))
-        verify(mockGltfModelEntityImpl).setPose(any(), eq(JxrPlatformAdapter.Space.PARENT))
-        verify(mockAnchorEntityImpl).setPose(any(), eq(JxrPlatformAdapter.Space.ACTIVITY))
-        verify(mockActivityPanelEntity).setPose(any(), eq(JxrPlatformAdapter.Space.REAL_WORLD))
+        verify(mockPanelEntityImpl).setPose(any())
+        verify(mockGltfModelEntityImpl).setPose(any())
+        verify(mockAnchorEntityImpl).setPose(any())
+        verify(mockActivityPanelEntity).setPose(any())
     }
 
     @Test
     fun allEntityGetPose_callsRuntimeEntityImplGetPose() {
-        whenever(mockPanelEntityImpl.getPose(JxrPlatformAdapter.Space.PARENT)).thenReturn(Pose())
-        whenever(mockGltfModelEntityImpl.getPose(JxrPlatformAdapter.Space.PARENT))
-            .thenReturn(Pose())
-        whenever(mockAnchorEntityImpl.getPose(JxrPlatformAdapter.Space.ACTIVITY)).thenReturn(Pose())
-        whenever(mockActivityPanelEntity.getPose(JxrPlatformAdapter.Space.REAL_WORLD))
-            .thenReturn(Pose())
+        whenever(mockPanelEntityImpl.pose).thenReturn(Pose())
+        whenever(mockGltfModelEntityImpl.pose).thenReturn(Pose())
+        whenever(mockAnchorEntityImpl.pose).thenReturn(Pose())
+        whenever(mockActivityPanelEntity.pose).thenReturn(Pose())
         val pose = Pose.Identity
 
         assertThat(panelEntity.getPose()).isEqualTo(pose)
-        assertThat(gltfModelEntity.getPose(Space.PARENT)).isEqualTo(pose)
-        assertThat(anchorEntity.getPose(Space.ACTIVITY)).isEqualTo(pose)
-        assertThat(activityPanelEntity.getPose(Space.REAL_WORLD)).isEqualTo(pose)
+        assertThat(gltfModelEntity.getPose()).isEqualTo(pose)
+        assertThat(anchorEntity.getPose()).isEqualTo(pose)
+        assertThat(activityPanelEntity.getPose()).isEqualTo(pose)
 
-        verify(mockPanelEntityImpl).getPose(JxrPlatformAdapter.Space.PARENT)
-        verify(mockGltfModelEntityImpl).getPose(JxrPlatformAdapter.Space.PARENT)
-        verify(mockAnchorEntityImpl).getPose(JxrPlatformAdapter.Space.ACTIVITY)
-        verify(mockActivityPanelEntity).getPose(JxrPlatformAdapter.Space.REAL_WORLD)
+        verify(mockPanelEntityImpl).getPose()
+        verify(mockGltfModelEntityImpl).getPose()
+        verify(mockAnchorEntityImpl).getPose()
+        verify(mockActivityPanelEntity).getPose()
     }
 
     @Test
@@ -428,40 +429,39 @@
         val alpha = 0.1f
 
         panelEntity.setAlpha(alpha)
-        gltfModelEntity.setAlpha(alpha, Space.PARENT)
-        anchorEntity.setAlpha(alpha, Space.ACTIVITY)
-        activityPanelEntity.setAlpha(alpha, Space.REAL_WORLD)
+        gltfModelEntity.setAlpha(alpha)
+        anchorEntity.setAlpha(alpha)
+        activityPanelEntity.setAlpha(alpha)
         contentlessEntity.setAlpha(alpha)
         activitySpace.setAlpha(alpha)
 
-        verify(mockPanelEntityImpl).setAlpha(alpha, JxrPlatformAdapter.Space.PARENT)
-        verify(mockGltfModelEntityImpl).setAlpha(alpha, JxrPlatformAdapter.Space.PARENT)
-        verify(mockAnchorEntityImpl).setAlpha(alpha, JxrPlatformAdapter.Space.ACTIVITY)
-        verify(mockActivityPanelEntity).setAlpha(alpha, JxrPlatformAdapter.Space.REAL_WORLD)
-        verify(mockContentlessEntity).setAlpha(alpha, JxrPlatformAdapter.Space.PARENT)
+        verify(mockPanelEntityImpl).setAlpha(any())
+        verify(mockGltfModelEntityImpl).setAlpha(any())
+        verify(mockAnchorEntityImpl).setAlpha(any())
+        verify(mockActivityPanelEntity).setAlpha(any())
+        verify(mockContentlessEntity).setAlpha(any())
         assertThat(testActivitySpace.setAlphaCalled).isTrue()
     }
 
     @Test
     fun allEntityGetAlpha_callsRuntimeEntityImplGetAlpha() {
-        whenever(mockPanelEntityImpl.getAlpha(JxrPlatformAdapter.Space.PARENT)).thenReturn(0.1f)
-        whenever(mockGltfModelEntityImpl.getAlpha(JxrPlatformAdapter.Space.PARENT)).thenReturn(0.1f)
-        whenever(mockAnchorEntityImpl.getAlpha(JxrPlatformAdapter.Space.ACTIVITY)).thenReturn(0.1f)
-        whenever(mockActivityPanelEntity.getAlpha(JxrPlatformAdapter.Space.REAL_WORLD))
-            .thenReturn(0.1f)
+        whenever(mockPanelEntityImpl.getAlpha()).thenReturn(0.1f)
+        whenever(mockGltfModelEntityImpl.getAlpha()).thenReturn(0.1f)
+        whenever(mockAnchorEntityImpl.getAlpha()).thenReturn(0.1f)
+        whenever(mockActivityPanelEntity.getAlpha()).thenReturn(0.1f)
 
         assertThat(panelEntity.getAlpha()).isEqualTo(0.1f)
-        assertThat(gltfModelEntity.getAlpha(Space.PARENT)).isEqualTo(0.1f)
-        assertThat(anchorEntity.getAlpha(Space.ACTIVITY)).isEqualTo(0.1f)
-        assertThat(activityPanelEntity.getAlpha(Space.REAL_WORLD)).isEqualTo(0.1f)
+        assertThat(gltfModelEntity.getAlpha()).isEqualTo(0.1f)
+        assertThat(anchorEntity.getAlpha()).isEqualTo(0.1f)
+        assertThat(activityPanelEntity.getAlpha()).isEqualTo(0.1f)
 
         assertThat(activitySpace.getAlpha()).isEqualTo(1.0f)
         assertThat(testActivitySpace.getAlphaCalled).isTrue()
 
-        verify(mockPanelEntityImpl).getAlpha(JxrPlatformAdapter.Space.PARENT)
-        verify(mockGltfModelEntityImpl).getAlpha(JxrPlatformAdapter.Space.PARENT)
-        verify(mockAnchorEntityImpl).getAlpha(JxrPlatformAdapter.Space.ACTIVITY)
-        verify(mockActivityPanelEntity).getAlpha(JxrPlatformAdapter.Space.REAL_WORLD)
+        verify(mockPanelEntityImpl).getAlpha()
+        verify(mockGltfModelEntityImpl).getAlpha()
+        verify(mockAnchorEntityImpl).getAlpha()
+        verify(mockActivityPanelEntity).getAlpha()
     }
 
     @Test
@@ -483,23 +483,23 @@
 
     @Test
     fun allEntityGetActivitySpaceAlpha_callsRuntimeEntityImplGetActivitySpaceAlpha() {
-        whenever(mockPanelEntityImpl.getAlpha(JxrPlatformAdapter.Space.PARENT)).thenReturn(0.1f)
-        whenever(mockGltfModelEntityImpl.getAlpha(JxrPlatformAdapter.Space.PARENT)).thenReturn(0.1f)
-        whenever(mockAnchorEntityImpl.getAlpha(JxrPlatformAdapter.Space.ACTIVITY)).thenReturn(0.1f)
-        whenever(mockActivityPanelEntity.getAlpha(JxrPlatformAdapter.Space.REAL_WORLD))
-            .thenReturn(0.1f)
+        whenever(mockPanelEntityImpl.activitySpaceAlpha).thenReturn(0.1f)
+        whenever(mockGltfModelEntityImpl.activitySpaceAlpha).thenReturn(0.1f)
+        whenever(mockAnchorEntityImpl.activitySpaceAlpha).thenReturn(0.1f)
+        whenever(mockActivityPanelEntity.activitySpaceAlpha).thenReturn(0.1f)
 
-        assertThat(panelEntity.getAlpha(Space.PARENT)).isEqualTo(0.1f)
-        assertThat(gltfModelEntity.getAlpha(Space.PARENT)).isEqualTo(0.1f)
-        assertThat(anchorEntity.getAlpha(Space.ACTIVITY)).isEqualTo(0.1f)
-        assertThat(activityPanelEntity.getAlpha(Space.REAL_WORLD)).isEqualTo(0.1f)
+        assertThat(panelEntity.getActivitySpaceAlpha()).isEqualTo(0.1f)
+        assertThat(gltfModelEntity.getActivitySpaceAlpha()).isEqualTo(0.1f)
+        assertThat(anchorEntity.getActivitySpaceAlpha()).isEqualTo(0.1f)
+        assertThat(activityPanelEntity.getActivitySpaceAlpha()).isEqualTo(0.1f)
 
-        assertThat(activitySpace.getAlpha(Space.PARENT)).isEqualTo(1.0f)
+        assertThat(activitySpace.getActivitySpaceAlpha()).isEqualTo(1.0f)
+        assertThat(testActivitySpace.getActivitySpaceAlphaCalled).isTrue()
 
-        verify(mockPanelEntityImpl).getAlpha(JxrPlatformAdapter.Space.PARENT)
-        verify(mockGltfModelEntityImpl).getAlpha(JxrPlatformAdapter.Space.PARENT)
-        verify(mockAnchorEntityImpl).getAlpha(JxrPlatformAdapter.Space.ACTIVITY)
-        verify(mockActivityPanelEntity).getAlpha(JxrPlatformAdapter.Space.REAL_WORLD)
+        verify(mockPanelEntityImpl).activitySpaceAlpha
+        verify(mockGltfModelEntityImpl).activitySpaceAlpha
+        verify(mockAnchorEntityImpl).activitySpaceAlpha
+        verify(mockActivityPanelEntity).activitySpaceAlpha
     }
 
     @Test
@@ -507,20 +507,20 @@
         val scale = 0.1f
 
         panelEntity.setScale(scale)
-        gltfModelEntity.setScale(scale, Space.PARENT)
+        gltfModelEntity.setScale(scale)
         // Note that in production we expect this to raise an exception, but that should be handled
         // by the runtime Entity.
-        anchorEntity.setScale(scale, Space.ACTIVITY)
-        activityPanelEntity.setScale(scale, Space.REAL_WORLD)
+        anchorEntity.setScale(scale)
+        activityPanelEntity.setScale(scale)
         contentlessEntity.setScale(scale)
         // Note that in production we expect this to do nothing.
         activitySpace.setScale(scale)
 
-        verify(mockPanelEntityImpl).setScale(any(), eq(JxrPlatformAdapter.Space.PARENT))
-        verify(mockGltfModelEntityImpl).setScale(any(), eq(JxrPlatformAdapter.Space.PARENT))
-        verify(mockAnchorEntityImpl).setScale(any(), eq(JxrPlatformAdapter.Space.ACTIVITY))
-        verify(mockActivityPanelEntity).setScale(any(), eq(JxrPlatformAdapter.Space.REAL_WORLD))
-        verify(mockContentlessEntity).setScale(any(), eq(JxrPlatformAdapter.Space.PARENT))
+        verify(mockPanelEntityImpl).setScale(any())
+        verify(mockGltfModelEntityImpl).setScale(any())
+        verify(mockAnchorEntityImpl).setScale(any())
+        verify(mockActivityPanelEntity).setScale(any())
+        verify(mockContentlessEntity).setScale(any())
         assertThat(testActivitySpace.setScaleCalled).isTrue()
     }
 
@@ -529,28 +529,49 @@
         val runtimeScale = Vector3(0.1f, 0.1f, 0.1f)
         val sdkScale = 0.1f
 
-        whenever(mockPanelEntityImpl.getScale(JxrPlatformAdapter.Space.PARENT))
-            .thenReturn(runtimeScale)
-        whenever(mockGltfModelEntityImpl.getScale(JxrPlatformAdapter.Space.PARENT))
-            .thenReturn(runtimeScale)
-        whenever(mockAnchorEntityImpl.getScale(JxrPlatformAdapter.Space.ACTIVITY))
-            .thenReturn(runtimeScale)
-        whenever(mockActivityPanelEntity.getScale(JxrPlatformAdapter.Space.REAL_WORLD))
-            .thenReturn(runtimeScale)
+        whenever(mockPanelEntityImpl.getScale()).thenReturn(runtimeScale)
+        whenever(mockGltfModelEntityImpl.getScale()).thenReturn(runtimeScale)
+        whenever(mockAnchorEntityImpl.getScale()).thenReturn(runtimeScale)
+        whenever(mockActivityPanelEntity.getScale()).thenReturn(runtimeScale)
 
         assertThat(panelEntity.getScale()).isEqualTo(sdkScale)
-        assertThat(gltfModelEntity.getScale(Space.PARENT)).isEqualTo(sdkScale)
-        assertThat(anchorEntity.getScale(Space.ACTIVITY)).isEqualTo(sdkScale)
-        assertThat(activityPanelEntity.getScale(Space.REAL_WORLD)).isEqualTo(sdkScale)
+        assertThat(gltfModelEntity.getScale()).isEqualTo(sdkScale)
+        assertThat(anchorEntity.getScale()).isEqualTo(sdkScale)
+        assertThat(activityPanelEntity.getScale()).isEqualTo(sdkScale)
 
         // This is unrealistic, but we want to make sure the SDK delegates to the runtimeImpl.
         assertThat(activitySpace.getScale()).isEqualTo(0f)
         assertThat(testActivitySpace.getScaleCalled).isTrue()
 
-        verify(mockPanelEntityImpl).getScale(JxrPlatformAdapter.Space.PARENT)
-        verify(mockGltfModelEntityImpl).getScale(JxrPlatformAdapter.Space.PARENT)
-        verify(mockAnchorEntityImpl).getScale(JxrPlatformAdapter.Space.ACTIVITY)
-        verify(mockActivityPanelEntity).getScale(JxrPlatformAdapter.Space.REAL_WORLD)
+        verify(mockPanelEntityImpl).getScale()
+        verify(mockGltfModelEntityImpl).getScale()
+        verify(mockAnchorEntityImpl).getScale()
+        verify(mockActivityPanelEntity).getScale()
+    }
+
+    @Test
+    fun allEntityGetWorldSpaceScale_callsRuntimeEntityImplGetWorldSpaceScale() {
+        val runtimeScale = Vector3(0.1f, 0.1f, 0.1f)
+        val sdkScale = 0.1f
+
+        whenever(mockPanelEntityImpl.getWorldSpaceScale()).thenReturn(runtimeScale)
+        whenever(mockGltfModelEntityImpl.getWorldSpaceScale()).thenReturn(runtimeScale)
+        whenever(mockAnchorEntityImpl.getWorldSpaceScale()).thenReturn(runtimeScale)
+        whenever(mockActivityPanelEntity.getWorldSpaceScale()).thenReturn(runtimeScale)
+
+        assertThat(panelEntity.getWorldSpaceScale()).isEqualTo(sdkScale)
+        assertThat(gltfModelEntity.getWorldSpaceScale()).isEqualTo(sdkScale)
+        assertThat(anchorEntity.getWorldSpaceScale()).isEqualTo(sdkScale)
+        assertThat(activityPanelEntity.getWorldSpaceScale()).isEqualTo(sdkScale)
+
+        // This is unrealistic, but we want to make sure the SDK delegates to the runtimeImpl.
+        assertThat(activitySpace.getWorldSpaceScale()).isEqualTo(0f)
+        assertThat(testActivitySpace.getWorldSpaceScaleCalled).isTrue()
+
+        verify(mockPanelEntityImpl).getWorldSpaceScale()
+        verify(mockGltfModelEntityImpl).getWorldSpaceScale()
+        verify(mockAnchorEntityImpl).getWorldSpaceScale()
+        verify(mockActivityPanelEntity).getWorldSpaceScale()
     }
 
     @Test
@@ -576,28 +597,83 @@
     }
 
     @Test
-    fun allPanelEntitySetSizeInPixels_callsRuntimeEntityImplsetSizeInPixels() {
-        val dimensions = PixelDimensions(320, 240)
-        panelEntity.setSizeInPixels(dimensions)
-        activityPanelEntity.setSizeInPixels(dimensions)
+    fun allEntitySetSize_callsRuntimeEntityImplSetSize() {
+        val dimensions = Dimensions(0.3f, 0.2f, 0.1f)
 
-        verify(mockPanelEntityImpl).sizeInPixels = any()
-        verify(mockActivityPanelEntity).setSizeInPixels(any())
+        panelEntity.setSize(dimensions)
+        gltfModelEntity.setSize(dimensions)
+        anchorEntity.setSize(dimensions)
+        activityPanelEntity.setSize(dimensions)
+
+        verify(mockPanelEntityImpl).setSize(any())
+        verify(mockGltfModelEntityImpl).setSize(any())
+        verify(mockAnchorEntityImpl).setSize(any())
+        verify(mockActivityPanelEntity).setSize(any())
     }
 
     @Test
-    fun allPanelEntityGetSizeInPixels_callsRuntimeEntityImplgetSizeInPixels() {
+    fun allNonPanelEntityGetSize_returnsSize() {
+        val dimensions = Dimensions(0.3f, 0.2f, 0.1f)
+
+        gltfModelEntity.setSize(dimensions)
+        anchorEntity.setSize(dimensions)
+
+        assertThat(gltfModelEntity.getSize()).isEqualTo(dimensions)
+        assertThat(anchorEntity.getSize()).isEqualTo(dimensions)
+    }
+
+    @Test
+    fun allPanelEntityGetSize_callsRuntimeEntityImplGetSize() {
+        val dimensions = JxrPlatformAdapter.Dimensions(320.0f, 240.0f, 0.0f)
+        val expectedDimensions = dimensions.toDimensions()
+
+        whenever(mockPanelEntityImpl.getSize()).thenReturn(dimensions)
+        whenever(mockActivityPanelEntity.getSize()).thenReturn(dimensions)
+
+        assertThat(panelEntity.getSize()).isEqualTo(expectedDimensions)
+        assertThat(activityPanelEntity.getSize()).isEqualTo(expectedDimensions)
+
+        verify(mockPanelEntityImpl).getSize()
+        verify(mockActivityPanelEntity).getSize()
+    }
+
+    @Test
+    fun allPanelEntityGetPixelDensity_callsRuntimeEntityImplGetPixelDensity() {
+        val pixelDensity = Vector3(14.0f, 14.0f, 14.0f)
+        val expectedPixelDensity = pixelDensity
+        whenever(mockPanelEntityImpl.getPixelDensity()).thenReturn(pixelDensity)
+        whenever(mockActivityPanelEntity.getPixelDensity()).thenReturn(pixelDensity)
+
+        assertThat(panelEntity.getPixelDensity()).isEqualTo(expectedPixelDensity)
+        assertThat(activityPanelEntity.getPixelDensity()).isEqualTo(expectedPixelDensity)
+
+        verify(mockPanelEntityImpl).getPixelDensity()
+        verify(mockActivityPanelEntity).getPixelDensity()
+    }
+
+    @Test
+    fun allPanelEntitySetPixelDimensions_callsRuntimeEntityImplSetPixelDimensions() {
+        val dimensions = PixelDimensions(320, 240)
+        panelEntity.setPixelDimensions(dimensions)
+        activityPanelEntity.setPixelDimensions(dimensions)
+
+        verify(mockPanelEntityImpl).setPixelDimensions(any())
+        verify(mockActivityPanelEntity).setPixelDimensions(any())
+    }
+
+    @Test
+    fun allPanelEntityGetPixelDimensions_callsRuntimeEntityImplGetPixelDimensions() {
         val pixelDimensions = JxrPlatformAdapter.PixelDimensions(320, 240)
         val expectedPixelDimensions = pixelDimensions.toPixelDimensions()
 
-        whenever(mockPanelEntityImpl.sizeInPixels).thenReturn(pixelDimensions)
-        whenever(mockActivityPanelEntity.sizeInPixels).thenReturn(pixelDimensions)
+        whenever(mockPanelEntityImpl.getPixelDimensions()).thenReturn(pixelDimensions)
+        whenever(mockActivityPanelEntity.getPixelDimensions()).thenReturn(pixelDimensions)
 
-        assertThat(panelEntity.getSizeInPixels()).isEqualTo(expectedPixelDimensions)
-        assertThat(activityPanelEntity.getSizeInPixels()).isEqualTo(expectedPixelDimensions)
+        assertThat(panelEntity.getPixelDimensions()).isEqualTo(expectedPixelDimensions)
+        assertThat(activityPanelEntity.getPixelDimensions()).isEqualTo(expectedPixelDimensions)
 
-        verify(mockPanelEntityImpl).sizeInPixels
-        verify(mockActivityPanelEntity).sizeInPixels
+        verify(mockPanelEntityImpl).getPixelDimensions()
+        verify(mockActivityPanelEntity).getPixelDimensions()
     }
 
     @Test
@@ -728,7 +804,7 @@
         entity.setPose(setPose)
 
         val captor = argumentCaptor<Pose>()
-        verify(mockContentlessEntity).setPose(captor.capture(), eq(JxrPlatformAdapter.Space.PARENT))
+        verify(mockContentlessEntity).setPose(captor.capture())
 
         val pose = captor.firstValue
         assertThat(pose.translation.x).isEqualTo(setPose.translation.x)
@@ -738,13 +814,13 @@
 
     @Test
     fun contentlessEntity_canGetPose() {
-        whenever(mockContentlessEntity.getPose(JxrPlatformAdapter.Space.PARENT)).thenReturn(Pose())
+        whenever(mockContentlessEntity.pose).thenReturn(Pose())
 
         val entity = ContentlessEntity.create(session, "test")
         val pose = Pose.Identity
 
         assertThat(entity.getPose()).isEqualTo(pose)
-        verify(mockContentlessEntity).getPose(JxrPlatformAdapter.Space.PARENT)
+        verify(mockContentlessEntity).getPose()
     }
 
     @Test
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SessionTest.kt b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SessionTest.kt
index 3acf785..31d11eb 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SessionTest.kt
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SessionTest.kt
@@ -19,12 +19,9 @@
 package androidx.xr.scenecore
 
 import android.app.Activity
-import android.content.Context
 import android.graphics.Rect
 import android.os.Bundle
-import android.view.View
 import android.widget.TextView
-import androidx.xr.runtime.math.Pose
 import androidx.xr.scenecore.JxrPlatformAdapter.GltfModelResource
 import com.google.common.truth.Truth.assertThat
 import com.google.common.util.concurrent.Futures
@@ -120,26 +117,27 @@
         val view = TextView(activity)
         whenever(
                 mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any()
                 )
             )
             .thenReturn(mock())
-        val unused = PanelEntity.create(session, view, PixelDimensions(720, 480), "test")
+        val unused =
+            PanelEntity.create(
+                session,
+                view,
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
+                "test",
+            )
 
         verify(mockPlatformAdapter)
-            .createPanelEntity(
-                any<Context>(),
-                any<Pose>(),
-                any<View>(),
-                any<JxrPlatformAdapter.PixelDimensions>(),
-                any<String>(),
-                any<JxrPlatformAdapter.Entity>(),
-            )
+            .createPanelEntity(any(), any(), any(), any(), any(), any(), any())
     }
 
     @Test
@@ -229,17 +227,25 @@
         val mockPanelEntity = mock<JxrPlatformAdapter.PanelEntity>()
         whenever(
                 mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any()
                 )
             )
             .thenReturn(mockPanelEntity)
         whenever(mockPanelEntity.addComponent(any())).thenReturn(true)
-        val panelEntity = PanelEntity.create(session, view, PixelDimensions(720, 480), "test")
+        val panelEntity =
+            PanelEntity.create(
+                session,
+                view,
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
+                "test",
+            )
         assertThat(panelEntity.addComponent(interactableComponent)).isTrue()
 
         verify(mockPlatformAdapter).createInteractableComponent(any(), anyOrNull())
@@ -255,17 +261,25 @@
         val mockRtPanelEntity = mock<JxrPlatformAdapter.PanelEntity>()
         whenever(
                 mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any()
                 )
             )
             .thenReturn(mockRtPanelEntity)
         whenever(mockRtPanelEntity.addComponent(any())).thenReturn(true)
-        val panelEntity = PanelEntity.create(session, view, PixelDimensions(720, 480), "test")
+        val panelEntity =
+            PanelEntity.create(
+                session,
+                view,
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
+                "test",
+            )
         assertThat(panelEntity.addComponent(movableComponent)).isTrue()
 
         verify(mockPlatformAdapter).createMovableComponent(any(), any(), any(), any())
@@ -281,17 +295,25 @@
         whenever(mockRtPanelEntity.getSize()).thenReturn(JxrPlatformAdapter.Dimensions(1f, 1f, 1f))
         whenever(
                 mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any()
                 )
             )
             .thenReturn(mockRtPanelEntity)
         whenever(mockRtPanelEntity.addComponent(any())).thenReturn(true)
-        val panelEntity = PanelEntity.create(session, view, PixelDimensions(720, 480), "test")
+        val panelEntity =
+            PanelEntity.create(
+                session,
+                view,
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
+                "test",
+            )
         assertThat(panelEntity.addComponent(resizableComponent)).isTrue()
 
         verify(mockPlatformAdapter).createResizableComponent(any(), any())
@@ -329,19 +351,26 @@
         val mockActivityPanelEntity = mock<JxrPlatformAdapter.ActivityPanelEntity>()
         whenever(
                 mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any()
                 )
             )
             .thenReturn(mockPanelEntity1)
         whenever(mockPlatformAdapter.createActivityPanelEntity(any(), any(), any(), any(), any()))
             .thenReturn(mockActivityPanelEntity)
         val panelEntity =
-            PanelEntity.create(session, TextView(activity), PixelDimensions(720, 480), "test1")
+            PanelEntity.create(
+                session,
+                TextView(activity),
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
+                "test1",
+            )
         val activityPanelEntity = ActivityPanelEntity.create(session, Rect(0, 0, 640, 480), "test2")
 
         assertThat(session.getEntitiesOfType(PanelEntity::class.java))
@@ -353,19 +382,26 @@
         val mockPanelEntity = mock<JxrPlatformAdapter.PanelEntity>()
         whenever(
                 mockPlatformAdapter.createPanelEntity(
-                    any<Context>(),
-                    any<Pose>(),
-                    any<View>(),
-                    any<JxrPlatformAdapter.PixelDimensions>(),
-                    any<String>(),
-                    any<JxrPlatformAdapter.Entity>(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any(),
+                    any()
                 )
             )
             .thenReturn(mockPanelEntity)
         whenever(mockPlatformAdapter.createAnchorEntity(any(), any(), any(), any()))
             .thenReturn(mockAnchorEntity)
         val panelEntity =
-            PanelEntity.create(session, TextView(activity), PixelDimensions(720, 480), "test1")
+            PanelEntity.create(
+                session,
+                TextView(activity),
+                Dimensions(720f, 480f),
+                Dimensions(0.1f, 0.1f, 0.1f),
+                "test1",
+            )
         val anchorEntity =
             AnchorEntity.create(session, Dimensions(), PlaneType.ANY, PlaneSemantic.ANY)
 
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SpatialEnvironmentTest.kt b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SpatialEnvironmentTest.kt
index 8474709..78e239a 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SpatialEnvironmentTest.kt
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/SpatialEnvironmentTest.kt
@@ -154,24 +154,15 @@
     fun spatialEnvironmentPreferenceEqualsHashcode_returnsTrueIfAllPropertiesAreEqual() {
         val rtImageMock = mock<JxrPlatformAdapter.ExrImageResource>()
         val rtModelMock = mock<JxrPlatformAdapter.GltfModelResource>()
-        val rtMaterialMock = mock<JxrPlatformAdapter.MaterialResource>()
-        val rtMeshName = "meshName"
-        val rtAnimationName = "animationName"
         val rtPreference =
             JxrPlatformAdapter.SpatialEnvironment.SpatialEnvironmentPreference(
                 rtImageMock,
-                rtModelMock,
-                rtMaterialMock,
-                rtMeshName,
-                rtAnimationName,
+                rtModelMock
             )
         val preference =
             SpatialEnvironment.SpatialEnvironmentPreference(
                 ExrImage(rtImageMock),
-                GltfModel(rtModelMock),
-                Material(rtMaterialMock),
-                rtMeshName,
-                rtAnimationName,
+                GltfModel(rtModelMock)
             )
 
         assertThat(preference).isEqualTo(rtPreference.toSpatialEnvironmentPreference())
@@ -183,30 +174,18 @@
     fun spatialEnvironmentPreferenceEqualsHashcode_returnsFalseIfAnyPropertiesAreNotEqual() {
         val rtImageMock = mock<JxrPlatformAdapter.ExrImageResource>()
         val rtModelMock = mock<JxrPlatformAdapter.GltfModelResource>()
-        val rtMaterialMock = mock<JxrPlatformAdapter.MaterialResource>()
-        val rtMeshName = "meshName"
-        val rtAnimationName = "animationName"
         val rtImageMock2 = mock<JxrPlatformAdapter.ExrImageResource>()
         val rtModelMock2 = mock<JxrPlatformAdapter.GltfModelResource>()
-        val rtMaterialMock2 = mock<JxrPlatformAdapter.MaterialResource>()
-        val rtMeshName2 = "meshName2"
-        val rtAnimationName2 = "animationName2"
         val rtPreference =
             JxrPlatformAdapter.SpatialEnvironment.SpatialEnvironmentPreference(
                 rtImageMock,
-                rtModelMock,
-                rtMaterialMock,
-                rtMeshName,
-                rtAnimationName,
+                rtModelMock
             )
 
         val preferenceDiffGeometry =
             SpatialEnvironment.SpatialEnvironmentPreference(
                 ExrImage(rtImageMock),
                 GltfModel(rtModelMock2),
-                Material(rtMaterialMock2),
-                rtMeshName2,
-                rtAnimationName2,
             )
         assertThat(preferenceDiffGeometry)
             .isNotEqualTo(rtPreference.toSpatialEnvironmentPreference())
@@ -217,9 +196,6 @@
             SpatialEnvironment.SpatialEnvironmentPreference(
                 ExrImage(rtImageMock2),
                 GltfModel(rtModelMock),
-                Material(rtMaterialMock),
-                rtMeshName,
-                rtAnimationName,
             )
         assertThat(preferenceDiffSkybox).isNotEqualTo(rtPreference.toSpatialEnvironmentPreference())
         assertThat(preferenceDiffSkybox.hashCode())
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivityPanelEntityImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivityPanelEntityImplTest.java
index 6778a3e..de1b295 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivityPanelEntityImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivityPanelEntityImplTest.java
@@ -32,18 +32,14 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivityPanelEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeActivityPanel;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
 
-import com.android.extensions.xr.ShadowXrExtensions;
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.space.ActivityPanel;
-import com.android.extensions.xr.space.ShadowActivityPanel;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
 
@@ -58,7 +54,7 @@
 
 @RunWith(RobolectricTestRunner.class)
 public class ActivityPanelEntityImplTest {
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeImpressApi mFakeImpressApi = new FakeImpressApi();
     private final ActivityController<Activity> mActivityController =
             Robolectric.buildActivity(Activity.class);
@@ -81,7 +77,7 @@
                 JxrPlatformAdapterAxr.create(
                         mHostActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -125,7 +121,7 @@
         // The (FakeXrExtensions) test default pixel density is 1 pixel per meter. Validate that the
         // corner radius is set to 32dp.
         assertThat(activityPanelEntity.getCornerRadius()).isEqualTo(32.0f);
-        FakeNode fakeNode = new FakeNode(((ActivityPanelEntityImpl) activityPanelEntity).getNode());
+        FakeNode fakeNode = (FakeNode) ((ActivityPanelEntityImpl) activityPanelEntity).getNode();
         assertThat(fakeNode.getCornerRadius()).isEqualTo(32.0f);
     }
 
@@ -137,7 +133,7 @@
         // The (FakeXrExtensions) test default pixel density is 1 pixel per meter.
         // Validate that the corner radius is set to half the width.
         assertThat(activityPanelEntity.getCornerRadius()).isEqualTo(20f);
-        FakeNode fakeNode = new FakeNode(((ActivityPanelEntityImpl) activityPanelEntity).getNode());
+        FakeNode fakeNode = (FakeNode) ((ActivityPanelEntityImpl) activityPanelEntity).getNode();
         assertThat(fakeNode.getCornerRadius()).isEqualTo(20f);
     }
 
@@ -149,7 +145,7 @@
         // The (FakeXrExtensions) test default pixel density is 1 pixel per meter.
         // Validate that the corner radius is set to half the height.
         assertThat(activityPanelEntity.getCornerRadius()).isEqualTo(20f);
-        FakeNode fakeNode = new FakeNode(((ActivityPanelEntityImpl) activityPanelEntity).getNode());
+        FakeNode fakeNode = (FakeNode) ((ActivityPanelEntityImpl) activityPanelEntity).getNode();
         assertThat(fakeNode.getCornerRadius()).isEqualTo(20f);
     }
 
@@ -159,14 +155,11 @@
         Intent launchIntent = mActivityController.getIntent();
         activityPanelEntity.launchActivity(launchIntent, null);
 
-        ShadowActivityPanel panel =
-                ShadowActivityPanel.extract(
-                        ShadowXrExtensions.extract(mXrExtensions)
-                                .getActivityPanelForHost(mHostActivity));
+        FakeActivityPanel fakePanel = mFakeExtensions.getActivityPanelForHost(mHostActivity);
 
-        assertThat(panel.getLaunchIntent()).isEqualTo(launchIntent);
-        assertThat(panel.getBundle()).isNull();
-        assertThat(panel.getBounds())
+        assertThat(fakePanel.getLaunchIntent()).isEqualTo(launchIntent);
+        assertThat(fakePanel.getBundle()).isNull();
+        assertThat(fakePanel.getBounds())
                 .isEqualTo(new Rect(0, 0, mWindowBoundsPx.width, mWindowBoundsPx.height));
     }
 
@@ -175,48 +168,43 @@
         ActivityPanelEntity activityPanelEntity = createActivityPanelEntity();
         activityPanelEntity.moveActivity(mHostActivity);
 
-        ShadowActivityPanel panel =
-                ShadowActivityPanel.extract(
-                        ShadowXrExtensions.extract(mXrExtensions)
-                                .getActivityPanelForHost(mHostActivity));
+        FakeActivityPanel fakePanel = mFakeExtensions.getActivityPanelForHost(mHostActivity);
 
-        assertThat(panel.getActivity()).isEqualTo(mHostActivity);
+        assertThat(fakePanel.getActivity()).isEqualTo(mHostActivity);
 
-        assertThat(panel.getBounds())
+        assertThat(fakePanel.getBounds())
                 .isEqualTo(new Rect(0, 0, mWindowBoundsPx.width, mWindowBoundsPx.height));
     }
 
     @Test
-    public void activityPanelEntitySetSize_callsSetSizeInPixels() {
+    public void activityPanelEntitySetSize_callsSetPixelDimensions() {
         ActivityPanelEntity activityPanelEntity = createActivityPanelEntity();
         Dimensions dimensions = new Dimensions(400f, 300f, 0f);
         activityPanelEntity.setSize(dimensions);
 
-        ActivityPanel panel =
-                ShadowXrExtensions.extract(mXrExtensions).getActivityPanelForHost(mHostActivity);
+        FakeActivityPanel fakePanel = mFakeExtensions.getActivityPanelForHost(mHostActivity);
 
-        assertThat(ShadowActivityPanel.extract(panel).getBounds())
+        assertThat(fakePanel.getBounds())
                 .isEqualTo(new Rect(0, 0, (int) dimensions.width, (int) dimensions.height));
 
-        // SetSize redirects to setSizeInPixels, so we check the same thing here.
-        PixelDimensions viewDimensions = activityPanelEntity.getSizeInPixels();
+        // SetSize redirects to setPixelDimensions, so we check the same thing here.
+        PixelDimensions viewDimensions = activityPanelEntity.getPixelDimensions();
         assertThat(viewDimensions.width).isEqualTo((int) dimensions.width);
         assertThat(viewDimensions.height).isEqualTo((int) dimensions.height);
     }
 
     @Test
-    public void activityPanelEntitysetSizeInPixels_callActivityPanel() {
+    public void activityPanelEntitySetPixelDimensions_callActivityPanel() {
         ActivityPanelEntity activityPanelEntity = createActivityPanelEntity();
         PixelDimensions dimensions = new PixelDimensions(400, 300);
-        activityPanelEntity.setSizeInPixels(dimensions);
+        activityPanelEntity.setPixelDimensions(dimensions);
 
-        ActivityPanel panel =
-                ShadowXrExtensions.extract(mXrExtensions).getActivityPanelForHost(mHostActivity);
+        FakeActivityPanel fakePanel = mFakeExtensions.getActivityPanelForHost(mHostActivity);
 
-        assertThat(ShadowActivityPanel.extract(panel).getBounds())
+        assertThat(fakePanel.getBounds())
                 .isEqualTo(new Rect(0, 0, dimensions.width, dimensions.height));
 
-        PixelDimensions viewDimensions = activityPanelEntity.getSizeInPixels();
+        PixelDimensions viewDimensions = activityPanelEntity.getPixelDimensions();
         assertThat(viewDimensions.width).isEqualTo(dimensions.width);
         assertThat(viewDimensions.height).isEqualTo(dimensions.height);
     }
@@ -226,9 +214,8 @@
         ActivityPanelEntity activityPanelEntity = createActivityPanelEntity();
         activityPanelEntity.dispose();
 
-        ActivityPanel panel =
-                ShadowXrExtensions.extract(mXrExtensions).getActivityPanelForHost(mHostActivity);
+        FakeActivityPanel fakePanel = mFakeExtensions.getActivityPanelForHost(mHostActivity);
 
-        assertThat(ShadowActivityPanel.extract(panel).isDeleted()).isTrue();
+        assertThat(fakePanel.isDeleted()).isTrue();
     }
 }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivitySpaceImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivitySpaceImplTest.java
index 1be5a70..7294528 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivitySpaceImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ActivitySpaceImplTest.java
@@ -28,31 +28,20 @@
 import static org.mockito.Mockito.when;
 
 import android.app.Activity;
-import android.util.Size;
 
+import androidx.xr.extensions.space.Bounds;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivitySpace;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
-
-import com.android.extensions.xr.ShadowXrExtensions;
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.environment.EnvironmentVisibilityState;
-import com.android.extensions.xr.environment.PassthroughVisibilityState;
-import com.android.extensions.xr.environment.ShadowEnvironmentVisibilityState;
-import com.android.extensions.xr.environment.ShadowPassthroughVisibilityState;
-import com.android.extensions.xr.space.Bounds;
-import com.android.extensions.xr.space.ShadowSpatialCapabilities;
-import com.android.extensions.xr.space.ShadowSpatialState;
-import com.android.extensions.xr.space.SpatialCapabilities;
-import com.android.extensions.xr.space.SpatialState;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeSpatialState;
 
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
@@ -80,14 +69,14 @@
     private final ImpSplitEngineRenderer mSplitEngineRenderer =
             Mockito.mock(ImpSplitEngineRenderer.class);
 
-    private XrExtensions mXrExtensions;
+    private FakeXrExtensions mFakeExtensions;
     private FakeImpressApi mFakeImpressApi;
     private JxrPlatformAdapter mTestRuntime;
     private ActivitySpace mActivitySpace;
 
     @Before
     public void setUp() {
-        mXrExtensions = XrExtensionsProvider.getXrExtensions();
+        mFakeExtensions = new FakeXrExtensions();
         mFakeImpressApi = new FakeImpressApi();
         when(mPerceptionLibrary.initSession(eq(mActivity), anyInt(), eq(mFakeExecutor)))
                 .thenReturn(immediateFuture(Mockito.mock(Session.class)));
@@ -96,7 +85,7 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -141,36 +130,15 @@
         return (ActivitySpaceImpl) mActivitySpace;
     }
 
-    private SpatialState createSpatialState(Bounds bounds) {
-        boolean isUnbounded =
-                bounds.getWidth() == Float.POSITIVE_INFINITY
-                        && bounds.getHeight() == Float.POSITIVE_INFINITY
-                        && bounds.getDepth() == Float.POSITIVE_INFINITY;
-        SpatialCapabilities capabilities =
-                isUnbounded
-                        ? ShadowSpatialCapabilities.createAll()
-                        : ShadowSpatialCapabilities.create();
-        return ShadowSpatialState.create(
-                /* bounds= */ bounds,
-                /* capabilities= */ capabilities,
-                /* environmentVisibilityState= */ ShadowEnvironmentVisibilityState.create(
-                        /* state= */ EnvironmentVisibilityState.INVISIBLE),
-                /* passthroughVisibilityState= */ ShadowPassthroughVisibilityState.create(
-                        /* state= */ PassthroughVisibilityState.DISABLED, /* opacity= */ 0.0f),
-                /* isEnvironmentInherited= */ false,
-                /* mainWindowSize= */ new Size(100, 100),
-                /* preferredAspectRatio= */ 1.0f);
-    }
-
     @Test
     public void getBounds_returnsBounds() {
         assertThat(mActivitySpace.getBounds().width).isPositiveInfinity();
         assertThat(mActivitySpace.getBounds().height).isPositiveInfinity();
         assertThat(mActivitySpace.getBounds().depth).isPositiveInfinity();
 
-        SpatialState spatialState =
-                createSpatialState(/* bounds= */ new Bounds(100.0f, 200.0f, 300.0f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, spatialState);
+        FakeSpatialState spatialState = new FakeSpatialState();
+        spatialState.setBounds(new Bounds(100.0f, 200.0f, 300.0f));
+        mFakeExtensions.sendSpatialState(spatialState);
 
         assertThat(mActivitySpace.getBounds().width).isEqualTo(100f);
         assertThat(mActivitySpace.getBounds().height).isEqualTo(200f);
@@ -182,10 +150,10 @@
         JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener listener =
                 Mockito.mock(JxrPlatformAdapter.ActivitySpace.OnBoundsChangedListener.class);
 
-        SpatialState spatialState =
-                createSpatialState(/* bounds= */ new Bounds(100.0f, 200.0f, 300.0f));
+        FakeSpatialState spatialState = new FakeSpatialState();
+        spatialState.setBounds(new Bounds(100.0f, 200.0f, 300.0f));
         mActivitySpace.addOnBoundsChangedListener(listener);
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, spatialState);
+        mFakeExtensions.sendSpatialState(spatialState);
 
         verify(listener).onBoundsChanged(Mockito.refEq(new Dimensions(100.0f, 200.0f, 300.0f)));
     }
@@ -197,9 +165,9 @@
 
         mActivitySpace.addOnBoundsChangedListener(listener);
         mActivitySpace.removeOnBoundsChangedListener(listener);
-        SpatialState spatialState =
-                createSpatialState(/* bounds= */ new Bounds(100.0f, 200.0f, 300.0f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, spatialState);
+        FakeSpatialState spatialState = new FakeSpatialState();
+        spatialState.setBounds(new Bounds(100.0f, 200.0f, 300.0f));
+        mFakeExtensions.sendSpatialState(spatialState);
 
         verify(listener, Mockito.never()).onBoundsChanged(Mockito.any());
     }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AnchorEntityImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AnchorEntityImplTest.java
index 1d3fe26..3d478d3 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AnchorEntityImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AnchorEntityImplTest.java
@@ -37,6 +37,7 @@
 import android.os.SystemClock;
 
 import androidx.test.rule.GrantPermissionRule;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.runtime.internal.Anchor.PersistenceState;
 import androidx.xr.runtime.internal.TrackingState;
 import androidx.xr.runtime.math.Matrix4;
@@ -51,19 +52,15 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneSemantic;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneType;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.Anchor;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Plane;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeGltfModelToken;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.asset.FakeGltfModelToken;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeRepository;
-
 import com.google.common.collect.ImmutableList;
 
 import org.junit.Before;
@@ -145,7 +142,7 @@
     private static final Plane.Label PLANE_LABEL = Plane.Label.WALL;
     private static final long NATIVE_POINTER = 1234567890L;
     private final AndroidXrEntity mActivitySpaceRoot = Mockito.mock(AndroidXrEntity.class);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final PerceptionLibrary mPerceptionLibrary = Mockito.mock(PerceptionLibrary.class);
     private final Session mSession = Mockito.mock(Session.class);
     private final Plane mPlane = mock(Plane.class);
@@ -171,13 +168,13 @@
         ActivityController<Activity> activityController = Robolectric.buildActivity(Activity.class);
         Activity activity = activityController.create().start().get();
         when(mPerceptionLibrary.getActivity()).thenReturn(activity);
-        Node taskNode = mXrExtensions.createNode();
+        Node taskNode = mFakeExtensions.createNode();
         mActivitySpace =
                 new ActivitySpaceImpl(
                         taskNode,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
-                        () -> mXrExtensions.getSpatialState(activity),
+                        () -> mFakeExtensions.fakeSpatialState,
                         mExecutor);
         SystemClock.setCurrentTimeMillis(mCurrentTimeMillis);
 
@@ -225,7 +222,7 @@
 
     /** Creates an AnchorEntityImpl instance with a timeout. */
     private AnchorEntityImpl createAnchorEntityWithTimeout(Duration anchorSearchTimeout) {
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
         return AnchorEntityImpl.createSemanticAnchor(
                 node,
                 ANCHOR_DIMENSIONS,
@@ -234,7 +231,7 @@
                 anchorSearchTimeout,
                 mActivitySpace,
                 mActivitySpaceRoot,
-                mXrExtensions,
+                mFakeExtensions,
                 mEntityManager,
                 mExecutor,
                 mPerceptionLibrary);
@@ -246,14 +243,14 @@
      */
     private AnchorEntityImpl createPersistedAnchorEntityWithTimeout(
             UUID uuid, Duration anchorSearchTimeout) {
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
         return AnchorEntityImpl.createPersistedAnchor(
                 node,
                 uuid,
                 anchorSearchTimeout,
                 mActivitySpace,
                 mActivitySpaceRoot,
-                mXrExtensions,
+                mFakeExtensions,
                 mEntityManager,
                 mExecutor,
                 mPerceptionLibrary);
@@ -265,14 +262,14 @@
         when(mSession.createAnchorFromUuid(uuid)).thenReturn(anchor);
         when(anchor.getAnchorToken()).thenReturn(mSharedAnchorToken);
 
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
         return AnchorEntityImpl.createPersistedAnchor(
                 node,
                 uuid,
                 /* anchorSearchTimeout= */ null,
                 mActivitySpace,
                 mActivitySpaceRoot,
-                mXrExtensions,
+                mFakeExtensions,
                 mEntityManager,
                 mExecutor,
                 mPerceptionLibrary);
@@ -309,7 +306,7 @@
     private AnchorEntityImpl createAnchorEntityFromPlane() {
         when(mAnchor.persist()).thenReturn(UUID.randomUUID());
 
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
         return AnchorEntityImpl.createAnchorFromPlane(
                 node,
                 mPlane,
@@ -317,7 +314,7 @@
                 MILLISECONDS.toNanos(mCurrentTimeMillis),
                 mActivitySpace,
                 mActivitySpaceRoot,
-                mXrExtensions,
+                mFakeExtensions,
                 mEntityManager,
                 mExecutor,
                 mPerceptionLibrary);
@@ -325,14 +322,14 @@
 
     private AnchorEntityImpl createAnchorEntityFromPerceptionAnchor(
             androidx.xr.arcore.Anchor perceptionAnchor) {
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
 
         return AnchorEntityImpl.createAnchorFromPerceptionAnchor(
                 node,
                 perceptionAnchor,
                 mActivitySpace,
                 mActivitySpaceRoot,
-                mXrExtensions,
+                mFakeExtensions,
                 mEntityManager,
                 mExecutor,
                 mPerceptionLibrary);
@@ -342,7 +339,8 @@
     private GltfEntityImpl createGltfEntity() {
         FakeGltfModelToken modelToken = new FakeGltfModelToken("model");
         GltfModelResourceImpl model = new GltfModelResourceImpl(modelToken);
-        return new GltfEntityImpl(model, mActivitySpace, mXrExtensions, mEntityManager, mExecutor);
+        return new GltfEntityImpl(
+                model, mActivitySpace, mFakeExtensions, mEntityManager, mExecutor);
     }
 
     @Test
@@ -351,10 +349,9 @@
                 createInitializedPersistedAnchorEntity(mAnchor, UUID.randomUUID());
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.ANCHORED);
-        assertThat(new FakeNode(anchorEntity.getNode()).getName())
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
-        assertThat(new FakeNode(anchorEntity.getNode()).getAnchorId())
-                .isEqualTo(mSharedAnchorToken);
+        assertThat(((FakeNode) anchorEntity.getNode()).getAnchorId()).isEqualTo(mSharedAnchorToken);
         assertThat(anchorEntity.getPersistState()).isEqualTo(PersistState.PERSISTED);
     }
 
@@ -364,10 +361,9 @@
         AnchorEntityImpl anchorEntity = createInitializedPersistedAnchorEntity(mAnchor, uuid);
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.ANCHORED);
-        assertThat(new FakeNode(anchorEntity.getNode()).getName())
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
-        assertThat(new FakeNode(anchorEntity.getNode()).getAnchorId())
-                .isEqualTo(mSharedAnchorToken);
+        assertThat(((FakeNode) anchorEntity.getNode()).getAnchorId()).isEqualTo(mSharedAnchorToken);
         assertThat(anchorEntity.getPersistState()).isEqualTo(PersistState.PERSISTED);
 
         UUID returnedUuid = anchorEntity.persist();
@@ -488,7 +484,7 @@
         AnchorEntityImpl anchorEntity = createSemanticAnchorEntity();
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.UNANCHORED);
-        assertThat(new FakeNode(anchorEntity.getNode()).getName())
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
     }
 
@@ -497,10 +493,9 @@
         AnchorEntityImpl anchorEntity = createAndInitAnchorEntity();
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.ANCHORED);
-        assertThat(new FakeNode(anchorEntity.getNode()).getName())
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
-        assertThat(new FakeNode(anchorEntity.getNode()).getAnchorId())
-                .isEqualTo(mSharedAnchorToken);
+        assertThat(((FakeNode) anchorEntity.getNode()).getAnchorId()).isEqualTo(mSharedAnchorToken);
     }
 
     @Test
@@ -511,7 +506,7 @@
         AnchorEntityImpl anchorEntity = createSemanticAnchorEntity();
 
         assertThat(anchorEntity.getState()).isEqualTo(State.UNANCHORED);
-        assertThat(new FakeNode(anchorEntity.getNode()).getName())
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
     }
 
@@ -531,7 +526,7 @@
         AnchorEntityImpl anchorEntity = createSemanticAnchorEntity();
 
         assertThat(anchorEntity.getState()).isEqualTo(State.UNANCHORED);
-        assertThat(new FakeNode(anchorEntity.getNode()).getName())
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
     }
 
@@ -761,12 +756,12 @@
         assertThat(childEntity2.getParent()).isEqualTo(parentEntity);
         assertThat(parentEntity.getChildren()).containsExactly(childEntity1, childEntity2);
 
-        Node parentNode = parentEntity.getNode();
-        Node childNode1 = childEntity1.getNode();
-        Node childNode2 = childEntity2.getNode();
+        FakeNode parentNode = (FakeNode) parentEntity.getNode();
+        FakeNode childNode1 = (FakeNode) childEntity1.getNode();
+        FakeNode childNode2 = (FakeNode) childEntity2.getNode();
 
-        assertThat(NodeRepository.getInstance().getParent(childNode1)).isEqualTo(parentNode);
-        assertThat(NodeRepository.getInstance().getParent(childNode2)).isEqualTo(parentNode);
+        assertThat(childNode1.getParent()).isEqualTo(parentNode);
+        assertThat(childNode2.getParent()).isEqualTo(parentNode);
     }
 
     @Test
@@ -879,7 +874,7 @@
 
     @Test
     public void getPoseInActivitySpace_withNoActivitySpace_throwsException() throws Exception {
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
         AnchorEntityImpl anchorEntity =
                 AnchorEntityImpl.createSemanticAnchor(
                         node,
@@ -889,7 +884,7 @@
                         /* anchorSearchTimeout= */ null,
                         /* activitySpace= */ null,
                         mActivitySpaceRoot,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
                         mExecutor,
                         mPerceptionLibrary);
@@ -923,7 +918,7 @@
     @Test
     public void getActivitySpacePose_withNonAndroidXrActivitySpaceRoot_throwsException()
             throws Exception {
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
         AnchorEntityImpl anchorEntity =
                 AnchorEntityImpl.createSemanticAnchor(
                         node,
@@ -933,7 +928,7 @@
                         /* anchorSearchTimeout= */ null,
                         mActivitySpace,
                         /* activitySpaceRoot= */ null,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
                         mExecutor,
                         mPerceptionLibrary);
@@ -1002,16 +997,16 @@
         AnchorEntityImpl anchorEntity = createSemanticAnchorEntity();
         assertThat(anchorEntity.getState()).isEqualTo(State.UNANCHORED);
 
-        Node anchorNode = anchorEntity.getNode();
-        Node rootNode = mActivitySpace.getNode();
-        assertThat(NodeRepository.getInstance().getParent(anchorNode)).isNull();
+        FakeNode anchorNode = (FakeNode) anchorEntity.getNode();
+        FakeNode rootNode = (FakeNode) mActivitySpace.getNode();
+        assertThat(anchorNode.getParent()).isNull();
 
         // The anchor starts as unanchored. Advance the executor to wait for it to become anchored
         // and
         // verify that the parent is the root node.
         advanceClock(AnchorEntityImpl.ANCHOR_SEARCH_DELAY);
         assertThat(anchorEntity.getState()).isEqualTo(State.ANCHORED);
-        assertThat(NodeRepository.getInstance().getParent(anchorNode)).isEqualTo(rootNode);
+        assertThat(anchorNode.getParent()).isEqualTo(rootNode);
     }
 
     @Test
@@ -1023,19 +1018,18 @@
         assertThat(anchorEntity.getState()).isEqualTo(State.ANCHORED);
 
         // Verify the parent of the anchor is the root node (ActivitySpace) before disposing it.
-        Node anchorNode = anchorEntity.getNode();
-        Node rootNode = mActivitySpace.getNode();
-        assertThat(NodeRepository.getInstance().getParent(anchorNode)).isEqualTo(rootNode);
-        assertThat(NodeRepository.getInstance().getAnchorId(anchorNode))
-                .isEqualTo(mSharedAnchorToken);
+        FakeNode anchorNode = (FakeNode) anchorEntity.getNode();
+        FakeNode rootNode = (FakeNode) mActivitySpace.getNode();
+        assertThat(anchorNode.getParent()).isEqualTo(rootNode);
+        assertThat(anchorNode.getAnchorId()).isEqualTo(mSharedAnchorToken);
 
         // Dispose the entity and verify that the state was updated.
         anchorEntity.dispose();
 
         verify(mAnchorStateListener).onStateChanged(State.ERROR);
         assertThat(anchorEntity.getState()).isEqualTo(State.ERROR);
-        assertThat(NodeRepository.getInstance().getParent(anchorNode)).isNull();
-        assertThat(NodeRepository.getInstance().getAnchorId(anchorNode)).isNull();
+        assertThat(anchorNode.getParent()).isNull();
+        assertThat(anchorNode.getAnchorId()).isNull();
     }
 
     @Test
@@ -1202,12 +1196,11 @@
 
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.ANCHORED);
-        assertThat(NodeRepository.getInstance().getName(anchorEntity.getNode()))
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
-        assertThat(NodeRepository.getInstance().getAnchorId(anchorEntity.getNode()))
-                .isEqualTo(mSharedAnchorToken);
+        assertThat(((FakeNode) anchorEntity.getNode()).getAnchorId()).isEqualTo(mSharedAnchorToken);
         assertThat(anchorEntity.getPersistState()).isEqualTo(PersistState.PERSIST_NOT_REQUESTED);
-        assertThat(NodeRepository.getInstance().getParent(anchorEntity.getNode()))
+        assertThat(((FakeNode) anchorEntity.getNode()).getParent())
                 .isEqualTo(mActivitySpace.getNode());
     }
 
@@ -1219,7 +1212,7 @@
         AnchorEntityImpl anchorEntity = createAnchorEntityFromPlane();
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.ERROR);
-        assertThat(NodeRepository.getInstance().getParent(anchorEntity.getNode())).isEqualTo(null);
+        assertThat(((FakeNode) anchorEntity.getNode()).getParent()).isEqualTo(null);
     }
 
     @Test
@@ -1258,12 +1251,11 @@
         AnchorEntityImpl anchorEntity = createAnchorEntityFromPerceptionAnchor(perceptionAnchor);
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.ANCHORED);
-        assertThat(NodeRepository.getInstance().getName(anchorEntity.getNode()))
+        assertThat(((FakeNode) anchorEntity.getNode()).getName())
                 .isEqualTo(AnchorEntityImpl.ANCHOR_NODE_NAME);
-        assertThat(NodeRepository.getInstance().getAnchorId(anchorEntity.getNode()))
-                .isEqualTo(mSharedAnchorToken);
+        assertThat(((FakeNode) anchorEntity.getNode()).getAnchorId()).isEqualTo(mSharedAnchorToken);
         assertThat(anchorEntity.getPersistState()).isEqualTo(PersistState.PERSIST_NOT_REQUESTED);
-        assertThat(NodeRepository.getInstance().getParent(anchorEntity.getNode()))
+        assertThat(((FakeNode) anchorEntity.getNode()).getParent())
                 .isEqualTo(mActivitySpace.getNode());
     }
 
@@ -1285,6 +1277,6 @@
         AnchorEntityImpl anchorEntity = createAnchorEntityFromPerceptionAnchor(perceptionAnchor);
         assertThat(anchorEntity).isNotNull();
         assertThat(anchorEntity.getState()).isEqualTo(State.ERROR);
-        assertThat(new FakeNode(anchorEntity.getNode()).getParent()).isEqualTo(null);
+        assertThat(((FakeNode) anchorEntity.getNode()).getParent()).isEqualTo(null);
     }
 }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImplTest.java
index d360efd..4ac6d31 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/AudioTrackExtensionsWrapperImplTest.java
@@ -23,19 +23,16 @@
 
 import android.media.AudioTrack;
 
+import androidx.xr.extensions.media.PointSourceAttributes;
+import androidx.xr.extensions.media.SoundFieldAttributes;
+import androidx.xr.extensions.media.SpatializerExtensions;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.AudioTrackExtensionsWrapper;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatializerConstants;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.media.AudioTrackExtensions;
-import com.android.extensions.xr.media.PointSourceAttributes;
-import com.android.extensions.xr.media.ShadowAudioTrackExtensions;
-import com.android.extensions.xr.media.SoundFieldAttributes;
-import com.android.extensions.xr.media.SpatializerExtensions;
-import com.android.extensions.xr.media.XrSpatialAudioExtensions;
-import com.android.extensions.xr.node.Node;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeAudioTrackExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeSpatialAudioExtensions;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -46,9 +43,9 @@
 @RunWith(RobolectricTestRunner.class)
 public class AudioTrackExtensionsWrapperImplTest {
 
-    XrExtensions mXrExtensions;
-    XrSpatialAudioExtensions mSpatialAudioExtensions;
-    AudioTrackExtensions mAudioTrackExtensions;
+    FakeXrExtensions mFakeXrExtensions;
+    FakeSpatialAudioExtensions mFakeSpatialAudioExtensions;
+    FakeAudioTrackExtensions mFakeAudioTrackExtensions;
 
     private EntityManager mEntityManager;
 
@@ -56,24 +53,18 @@
 
     @Before
     public void setUp() {
-        mXrExtensions = XrExtensionsProvider.getXrExtensions();
-        mSpatialAudioExtensions = mXrExtensions.getXrSpatialAudioExtensions();
-        mAudioTrackExtensions = mSpatialAudioExtensions.getAudioTrackExtensions();
+        mFakeXrExtensions = new FakeXrExtensions();
+        mFakeSpatialAudioExtensions = mFakeXrExtensions.fakeSpatialAudioExtensions;
+        mFakeAudioTrackExtensions = new FakeAudioTrackExtensions();
 
-        // Clear the sound fields before each test.
-        // Because the mAudioTrackExtensions are fetched from the XrExtensions singleton it is
-        // reused
-        // across tests.
-        // TODO(b/401557718): Consider adding a reset method to the XrExtensions shadow.
-        ShadowAudioTrackExtensions.extract(mAudioTrackExtensions).setSoundFieldAttributes(null);
+        mFakeSpatialAudioExtensions.setFakeAudioTrackExtensions(mFakeAudioTrackExtensions);
 
         mEntityManager = new EntityManager();
     }
 
     @Test
     public void setPointSourceAttr_callsExtensionsSetPointSourceAttr() {
-        AudioTrack track = mock(AudioTrack.class);
-        Node fakeNode = mXrExtensions.createNode();
+        Node fakeNode = new FakeXrExtensions().createNode();
         AndroidXrEntity entity = mock(AndroidXrEntity.class);
         when(entity.getNode()).thenReturn(fakeNode);
 
@@ -81,11 +72,11 @@
                 new JxrPlatformAdapter.PointSourceAttributes(entity);
 
         AudioTrackExtensionsWrapper wrapper =
-                new AudioTrackExtensionsWrapperImpl(mAudioTrackExtensions, mEntityManager);
+                new AudioTrackExtensionsWrapperImpl(mFakeAudioTrackExtensions, mEntityManager);
         AudioTrack.Builder actual = wrapper.setPointSourceAttributes(mBuilder, expectedRtAttr);
 
         assertThat(actual).isEqualTo(mBuilder);
-        assertThat(mAudioTrackExtensions.getPointSourceAttributes(track).getNode())
+        assertThat(mFakeAudioTrackExtensions.getPointSourceAttributes().getNode())
                 .isEqualTo(fakeNode);
     }
 
@@ -97,15 +88,12 @@
                         JxrPlatformAdapter.SpatializerConstants.AMBISONICS_ORDER_THIRD_ORDER);
 
         AudioTrackExtensionsWrapper wrapper =
-                new AudioTrackExtensionsWrapperImpl(mAudioTrackExtensions, mEntityManager);
+                new AudioTrackExtensionsWrapperImpl(mFakeAudioTrackExtensions, mEntityManager);
 
         AudioTrack.Builder actual = wrapper.setSoundFieldAttributes(mBuilder, expectedRtAttr);
 
         assertThat(actual).isEqualTo(mBuilder);
-        assertThat(
-                        mAudioTrackExtensions
-                                .getSoundFieldAttributes(mock(AudioTrack.class))
-                                .getAmbisonicsOrder())
+        assertThat(mFakeAudioTrackExtensions.getSoundFieldAttributes().getAmbisonicsOrder())
                 .isEqualTo(expectedAmbisonicOrder);
     }
 
@@ -113,20 +101,18 @@
     public void getPointSourceAttributes_callsExtensionsGetPointSourceAttributes() {
         AudioTrack track = mock(AudioTrack.class);
 
-        Node fakeNode = mXrExtensions.createNode();
+        Node fakeNode = new FakeXrExtensions().createNode();
         AndroidXrEntity entity = mock(AndroidXrEntity.class);
         when(entity.getNode()).thenReturn(fakeNode);
         mEntityManager.setEntityForNode(fakeNode, entity);
 
-        AudioTrack.Builder unused =
-                mAudioTrackExtensions.setPointSourceAttributes(
-                        new AudioTrack.Builder(),
-                        new PointSourceAttributes.Builder().setNode(fakeNode).build());
+        mFakeAudioTrackExtensions.setPointSourceAttributes(
+                new PointSourceAttributes.Builder().setNode(fakeNode).build());
 
         JxrPlatformAdapter.PointSourceAttributes expectedRtAttr =
                 new JxrPlatformAdapter.PointSourceAttributes(entity);
         AudioTrackExtensionsWrapper wrapper =
-                new AudioTrackExtensionsWrapperImpl(mAudioTrackExtensions, mEntityManager);
+                new AudioTrackExtensionsWrapperImpl(mFakeAudioTrackExtensions, mEntityManager);
 
         JxrPlatformAdapter.PointSourceAttributes actual = wrapper.getPointSourceAttributes(track);
 
@@ -138,7 +124,7 @@
         AudioTrack track = mock(AudioTrack.class);
 
         AudioTrackExtensionsWrapper wrapper =
-                new AudioTrackExtensionsWrapperImpl(mAudioTrackExtensions, mEntityManager);
+                new AudioTrackExtensionsWrapperImpl(mFakeAudioTrackExtensions, mEntityManager);
 
         JxrPlatformAdapter.PointSourceAttributes actual = wrapper.getPointSourceAttributes(track);
 
@@ -149,19 +135,16 @@
     public void getSoundFieldAttributes_callsExtensionsGetSoundFieldAttributes() {
         AudioTrack track = mock(AudioTrack.class);
 
-        AudioTrack.Builder unused =
-                mAudioTrackExtensions.setSoundFieldAttributes(
-                        new AudioTrack.Builder(),
-                        new SoundFieldAttributes.Builder()
-                                .setAmbisonicsOrder(
-                                        SpatializerExtensions.AMBISONICS_ORDER_THIRD_ORDER)
-                                .build());
+        mFakeAudioTrackExtensions.setSoundFieldAttributes(
+                new SoundFieldAttributes.Builder()
+                        .setAmbisonicsOrder(SpatializerExtensions.AMBISONICS_ORDER_THIRD_ORDER)
+                        .build());
 
         JxrPlatformAdapter.SoundFieldAttributes expectedRtAttr =
                 new JxrPlatformAdapter.SoundFieldAttributes(
                         SpatializerConstants.AMBISONICS_ORDER_THIRD_ORDER);
         AudioTrackExtensionsWrapper wrapper =
-                new AudioTrackExtensionsWrapperImpl(mAudioTrackExtensions, mEntityManager);
+                new AudioTrackExtensionsWrapperImpl(mFakeAudioTrackExtensions, mEntityManager);
 
         JxrPlatformAdapter.SoundFieldAttributes actual = wrapper.getSoundFieldAttributes(track);
 
@@ -173,7 +156,7 @@
         AudioTrack track = mock(AudioTrack.class);
 
         AudioTrackExtensionsWrapper wrapper =
-                new AudioTrackExtensionsWrapperImpl(mAudioTrackExtensions, mEntityManager);
+                new AudioTrackExtensionsWrapperImpl(mFakeAudioTrackExtensions, mEntityManager);
 
         JxrPlatformAdapter.SoundFieldAttributes actual = wrapper.getSoundFieldAttributes(track);
 
@@ -185,10 +168,10 @@
         AudioTrack track = mock(AudioTrack.class);
 
         int expected = SpatializerConstants.SOURCE_TYPE_SOUND_FIELD;
-        ShadowAudioTrackExtensions.extract(mAudioTrackExtensions).setSourceType(expected);
 
+        mFakeAudioTrackExtensions.setSourceType(expected);
         AudioTrackExtensionsWrapper wrapper =
-                new AudioTrackExtensionsWrapperImpl(mAudioTrackExtensions, mEntityManager);
+                new AudioTrackExtensionsWrapperImpl(mFakeAudioTrackExtensions, mEntityManager);
 
         int actualSourceType = wrapper.getSpatialSourceType(track);
         assertThat(actualSourceType).isEqualTo(expected);
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/CameraViewActivityPoseImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/CameraViewActivityPoseImplTest.java
index cf91ca7..171e604 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/CameraViewActivityPoseImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/CameraViewActivityPoseImplTest.java
@@ -23,8 +23,6 @@
 
 import static org.mockito.Mockito.when;
 
-import android.app.Activity;
-
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
@@ -32,37 +30,32 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.CameraViewActivityPose;
 import androidx.xr.scenecore.JxrPlatformAdapter.CameraViewActivityPose.CameraType;
 import androidx.xr.scenecore.JxrPlatformAdapter.CameraViewActivityPose.Fov;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.impl.perception.ViewProjection;
 import androidx.xr.scenecore.impl.perception.ViewProjections;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
-
-import com.android.extensions.xr.XrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
-import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 
 @RunWith(RobolectricTestRunner.class)
 public final class CameraViewActivityPoseImplTest {
 
     private final AndroidXrEntity mActivitySpaceRoot = Mockito.mock(AndroidXrEntity.class);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final PerceptionLibrary mPerceptionLibrary = Mockito.mock(PerceptionLibrary.class);
     private final Session mSession = Mockito.mock(Session.class);
     private final FakeScheduledExecutorService mExecutor = new FakeScheduledExecutorService();
-    private final Activity mActivity =
-            Robolectric.buildActivity(Activity.class).create().start().get();
     private final ActivitySpaceImpl mActivitySpace =
             new ActivitySpaceImpl(
-                    mXrExtensions.createNode(),
-                    mXrExtensions,
+                    mFakeExtensions.createNode(),
+                    mFakeExtensions,
                     new EntityManager(),
-                    () -> mXrExtensions.getSpatialState(mActivity),
+                    () -> mFakeExtensions.fakeSpatialState,
                     mExecutor);
 
     /** Creates a CameraViewActivityPoseImpl. */
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/EntityManagerTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/EntityManagerTest.java
index d9eee4a..9cb08b8 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/EntityManagerTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/EntityManagerTest.java
@@ -32,6 +32,7 @@
 import android.view.View;
 import android.view.ViewGroup.LayoutParams;
 
+import androidx.xr.extensions.node.Node;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.scenecore.JxrPlatformAdapter.ActivityPanelEntity;
@@ -48,14 +49,11 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneSemantic;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneType;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
 
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
@@ -75,15 +73,15 @@
 
     private static final int VGA_WIDTH = 640;
     private static final int VGA_HEIGHT = 480;
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeImpressApi mFakeImpressApi = new FakeImpressApi();
     private final FakeScheduledExecutorService mFakeExecutor = new FakeScheduledExecutorService();
     private final PerceptionLibrary mPerceptionLibrary = mock(PerceptionLibrary.class);
     private final Session mSession = mock(Session.class);
     private final AndroidXrEntity mActivitySpaceRoot = mock(AndroidXrEntity.class);
     private final FakeScheduledExecutorService mExecutor = new FakeScheduledExecutorService();
-    private final Node mPanelEntityNode = mXrExtensions.createNode();
-    private final Node mAnchorEntityNode = mXrExtensions.createNode();
+    private final Node mPanelEntityNode = mFakeExtensions.createNode();
+    private final Node mAnchorEntityNode = mFakeExtensions.createNode();
     private final EntityManager mEntityManager = new EntityManager();
     private final SplitEngineSubspaceManager mSplitEngineSubspaceManager =
             Mockito.mock(SplitEngineSubspaceManager.class);
@@ -108,20 +106,20 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         mEntityManager,
                         mPerceptionLibrary,
                         mSplitEngineSubspaceManager,
                         mSplitEngineRenderer,
                         /* useSplitEngine= */ false);
-        Node taskNode = mXrExtensions.createNode();
+        Node taskNode = mFakeExtensions.createNode();
         mActivitySpace =
                 new ActivitySpaceImpl(
                         taskNode,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
-                        () -> mXrExtensions.getSpatialState(mActivity),
+                        () -> mFakeExtensions.fakeSpatialState,
                         mExecutor);
         long currentTimeMillis = 1000000000L;
         SystemClock.setCurrentTimeMillis(currentTimeMillis);
@@ -163,7 +161,7 @@
         PanelEntity panelEntity = createPanelEntity();
         Entity contentlessEntity = createContentlessEntity();
         AnchorEntity anchorEntity = createAnchorEntity();
-        Node testNode = mXrExtensions.createNode();
+        Node testNode = mFakeExtensions.createNode();
 
         assertThat(mEntityManager.getEntityForNode(mGltfEntityNode)).isEqualTo(gltfEntity);
         assertThat(mEntityManager.getEntityForNode(mPanelEntityNode)).isEqualTo(panelEntity);
@@ -299,7 +297,7 @@
                 new GltfEntityImpl(
                         (GltfModelResourceImpl) model,
                         mActivitySpaceRoot,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
                         mExecutor);
         mGltfEntityNode = gltfEntity.getNode();
@@ -314,13 +312,13 @@
         view.setLayoutParams(new LayoutParams(VGA_WIDTH, VGA_HEIGHT));
         PanelEntityImpl panelEntity =
                 new PanelEntityImpl(
-                        displayContext,
                         mPanelEntityNode,
                         view,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
                         new PixelDimensions(VGA_WIDTH, VGA_HEIGHT),
                         "panel",
+                        displayContext,
                         mExecutor);
         mEntityManager.setEntityForNode(mPanelEntityNode, panelEntity);
         return panelEntity;
@@ -345,7 +343,7 @@
                         null,
                         mActivitySpace,
                         mActivitySpaceRoot,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
                         mExecutor,
                         mPerceptionLibrary);
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/EntityTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/EntityTest.java
deleted file mode 100644
index cc2a981..0000000
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/EntityTest.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Copyright 2024 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.xr.scenecore.impl;
-
-import static androidx.xr.runtime.testing.math.MathAssertions.assertPose;
-import static androidx.xr.runtime.testing.math.MathAssertions.assertVector3;
-
-import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.util.concurrent.Futures.immediateFuture;
-
-import static org.junit.Assert.assertThrows;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import android.app.Activity;
-
-import androidx.xr.runtime.math.Matrix4;
-import androidx.xr.runtime.math.Pose;
-import androidx.xr.runtime.math.Quaternion;
-import androidx.xr.runtime.math.Vector3;
-import androidx.xr.scenecore.JxrPlatformAdapter.Space;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
-import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
-import androidx.xr.scenecore.impl.perception.PerceptionLibraryConstants;
-import androidx.xr.scenecore.impl.perception.Session;
-import androidx.xr.scenecore.testing.FakeImpressApi;
-import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
-
-import com.android.extensions.xr.ShadowXrExtensions;
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-
-import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
-import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.Robolectric;
-import org.robolectric.RobolectricTestRunner;
-
-import java.util.concurrent.ScheduledExecutorService;
-
-@RunWith(RobolectricTestRunner.class)
-public final class EntityTest {
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
-    private final EntityManager mEntityManager = new EntityManager();
-    private final FakeScheduledExecutorService mFakeScheduledExecutorService =
-            new FakeScheduledExecutorService();
-    private final Pose mTestPose = new Pose(new Vector3(1f, 2f, 3f), Quaternion.Identity);
-    private JxrPlatformAdapterAxr mJxrPlatformAdapterAxr;
-    private TestEntity mEntity;
-
-    static class TestEntity extends AndroidXrEntity {
-        TestEntity(
-                Node node,
-                XrExtensions extensions,
-                EntityManager entityManager,
-                ScheduledExecutorService executor) {
-            super(node, extensions, entityManager, executor);
-        }
-    }
-
-    @Before
-    public void setUp() {
-        Activity activity = Robolectric.buildActivity(Activity.class).create().start().get();
-
-        PerceptionLibrary perceptionLibrary = mock(PerceptionLibrary.class);
-        ShadowXrExtensions.extract(mXrExtensions)
-                .setOpenXrWorldSpaceType(PerceptionLibraryConstants.OPEN_XR_SPACE_TYPE_VIEW);
-        when(perceptionLibrary.initSession(
-                        activity,
-                        PerceptionLibraryConstants.OPEN_XR_SPACE_TYPE_VIEW,
-                        mFakeScheduledExecutorService))
-                .thenReturn(immediateFuture(mock(Session.class)));
-        when(perceptionLibrary.getActivity()).thenReturn(activity);
-        mJxrPlatformAdapterAxr =
-                JxrPlatformAdapterAxr.create(
-                        activity,
-                        mFakeScheduledExecutorService,
-                        mXrExtensions,
-                        new FakeImpressApi(),
-                        mEntityManager,
-                        perceptionLibrary,
-                        mock(SplitEngineSubspaceManager.class),
-                        mock(ImpSplitEngineRenderer.class),
-                        false);
-        mEntity =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        mEntity.setParent(mJxrPlatformAdapterAxr.getActivitySpace());
-    }
-
-    @After
-    public void tearDown() {
-        mJxrPlatformAdapterAxr.dispose();
-        mJxrPlatformAdapterAxr = null;
-    }
-
-    @Test
-    public void getPose_defaultsToPoseInParentSpace() {
-        mEntity.setPose(mTestPose);
-        assertPose(mEntity.getPose(Space.PARENT), mTestPose);
-    }
-
-    @Test
-    public void getPose_parentSpace_returnsParentPose() {
-        ActivitySpaceImpl activitySpace =
-                (ActivitySpaceImpl) mJxrPlatformAdapterAxr.getActivitySpace();
-        activitySpace.setOpenXrReferenceSpacePose(
-                Matrix4.fromTrs(
-                        new Vector3(5f, 6f, 7f),
-                        Quaternion.fromEulerAngles(22f, 33f, 44f),
-                        new Vector3(2f, 2f, 2f)));
-        assertVector3(activitySpace.getScale(Space.PARENT), new Vector3(2f, 2f, 2f));
-
-        mEntity.setPose(mTestPose, Space.PARENT);
-        assertPose(mEntity.getPose(Space.PARENT), mTestPose);
-    }
-
-    @Test
-    public void getPose_activitySpace_returnsActivitySpacePose() {
-        ActivitySpaceImpl activitySpace =
-                (ActivitySpaceImpl) mJxrPlatformAdapterAxr.getActivitySpace();
-        activitySpace.setOpenXrReferenceSpacePose(
-                Matrix4.fromTrs(
-                        new Vector3(5f, 6f, 7f),
-                        Quaternion.fromEulerAngles(22f, 33f, 44f),
-                        new Vector3(2f, 2f, 2f)));
-        assertVector3(activitySpace.getScale(Space.PARENT), new Vector3(2f, 2f, 2f));
-
-        mEntity.setParent(activitySpace);
-        mEntity.setPose(mTestPose, Space.PARENT);
-        assertPose(mEntity.getPose(Space.ACTIVITY), mTestPose);
-    }
-
-    @Test
-    public void getPose_worldSpace_returnsWorldSpacePose() {
-        mEntity.setPose(mTestPose, Space.REAL_WORLD);
-
-        assertPose(mEntity.getPose(Space.REAL_WORLD), mTestPose);
-    }
-
-    @Test
-    public void getPose_invalidSpace_throwsException() {
-        assertThrows(IllegalArgumentException.class, () -> mEntity.getPose(999));
-    }
-
-    @Test
-    public void setPose_parentSpace_setsPoseInParentSpace() {
-        mEntity.setPose(mTestPose, Space.PARENT);
-
-        assertPose(mEntity.getPose(Space.PARENT), mTestPose);
-    }
-
-    @Test
-    public void setPose_activitySpace_setsActivitySpacePose() {
-        mEntity.setPose(mTestPose, Space.PARENT);
-        TestEntity child =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        child.setParent(mEntity);
-        child.setPose(mTestPose, Space.PARENT);
-
-        assertPose(
-                child.getPose(Space.ACTIVITY),
-                new Pose(new Vector3(2.0f, 4.0f, 6.0f), Quaternion.Identity));
-    }
-
-    @Test
-    public void setPose_worldSpace_setsWorldSpacePose() {
-        mEntity.setPose(mTestPose, Space.REAL_WORLD);
-
-        assertPose(mEntity.getPose(Space.REAL_WORLD), mTestPose);
-    }
-
-    @Test
-    public void setPose_invalidSpace_throwsException() {
-        assertThrows(IllegalArgumentException.class, () -> mEntity.setPose(new Pose(), 999));
-    }
-
-    @Test
-    public void getScale_parentSpace_returnsParentScale() {
-        Vector3 scale = new Vector3(1.0f, 2.0f, 3.0f);
-        mEntity.setScale(scale, Space.PARENT);
-
-        assertVector3(mEntity.getScale(Space.PARENT), scale);
-    }
-
-    @Test
-    public void getScale_activitySpace_returnsActivitySpaceScale() {
-        Vector3 scale = new Vector3(1.0f, 2.0f, 3.0f);
-        mEntity.setScale(scale, Space.PARENT);
-
-        assertVector3(mEntity.getScale(Space.PARENT), scale);
-        assertVector3(mEntity.getScale(Space.ACTIVITY), scale);
-    }
-
-    @Test
-    public void getScale_worldSpace_returnsWorldSpaceScale() {
-        ActivitySpaceImpl activitySpace =
-                (ActivitySpaceImpl) mJxrPlatformAdapterAxr.getActivitySpace();
-        activitySpace.mWorldSpaceScale = new Vector3(2.0f, 2.0f, 2.0f);
-        Vector3 scale = new Vector3(1.0f, 2.0f, 3.0f);
-        mEntity.setScale(scale, Space.PARENT);
-
-        assertVector3(
-                mEntity.getScale(Space.REAL_WORLD), scale.times(activitySpace.mWorldSpaceScale));
-    }
-
-    @Test
-    public void getScale_invalidSpace_throwsException() {
-        Vector3 scale = new Vector3(1.0f, 2.0f, 3.0f);
-        mEntity.setScale(scale, Space.PARENT);
-
-        assertThrows(IllegalArgumentException.class, () -> mEntity.getScale(999));
-    }
-
-    @Test
-    public void setScaleActivitySpace_setsActivitySpaceScale() {
-        Vector3 scale = new Vector3(1.0f, 2.0f, 3.0f);
-        mEntity.setScale(scale, Space.PARENT);
-        TestEntity child =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        child.setParent(mEntity);
-        child.setScale(scale, Space.PARENT);
-        assertVector3(child.getScale(Space.ACTIVITY), scale.times(scale));
-    }
-
-    @Test
-    public void setScale_worldSpace_setsWorldSpaceScale() {
-        ActivitySpaceImpl activitySpace =
-                (ActivitySpaceImpl) mJxrPlatformAdapterAxr.getActivitySpace();
-        activitySpace.mWorldSpaceScale = new Vector3(2.0f, 2.0f, 2.0f);
-        Vector3 scale = new Vector3(1.0f, 2.0f, 3.0f);
-        mEntity.setScale(scale, Space.PARENT);
-        TestEntity child =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        child.setParent(mEntity);
-        child.setScale(scale, Space.PARENT);
-
-        assertVector3(
-                child.getScale(Space.REAL_WORLD),
-                scale.times(scale.times(activitySpace.mWorldSpaceScale)));
-    }
-
-    @Test
-    public void getPoseInActivitySpaceWithScale_returnsPose() {
-        mEntity.setPose(mTestPose, Space.PARENT);
-        mEntity.setScale(new Vector3(2f, 2f, 2f), Space.PARENT);
-        TestEntity child =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        child.setPose(mTestPose, Space.PARENT);
-        child.setParent(mEntity);
-        child.setScale(new Vector3(3f, 3f, 3f), Space.PARENT);
-        TestEntity grandchild =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        grandchild.setPose(mTestPose, Space.PARENT);
-        grandchild.setParent(child);
-        ActivitySpaceImpl activitySpace =
-                (ActivitySpaceImpl) mJxrPlatformAdapterAxr.getActivitySpace();
-        activitySpace.setOpenXrReferenceSpacePose(
-                Matrix4.fromTrs(
-                        new Vector3(5f, 6f, 7f),
-                        Quaternion.fromEulerAngles(22f, 33f, 44f),
-                        new Vector3(2f, 2f, 2f)));
-        assertVector3(activitySpace.getScale(Space.PARENT), new Vector3(2f, 2f, 2f));
-
-        assertPose(mEntity.getPose(Space.PARENT), mTestPose);
-        assertPose(mEntity.getPose(Space.ACTIVITY), mTestPose);
-
-        assertPose(child.getPose(Space.PARENT), mTestPose);
-        assertPose(
-                child.getPose(Space.ACTIVITY),
-                new Pose(new Vector3(3f, 6f, 9f), Quaternion.Identity));
-
-        grandchild.setPose(mTestPose, Space.PARENT);
-        assertPose(grandchild.getPose(Space.PARENT), mTestPose);
-        assertPose(
-                grandchild.getPose(Space.ACTIVITY),
-                new Pose(new Vector3(9f, 18f, 27f), Quaternion.Identity));
-    }
-
-    @Test
-    public void setScale_invalidSpace_throwsException() {
-        mEntity.setScale(new Vector3(1.0f, 2.0f, 3.0f), Space.PARENT);
-
-        assertThrows(IllegalArgumentException.class, () -> mEntity.setScale(new Vector3(), 999));
-    }
-
-    @Test
-    public void getAlpha_parentSpace_returnsParentAlpha() {
-        mEntity.setAlpha(0.5f, Space.PARENT);
-
-        assertThat(mEntity.getAlpha(Space.PARENT)).isEqualTo(0.5f);
-    }
-
-    @Test
-    public void getAlpha_activitySpace_returnsActivitySpaceAlpha() {
-        mEntity.setAlpha(0.5f, Space.PARENT);
-
-        assertThat(mEntity.getAlpha(Space.ACTIVITY)).isEqualTo(0.5f);
-    }
-
-    @Test
-    public void getAlpha_worldSpace_returnsWorldSpaceAlpha() {
-        mEntity.setAlpha(0.5f, Space.REAL_WORLD);
-
-        assertThat(mEntity.getAlpha(Space.REAL_WORLD)).isEqualTo(0.5f);
-    }
-
-    @Test
-    public void getAlpha_invalidSpace_throwsException() {
-        mEntity.setAlpha(0.5f, Space.PARENT);
-        assertThrows(IllegalArgumentException.class, () -> mEntity.getAlpha(999));
-    }
-
-    @Test
-    public void setAlpha_setsAlpha() {
-        mEntity.setAlpha(0.5f, Space.PARENT);
-
-        assertThat(mEntity.getAlpha(Space.PARENT)).isEqualTo(0.5f);
-    }
-
-    @Test
-    public void setAlpha_parentSpace_setsParentAlpha() {
-        mEntity.setAlpha(0.5f, Space.PARENT);
-
-        assertThat(mEntity.getAlpha(Space.PARENT)).isEqualTo(0.5f);
-    }
-
-    @Test
-    public void setAlpha_activitySpace_setsActivitySpaceAlpha() {
-        mEntity.setAlpha(0.5f, Space.PARENT);
-        TestEntity child =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        child.setParent(mEntity);
-        child.setAlpha(0.5f, Space.PARENT);
-
-        assertThat(child.getAlpha(Space.ACTIVITY)).isEqualTo(0.25f);
-    }
-
-    @Test
-    public void setAlpha_worldSpace_setsWorldSpaceAlpha() {
-        mJxrPlatformAdapterAxr.getActivitySpace().setAlpha(4f, Space.PARENT);
-        mEntity.setAlpha(0.5f, Space.PARENT);
-        TestEntity child =
-                new TestEntity(
-                        mXrExtensions.createNode(),
-                        mXrExtensions,
-                        mEntityManager,
-                        mFakeScheduledExecutorService);
-        child.setParent(mEntity);
-        child.setAlpha(0.5f, Space.PARENT);
-
-        assertThat(child.getAlpha(Space.REAL_WORLD)).isEqualTo(1f);
-    }
-
-    @Test
-    public void setAlpha_invalidSpace_throwsException() {
-        assertThrows(IllegalArgumentException.class, () -> mEntity.setAlpha(0.5f, 999));
-    }
-}
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/InteractableComponentImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/InteractableComponentImplTest.java
index 83a333a..25ce256 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/InteractableComponentImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/InteractableComponentImplTest.java
@@ -29,22 +29,19 @@
 
 import android.app.Activity;
 
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener;
 import androidx.xr.scenecore.JxrPlatformAdapter.InteractableComponent;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeInputEvent;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.InputEvent;
-import com.android.extensions.xr.node.ShadowInputEvent;
-import com.android.extensions.xr.node.Vec3;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
 
@@ -66,7 +63,7 @@
     private final Activity mActivity = mActivityController.create().start().get();
     private final FakeScheduledExecutorService mFakeExecutor = new FakeScheduledExecutorService();
     private final PerceptionLibrary mPerceptionLibrary = mock(PerceptionLibrary.class);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeImpressApi mFakeImpressApi = new FakeImpressApi();
     private JxrPlatformAdapterAxr mFakeRuntime;
     SplitEngineSubspaceManager mSplitEngineSubspaceManager =
@@ -81,7 +78,7 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -108,14 +105,14 @@
         InteractableComponent interactableComponent =
                 new InteractableComponentImpl(executor, inputEventListener);
         assertThat(entity.addComponent(interactableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         assertThat(node.getListener()).isNotNull();
         assertThat(node.getExecutor()).isEqualTo(mFakeExecutor);
 
-        InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
 
@@ -131,14 +128,14 @@
         InteractableComponent interactableComponent =
                 new InteractableComponentImpl(executor, inputEventListener);
         assertThat(entity.addComponent(interactableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         assertThat(node.getListener()).isNotNull();
         assertThat(node.getExecutor()).isEqualTo(mFakeExecutor);
 
-        InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
 
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxrTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxrTest.java
index 7bc9d5d..469f8a0 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxrTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/JxrPlatformAdapterAxrTest.java
@@ -48,6 +48,9 @@
 import androidx.test.rule.GrantPermissionRule;
 import androidx.xr.extensions.environment.EnvironmentVisibilityState;
 import androidx.xr.extensions.environment.PassthroughVisibilityState;
+import androidx.xr.extensions.node.Mat4f;
+import androidx.xr.extensions.node.ReformOptions;
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
@@ -77,12 +80,10 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneType;
 import androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent;
 import androidx.xr.scenecore.JxrPlatformAdapter.ResizableComponent;
-import androidx.xr.scenecore.JxrPlatformAdapter.Space;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialEnvironment;
 import androidx.xr.scenecore.JxrPlatformAdapter.SurfaceEntity;
 import androidx.xr.scenecore.JxrPlatformAdapter.TextureResource;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.Anchor;
 import androidx.xr.scenecore.impl.perception.Fov;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
@@ -93,25 +94,16 @@
 import androidx.xr.scenecore.impl.perception.exceptions.FailedToInitializeException;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeEnvironmentToken;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeEnvironmentVisibilityState;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeGltfModelToken;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeInputEvent;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeInputEvent.FakeHitInfo;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
-
-import com.android.extensions.xr.ShadowXrExtensions;
-import com.android.extensions.xr.ShadowXrExtensions.SpaceMode;
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.asset.FakeEnvironmentToken;
-import com.android.extensions.xr.asset.FakeGltfModelToken;
-import com.android.extensions.xr.environment.ShadowEnvironmentVisibilityState;
-import com.android.extensions.xr.environment.ShadowPassthroughVisibilityState;
-import com.android.extensions.xr.node.InputEvent.HitInfo;
-import com.android.extensions.xr.node.Mat4f;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeRepository;
-import com.android.extensions.xr.node.ReformOptions;
-import com.android.extensions.xr.node.ShadowInputEvent;
-import com.android.extensions.xr.node.Vec3;
-import com.android.extensions.xr.space.ShadowSpatialCapabilities;
-import com.android.extensions.xr.space.ShadowSpatialState;
-import com.android.extensions.xr.space.SpatialState;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakePassthroughVisibilityState;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeSpatialState;
+import androidx.xr.scenecore.testing.FakeXrExtensions.SpaceMode;
 
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.androidxr.splitengine.SubspaceNode;
@@ -136,15 +128,16 @@
 import java.util.UUID;
 import java.util.concurrent.Executor;
 import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 @RunWith(RobolectricTestRunner.class)
 public final class JxrPlatformAdapterAxrTest {
     private static final int OPEN_XR_REFERENCE_SPACE_TYPE = 1;
 
     private static final int SUBSPACE_ID = 5;
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeImpressApi mFakeImpressApi = new FakeImpressApi();
-    private final Node mSubspaceNode = mXrExtensions.createNode();
+    private final FakeNode mSubspaceNode = (FakeNode) mFakeExtensions.createNode();
     private final SubspaceNode mExpectedSubspace = new SubspaceNode(SUBSPACE_ID, mSubspaceNode);
     private final FakeScheduledExecutorService mFakeExecutor = new FakeScheduledExecutorService();
     private final PerceptionLibrary mPerceptionLibrary = mock(PerceptionLibrary.class);
@@ -168,8 +161,7 @@
     public void setUp() {
         mActivityController = Robolectric.buildActivity(Activity.class);
         mActivity = mActivityController.create().start().get();
-        ShadowXrExtensions.extract(mXrExtensions)
-                .setOpenXrWorldSpaceType(OPEN_XR_REFERENCE_SPACE_TYPE);
+        mFakeExtensions.setOpenXrWorldSpaceType(OPEN_XR_REFERENCE_SPACE_TYPE);
         when(mPerceptionLibrary.initSession(mActivity, OPEN_XR_REFERENCE_SPACE_TYPE, mFakeExecutor))
                 .thenReturn(immediateFuture(mSession));
         when(mPerceptionLibrary.getActivity()).thenReturn(mActivity);
@@ -178,29 +170,19 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
                         mSplitEngineSubspaceManager,
                         mSplitEngineRenderer,
                         /* useSplitEngine= */ false);
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        mFakeExecutor.simulateSleepExecutingAllTasks(
-                Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
     }
 
     @After
     public void tearDown() {
         // Dispose the runtime between test cases to clean up lingering references.
-        try {
-            mRealityCoreRuntime.dispose();
-        } catch (NullPointerException e) {
-            // Tests which already call dispose will cause a NPE here due to Activity being null
-            // when
-            // detaching from the scene.
-        }
+        mRealityCoreRuntime.dispose();
         mRealityCoreRuntime = null;
 
         if (mRealityCoreRuntimeWithSplitEngine != null) {
@@ -214,8 +196,8 @@
             return;
         }
 
-        Node rootNode = mXrExtensions.createNode();
-        Node taskWindowLeashNode = mXrExtensions.createNode();
+        FakeNode rootNode = (FakeNode) mFakeExtensions.createNode();
+        FakeNode taskWindowLeashNode = (FakeNode) mFakeExtensions.createNode();
         // This is a little unrealistic because it's going to return the same subspace for all the
         // entities created in this test. In practice this is an implementation detail that's
         // irrelevant
@@ -227,7 +209,7 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -269,7 +251,7 @@
         mFakeExecutor.runAll();
         GltfModelResource model = modelFuture.get();
         return mRealityCoreRuntimeWithSplitEngine.createGltfEntity(
-                pose, model, mRealityCoreRuntime.getActivitySpaceRootImpl());
+                pose, model, mRealityCoreRuntimeWithSplitEngine.getActivitySpaceRootImpl());
     }
 
     TextureResource loadTextureSplitEngine() throws Exception {
@@ -298,8 +280,7 @@
         createRuntimeWithSplitEngine();
 
         ListenableFuture<MaterialResource> materialFuture =
-                mRealityCoreRuntimeWithSplitEngine.createWaterMaterial(
-                        /* isAlphaMapVersion= */ false);
+                mRealityCoreRuntimeWithSplitEngine.createWaterMaterial(/* transparent= */ false);
         assertThat(materialFuture).isNotNull();
         // This resolves the transformation of the Future from a SplitEngine token to the JXR
         // Texture.  This is a hidden detail from the API surface's perspective.
@@ -321,11 +302,12 @@
         View view = new View(displayContext);
         view.setLayoutParams(new LayoutParams(640, 480));
         return mRealityCoreRuntime.createPanelEntity(
-                displayContext,
                 pose,
                 view,
                 new PixelDimensions(640, 480),
+                new Dimensions(0.5f, 0.5f, 0.5f),
                 "testPanel",
+                displayContext,
                 mRealityCoreRuntime.getActivitySpaceRootImpl());
     }
 
@@ -350,7 +332,7 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -364,30 +346,15 @@
     }
 
     @Test
-    public void ensureNullSkyboxResourceFuture_nonSplitEngineAssetIsNotNull() {
-        assertThat(((JxrPlatformAdapterAxr) mRealityCoreRuntime).mNullSkyboxResourceFuture)
-                .isNotNull();
-    }
-
-    @Test
-    public void ensureNullSkyboxResourceFutureSplitEngine_splitEngineAssetIsNotNull() {
-        createRuntimeWithSplitEngine();
-        assertThat(((JxrPlatformAdapterAxr) mRealityCoreRuntime).mNullSkyboxResourceFuture)
-                .isNotNull();
-    }
-
-    @Test
     public void requestHomeSpaceMode_callsExtensions() {
         mRealityCoreRuntime.requestHomeSpaceMode();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getSpaceMode(mActivity))
-                .isEqualTo(SpaceMode.HOME_SPACE);
+        assertThat(mFakeExtensions.getSpaceMode()).isEqualTo(SpaceMode.HOME_SPACE);
     }
 
     @Test
     public void requestFullSpaceMode_callsExtensions() {
         mRealityCoreRuntime.requestFullSpaceMode();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getSpaceMode(mActivity))
-                .isEqualTo(SpaceMode.FULL_SPACE);
+        assertThat(mFakeExtensions.getSpaceMode()).isEqualTo(SpaceMode.FULL_SPACE);
     }
 
     @Test
@@ -436,12 +403,16 @@
 
     @Test
     public void onSpatialStateChanged_setsSpatialCapabilities() {
-        SpatialState spatialState = ShadowSpatialState.create();
-        ShadowSpatialState.extract(spatialState)
-                .setSpatialCapabilities(
-                        ShadowSpatialCapabilities.create(
-                                androidx.xr.extensions.space.SpatialCapabilities
-                                        .SPATIAL_UI_CAPABLE));
+        FakeSpatialState spatialState = new FakeSpatialState();
+        spatialState.setSpatialCapabilities(
+                new androidx.xr.extensions.space.SpatialCapabilities() {
+                    @Override
+                    public boolean get(int capability) {
+                        return capability
+                                == androidx.xr.extensions.space.SpatialCapabilities
+                                        .SPATIAL_UI_CAPABLE;
+                    }
+                });
         ((JxrPlatformAdapterAxr) mRealityCoreRuntime).onSpatialStateChanged(spatialState);
 
         SpatialCapabilities caps = mRealityCoreRuntime.getSpatialCapabilities();
@@ -462,28 +433,22 @@
         SpatialEnvironment environment = mRealityCoreRuntime.getSpatialEnvironment();
         assertThat(environment.isSpatialEnvironmentPreferenceActive()).isFalse();
 
-        SpatialState state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setEnvironmentVisibilityState(
-                        ShadowEnvironmentVisibilityState.create(
-                                EnvironmentVisibilityState.APP_VISIBLE));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        FakeSpatialState state = new FakeSpatialState();
+        state.setEnvironmentVisibility(
+                new FakeEnvironmentVisibilityState(EnvironmentVisibilityState.APP_VISIBLE));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.isSpatialEnvironmentPreferenceActive()).isTrue();
 
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setEnvironmentVisibilityState(
-                        ShadowEnvironmentVisibilityState.create(
-                                EnvironmentVisibilityState.INVISIBLE));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setEnvironmentVisibility(
+                new FakeEnvironmentVisibilityState(EnvironmentVisibilityState.INVISIBLE));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.isSpatialEnvironmentPreferenceActive()).isFalse();
 
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setEnvironmentVisibilityState(
-                        ShadowEnvironmentVisibilityState.create(
-                                EnvironmentVisibilityState.HOME_VISIBLE));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setEnvironmentVisibility(
+                new FakeEnvironmentVisibilityState(EnvironmentVisibilityState.HOME_VISIBLE));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.isSpatialEnvironmentPreferenceActive()).isFalse();
     }
 
@@ -498,32 +463,26 @@
         assertThat(environment.isSpatialEnvironmentPreferenceActive()).isFalse();
 
         // The first spatial state should always fire the listener
-        SpatialState state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setEnvironmentVisibilityState(
-                        ShadowEnvironmentVisibilityState.create(
-                                EnvironmentVisibilityState.APP_VISIBLE));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        FakeSpatialState state = new FakeSpatialState();
+        state.setEnvironmentVisibility(
+                new FakeEnvironmentVisibilityState(EnvironmentVisibilityState.APP_VISIBLE));
+        mFakeExtensions.sendSpatialState(state);
         verify(listener).accept(true);
 
         // The second spatial state should also fire the listener since it's a different state
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setEnvironmentVisibilityState(
-                        ShadowEnvironmentVisibilityState.create(
-                                EnvironmentVisibilityState.INVISIBLE));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setEnvironmentVisibility(
+                new FakeEnvironmentVisibilityState(EnvironmentVisibilityState.INVISIBLE));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.isSpatialEnvironmentPreferenceActive()).isFalse();
         verify(listener).accept(false);
 
         // The third spatial state should not fire the listener since it is the same as the last
         // state.
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setEnvironmentVisibilityState(
-                        ShadowEnvironmentVisibilityState.create(
-                                EnvironmentVisibilityState.INVISIBLE));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setEnvironmentVisibility(
+                new FakeEnvironmentVisibilityState(EnvironmentVisibilityState.INVISIBLE));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.isSpatialEnvironmentPreferenceActive()).isFalse();
         verify(listener, times(2))
                 .accept(any()); // Verify the listener was not called a third time.
@@ -534,36 +493,28 @@
         SpatialEnvironment environment = mRealityCoreRuntime.getSpatialEnvironment();
         assertThat(environment.getCurrentPassthroughOpacity()).isZero();
 
-        SpatialState state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.APP, 0.4f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        FakeSpatialState state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.APP, 0.4f));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.getCurrentPassthroughOpacity()).isEqualTo(0.4f);
 
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.HOME, 0.5f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.HOME, 0.5f));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.getCurrentPassthroughOpacity()).isEqualTo(0.5f);
 
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.SYSTEM, 0.9f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.SYSTEM, 0.9f));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.getCurrentPassthroughOpacity()).isEqualTo(0.9f);
 
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.DISABLED, 0.0f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.DISABLED, 0.0f));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.getCurrentPassthroughOpacity()).isZero();
     }
 
@@ -578,43 +529,35 @@
         assertThat(environment.getCurrentPassthroughOpacity()).isZero();
 
         // The first spatial state should always fire the listener
-        SpatialState state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.APP, 1.0f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        FakeSpatialState state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.APP, 1.0f));
+        mFakeExtensions.sendSpatialState(state);
         verify(listener).accept(1.0f);
 
         // The second spatial state should also fire the listener even if only the opacity changes
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.APP, 0.5f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.APP, 0.5f));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.getCurrentPassthroughOpacity()).isEqualTo(0.5f);
 
         // The third spatial state should also fire the listener even if only the visibility state
         // changes, but getCurrentPassthroughOpacity() returns the same value as the last state.
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.HOME, 0.5f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.HOME, 0.5f));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.getCurrentPassthroughOpacity()).isEqualTo(0.5f);
         verify(listener, times(2))
                 .accept(0.5f); // Verify it was called a second time with this value.
 
         // The fourth spatial state should not fire the listener since it is the same as the last
         // state.
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.HOME, 0.5f));
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        state = new FakeSpatialState();
+        state.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.HOME, 0.5f));
+        mFakeExtensions.sendSpatialState(state);
         assertThat(environment.getCurrentPassthroughOpacity()).isEqualTo(0.5f);
         verify(listener, times(3))
                 .accept(any()); // Verify the listener was not called a fourth time.
@@ -622,10 +565,8 @@
 
     @Test
     public void currentPassthroughOpacity_isSetDuringRuntimeCreation() {
-        ShadowSpatialState.extract(mXrExtensions.getSpatialState(mActivity))
-                .setPassthroughVisibilityState(
-                        ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.APP, 0.5f));
+        mFakeExtensions.fakeSpatialState.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.APP, 0.5f));
 
         SpatialEnvironment newEnvironment = mRealityCoreRuntime.getSpatialEnvironment();
         assertThat(newEnvironment.getCurrentPassthroughOpacity()).isEqualTo(0.5f);
@@ -643,18 +584,28 @@
         mRealityCoreRuntime.addSpatialCapabilitiesChangedListener(directExecutor(), listener1);
         mRealityCoreRuntime.addSpatialCapabilitiesChangedListener(directExecutor(), listener2);
 
-        SpatialState state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setSpatialCapabilities(ShadowSpatialCapabilities.createAll());
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        FakeSpatialState state = new FakeSpatialState();
+        state.setSpatialCapabilities(
+                new androidx.xr.extensions.space.SpatialCapabilities() {
+                    @Override
+                    public boolean get(int capability) {
+                        return true;
+                    }
+                });
+        mFakeExtensions.sendSpatialState(state);
         verify(listener1).accept(any());
         verify(listener2).accept(any());
 
-        state = ShadowSpatialState.create();
-        ShadowSpatialState.extract(state)
-                .setSpatialCapabilities(ShadowSpatialCapabilities.create());
+        state = new FakeSpatialState();
+        state.setSpatialCapabilities(
+                new androidx.xr.extensions.space.SpatialCapabilities() {
+                    @Override
+                    public boolean get(int capability) {
+                        return false;
+                    }
+                });
         mRealityCoreRuntime.removeSpatialCapabilitiesChangedListener(listener1);
-        ShadowXrExtensions.extract(mXrExtensions).sendSpatialState(mActivity, state);
+        mFakeExtensions.sendSpatialState(state);
         verify(listener1).accept(any()); // Verify the removed listener was called exactly once
         verify(listener2, times(2)).accept(any()); // Verify the active listener was called twice
     }
@@ -1221,7 +1172,10 @@
         assertThat(panelEntity.getAlpha()).isEqualTo(0.5f);
         assertThat(gltfEntity.getAlpha()).isEqualTo(0.5f);
         assertThat(contentlessEntity.getAlpha()).isEqualTo(0.5f);
-        assertThat(NodeRepository.getInstance().map((metadata) -> metadata.getAlpha()))
+        assertThat(
+                        mFakeExtensions.createdNodes.stream()
+                                .map(FakeNode::getAlpha)
+                                .collect(Collectors.toList()))
                 .containsAtLeast(0.5f, 0.5f, 0.5f);
     }
 
@@ -1231,9 +1185,9 @@
         GltfEntity parent = createGltfEntity();
         Entity entity = createContentlessEntity();
 
-        assertThat(grandparent.getAlpha(Space.ACTIVITY)).isEqualTo(1.0f);
-        assertThat(parent.getAlpha(Space.ACTIVITY)).isEqualTo(1.0f);
-        assertThat(entity.getAlpha(Space.ACTIVITY)).isEqualTo(1.0f);
+        assertThat(grandparent.getActivitySpaceAlpha()).isEqualTo(1.0f);
+        assertThat(parent.getActivitySpaceAlpha()).isEqualTo(1.0f);
+        assertThat(entity.getActivitySpaceAlpha()).isEqualTo(1.0f);
 
         grandparent.setAlpha(0.5f);
         parent.setParent(grandparent);
@@ -1241,10 +1195,13 @@
         entity.setParent(parent);
         entity.setAlpha(0.5f);
 
-        assertThat(grandparent.getAlpha(Space.ACTIVITY)).isEqualTo(0.5f);
-        assertThat(parent.getAlpha(Space.ACTIVITY)).isEqualTo(0.25f);
-        assertThat(entity.getAlpha(Space.ACTIVITY)).isEqualTo(0.125f);
-        assertThat(NodeRepository.getInstance().map((metadata) -> metadata.getAlpha()))
+        assertThat(grandparent.getActivitySpaceAlpha()).isEqualTo(0.5f);
+        assertThat(parent.getActivitySpaceAlpha()).isEqualTo(0.25f);
+        assertThat(entity.getActivitySpaceAlpha()).isEqualTo(0.125f);
+        assertThat(
+                        mFakeExtensions.createdNodes.stream()
+                                .map(FakeNode::getAlpha)
+                                .collect(Collectors.toList()))
                 .containsAtLeast(0.5f, 0.5f, 0.5f);
     }
 
@@ -1342,7 +1299,7 @@
     @Test
     public void setHidden_modifiesReforms() throws Exception {
         PanelEntity testEntity = createPanelEntity();
-        FakeNode testNode = new FakeNode(((AndroidXrEntity) testEntity).getNode());
+        FakeNode testNode = (FakeNode) ((AndroidXrEntity) testEntity).getNode();
 
         assertThat(
                         testEntity.addComponent(
@@ -1353,7 +1310,7 @@
                                         /* shouldDisposeParentAnchor= */ true)))
                 .isTrue();
         testEntity.setHidden(true);
-        assertThat(testNode.getReformOptions()).isNull();
+        assertThat(testNode.getReformOptions().getEnabledReform()).isEqualTo(0);
         testEntity.setHidden(false);
         assertThat(testNode.getReformOptions().getEnabledReform())
                 .isEqualTo(ReformOptions.ALLOW_MOVE);
@@ -1493,37 +1450,6 @@
     }
 
     @Test
-    public void loadExrImageByAssetNameSplitEngine_returnsModel() throws Exception {
-        ListenableFuture<ExrImageResource> imageFuture =
-                mRealityCoreRuntime.loadExrImageByAssetNameSplitEngine("FakeAsset.zip");
-
-        assertThat(imageFuture).isNotNull();
-
-        ExrImageResource image = imageFuture.get();
-        assertThat(image).isNotNull();
-        ExrImageResourceImplSplitEngine imageImpl = (ExrImageResourceImplSplitEngine) image;
-        assertThat(imageImpl).isNotNull();
-        long token = imageImpl.getExtensionImageToken();
-        assertThat(token).isEqualTo(1);
-    }
-
-    @Test
-    public void loadExrImageByByteArraySplitEngine_returnsModel() throws Exception {
-        ListenableFuture<ExrImageResource> imageFuture =
-                mRealityCoreRuntime.loadExrImageByByteArraySplitEngine(
-                        new byte[] {1, 2, 3}, "FakeAsset.zip");
-
-        assertThat(imageFuture).isNotNull();
-
-        ExrImageResource image = imageFuture.get();
-        assertThat(image).isNotNull();
-        ExrImageResourceImplSplitEngine imageImpl = (ExrImageResourceImplSplitEngine) image;
-        assertThat(imageImpl).isNotNull();
-        long token = imageImpl.getExtensionImageToken();
-        assertThat(token).isEqualTo(1);
-    }
-
-    @Test
     public void loadGltfByAssetName_returnsModel() throws Exception {
         ListenableFuture<GltfModelResource> modelFuture =
                 mRealityCoreRuntime.loadGltfByAssetName("FakeAsset.glb");
@@ -1540,36 +1466,6 @@
     }
 
     @Test
-    public void loadGltfByAssetNameSplitEngine_returnsModel() throws Exception {
-        ListenableFuture<GltfModelResource> modelFuture =
-                mRealityCoreRuntime.loadGltfByAssetNameSplitEngine("FakeAsset.glb");
-
-        assertThat(modelFuture).isNotNull();
-
-        GltfModelResource model = modelFuture.get();
-        assertThat(model).isNotNull();
-        GltfModelResourceImplSplitEngine modelImpl = (GltfModelResourceImplSplitEngine) model;
-        assertThat(modelImpl).isNotNull();
-        long token = modelImpl.getExtensionModelToken();
-        assertThat(token).isEqualTo(1);
-    }
-
-    @Test
-    public void loadGltfByByteArray_returnsModel() throws Exception {
-        ListenableFuture<GltfModelResource> modelFuture =
-                mRealityCoreRuntime.loadGltfByByteArray(new byte[] {1, 2, 3}, "FakeAsset.glb");
-
-        assertThat(modelFuture).isNotNull();
-
-        GltfModelResource model = modelFuture.get();
-        assertThat(model).isNotNull();
-        GltfModelResourceImplSplitEngine modelImpl = (GltfModelResourceImplSplitEngine) model;
-        assertThat(modelImpl).isNotNull();
-        long token = modelImpl.getExtensionModelToken();
-        assertThat(token).isEqualTo(1);
-    }
-
-    @Test
     public void createGltfEntity_returnsEntity() throws Exception {
         assertThat(createGltfEntity()).isNotNull();
     }
@@ -1635,9 +1531,8 @@
         assertThat(parentEntity.getChildren()).containsExactly(childEntity);
 
         // Verify that there is an underlying extension node relationship.
-        Node childNode = ((GltfEntityImpl) childEntity).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode))
-                .isEqualTo(((GltfEntityImpl) parentEntity).getNode());
+        FakeNode childNode = (FakeNode) ((GltfEntityImpl) childEntity).getNode();
+        assertThat(childNode.getParent()).isEqualTo(((GltfEntityImpl) parentEntity).getNode());
     }
 
     @Test
@@ -1651,16 +1546,14 @@
         assertThat(parentEntity1.getChildren()).containsExactly(childEntity);
         assertThat(parentEntity2.getChildren()).isEmpty();
 
-        Node childNode = ((GltfEntityImpl) childEntity).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode))
-                .isEqualTo(((GltfEntityImpl) parentEntity1).getNode());
+        FakeNode childNode = (FakeNode) ((GltfEntityImpl) childEntity).getNode();
+        assertThat(childNode.getParent()).isEqualTo(((GltfEntityImpl) parentEntity1).getNode());
 
         childEntity.setParent(parentEntity2);
         assertThat(childEntity.getParent()).isEqualTo(parentEntity2);
         assertThat(parentEntity2.getChildren()).containsExactly(childEntity);
         assertThat(parentEntity1.getChildren()).isEmpty();
-        assertThat(NodeRepository.getInstance().getParent(childNode))
-                .isEqualTo(((GltfEntityImpl) parentEntity2).getNode());
+        assertThat(childNode.getParent()).isEqualTo(((GltfEntityImpl) parentEntity2).getNode());
     }
 
     @Test
@@ -1679,12 +1572,10 @@
         assertThat(childEntity2.getParent()).isEqualTo(parentEntity);
         assertThat(parentEntity.getChildren()).containsExactly(childEntity1, childEntity2);
 
-        Node childNode1 = ((GltfEntityImpl) childEntity1).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode1))
-                .isEqualTo(((GltfEntityImpl) parentEntity).getNode());
-        Node childNode2 = ((GltfEntityImpl) childEntity2).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode2))
-                .isEqualTo(((GltfEntityImpl) parentEntity).getNode());
+        FakeNode childNode1 = (FakeNode) ((GltfEntityImpl) childEntity1).getNode();
+        assertThat(childNode1.getParent()).isEqualTo(((GltfEntityImpl) parentEntity).getNode());
+        FakeNode childNode2 = (FakeNode) ((GltfEntityImpl) childEntity2).getNode();
+        assertThat(childNode2.getParent()).isEqualTo(((GltfEntityImpl) parentEntity).getNode());
     }
 
     @Test
@@ -1712,9 +1603,8 @@
         assertThat(parentEntity.getChildren()).containsExactly(childEntity);
 
         // Verify that there is an underlying extension node relationship.
-        Node childNode = ((PanelEntityImpl) childEntity).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode))
-                .isEqualTo(((PanelEntityImpl) parentEntity).getNode());
+        FakeNode childNode = (FakeNode) ((PanelEntityImpl) childEntity).getNode();
+        assertThat(childNode.getParent()).isEqualTo(((PanelEntityImpl) parentEntity).getNode());
     }
 
     @Test
@@ -1728,16 +1618,14 @@
         assertThat(parentEntity1.getChildren()).containsExactly(childEntity);
         assertThat(parentEntity2.getChildren()).isEmpty();
 
-        Node childNode = ((PanelEntityImpl) childEntity).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode))
-                .isEqualTo(((PanelEntityImpl) parentEntity1).getNode());
+        FakeNode childNode = (FakeNode) ((PanelEntityImpl) childEntity).getNode();
+        assertThat(childNode.getParent()).isEqualTo(((PanelEntityImpl) parentEntity1).getNode());
 
         childEntity.setParent(parentEntity2);
         assertThat(childEntity.getParent()).isEqualTo(parentEntity2);
         assertThat(parentEntity2.getChildren()).containsExactly(childEntity);
         assertThat(parentEntity1.getChildren()).isEmpty();
-        assertThat(NodeRepository.getInstance().getParent(childNode))
-                .isEqualTo(((PanelEntityImpl) parentEntity2).getNode());
+        assertThat(childNode.getParent()).isEqualTo(((PanelEntityImpl) parentEntity2).getNode());
     }
 
     @Test
@@ -1756,12 +1644,10 @@
         assertThat(childEntity2.getParent()).isEqualTo(parentEntity);
         assertThat(parentEntity.getChildren()).containsExactly(childEntity1, childEntity2);
 
-        Node childNode1 = ((PanelEntityImpl) childEntity1).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode1))
-                .isEqualTo(((PanelEntityImpl) parentEntity).getNode());
-        Node childNode2 = ((PanelEntityImpl) childEntity2).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode2))
-                .isEqualTo(((PanelEntityImpl) parentEntity).getNode());
+        FakeNode childNode1 = (FakeNode) ((PanelEntityImpl) childEntity1).getNode();
+        assertThat(childNode1.getParent()).isEqualTo(((PanelEntityImpl) parentEntity).getNode());
+        FakeNode childNode2 = (FakeNode) ((PanelEntityImpl) childEntity2).getNode();
+        assertThat(childNode2.getParent()).isEqualTo(((PanelEntityImpl) parentEntity).getNode());
     }
 
     @Test
@@ -1800,7 +1686,7 @@
         PanelEntity mainPanel = mRealityCoreRuntime.getMainPanelEntity();
 
         assertThat(((MainPanelEntityImpl) mainPanel).getNode())
-                .isEqualTo(ShadowXrExtensions.extract(mXrExtensions).getMainWindowNode(mActivity));
+                .isEqualTo(mFakeExtensions.getFakeNodeForMainWindow());
     }
 
     @Test
@@ -1809,14 +1695,15 @@
         PanelEntity panelEntity = createPanelEntity();
         Executor executor = directExecutor();
         panelEntity.addInputEventListener(executor, mockConsumer);
-        FakeNode node = new FakeNode(((PanelEntityImpl) panelEntity).getNode());
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
 
         assertThat(node.getListener()).isNotNull();
         assertThat(node.getExecutor()).isEqualTo(mFakeExecutor);
 
-        com.android.extensions.xr.node.InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
+
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
 
@@ -1829,19 +1716,17 @@
         PanelEntity panelEntity = createPanelEntity();
         Executor executor = directExecutor();
         panelEntity.addInputEventListener(executor, mockConsumer);
-        Node node = ((PanelEntityImpl) panelEntity).getNode();
-        FakeNode fakeNode = new FakeNode(node);
-        com.android.extensions.xr.node.InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0),
-                        /* direction= */ new Vec3(1, 1, 1),
-                        /* histInfo= */ new HitInfo(
-                                /* subspaceImpressNodeId= */ 0,
-                                /* inputNode= */ node,
-                                /* transform= */ new Mat4f(new float[16]),
-                                /* hitPosition= */ new Vec3(1, 2, 3)),
-                        /* secondaryHitInfo= */ null);
-        fakeNode.sendInputEvent(inputEvent);
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
+        FakeInputEvent xrInputEvent = new FakeInputEvent();
+        xrInputEvent.setOrigin(new Vec3(0, 0, 0));
+        xrInputEvent.setDirection(new Vec3(1, 1, 1));
+        FakeHitInfo hitInfo = new FakeHitInfo();
+        hitInfo.setInputNode(node);
+        hitInfo.setHitPosition(new Vec3(1, 2, 3));
+        hitInfo.setTransform(new Mat4f(new float[16]));
+        xrInputEvent.setFakeHitInfo(hitInfo);
+
+        node.sendInputEvent(xrInputEvent);
         mFakeExecutor.runAll();
 
         ArgumentCaptor<InputEvent> inputEventCaptor = ArgumentCaptor.forClass(InputEvent.class);
@@ -1857,7 +1742,7 @@
         InputEventListener mockConsumer = mock(InputEventListener.class);
         PanelEntity panelEntity = createPanelEntity();
         panelEntity.addInputEventListener(/* executor= */ null, mockConsumer);
-        FakeNode node = new FakeNode(((PanelEntityImpl) panelEntity).getNode());
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
 
         assertThat(node.getListener()).isNotNull();
         assertThat(node.getExecutor()).isNotNull();
@@ -1871,10 +1756,11 @@
         Executor executor = directExecutor();
         panelEntity.addInputEventListener(executor, mockConsumer1);
         panelEntity.addInputEventListener(executor, mockConsumer2);
-        FakeNode node = new FakeNode(((PanelEntityImpl) panelEntity).getNode());
-        com.android.extensions.xr.node.InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
+
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
 
@@ -1891,10 +1777,10 @@
         FakeScheduledExecutorService executor2 = new FakeScheduledExecutorService();
         panelEntity.addInputEventListener(executor1, mockConsumer1);
         panelEntity.addInputEventListener(executor2, mockConsumer2);
-        FakeNode node = new FakeNode(((PanelEntityImpl) panelEntity).getNode());
-        com.android.extensions.xr.node.InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
 
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
@@ -1917,10 +1803,10 @@
         Executor executor = directExecutor();
         panelEntity.addInputEventListener(executor, mockConsumer1);
         panelEntity.addInputEventListener(executor, mockConsumer2);
-        FakeNode node = new FakeNode(((PanelEntityImpl) panelEntity).getNode());
-        com.android.extensions.xr.node.InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
 
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
@@ -1942,10 +1828,10 @@
         Executor executor = directExecutor();
         panelEntity.addInputEventListener(executor, mockConsumer1);
         panelEntity.addInputEventListener(executor, mockConsumer2);
-        FakeNode node = new FakeNode(((PanelEntityImpl) panelEntity).getNode());
-        com.android.extensions.xr.node.InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
 
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
@@ -1969,10 +1855,10 @@
         Executor executor = directExecutor();
         panelEntity.addInputEventListener(executor, mockConsumer1);
         panelEntity.addInputEventListener(executor, mockConsumer2);
-        FakeNode node = new FakeNode(((PanelEntityImpl) panelEntity).getNode());
-        com.android.extensions.xr.node.InputEvent inputEvent =
-                ShadowInputEvent.create(
-                        /* origin= */ new Vec3(0, 0, 0), /* direction= */ new Vec3(1, 1, 1));
+        FakeNode node = (FakeNode) ((PanelEntityImpl) panelEntity).getNode();
+        FakeInputEvent inputEvent = new FakeInputEvent();
+        inputEvent.setOrigin(new Vec3(0, 0, 0));
+        inputEvent.setDirection(new Vec3(1, 1, 1));
 
         node.sendInputEvent(inputEvent);
         mFakeExecutor.runAll();
@@ -2014,12 +1900,10 @@
         assertThat(childEntity2.getParent()).isEqualTo(parentEntity);
         assertThat(parentEntity.getChildren()).containsExactly(childEntity1, childEntity2);
 
-        Node childNode1 = ((AndroidXrEntity) childEntity1).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode1))
-                .isEqualTo(((AndroidXrEntity) parentEntity).getNode());
-        Node childNode2 = ((AndroidXrEntity) childEntity2).getNode();
-        assertThat(NodeRepository.getInstance().getParent(childNode2))
-                .isEqualTo(((AndroidXrEntity) parentEntity).getNode());
+        FakeNode childNode1 = (FakeNode) ((AndroidXrEntity) childEntity1).getNode();
+        assertThat(childNode1.getParent()).isEqualTo(((AndroidXrEntity) parentEntity).getNode());
+        FakeNode childNode2 = (FakeNode) ((AndroidXrEntity) childEntity2).getNode();
+        assertThat(childNode2.getParent()).isEqualTo(((AndroidXrEntity) parentEntity).getNode());
     }
 
     @Test
@@ -2335,14 +2219,14 @@
     @Test
     public void dispose_clearsReformOptions() {
         AndroidXrEntity entity = (AndroidXrEntity) createContentlessEntity();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ReformOptions reformOptions = entity.getReformOptions();
         assertThat(reformOptions).isNotNull();
-        ReformOptions unused =
-                reformOptions.setEnabledReform(
-                        ReformOptions.ALLOW_MOVE | ReformOptions.ALLOW_RESIZE);
+        reformOptions.setEnabledReform(ReformOptions.ALLOW_MOVE | ReformOptions.ALLOW_RESIZE);
         entity.dispose();
-        assertThat(node.getReformOptions()).isNull();
+        assertThat(node.getReformOptions().getEnabledReform()).isEqualTo(0);
+        assertThat(node.getReformOptions().getEventCallback()).isNull();
+        assertThat(node.getReformOptions().getEventExecutor()).isNull();
     }
 
     @Test
@@ -2372,8 +2256,7 @@
     @Test
     public void setPreferredAspectRatio_callsExtensions() {
         mRealityCoreRuntime.setPreferredAspectRatio(mActivity, 1.23f);
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getPreferredAspectRatio(mActivity))
-                .isEqualTo(1.23f);
+        assertThat(mFakeExtensions.getPreferredAspectRatio()).isEqualTo(1.23f);
     }
 
     @Test
@@ -2497,13 +2380,13 @@
 
     @Test
     public void injectRootNodeAndTaskWindowLeashNode_runtimeImplUsesThoseNodes() {
-        Node rootNode = mXrExtensions.createNode();
-        Node taskWindowLeashNode = mXrExtensions.createNode();
+        FakeNode rootNode = (FakeNode) mFakeExtensions.createNode();
+        FakeNode taskWindowLeashNode = (FakeNode) mFakeExtensions.createNode();
         JxrPlatformAdapterAxr runtime =
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -2523,16 +2406,15 @@
     @Test
     public void dispose_clearsResources() {
         AndroidXrEntity entity = (AndroidXrEntity) createContentlessEntity();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         assertThat(node).isNotNull();
         assertThat(node.getParent()).isNotNull();
 
         mRealityCoreRuntime.dispose();
         assertThat(node.getParent()).isNull();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getSpatialStateCallback(mActivity))
-                .isNull();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getMainWindowNode(mActivity)).isNull();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getTaskNode(mActivity)).isNull();
+        assertThat(mFakeExtensions.getSpatialStateCallback()).isNull();
+        assertThat(mFakeExtensions.getFakeNodeForMainWindow()).isNull();
+        assertThat(mFakeExtensions.getFakeTaskNode()).isNull();
     }
 
     @Test
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MainPanelEntityImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MainPanelEntityImplTest.java
index be075ae..f471035 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MainPanelEntityImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MainPanelEntityImplTest.java
@@ -27,16 +27,13 @@
 
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
 
-import com.android.extensions.xr.ShadowXrExtensions;
-import com.android.extensions.xr.XrExtensions;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
 
@@ -51,7 +48,7 @@
 
 @RunWith(RobolectricTestRunner.class)
 public class MainPanelEntityImplTest {
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeImpressApi mFakeImpressApi = new FakeImpressApi();
     private final ActivityController<Activity> mActivityController =
             Robolectric.buildActivity(Activity.class);
@@ -73,7 +70,7 @@
                 JxrPlatformAdapterAxr.create(
                         mHostActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -96,27 +93,22 @@
     }
 
     @Test
-    public void mainPanelEntitysetSizeInPixels_callsExtensions() {
+    public void mainPanelEntitySetPixelDimensions_callsExtensions() {
         PixelDimensions kTestPixelDimensions = new PixelDimensions(14, 14);
-        mMainPanelEntity.setSizeInPixels(kTestPixelDimensions);
-
-        ShadowXrExtensions shadowXrExtensions = ShadowXrExtensions.extract(mXrExtensions);
-        assertThat(shadowXrExtensions.getMainWindowWidth(mHostActivity))
-                .isEqualTo(kTestPixelDimensions.width);
-        assertThat(shadowXrExtensions.getMainWindowHeight(mHostActivity))
-                .isEqualTo(kTestPixelDimensions.height);
+        mMainPanelEntity.setPixelDimensions(kTestPixelDimensions);
+        assertThat(mFakeExtensions.getMainWindowWidth()).isEqualTo(kTestPixelDimensions.width);
+        assertThat(mFakeExtensions.getMainWindowHeight()).isEqualTo(kTestPixelDimensions.height);
     }
 
     @Test
     public void mainPanelEntitySetSize_callsExtensions() {
+        // TODO(b/352630025): remove this once setSize is removed.
+        // This should have the same effect as setPixelDimensions, except that it has to convert
+        // from Dimensions to PixelDimensions, so it casts float to int.
         Dimensions kTestDimensions = new Dimensions(123.0f, 123.0f, 123.0f);
         mMainPanelEntity.setSize(kTestDimensions);
-
-        ShadowXrExtensions shadowXrExtensions = ShadowXrExtensions.extract(mXrExtensions);
-        assertThat(shadowXrExtensions.getMainWindowWidth(mHostActivity))
-                .isEqualTo((int) kTestDimensions.width);
-        assertThat(shadowXrExtensions.getMainWindowHeight(mHostActivity))
-                .isEqualTo((int) kTestDimensions.height);
+        assertThat(mFakeExtensions.getMainWindowWidth()).isEqualTo((int) kTestDimensions.width);
+        assertThat(mFakeExtensions.getMainWindowWidth()).isEqualTo((int) kTestDimensions.height);
     }
 
     @Test
@@ -124,7 +116,7 @@
         // The (FakeXrExtensions) test default pixel density is 1 pixel per meter. Validate that the
         // corner radius is set to 32dp.
         assertThat(mMainPanelEntity.getCornerRadius()).isEqualTo(32.0f);
-        FakeNode fakeNode = new FakeNode(mMainPanelEntity.getNode());
+        FakeNode fakeNode = (FakeNode) mMainPanelEntity.getNode();
         assertThat(fakeNode.getCornerRadius()).isEqualTo(32.0f);
     }
 }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImplTest.java
index d1a42ed..067a7a4 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaPlayerExtensionsWrapperImplTest.java
@@ -24,15 +24,12 @@
 import android.media.MediaPlayer;
 
 import androidx.xr.extensions.media.SpatializerExtensions;
+import androidx.xr.extensions.media.XrSpatialAudioExtensions;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.MediaPlayerExtensionsWrapper;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.media.MediaPlayerExtensions;
-import com.android.extensions.xr.media.ShadowMediaPlayerExtensions;
-import com.android.extensions.xr.media.XrSpatialAudioExtensions;
-import com.android.extensions.xr.node.Node;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeMediaPlayerExtensions;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -41,22 +38,23 @@
 
 @RunWith(RobolectricTestRunner.class)
 public class MediaPlayerExtensionsWrapperImplTest {
-    XrExtensions mXrExtensions;
+    FakeXrExtensions mFakeXrExtensions;
     XrSpatialAudioExtensions mSpatialAudioExtensions;
-    MediaPlayerExtensions mMediaPlayerExtensions;
+    FakeMediaPlayerExtensions mFakeMediaPlayerExtensions;
 
     @Before
     public void setUp() {
-        mXrExtensions = XrExtensionsProvider.getXrExtensions();
-        mSpatialAudioExtensions = mXrExtensions.getXrSpatialAudioExtensions();
-        mMediaPlayerExtensions = mSpatialAudioExtensions.getMediaPlayerExtensions();
+        mFakeXrExtensions = new FakeXrExtensions();
+        mSpatialAudioExtensions = mFakeXrExtensions.fakeSpatialAudioExtensions;
+        mFakeMediaPlayerExtensions =
+                (FakeMediaPlayerExtensions) mSpatialAudioExtensions.getMediaPlayerExtensions();
     }
 
     @Test
     public void setPointSourceAttr_callsExtensionsSetPointSourceAttr() {
         MediaPlayer mediaPlayer = new MediaPlayer();
 
-        Node fakeNode = mXrExtensions.createNode();
+        Node fakeNode = new FakeXrExtensions().createNode();
         AndroidXrEntity entity = mock(AndroidXrEntity.class);
         when(entity.getNode()).thenReturn(fakeNode);
 
@@ -64,13 +62,10 @@
                 new JxrPlatformAdapter.PointSourceAttributes(entity);
 
         MediaPlayerExtensionsWrapper wrapper =
-                new MediaPlayerExtensionsWrapperImpl(mMediaPlayerExtensions);
+                new MediaPlayerExtensionsWrapperImpl(mFakeMediaPlayerExtensions);
         wrapper.setPointSourceAttributes(mediaPlayer, expectedRtAttr);
 
-        assertThat(
-                        ShadowMediaPlayerExtensions.extract(mMediaPlayerExtensions)
-                                .getPointSourceAttributes()
-                                .getNode())
+        assertThat(mFakeMediaPlayerExtensions.getPointSourceAttributes().getNode())
                 .isEqualTo(fakeNode);
     }
 
@@ -84,13 +79,10 @@
                         JxrPlatformAdapter.SpatializerConstants.AMBISONICS_ORDER_THIRD_ORDER);
 
         MediaPlayerExtensionsWrapper wrapper =
-                new MediaPlayerExtensionsWrapperImpl(mMediaPlayerExtensions);
+                new MediaPlayerExtensionsWrapperImpl(mFakeMediaPlayerExtensions);
         wrapper.setSoundFieldAttributes(mediaPlayer, expectedRtAttr);
 
-        assertThat(
-                        ShadowMediaPlayerExtensions.extract(mMediaPlayerExtensions)
-                                .getSoundFieldAttributes()
-                                .getAmbisonicsOrder())
+        assertThat(mFakeMediaPlayerExtensions.getSoundFieldAttributes().getAmbisonicsOrder())
                 .isEqualTo(expectedAmbisonicOrder);
     }
 }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaUtilsTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaUtilsTest.java
index 832d7ff..213e4b1 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaUtilsTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MediaUtilsTest.java
@@ -22,14 +22,13 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import androidx.xr.extensions.media.PointSourceAttributes;
+import androidx.xr.extensions.media.SoundFieldAttributes;
+import androidx.xr.extensions.media.SpatializerExtensions;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatializerConstants;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
-
-import com.android.extensions.xr.media.PointSourceAttributes;
-import com.android.extensions.xr.media.SoundFieldAttributes;
-import com.android.extensions.xr.media.SpatializerExtensions;
-import com.android.extensions.xr.node.Node;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -40,7 +39,7 @@
 
     @Test
     public void convertPointSourceAttributes_returnsExtensionsAttributes() {
-        Node expected = XrExtensionsProvider.getXrExtensions().createNode();
+        Node expected = new FakeXrExtensions().createNode();
 
         AndroidXrEntity entity = mock(AndroidXrEntity.class);
         when(entity.getNode()).thenReturn(expected);
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MovableComponentImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MovableComponentImplTest.java
index 0ea2d9b..31dfe14 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MovableComponentImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/MovableComponentImplTest.java
@@ -42,9 +42,12 @@
 
 import androidx.annotation.NonNull;
 import androidx.test.rule.GrantPermissionRule;
-import androidx.xr.extensions.node.NodeTypeConverter;
+import androidx.xr.extensions.node.Mat4f;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.Quatf;
 import androidx.xr.extensions.node.ReformEvent;
 import androidx.xr.extensions.node.ReformOptions;
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
@@ -61,7 +64,6 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneSemantic;
 import androidx.xr.scenecore.JxrPlatformAdapter.PlaneType;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.Anchor;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Plane;
@@ -69,16 +71,10 @@
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Mat4f;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeTransform;
-import com.android.extensions.xr.node.Quatf;
-import com.android.extensions.xr.node.ShadowNodeTransform;
-import com.android.extensions.xr.node.ShadowReformEvent;
-import com.android.extensions.xr.node.Vec3;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNodeTransform;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeReformEvent;
 
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
@@ -97,8 +93,6 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.android.controller.ActivityController;
 
-import java.time.Duration;
-
 @RunWith(RobolectricTestRunner.class)
 public class MovableComponentImplTest {
     private final ActivityController<Activity> mActivityController =
@@ -106,7 +100,7 @@
     private final Activity mActivity = mActivityController.create().start().get();
     private final FakeScheduledExecutorService mFakeExecutor = new FakeScheduledExecutorService();
     private final PerceptionLibrary mPerceptionLibrary = mock(PerceptionLibrary.class);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeImpressApi mFakeImpressApi = new FakeImpressApi();
     private final EntityManager mEntityManager = new EntityManager();
 
@@ -137,7 +131,7 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         mEntityManager,
                         mPerceptionLibrary,
@@ -148,10 +142,6 @@
         mActivitySpaceNode = mActivitySpaceImpl.getNode();
         mPerceptionSpaceActivityPose =
                 (PerceptionSpaceActivityPoseImpl) mFakeRuntime.getPerceptionSpaceActivityPose();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        mFakeExecutor.simulateSleepExecutingAllTasks(
-                Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
     }
 
     @After
@@ -169,17 +159,17 @@
         Context displayContext = mActivity.createDisplayContext(display);
         View view = new View(displayContext);
         view.setLayoutParams(new LayoutParams(640, 480));
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
 
         PanelEntityImpl panelEntity =
                 new PanelEntityImpl(
-                        displayContext,
                         node,
                         view,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
                         new PixelDimensions(10, 10),
                         "panelShadow",
+                        displayContext,
                         mFakeExecutor);
         panelEntity.setParent(mActivitySpaceImpl);
         return panelEntity;
@@ -190,9 +180,9 @@
         Matrix4 scaleMatrix = Matrix4.fromScale(scale);
         Matrix4 scaledPoseMatrix = poseMatrix.times(scaleMatrix);
         Mat4f mat4f = new Mat4f(scaledPoseMatrix.getData());
-        NodeTransform nodeTransformEvent = ShadowNodeTransform.create(mat4f);
+        FakeNodeTransform nodeTransformEvent = new FakeNodeTransform(mat4f);
 
-        new FakeNode(mActivitySpaceNode).sendTransformEvent(nodeTransformEvent);
+        ((FakeNode) mActivitySpaceNode).sendTransformEvent(nodeTransformEvent);
         mFakeExecutor.runAll();
     }
 
@@ -213,7 +203,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -222,7 +212,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         assertThat(node.getReformOptions().getEnabledReform()).isEqualTo(ReformOptions.ALLOW_MOVE);
         assertThat(node.getReformOptions().getFlags())
@@ -241,7 +231,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -250,7 +240,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         assertThat(node.getReformOptions().getEnabledReform()).isEqualTo(ReformOptions.ALLOW_MOVE);
         assertThat(node.getReformOptions().getFlags())
@@ -269,7 +259,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -278,7 +268,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         assertThat(node.getReformOptions().getEnabledReform()).isEqualTo(ReformOptions.ALLOW_MOVE);
         assertThat(node.getReformOptions().getFlags())
@@ -297,7 +287,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -306,7 +296,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         assertThat(node.getReformOptions().getEnabledReform()).isEqualTo(ReformOptions.ALLOW_MOVE);
         assertThat(node.getReformOptions().getFlags())
@@ -326,7 +316,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -341,16 +331,12 @@
         entity.setPose(new Pose(new Vector3(1f, 1f, 1f), new Quaternion(0f, 0f, 0f, 1f)));
         entity.setScale(new Vector3(1f, 1f, 1f));
 
-        FakeNode node = new FakeNode(entity.getNode());
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-        ShadowReformEvent shadowReformEvent = ShadowReformEvent.extract(realReformEvent);
-        shadowReformEvent.setProposedPosition(new Vec3(2f, 2f, 2f));
-        shadowReformEvent.setProposedOrientation(new Quatf(0.5f, 0.5f, 0.5f, 0.5f));
-        shadowReformEvent.setProposedScale(new Vec3(1.2f, 1.2f, 1.2f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeNode node = (FakeNode) entity.getNode();
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setProposedPosition(new Vec3(2f, 2f, 2f));
+        reformEvent.setProposedOrientation(new Quatf(0.5f, 0.5f, 0.5f, 0.5f));
+        reformEvent.setProposedScale(new Vec3(1.2f, 1.2f, 1.2f));
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -371,7 +357,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -384,16 +370,12 @@
         entity.setPose(new Pose(new Vector3(1f, 1f, 1f), new Quaternion(0f, 0f, 0f, 1f)));
         entity.setScale(new Vector3(1f, 1f, 1f));
 
-        FakeNode node = new FakeNode(entity.getNode());
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-        ShadowReformEvent shadowReformEvent = ShadowReformEvent.extract(realReformEvent);
-        shadowReformEvent.setProposedPosition(new Vec3(2f, 2f, 2f));
-        shadowReformEvent.setProposedOrientation(new Quatf(0.5f, 0.5f, 0.5f, 0.5f));
-        shadowReformEvent.setProposedScale(new Vec3(1.2f, 1.2f, 1.2f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeNode node = (FakeNode) entity.getNode();
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setProposedPosition(new Vec3(2f, 2f, 2f));
+        reformEvent.setProposedOrientation(new Quatf(0.5f, 0.5f, 0.5f, 0.5f));
+        reformEvent.setProposedScale(new Vec3(1.2f, 1.2f, 1.2f));
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -414,7 +396,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -423,7 +405,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         movableComponent.setSize(new Dimensions(2f, 2f, 2f));
         assertThat(node.getReformOptions().getCurrentSize().x).isEqualTo(2f);
@@ -441,14 +423,14 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
                         mEntityManager,
                         mPanelShadowRenderer,
                         mFakeExecutor);
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
         // Default value for scaleWithDistanceMode is DEFAULT.
         assertThat(movableComponent.getScaleWithDistanceMode())
@@ -468,14 +450,14 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
                         mEntityManager,
                         mPanelShadowRenderer,
                         mFakeExecutor);
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         assertThat(entity.addComponent(movableComponent)).isTrue();
 
         movableComponent.setScaleWithDistanceMode(MovableComponent.ScaleWithDistanceMode.DMM);
@@ -496,7 +478,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -509,7 +491,7 @@
         movableComponent.addMoveEventListener(directExecutor(), mockMoveEventListener);
         assertThat(movableComponent.mReformEventConsumer).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
 
         assertThat(node.getReformOptions().getCurrentSize().x).isEqualTo(2f);
         assertThat(node.getReformOptions().getCurrentSize().y).isEqualTo(2f);
@@ -533,7 +515,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -542,7 +524,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         MoveEventListener mockMoveEventListener = mock(MoveEventListener.class);
 
         movableComponent.addMoveEventListener(directExecutor(), mockMoveEventListener);
@@ -550,27 +532,19 @@
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
         assertThat(entity.mReformEventConsumerMap).isNotEmpty();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(mockMoveEventListener, never()).onMoveEvent(any());
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent moveReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(moveReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         ArgumentCaptor<MoveEvent> moveEventCaptor = ArgumentCaptor.forClass(MoveEvent.class);
@@ -590,7 +564,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -599,7 +573,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         MoveEventListener mockMoveEventListener = mock(MoveEventListener.class);
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -607,11 +581,8 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -632,7 +603,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -640,18 +611,15 @@
                         mPanelShadowRenderer,
                         mFakeExecutor);
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         MoveEventListener mockMoveEventListener1 = mock(MoveEventListener.class);
         MoveEventListener mockMoveEventListener2 = mock(MoveEventListener.class);
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
         movableComponent.addMoveEventListener(executorService, mockMoveEventListener1);
         movableComponent.addMoveEventListener(executorService, mockMoveEventListener2);
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -674,7 +642,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -682,18 +650,15 @@
                         mPanelShadowRenderer,
                         mFakeExecutor);
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         MoveEventListener mockMoveEventListener1 = mock(MoveEventListener.class);
         MoveEventListener mockMoveEventListener2 = mock(MoveEventListener.class);
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
         movableComponent.addMoveEventListener(executorService, mockMoveEventListener1);
         movableComponent.addMoveEventListener(executorService, mockMoveEventListener2);
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -728,7 +693,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -737,7 +702,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         MoveEventListener mockMoveEventListener = mock(MoveEventListener.class);
 
         movableComponent.addMoveEventListener(directExecutor(), mockMoveEventListener);
@@ -745,7 +710,13 @@
         assertThat(((AndroidXrEntity) entity).mReformEventConsumerMap).isNotEmpty();
 
         entity.removeComponent(movableComponent);
-        assertThat(node.getReformOptions()).isNull();
+        assertThat(node.getReformOptions().getEnabledReform() & ReformOptions.ALLOW_MOVE)
+                .isEqualTo(0);
+        assertThat(
+                        node.getReformOptions().getFlags()
+                                & (ReformOptions.FLAG_SCALE_WITH_DISTANCE
+                                        | ReformOptions.FLAG_ALLOW_SYSTEM_MOVEMENT))
+                .isEqualTo(0);
         assertThat(movableComponent.mReformEventConsumer).isNull();
         assertThat(((AndroidXrEntity) entity).mReformEventConsumerMap).isEmpty();
     }
@@ -761,7 +732,7 @@
                         /* anchorPlacement= */ ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -805,7 +776,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -814,7 +785,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -824,17 +795,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_ONGOING,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_ONGOING);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -894,7 +861,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -903,7 +870,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -913,17 +880,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_ONGOING,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_ONGOING);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -977,7 +940,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -986,7 +949,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -997,17 +960,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_ONGOING,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_ONGOING);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1070,7 +1029,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1079,7 +1038,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1090,17 +1049,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_ONGOING,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_ONGOING);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1156,7 +1111,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1165,7 +1120,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1176,17 +1131,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_ONGOING,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane. This needs to be divided by the scale of the activity space.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(.5f, .5f, .5f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(.5f, .5f, .5f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_ONGOING);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1241,7 +1192,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1250,7 +1201,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1262,17 +1213,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1332,7 +1279,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1341,7 +1288,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1353,20 +1300,15 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 2 + half the MIN_PLANE_ANCHOR_DISTANCE above the origin. So
         // it
         // would be right above the plane.
-        ShadowReformEvent.extract(realReformEvent)
-                .setProposedPosition(
-                        new Vec3(1f, 3f + MovableComponentImpl.MIN_PLANE_ANCHOR_DISTANCE / 2f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(
+                new Vec3(1f, 3f + MovableComponentImpl.MIN_PLANE_ANCHOR_DISTANCE / 2f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1432,7 +1374,7 @@
                         anchorPlacementSet,
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1441,7 +1383,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1453,17 +1395,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1525,7 +1463,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1534,7 +1472,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1546,17 +1484,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane. This needs to be divided by the scale of the activity space.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(.5f, .5f, .5f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(.5f, .5f, .5f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1600,7 +1534,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1609,7 +1543,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1620,12 +1554,10 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1661,7 +1593,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1670,7 +1602,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1681,12 +1613,10 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1734,7 +1664,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1743,7 +1673,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1754,12 +1684,10 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1811,7 +1739,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1820,7 +1748,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1832,17 +1760,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 1f, 1f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1866,21 +1790,14 @@
         assertThat(moveEventListener.mLastMoveEvent.updatedParent).isInstanceOf(AnchorEntity.class);
         assertThat(moveEventListener.mLastMoveEvent.updatedParent).isEqualTo(entity.getParent());
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-
         // Put the proposed position at 4 above the origin so it would be off the plane. It should
         // reset to the activity space pose and rotation.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 4f, 1f));
-
-        final ReformEvent secondReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 4f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(secondReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -1939,7 +1856,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -1948,7 +1865,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -1960,17 +1877,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane. This needs to be divided by the scale of the activity space.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(.5f, .5f, .5f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(.5f, .5f, .5f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -1997,21 +1910,14 @@
         assertThat(moveEventListener.mLastMoveEvent.updatedParent).isEqualTo(entity.getParent());
         assertVector3(entity.getWorldSpaceScale(), entityScale.times(activityScale));
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-
         // Put the proposed position at 4 above the activity space so it would be off the plane. It
         // should reset to the activity space pose and rotation.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 4f, 1f));
-
-        final ReformEvent secondReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 4f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(secondReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -2072,7 +1978,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -2081,7 +1987,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -2093,18 +1999,14 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1 above the origin. It would need to move up 1 unit to be on
         // the
         // plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1.0f, 1.0f, 1.0f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -2128,21 +2030,14 @@
         assertThat(moveEventListener.mLastMoveEvent.updatedParent).isInstanceOf(AnchorEntity.class);
         assertThat(moveEventListener.mLastMoveEvent.updatedParent).isEqualTo(entity.getParent());
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-
         // Put the proposed position at 4 above the origin so it would be off the plane. It should
         // reset to the activity space pose and rotation.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 4f, 1f));
-
-        final ReformEvent secondReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 4f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(secondReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -2196,7 +2091,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ true,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -2205,7 +2100,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -2217,17 +2112,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1.0f, 1.0f, 1.0f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -2253,21 +2144,14 @@
         // Cache the anchor entity.
         Entity anchorEntity = moveEventListener.mLastMoveEvent.updatedParent;
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-
         // Put the proposed position at 4 above the origin so it would be off the plane. It should
         // reset to the activity space pose and rotation.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1f, 4f, 1f));
-
-        final ReformEvent secondReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 4f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(secondReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -2325,7 +2209,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ true,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -2334,7 +2218,7 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
         TestMoveEventListener moveEventListener = new TestMoveEventListener();
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -2346,17 +2230,13 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1  above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1.0f, 1.0f, 1.0f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -2385,20 +2265,14 @@
         Entity child = createTestEntity();
         anchorEntity.addChild(child);
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-
         // Put the proposed position at 4 above the origin so it would be off the plane. It should
         // reset to the activity space pose and rotation.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1.0f, 4.0f, 1.0f));
-        final ReformEvent secondReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 4f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(secondReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -2452,7 +2326,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -2461,19 +2335,15 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_ONGOING,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 1 above the origin. so it would need to move up 1 unit to
         // be on the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1.0f, 1.0f, 1.0f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_ONGOING);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -2519,7 +2389,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -2528,18 +2398,14 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_ONGOING,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Put the proposed position at 5 above the origin. so it is far away from the plane.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1.0f, 5.0f, 1.0f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 5f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_ONGOING);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
@@ -2581,7 +2447,7 @@
                         createAnyAnchorPlacement(),
                         /* shouldDisposeParentAnchor= */ false,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -2590,18 +2456,14 @@
                         mFakeExecutor);
         assertThat(movableComponent).isNotNull();
         assertThat(entity.addComponent(movableComponent)).isTrue();
-        FakeNode node = new FakeNode(((AndroidXrEntity) entity).getNode());
+        FakeNode node = (FakeNode) ((AndroidXrEntity) entity).getNode();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
+        FakeReformEvent reformEvent = new FakeReformEvent();
 
         // Set the reform state to end so that the plane shadow gets destroyed.
-        ShadowReformEvent.extract(realReformEvent).setProposedPosition(new Vec3(1.0f, 1.0f, 1.0f));
-
-        final ReformEvent reformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setProposedPosition(new Vec3(1f, 1f, 1f));
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
                 .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/OpenXrActivityPoseTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/OpenXrActivityPoseTest.java
index d6cfb33..de44d6d7 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/OpenXrActivityPoseTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/OpenXrActivityPoseTest.java
@@ -22,24 +22,20 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import android.app.Activity;
-
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter.CameraViewActivityPose;
 import androidx.xr.scenecore.common.BaseActivityPose;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.Fov;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.impl.perception.ViewProjection;
 import androidx.xr.scenecore.impl.perception.ViewProjections;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.asset.FakeGltfModelToken;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeGltfModelToken;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -47,7 +43,6 @@
 import org.robolectric.ParameterizedRobolectricTestRunner;
 import org.robolectric.ParameterizedRobolectricTestRunner.Parameter;
 import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
-import org.robolectric.Robolectric;
 
 import java.util.Arrays;
 import java.util.List;
@@ -56,19 +51,17 @@
 @RunWith(ParameterizedRobolectricTestRunner.class)
 public final class OpenXrActivityPoseTest {
     private final AndroidXrEntity mActivitySpaceRoot = mock(AndroidXrEntity.class);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final PerceptionLibrary mPerceptionLibrary = mock(PerceptionLibrary.class);
     private final Session mSession = mock(Session.class);
     private final FakeScheduledExecutorService mExecutor = new FakeScheduledExecutorService();
     private final EntityManager mEntityManager = new EntityManager();
-    private final Activity mActivity =
-            Robolectric.buildActivity(Activity.class).create().start().get();
     private final ActivitySpaceImpl mActivitySpace =
             new ActivitySpaceImpl(
-                    mXrExtensions.createNode(),
-                    mXrExtensions,
+                    mFakeExtensions.createNode(),
+                    mFakeExtensions,
                     mEntityManager,
-                    () -> mXrExtensions.getSpatialState(mActivity),
+                    () -> mFakeExtensions.fakeSpatialState,
                     mExecutor);
 
     enum OpenXrActivityPoseType {
@@ -159,7 +152,8 @@
     private GltfEntityImpl createGltfEntity() {
         FakeGltfModelToken modelToken = new FakeGltfModelToken("model");
         GltfModelResourceImpl model = new GltfModelResourceImpl(modelToken);
-        return new GltfEntityImpl(model, mActivitySpace, mXrExtensions, mEntityManager, mExecutor);
+        return new GltfEntityImpl(
+                model, mActivitySpace, mFakeExtensions, mEntityManager, mExecutor);
     }
 
     @Test
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PanelEntityImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PanelEntityImplTest.java
index 7bc82a6..348c330 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PanelEntityImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PanelEntityImplTest.java
@@ -31,18 +31,16 @@
 import android.view.View;
 import android.view.ViewGroup.LayoutParams;
 
+import androidx.xr.extensions.node.Node;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
 import androidx.xr.scenecore.JxrPlatformAdapter.PixelDimensions;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
 
@@ -59,7 +57,7 @@
 public class PanelEntityImplTest {
     private static final Dimensions kVgaResolutionPx = new Dimensions(640f, 480f, 0f);
     private static final Dimensions kHdResolutionPx = new Dimensions(1280f, 720f, 0f);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     FakeImpressApi mFakeImpressApi = new FakeImpressApi();
     private final ActivityController<Activity> mActivityController =
             Robolectric.buildActivity(Activity.class);
@@ -83,7 +81,7 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mMakeFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApi,
                         new EntityManager(),
                         mPerceptionLibrary,
@@ -103,18 +101,18 @@
         Context displayContext = mActivity.createDisplayContext(display);
         View view = new View(displayContext);
         view.setLayoutParams(new LayoutParams(640, 480));
-        Node node = mXrExtensions.createNode();
+        Node node = mFakeExtensions.createNode();
 
         PanelEntityImpl panelEntity =
                 new PanelEntityImpl(
-                        displayContext,
                         node,
                         view,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mEntityManager,
                         new PixelDimensions(
                                 (int) surfaceDimensionsPx.width, (int) surfaceDimensionsPx.height),
                         "panel",
+                        displayContext,
                         mMakeFakeExecutor);
 
         // TODO(b/352829122): introduce a TestRootEntity which can serve as a parent
@@ -163,8 +161,8 @@
         assertThat(panelEntity.getSize().height).isEqualTo(480f);
         assertThat(panelEntity.getSize().depth).isEqualTo(0f);
 
-        assertThat(panelEntity.getSizeInPixels().width).isEqualTo(640);
-        assertThat(panelEntity.getSizeInPixels().height).isEqualTo(480);
+        assertThat(panelEntity.getPixelDimensions().width).isEqualTo(640);
+        assertThat(panelEntity.getPixelDimensions().height).isEqualTo(480);
     }
 
     @Test
@@ -174,7 +172,7 @@
         // The (FakeXrExtensions) test default pixel density is 1 pixel per meter.
         // Validate that the corner radius is set to 32dp.
         assertThat(panelEntity.getCornerRadius()).isEqualTo(32.0f);
-        FakeNode fakeNode = new FakeNode(panelEntity.getNode());
+        FakeNode fakeNode = (FakeNode) panelEntity.getNode();
         assertThat(fakeNode.getCornerRadius()).isEqualTo(32.0f);
     }
 
@@ -185,7 +183,7 @@
         // The (FakeXrExtensions) test default pixel density is 1 pixel per meter.
         // Validate that the corner radius is set to 32dp.
         assertThat(panelEntity.getCornerRadius()).isEqualTo(20f);
-        FakeNode fakeNode = new FakeNode(panelEntity.getNode());
+        FakeNode fakeNode = (FakeNode) panelEntity.getNode();
         assertThat(fakeNode.getCornerRadius()).isEqualTo(20f);
     }
 
@@ -196,7 +194,7 @@
         // The (FakeXrExtensions) test default pixel density is 1 pixel per meter.
         // Validate that the corner radius is set to 32dp.
         assertThat(panelEntity.getCornerRadius()).isEqualTo(20f);
-        FakeNode fakeNode = new FakeNode(panelEntity.getNode());
+        FakeNode fakeNode = (FakeNode) panelEntity.getNode();
         assertThat(fakeNode.getCornerRadius()).isEqualTo(20f);
     }
 }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PerceptionSpaceActivityPoseImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PerceptionSpaceActivityPoseImplTest.java
index b80f290..95d3e56 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PerceptionSpaceActivityPoseImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PerceptionSpaceActivityPoseImplTest.java
@@ -19,68 +19,56 @@
 import static androidx.xr.runtime.testing.math.MathAssertions.assertPose;
 import static androidx.xr.runtime.testing.math.MathAssertions.assertVector3;
 
-import android.app.Activity;
-
+import androidx.xr.extensions.node.Mat4f;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
 import androidx.xr.runtime.math.Vector3;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeGltfModelToken;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.asset.FakeGltfModelToken;
-import com.android.extensions.xr.node.Mat4f;
-import com.android.extensions.xr.node.ShadowNodeTransform;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNodeTransform;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mockito;
-import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 
-import java.time.Duration;
-
 @RunWith(RobolectricTestRunner.class)
 public final class PerceptionSpaceActivityPoseImplTest {
 
     private final AndroidXrEntity mActivitySpaceRoot = Mockito.mock(AndroidXrEntity.class);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeScheduledExecutorService mExecutor = new FakeScheduledExecutorService();
     private final EntityManager mEntityManager = new EntityManager();
-    private final Activity mActivity =
-            Robolectric.buildActivity(Activity.class).create().start().get();
     private final ActivitySpaceImpl mActivitySpace =
             new ActivitySpaceImpl(
-                    mXrExtensions.createNode(),
-                    mXrExtensions,
+                    mFakeExtensions.createNode(),
+                    mFakeExtensions,
                     mEntityManager,
-                    () -> mXrExtensions.getSpatialState(mActivity),
+                    () -> mFakeExtensions.fakeSpatialState,
                     mExecutor);
 
     private PerceptionSpaceActivityPoseImpl mPerceptionSpaceActivityPose;
 
     private FakeNode getActivitySpaceNode() {
-        return new FakeNode(mActivitySpace.getNode());
+        return (FakeNode) mActivitySpace.getNode();
     }
 
     /** Creates a generic glTF entity. */
     private GltfEntityImpl createGltfEntity() {
         FakeGltfModelToken modelToken = new FakeGltfModelToken("model");
         GltfModelResourceImpl model = new GltfModelResourceImpl(modelToken);
-        return new GltfEntityImpl(model, mActivitySpace, mXrExtensions, mEntityManager, mExecutor);
+        return new GltfEntityImpl(
+                model, mActivitySpace, mFakeExtensions, mEntityManager, mExecutor);
     }
 
     @Before
     public void setUp() {
         mPerceptionSpaceActivityPose =
                 new PerceptionSpaceActivityPoseImpl(mActivitySpace, mActivitySpaceRoot);
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        mExecutor.simulateSleepExecutingAllTasks(
-                Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
     }
 
     @Test
@@ -92,7 +80,7 @@
                         new Vector3(1.0f, 1.0f, 1.0f));
         getActivitySpaceNode()
                 .sendTransformEvent(
-                        ShadowNodeTransform.create(new Mat4f(activitySpaceMatrix.getData())));
+                        new FakeNodeTransform(new Mat4f(activitySpaceMatrix.getData())));
         mExecutor.runAll();
 
         Pose poseInActivitySpace = mPerceptionSpaceActivityPose.getPoseInActivitySpace();
@@ -110,7 +98,7 @@
                         new Vector3(1.0f, 1.0f, 1.0f));
         getActivitySpaceNode()
                 .sendTransformEvent(
-                        ShadowNodeTransform.create(new Mat4f(activitySpaceMatrix.getData())));
+                        new FakeNodeTransform(new Mat4f(activitySpaceMatrix.getData())));
         mExecutor.runAll();
 
         Pose transformedPose =
@@ -129,7 +117,7 @@
                         new Vector3(1.0f, 1.0f, 1.0f));
         getActivitySpaceNode()
                 .sendTransformEvent(
-                        ShadowNodeTransform.create(new Mat4f(activitySpaceMatrix.getData())));
+                        new FakeNodeTransform(new Mat4f(activitySpaceMatrix.getData())));
         mExecutor.runAll();
         GltfEntityImpl gltfEntity = createGltfEntity();
         gltfEntity.setScale(new Vector3(2.0f, 2.0f, 2.0f));
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PointerCaptureComponentImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PointerCaptureComponentImplTest.java
index ee9b1a7..cabaef6 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PointerCaptureComponentImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/PointerCaptureComponentImplTest.java
@@ -16,30 +16,23 @@
 
 package androidx.xr.scenecore.impl;
 
-import static com.android.extensions.xr.node.InputEvent.ACTION_MOVE;
-import static com.android.extensions.xr.node.InputEvent.DISPATCH_FLAG_NONE;
-import static com.android.extensions.xr.node.InputEvent.POINTER_TYPE_DEFAULT;
-import static com.android.extensions.xr.node.InputEvent.SOURCE_UNKNOWN;
-
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.util.concurrent.MoreExecutors.directExecutor;
 
 import androidx.annotation.NonNull;
+import androidx.xr.extensions.node.InputEvent;
+import androidx.xr.extensions.node.Node;
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.Entity;
 import androidx.xr.scenecore.JxrPlatformAdapter.InputEventListener;
 import androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent;
 import androidx.xr.scenecore.JxrPlatformAdapter.PointerCaptureComponent.StateListener;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeInputEvent;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
 
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.InputEvent;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.ShadowInputEvent;
-import com.android.extensions.xr.node.Vec3;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -70,13 +63,12 @@
 
     private final FakeInputEventListener mInputListener = new FakeInputEventListener();
 
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeScheduledExecutorService mFakeScheduler = new FakeScheduledExecutorService();
-    private final Node mNode = mXrExtensions.createNode();
-    private final FakeNode mFakeNode = new FakeNode(mNode);
+    private final FakeNode mFakeNode = (FakeNode) mFakeExtensions.createNode();
 
     private final Entity mEntity =
-            new AndroidXrEntity(mNode, mXrExtensions, new EntityManager(), mFakeScheduler) {};
+            new AndroidXrEntity(mFakeNode, mFakeExtensions, new EntityManager(), mFakeScheduler) {};
 
     @Test
     public void onAttach_enablesPointerCapture() {
@@ -94,15 +86,10 @@
                 new PointerCaptureComponentImpl(directExecutor(), mStateListener, mInputListener);
         assertThat(component.onAttach(mEntity)).isTrue();
 
-        InputEvent fakeInput =
-                ShadowInputEvent.create(
-                        SOURCE_UNKNOWN,
-                        POINTER_TYPE_DEFAULT,
-                        /* timestamp= */ 0,
-                        /* origin= */ new Vec3(0, 0, 0),
-                        /* direction= */ new Vec3(1, 1, 1),
-                        InputEvent.DISPATCH_FLAG_CAPTURED_POINTER,
-                        ACTION_MOVE);
+        FakeInputEvent fakeInput = new FakeInputEvent();
+        fakeInput.setDispatchFlags(InputEvent.DISPATCH_FLAG_CAPTURED_POINTER);
+        fakeInput.setOrigin(new Vec3(0, 0, 0));
+        fakeInput.setDirection(new Vec3(1, 1, 1));
         mFakeNode.sendInputEvent(fakeInput);
         mFakeScheduler.runAll();
 
@@ -118,25 +105,16 @@
                 new PointerCaptureComponentImpl(directExecutor(), mStateListener, mInputListener);
         assertThat(component.onAttach(mEntity)).isTrue();
 
-        InputEvent fakeCapturedInput =
-                ShadowInputEvent.create(
-                        SOURCE_UNKNOWN,
-                        POINTER_TYPE_DEFAULT,
-                        /* timestamp= */ 100,
-                        /* origin= */ new Vec3(0, 0, 0),
-                        /* direction= */ new Vec3(1, 1, 1),
-                        InputEvent.DISPATCH_FLAG_CAPTURED_POINTER,
-                        ACTION_MOVE);
+        FakeInputEvent fakeCapturedInput = new FakeInputEvent();
+        fakeCapturedInput.setDispatchFlags(InputEvent.DISPATCH_FLAG_CAPTURED_POINTER);
+        fakeCapturedInput.setTimestamp(100);
+        fakeCapturedInput.setOrigin(new Vec3(0, 0, 0));
+        fakeCapturedInput.setDirection(new Vec3(1, 1, 1));
 
-        InputEvent fakeInput =
-                ShadowInputEvent.create(
-                        SOURCE_UNKNOWN,
-                        POINTER_TYPE_DEFAULT,
-                        /* timestamp= */ 200,
-                        /* origin= */ new Vec3(0, 0, 0),
-                        /* direction= */ new Vec3(1, 1, 1),
-                        DISPATCH_FLAG_NONE,
-                        ACTION_MOVE);
+        FakeInputEvent fakeInput = new FakeInputEvent();
+        fakeInput.setTimestamp(200);
+        fakeInput.setOrigin(new Vec3(0, 0, 0));
+        fakeInput.setDirection(new Vec3(1, 1, 1));
 
         mFakeNode.sendInputEvent(fakeCapturedInput);
         mFakeNode.sendInputEvent(fakeInput);
@@ -155,15 +133,11 @@
                         propagationExecutor, mStateListener, mInputListener);
         assertThat(component.onAttach(mEntity)).isTrue();
 
-        InputEvent fakeCapturedInput =
-                ShadowInputEvent.create(
-                        SOURCE_UNKNOWN,
-                        POINTER_TYPE_DEFAULT,
-                        /* timestamp= */ 100,
-                        /* origin= */ new Vec3(0, 0, 0),
-                        /* direction= */ new Vec3(1, 1, 1),
-                        InputEvent.DISPATCH_FLAG_CAPTURED_POINTER,
-                        ACTION_MOVE);
+        FakeInputEvent fakeCapturedInput = new FakeInputEvent();
+        fakeCapturedInput.setDispatchFlags(InputEvent.DISPATCH_FLAG_CAPTURED_POINTER);
+        fakeCapturedInput.setTimestamp(100);
+        fakeCapturedInput.setOrigin(new Vec3(0, 0, 0));
+        fakeCapturedInput.setDirection(new Vec3(1, 1, 1));
 
         mFakeNode.sendInputEvent(fakeCapturedInput);
 
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ResizableComponentImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ResizableComponentImplTest.java
index e57e7f5..e8107d9 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ResizableComponentImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/ResizableComponentImplTest.java
@@ -31,9 +31,10 @@
 
 import android.app.Activity;
 
-import androidx.xr.extensions.node.NodeTypeConverter;
+import androidx.xr.extensions.node.Node;
 import androidx.xr.extensions.node.ReformEvent;
 import androidx.xr.extensions.node.ReformOptions;
+import androidx.xr.extensions.node.Vec3;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.Dimensions;
@@ -41,17 +42,13 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.MoveEventListener;
 import androidx.xr.scenecore.JxrPlatformAdapter.ResizeEvent;
 import androidx.xr.scenecore.JxrPlatformAdapter.ResizeEventListener;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.impl.perception.PerceptionLibrary;
 import androidx.xr.scenecore.impl.perception.Session;
 import androidx.xr.scenecore.testing.FakeImpressApi;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.ShadowReformEvent;
-import com.android.extensions.xr.node.Vec3;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeReformEvent;
 
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.ar.imp.view.splitengine.ImpSplitEngineRenderer;
@@ -76,16 +73,16 @@
     private final Activity mActivity = mActivityController.create().start().get();
     private final FakeScheduledExecutorService mFakeExecutor = new FakeScheduledExecutorService();
     private final PerceptionLibrary mPerceptionLibrary = mock(PerceptionLibrary.class);
-    private final XrExtensions mXrExtensions = XrExtensionsProvider.getXrExtensions();
+    private final FakeXrExtensions mFakeExtensions = new FakeXrExtensions();
     private final FakeImpressApi mFakeImpressApiImpl = new FakeImpressApi();
     private final EntityManager mEntityManager = new EntityManager();
-    private final Node mActivitySpaceNode = mXrExtensions.createNode();
+    private final Node mActivitySpaceNode = mFakeExtensions.createNode();
     private final ActivitySpaceImpl mActivitySpaceImpl =
             new ActivitySpaceImpl(
                     mActivitySpaceNode,
-                    mXrExtensions,
+                    mFakeExtensions,
                     mEntityManager,
-                    () -> mXrExtensions.getSpatialState(mActivity),
+                    () -> mFakeExtensions.fakeSpatialState,
                     mFakeExecutor);
     private final AndroidXrEntity mActivitySpaceRoot = Mockito.mock(AndroidXrEntity.class);
     private final PerceptionSpaceActivityPoseImpl mPerceptionSpaceActivityPose =
@@ -107,7 +104,7 @@
                 JxrPlatformAdapterAxr.create(
                         mActivity,
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mFakeImpressApiImpl,
                         mEntityManager,
                         mPerceptionLibrary,
@@ -132,7 +129,7 @@
         Entity entity2 = createTestEntity();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity1.addComponent(resizableComponent)).isTrue();
         assertThat(entity2.addComponent(resizableComponent)).isFalse();
@@ -144,12 +141,12 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
 
         assertThat(entity.addComponent(resizableComponent)).isTrue();
 
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         assertThat(node.getReformOptions().getEnabledReform())
                 .isEqualTo(ReformOptions.ALLOW_RESIZE);
         assertThat(node.getReformOptions().getMinimumSize().x).isEqualTo(kMinDimensions.width);
@@ -166,11 +163,11 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
 
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
 
         resizableComponent.setSize(kMaxDimensions);
         assertThat(node.getReformOptions().getCurrentSize().x).isEqualTo(kMaxDimensions.width);
@@ -184,11 +181,11 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
 
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
 
         resizableComponent.setMinimumSize(kMaxDimensions);
         assertThat(node.getReformOptions().getMinimumSize().x).isEqualTo(kMaxDimensions.width);
@@ -202,11 +199,11 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
 
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
 
         resizableComponent.setMaximumSize(kMinDimensions);
         assertThat(node.getReformOptions().getMaximumSize().x).isEqualTo(kMinDimensions.width);
@@ -220,11 +217,11 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
 
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
 
         resizableComponent.setFixedAspectRatio(2.0f);
         assertThat(node.getReformOptions().getFixedAspectRatio()).isEqualTo(2.0f);
@@ -241,11 +238,11 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
 
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
 
         resizableComponent.setForceShowResizeOverlay(true);
         assertThat(node.getReformOptions().getForceShowResizeOverlay()).isTrue();
@@ -257,7 +254,7 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         Dimensions testSize = new Dimensions(1f, 1f, 1f);
         Dimensions testMinSize = new Dimensions(0.25f, 0.25f, 0.25f);
@@ -268,7 +265,7 @@
 
         assertThat(entity.addComponent(resizableComponent)).isTrue();
 
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         assertThat(node.getReformOptions().getEnabledReform())
                 .isEqualTo(ReformOptions.ALLOW_RESIZE);
         assertThat(node.getReformOptions().getCurrentSize().x).isEqualTo(testSize.width);
@@ -288,10 +285,10 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener = mock(ResizeEventListener.class);
 
         resizableComponent.addResizeEventListener(directExecutor(), mockResizeEventListener);
@@ -299,26 +296,19 @@
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
         assertThat(entity.mReformEventConsumerMap).isNotEmpty();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent moveReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(moveReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(mockResizeEventListener, never()).onResizeEvent(any());
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(mockResizeEventListener).onResizeEvent(any());
@@ -330,10 +320,10 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener = mock(ResizeEventListener.class);
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
 
@@ -341,15 +331,11 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -363,10 +349,10 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener1 = mock(ResizeEventListener.class);
         ResizeEventListener mockResizeEventListener2 = mock(ResizeEventListener.class);
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
@@ -376,15 +362,11 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -399,10 +381,10 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener1 = mock(ResizeEventListener.class);
         ResizeEventListener mockResizeEventListener2 = mock(ResizeEventListener.class);
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
@@ -412,15 +394,11 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -429,8 +407,7 @@
         resizableComponent.removeResizeEventListener(mockResizeEventListener1);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -445,10 +422,10 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener1 = mock(ResizeEventListener.class);
         ResizeEventListener mockResizeEventListener2 = mock(ResizeEventListener.class);
         FakeScheduledExecutorService executorService = new FakeScheduledExecutorService();
@@ -458,15 +435,11 @@
         assertThat(node.getReformOptions().getEventCallback()).isNotNull();
         assertThat(node.getReformOptions().getEventExecutor()).isNotNull();
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         assertThat(executorService.hasNext()).isTrue();
@@ -486,17 +459,18 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener = mock(ResizeEventListener.class);
 
         resizableComponent.addResizeEventListener(directExecutor(), mockResizeEventListener);
         assertThat(resizableComponent.mReformEventConsumer).isNotNull();
 
         entity.removeComponent(resizableComponent);
-        assertThat(node.getReformOptions()).isNull();
+        assertThat(node.getReformOptions().getEnabledReform() & ReformOptions.ALLOW_RESIZE)
+                .isEqualTo(0);
         assertThat(entity.mReformEventConsumerMap).isEmpty();
     }
 
@@ -511,7 +485,7 @@
                         ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ true,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -521,12 +495,12 @@
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         new Dimensions(0f, 0f, 0f),
                         new Dimensions(5f, 5f, 5f));
         assertThat(entity.addComponent(movableComponent)).isTrue();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         assertThat(node.getReformOptions().getEnabledReform())
                 .isEqualTo(ReformOptions.ALLOW_MOVE | ReformOptions.ALLOW_RESIZE);
     }
@@ -542,7 +516,7 @@
                         ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ true,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -552,7 +526,7 @@
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         new Dimensions(0f, 0f, 0f),
                         new Dimensions(5f, 5f, 5f));
         assertThat(entity.addComponent(movableComponent)).isTrue();
@@ -561,7 +535,7 @@
         movableComponent.addMoveEventListener(directExecutor(), moveEventListener);
         ResizeEventListener resizeEventListener = mock(ResizeEventListener.class);
         resizableComponent.addResizeEventListener(directExecutor(), resizeEventListener);
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         assertThat(node.getReformOptions().getEnabledReform())
                 .isEqualTo(ReformOptions.ALLOW_MOVE | ReformOptions.ALLOW_RESIZE);
 
@@ -569,27 +543,19 @@
         assertThat(node.getReformOptions().getEnabledReform())
                 .isEqualTo(ReformOptions.ALLOW_RESIZE);
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(resizeEventListener).onResizeEvent(any());
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent moveReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(moveReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(moveEventListener, never()).onMoveEvent(any());
@@ -606,7 +572,7 @@
                         ImmutableSet.of(),
                         /* shouldDisposeParentAnchor= */ true,
                         mPerceptionLibrary,
-                        mXrExtensions,
+                        mFakeExtensions,
                         mActivitySpaceImpl,
                         mActivitySpaceRoot,
                         mPerceptionSpaceActivityPose,
@@ -616,7 +582,7 @@
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
                         mFakeExecutor,
-                        mXrExtensions,
+                        mFakeExtensions,
                         new Dimensions(0f, 0f, 0f),
                         new Dimensions(5f, 5f, 5f));
         assertThat(entity.addComponent(movableComponent)).isTrue();
@@ -625,34 +591,26 @@
         movableComponent.addMoveEventListener(directExecutor(), moveEventListener);
         ResizeEventListener resizeEventListener = mock(ResizeEventListener.class);
         resizableComponent.addResizeEventListener(directExecutor(), resizeEventListener);
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         assertThat(node.getReformOptions().getEnabledReform())
                 .isEqualTo(ReformOptions.ALLOW_MOVE | ReformOptions.ALLOW_RESIZE);
 
         entity.removeComponent(resizableComponent);
         assertThat(node.getReformOptions().getEnabledReform()).isEqualTo(ReformOptions.ALLOW_MOVE);
 
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_MOVE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent moveReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_MOVE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(moveReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(moveEventListener).onMoveEvent(any());
 
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE, /* state= */ 0, /* id= */ 0);
-
-        final ReformEvent resizeReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(
-                        () -> node.getReformOptions().getEventCallback().accept(resizeReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(resizeEventListener, never()).onResizeEvent(any());
@@ -664,7 +622,7 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
         entity.removeComponent(resizableComponent);
@@ -677,12 +635,12 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
         entity.setAlpha(0.9f);
         assertThat(entity.getAlpha()).isEqualTo(0.9f);
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener = mock(ResizeEventListener.class);
 
         resizableComponent.addResizeEventListener(directExecutor(), mockResizeEventListener);
@@ -691,16 +649,12 @@
         assertThat(entity.mReformEventConsumerMap).isNotEmpty();
 
         // Start the resize.
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_START,
-                        /* id= */ 0);
-
-        final ReformEvent startReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_START);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(startReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         ArgumentCaptor<ResizeEvent> resizeEventCaptor = ArgumentCaptor.forClass(ResizeEvent.class);
@@ -710,16 +664,10 @@
         assertThat(node.getAlpha()).isEqualTo(0.0f);
 
         // End the resize.
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-
-        final ReformEvent endReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(endReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(mockResizeEventListener, times(2)).onResizeEvent(resizeEventCaptor.capture());
@@ -734,12 +682,12 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
         entity.setAlpha(0.9f);
         assertThat(entity.getAlpha()).isEqualTo(0.9f);
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         ResizeEventListener mockResizeEventListener = mock(ResizeEventListener.class);
 
         resizableComponent.setAutoHideContent(false);
@@ -749,16 +697,12 @@
         assertThat(entity.mReformEventConsumerMap).isNotEmpty();
 
         // Start the resize.
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_START,
-                        /* id= */ 0);
-
-        final ReformEvent startReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_START);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(startReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         ArgumentCaptor<ResizeEvent> resizeEventCaptor = ArgumentCaptor.forClass(ResizeEvent.class);
@@ -768,16 +712,10 @@
         assertThat(node.getAlpha()).isEqualTo(0.9f);
 
         // End the resize.
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-
-        final ReformEvent endReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(endReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(mockResizeEventListener, times(2)).onResizeEvent(resizeEventCaptor.capture());
@@ -792,10 +730,10 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         resizableComponent.setSize(new Dimensions(1.0f, 2.0f, 3.0f));
         assertThat(node.getReformOptions().getCurrentSize().x).isEqualTo(1.0f);
         assertThat(node.getReformOptions().getCurrentSize().y).isEqualTo(2.0f);
@@ -808,16 +746,12 @@
         assertThat(entity.mReformEventConsumerMap).isNotEmpty();
 
         // Start the resize.
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_START,
-                        /* id= */ 0);
-
-        final ReformEvent startReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_START);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(startReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         ArgumentCaptor<ResizeEvent> resizeEventCaptor = ArgumentCaptor.forClass(ResizeEvent.class);
@@ -826,17 +760,11 @@
         assertThat(resizeEvent.resizeState).isEqualTo(ResizeEvent.RESIZE_STATE_START);
 
         // End the resize.
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-        ShadowReformEvent.extract(realReformEvent).setProposedSize(new Vec3(4.0f, 5.0f, 6.0f));
-
-        final ReformEvent endReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
+        reformEvent.setProposedSize(new Vec3(4.0f, 5.0f, 6.0f));
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(endReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(mockResizeEventListener, times(2)).onResizeEvent(resizeEventCaptor.capture());
@@ -854,10 +782,10 @@
         assertThat(entity).isNotNull();
         ResizableComponentImpl resizableComponent =
                 new ResizableComponentImpl(
-                        mFakeExecutor, mXrExtensions, kMinDimensions, kMaxDimensions);
+                        mFakeExecutor, mFakeExtensions, kMinDimensions, kMaxDimensions);
         assertThat(resizableComponent).isNotNull();
         assertThat(entity.addComponent(resizableComponent)).isTrue();
-        FakeNode node = new FakeNode(entity.getNode());
+        FakeNode node = (FakeNode) entity.getNode();
         resizableComponent.setAutoUpdateSize(false);
         resizableComponent.setSize(new Dimensions(1.0f, 2.0f, 3.0f));
         assertThat(node.getReformOptions().getCurrentSize().x).isEqualTo(1.0f);
@@ -871,16 +799,12 @@
         assertThat(entity.mReformEventConsumerMap).isNotEmpty();
 
         // Start the resize.
-        com.android.extensions.xr.node.ReformEvent realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_START,
-                        /* id= */ 0);
-
-        final ReformEvent startReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        FakeReformEvent reformEvent = new FakeReformEvent();
+        reformEvent.setType(ReformEvent.REFORM_TYPE_RESIZE);
+        reformEvent.setState(ReformEvent.REFORM_STATE_START);
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(startReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         ArgumentCaptor<ResizeEvent> resizeEventCaptor = ArgumentCaptor.forClass(ResizeEvent.class);
@@ -889,17 +813,11 @@
         assertThat(resizeEvent.resizeState).isEqualTo(ResizeEvent.RESIZE_STATE_START);
 
         // End the resize.
-        realReformEvent =
-                ShadowReformEvent.create(
-                        /* type= */ ReformEvent.REFORM_TYPE_RESIZE,
-                        /* state= */ ReformEvent.REFORM_STATE_END,
-                        /* id= */ 0);
-        ShadowReformEvent.extract(realReformEvent).setProposedSize(new Vec3(4.0f, 5.0f, 6.0f));
-
-        final ReformEvent endReformEvent = NodeTypeConverter.toLibrary(realReformEvent);
+        reformEvent.setState(ReformEvent.REFORM_STATE_END);
+        reformEvent.setProposedSize(new Vec3(4.0f, 5.0f, 6.0f));
         node.getReformOptions()
                 .getEventExecutor()
-                .execute(() -> node.getReformOptions().getEventCallback().accept(endReformEvent));
+                .execute(() -> node.getReformOptions().getEventCallback().accept(reformEvent));
         assertThat(mFakeExecutor.hasNext()).isTrue();
         mFakeExecutor.runAll();
         verify(mockResizeEventListener, times(2)).onResizeEvent(resizeEventCaptor.capture());
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/RuntimeUtilsTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/RuntimeUtilsTest.java
index ed4b94f..c8d8f88 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/RuntimeUtilsTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/RuntimeUtilsTest.java
@@ -24,6 +24,10 @@
 
 import android.util.Log;
 
+import androidx.xr.extensions.environment.EnvironmentVisibilityState;
+import androidx.xr.extensions.environment.PassthroughVisibilityState;
+import androidx.xr.extensions.node.Mat4f;
+import androidx.xr.extensions.node.ReformEvent;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
@@ -34,13 +38,7 @@
 import androidx.xr.scenecore.JxrPlatformAdapter.ResizeEvent;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialCapabilities;
 import androidx.xr.scenecore.impl.perception.Plane;
-
-import com.android.extensions.xr.environment.EnvironmentVisibilityState;
-import com.android.extensions.xr.environment.PassthroughVisibilityState;
-import com.android.extensions.xr.environment.ShadowPassthroughVisibilityState;
-import com.android.extensions.xr.node.Mat4f;
-import com.android.extensions.xr.node.ReformEvent;
-import com.android.extensions.xr.space.ShadowSpatialCapabilities;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakePassthroughVisibilityState;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -175,10 +173,27 @@
         assertThat(RuntimeUtils.poseToPerceptionPose(pose)).isEqualTo(expectedPerceptionPose);
     }
 
+    private static final int CAPS_ALL = -1;
+    private static final int CAPS_NONE = -2;
+
+    private androidx.xr.extensions.space.SpatialCapabilities getCapabilities(int... caps) {
+        return new androidx.xr.extensions.space.SpatialCapabilities() {
+            @Override
+            public boolean get(int capQuery) {
+                for (int cap : caps) {
+                    if (cap == CAPS_ALL || cap == capQuery) {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        };
+    }
+
     @Test
     public void convertSpatialCapabilities_noCapabilities() {
-        com.android.extensions.xr.space.SpatialCapabilities extensionCapabilities =
-                ShadowSpatialCapabilities.create();
+        androidx.xr.extensions.space.SpatialCapabilities extensionCapabilities =
+                getCapabilities(CAPS_NONE);
         SpatialCapabilities caps = RuntimeUtils.convertSpatialCapabilities(extensionCapabilities);
         assertThat(caps.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)).isFalse();
         assertThat(caps.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)).isFalse();
@@ -194,8 +209,8 @@
 
     @Test
     public void convertSpatialCapabilities_allCapabilities() {
-        com.android.extensions.xr.space.SpatialCapabilities extensionCapabilities =
-                ShadowSpatialCapabilities.createAll();
+        androidx.xr.extensions.space.SpatialCapabilities extensionCapabilities =
+                getCapabilities(CAPS_ALL);
         SpatialCapabilities caps = RuntimeUtils.convertSpatialCapabilities(extensionCapabilities);
         assertThat(caps.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)).isTrue();
         assertThat(caps.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)).isTrue();
@@ -213,8 +228,8 @@
     public void convertSpatialCapabilities_singleCapability() {
         // check conversions of a few different instances of the extensions SpatialCapabilities that
         // each have exactly one capability.
-        com.android.extensions.xr.space.SpatialCapabilities extensionCapabilities =
-                ShadowSpatialCapabilities.create(
+        androidx.xr.extensions.space.SpatialCapabilities extensionCapabilities =
+                getCapabilities(
                         androidx.xr.extensions.space.SpatialCapabilities.SPATIAL_UI_CAPABLE);
         SpatialCapabilities caps = RuntimeUtils.convertSpatialCapabilities(extensionCapabilities);
         assertThat(caps.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)).isTrue();
@@ -229,7 +244,7 @@
                 .isFalse();
 
         extensionCapabilities =
-                ShadowSpatialCapabilities.create(
+                getCapabilities(
                         androidx.xr.extensions.space.SpatialCapabilities
                                 .SPATIAL_3D_CONTENTS_CAPABLE);
         caps = RuntimeUtils.convertSpatialCapabilities(extensionCapabilities);
@@ -245,7 +260,7 @@
                 .isFalse();
 
         extensionCapabilities =
-                ShadowSpatialCapabilities.create(
+                getCapabilities(
                         androidx.xr.extensions.space.SpatialCapabilities.SPATIAL_AUDIO_CAPABLE);
         caps = RuntimeUtils.convertSpatialCapabilities(extensionCapabilities);
         assertThat(caps.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)).isFalse();
@@ -263,8 +278,8 @@
     @Test
     public void convertSpatialCapabilities_mixedCapabilities() {
         // Check conversions for a couple of different combinations of capabilities.
-        com.android.extensions.xr.space.SpatialCapabilities extensionCapabilities =
-                ShadowSpatialCapabilities.create(
+        androidx.xr.extensions.space.SpatialCapabilities extensionCapabilities =
+                getCapabilities(
                         androidx.xr.extensions.space.SpatialCapabilities.SPATIAL_AUDIO_CAPABLE,
                         androidx.xr.extensions.space.SpatialCapabilities
                                 .SPATIAL_3D_CONTENTS_CAPABLE);
@@ -282,7 +297,7 @@
 
         extensionCapabilities =
                 extensionCapabilities =
-                        ShadowSpatialCapabilities.create(
+                        getCapabilities(
                                 androidx.xr.extensions.space.SpatialCapabilities.SPATIAL_UI_CAPABLE,
                                 androidx.xr.extensions.space.SpatialCapabilities
                                         .PASSTHROUGH_CONTROL_CAPABLE,
@@ -324,42 +339,41 @@
     @Test
     public void getPassthroughOpacity_returnsZeroFromDisabledExtensionState() {
         PassthroughVisibilityState passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(PassthroughVisibilityState.DISABLED, 0.0f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.DISABLED, 0.0f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(0.0f);
 
         passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(PassthroughVisibilityState.DISABLED, 1.0f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.DISABLED, 1.0f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(0.0f);
     }
 
     @Test
     public void getPassthroughOpacity_convertsValidValuesFromExtensionState() {
         PassthroughVisibilityState passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(PassthroughVisibilityState.HOME, 0.5f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.HOME, 0.5f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(0.5f);
 
         passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(PassthroughVisibilityState.APP, 0.75f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.APP, 0.75f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(0.75f);
 
         passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(PassthroughVisibilityState.SYSTEM, 1.0f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.SYSTEM, 1.0f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(1.0f);
     }
 
     @Test
     public void getPassthroughOpacity_convertsInvalidValuesFromExtensionStateToOneAndLogsError() {
         PassthroughVisibilityState passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(PassthroughVisibilityState.HOME, 0.0f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.HOME, 0.0f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(1.0f);
 
         passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(
-                        PassthroughVisibilityState.APP, -0.0000001f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.APP, -0.0000001f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(1.0f);
 
         passthroughVisibilityState =
-                ShadowPassthroughVisibilityState.create(PassthroughVisibilityState.SYSTEM, -1.0f);
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.SYSTEM, -1.0f);
         assertThat(RuntimeUtils.getPassthroughOpacity(passthroughVisibilityState)).isEqualTo(1.0f);
 
         expectedLogMessagesRule.expectLogMessagePattern(
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImplTest.java
index a1801b6..c382ee6 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SoundPoolExtensionsWrapperImplTest.java
@@ -23,16 +23,13 @@
 
 import android.media.SoundPool;
 
+import androidx.xr.extensions.node.Node;
 import androidx.xr.scenecore.JxrPlatformAdapter;
 import androidx.xr.scenecore.JxrPlatformAdapter.SoundPoolExtensionsWrapper;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatializerConstants;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
-
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.media.ShadowSoundPoolExtensions;
-import com.android.extensions.xr.media.SoundPoolExtensions;
-import com.android.extensions.xr.media.XrSpatialAudioExtensions;
-import com.android.extensions.xr.node.Node;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeSoundPoolExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeSpatialAudioExtensions;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -48,22 +45,22 @@
     private static final int TEST_LOOP = 0;
     private static final float TEST_RATE = 0F;
 
-    XrExtensions mXrExtensions;
-    XrSpatialAudioExtensions mSpatialAudioExtensions;
-    SoundPoolExtensions mSoundPoolExtensions;
+    FakeXrExtensions mFakeXrExtensions;
+    FakeSpatialAudioExtensions mFakeSpatialAudioExtensions;
+    FakeSoundPoolExtensions mFakeSoundPoolExtensions;
 
     @Before
     public void setUp() {
-        mXrExtensions = XrExtensionsProvider.getXrExtensions();
-        mSpatialAudioExtensions = mXrExtensions.getXrSpatialAudioExtensions();
-        mSoundPoolExtensions = mSpatialAudioExtensions.getSoundPoolExtensions();
+        mFakeXrExtensions = new FakeXrExtensions();
+        mFakeSpatialAudioExtensions = mFakeXrExtensions.fakeSpatialAudioExtensions;
+        mFakeSoundPoolExtensions = mFakeSpatialAudioExtensions.soundPoolExtensions;
     }
 
     @Test
     public void playWithPointSource_callsExtensionsPlayWithPointSource() {
         int expected = 123;
 
-        Node fakeNode = mXrExtensions.createNode();
+        Node fakeNode = new FakeXrExtensions().createNode();
         AndroidXrEntity entity = mock(AndroidXrEntity.class);
         when(entity.getNode()).thenReturn(fakeNode);
         JxrPlatformAdapter.PointSourceAttributes rtAttributes =
@@ -71,10 +68,9 @@
 
         SoundPool soundPool = new SoundPool.Builder().build();
 
-        ShadowSoundPoolExtensions.extract(mSoundPoolExtensions)
-                .setPlayAsPointSourceResult(expected);
+        mFakeSoundPoolExtensions.setPlayAsPointSourceResult(expected);
         SoundPoolExtensionsWrapper wrapper =
-                new SoundPoolExtensionsWrapperImpl(mSoundPoolExtensions);
+                new SoundPoolExtensionsWrapperImpl(mFakeSoundPoolExtensions);
         int actual =
                 wrapper.play(
                         soundPool,
@@ -94,9 +90,9 @@
 
         SoundPool soundPool = new SoundPool.Builder().build();
 
-        ShadowSoundPoolExtensions.extract(mSoundPoolExtensions).setPlayAsSoundFieldResult(expected);
+        mFakeSoundPoolExtensions.setPlayAsSoundFieldResult(expected);
         SoundPoolExtensionsWrapper wrapper =
-                new SoundPoolExtensionsWrapperImpl(mSoundPoolExtensions);
+                new SoundPoolExtensionsWrapperImpl(mFakeSoundPoolExtensions);
         JxrPlatformAdapter.SoundFieldAttributes attributes =
                 new JxrPlatformAdapter.SoundFieldAttributes(
                         JxrPlatformAdapter.SpatializerConstants.AMBISONICS_ORDER_THIRD_ORDER);
@@ -119,9 +115,9 @@
         int expected = SpatializerConstants.SOURCE_TYPE_SOUND_FIELD;
         SoundPool soundPool = new SoundPool.Builder().build();
 
-        ShadowSoundPoolExtensions.extract(mSoundPoolExtensions).setSourceType(expected);
+        mFakeSoundPoolExtensions.setSourceType(expected);
         SoundPoolExtensionsWrapper wrapper =
-                new SoundPoolExtensionsWrapperImpl(mSoundPoolExtensions);
+                new SoundPoolExtensionsWrapperImpl(mFakeSoundPoolExtensions);
         int actualSourceType = wrapper.getSpatialSourceType(soundPool, /* streamId= */ 0);
         assertThat(actualSourceType).isEqualTo(SpatializerConstants.SOURCE_TYPE_SOUND_FIELD);
     }
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SpatialEnvironmentImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SpatialEnvironmentImplTest.java
index 8188032..2090d27 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SpatialEnvironmentImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SpatialEnvironmentImplTest.java
@@ -18,7 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.junit.Assert.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyString;
@@ -31,27 +30,18 @@
 
 import androidx.xr.extensions.environment.EnvironmentVisibilityState;
 import androidx.xr.extensions.environment.PassthroughVisibilityState;
+import androidx.xr.extensions.space.SpatialState;
 import androidx.xr.scenecore.JxrPlatformAdapter.ExrImageResource;
-import androidx.xr.scenecore.JxrPlatformAdapter.MaterialResource;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialEnvironment.SetPassthroughOpacityPreferenceResult;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialEnvironment.SetSpatialEnvironmentPreferenceResult;
 import androidx.xr.scenecore.JxrPlatformAdapter.SpatialEnvironment.SpatialEnvironmentPreference;
-import androidx.xr.scenecore.impl.extensions.XrExtensionsProvider;
 import androidx.xr.scenecore.testing.FakeImpressApi;
-import androidx.xr.scenecore.testing.FakeImpressApi.MaterialData;
-
-import com.android.extensions.xr.ShadowXrExtensions;
-import com.android.extensions.xr.XrExtensions;
-import com.android.extensions.xr.asset.EnvironmentToken;
-import com.android.extensions.xr.asset.FakeEnvironmentToken;
-import com.android.extensions.xr.asset.GltfModelToken;
-import com.android.extensions.xr.environment.ShadowEnvironmentVisibilityState;
-import com.android.extensions.xr.environment.ShadowPassthroughVisibilityState;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeRepository;
-import com.android.extensions.xr.space.ShadowSpatialCapabilities;
-import com.android.extensions.xr.space.ShadowSpatialState;
-import com.android.extensions.xr.space.SpatialState;
+import androidx.xr.scenecore.testing.FakeXrExtensions;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeEnvironmentToken;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeEnvironmentVisibilityState;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakePassthroughVisibilityState;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeSpatialState;
 
 import com.google.androidxr.splitengine.SplitEngineSubspaceManager;
 import com.google.androidxr.splitengine.SubspaceNode;
@@ -67,7 +57,6 @@
 import org.robolectric.android.controller.ActivityController;
 
 import java.util.List;
-import java.util.Map;
 import java.util.function.Consumer;
 
 // Technically this doesn't need to be a Robolectric test, since it doesn't directly depend on
@@ -82,20 +71,15 @@
 @SuppressWarnings({"deprecation", "UnnecessarilyFullyQualified"}) // TODO(b/373435470): Remove
 public final class SpatialEnvironmentImplTest {
     private static final int SUBSPACE_ID = 5;
-    private static final int INVALID_SPLIT_ENGINE_ID = -1;
-    private static final long WATER_MATERIAL_ID = 1;
     private final FakeImpressApi mFakeImpressApi = new FakeImpressApi();
     private ActivityController<Activity> mActivityController;
     private Activity mActivity;
-    private XrExtensions mXrExtensions = null;
-    private Node mSubspaceNode;
+    private FakeXrExtensions mFakeExtensions = null;
+    private FakeNode mSubspaceNode;
     private SubspaceNode mExpectedSubspace;
     private SpatialEnvironmentImpl mEnvironment = null;
     private SplitEngineSubspaceManager mSplitEngineSubspaceManager;
-    private NodeRepository mNodeRepository = NodeRepository.getInstance();
-    EnvironmentToken mNullSkyboxToken =
-            new FakeEnvironmentToken(
-                    /* url= */ "nullSkyboxToken", /* textureWidth= */ 1, /* textureHeight= */ 1);
+    FakeEnvironmentToken mNullSkyboxToken = new FakeEnvironmentToken("nullSkyboxToken");
     ListenableFuture<ExrImageResource> mNullSkyboxResourceFuture =
             Futures.immediateFuture(new ExrImageResourceImpl(mNullSkyboxToken));
 
@@ -104,9 +88,9 @@
         mActivityController = Robolectric.buildActivity(Activity.class);
         mActivity = mActivityController.create().start().get();
         // Reset our state.
-        mXrExtensions = XrExtensionsProvider.getXrExtensions();
-        Node sceneRootNode = mXrExtensions.createNode();
-        mSubspaceNode = mXrExtensions.createNode();
+        mFakeExtensions = new FakeXrExtensions();
+        FakeNode fakeSceneRootNode = (FakeNode) mFakeExtensions.createNode();
+        mSubspaceNode = (FakeNode) mFakeExtensions.createNode();
         mExpectedSubspace = new SubspaceNode(SUBSPACE_ID, mSubspaceNode);
 
         mSplitEngineSubspaceManager = Mockito.mock(SplitEngineSubspaceManager.class);
@@ -114,22 +98,16 @@
         mEnvironment =
                 new SpatialEnvironmentImpl(
                         mActivity,
-                        mXrExtensions,
-                        sceneRootNode,
+                        mFakeExtensions,
+                        fakeSceneRootNode,
                         this::getSpatialState,
+                        mNullSkyboxResourceFuture,
                         /* useSplitEngine= */ false);
         mEnvironment.onSplitEngineReady(mSplitEngineSubspaceManager, mFakeImpressApi);
-        try {
-            mEnvironment.onNullSkyboxResourceReady(mNullSkyboxResourceFuture.get());
-        } catch (Exception e) {
-            if (e instanceof InterruptedException) {
-                Thread.currentThread().interrupt();
-            }
-        }
     }
 
     private void setupSplitEngineEnvironmentImpl() {
-        Node sceneRootNode = mXrExtensions.createNode();
+        FakeNode fakeSceneRootNode = (FakeNode) mFakeExtensions.createNode();
 
         when(mSplitEngineSubspaceManager.createSubspace(anyString(), anyInt()))
                 .thenReturn(mExpectedSubspace);
@@ -137,24 +115,18 @@
         mEnvironment =
                 new SpatialEnvironmentImpl(
                         mActivity,
-                        mXrExtensions,
-                        sceneRootNode,
+                        mFakeExtensions,
+                        fakeSceneRootNode,
                         this::getSpatialState,
+                        mNullSkyboxResourceFuture,
                         /* useSplitEngine= */ true);
         mEnvironment.onSplitEngineReady(mSplitEngineSubspaceManager, mFakeImpressApi);
-        try {
-            mEnvironment.onNullSkyboxResourceReady(mNullSkyboxResourceFuture.get());
-        } catch (Exception e) {
-            if (e instanceof InterruptedException) {
-                Thread.currentThread().interrupt();
-            }
-        }
     }
 
     @SuppressWarnings({"FutureReturnValueIgnored", "AndroidJdkLibsChecker"})
-    private EnvironmentToken fakeLoadEnvironment(String name) {
+    private androidx.xr.extensions.asset.EnvironmentToken fakeLoadEnvironment(String name) {
         try {
-            return mXrExtensions.loadEnvironment(null, 0, 0, name).get();
+            return mFakeExtensions.loadEnvironment(null, 0, 0, name).get();
         } catch (Exception e) {
             if (e instanceof InterruptedException) {
                 Thread.currentThread().interrupt();
@@ -164,21 +136,9 @@
     }
 
     @SuppressWarnings({"FutureReturnValueIgnored", "AndroidJdkLibsChecker"})
-    private long fakeLoadEnvironmentSplitEngine(String name) {
+    private androidx.xr.extensions.asset.GltfModelToken fakeLoadGltfModel(String name) {
         try {
-            return mFakeImpressApi.loadImageBasedLightingAsset(name).get();
-        } catch (Exception e) {
-            if (e instanceof InterruptedException) {
-                Thread.currentThread().interrupt();
-            }
-            return INVALID_SPLIT_ENGINE_ID;
-        }
-    }
-
-    @SuppressWarnings({"FutureReturnValueIgnored", "AndroidJdkLibsChecker"})
-    private GltfModelToken fakeLoadGltfModel(String name) {
-        try {
-            return mXrExtensions.loadGltfModel(null, 0, 0, name).get();
+            return mFakeExtensions.loadGltfModel(null, 0, 0, name).get();
         } catch (Exception e) {
             if (e instanceof InterruptedException) {
                 Thread.currentThread().interrupt();
@@ -195,25 +155,12 @@
             if (e instanceof InterruptedException) {
                 Thread.currentThread().interrupt();
             }
-            return INVALID_SPLIT_ENGINE_ID;
-        }
-    }
-
-    @SuppressWarnings({"FutureReturnValueIgnored", "AndroidJdkLibsChecker"})
-    private MaterialResource fakeLoadMaterialSplitEngine(boolean isAlphaMapVersion) {
-        try {
-            return new MaterialResourceImpl(
-                    mFakeImpressApi.createWaterMaterial(isAlphaMapVersion).get().getNativeHandle());
-        } catch (Exception e) {
-            if (e instanceof InterruptedException) {
-                Thread.currentThread().interrupt();
-            }
-            return null;
+            return -1;
         }
     }
 
     private SpatialState getSpatialState() {
-        return mXrExtensions.getSpatialState(mActivity);
+        return mFakeExtensions.fakeSpatialState;
     }
 
     @Test
@@ -249,14 +196,11 @@
     public void setPassthroughOpacityPreference_returnsAccordingToSpatialCapabilities() {
         // Change should be applied if the spatial capabilities allow it, otherwise should be
         // pending.
-        SpatialState state = mXrExtensions.getSpatialState(mActivity);
-        ShadowSpatialState.extract(state)
-                .setSpatialCapabilities(ShadowSpatialCapabilities.createAll());
+        mFakeExtensions.fakeSpatialState.setAllSpatialCapabilities(true);
         assertThat(mEnvironment.setPassthroughOpacityPreference(0.5f))
                 .isEqualTo(SetPassthroughOpacityPreferenceResult.CHANGE_APPLIED);
 
-        ShadowSpatialState.extract(state)
-                .setSpatialCapabilities(ShadowSpatialCapabilities.create());
+        mFakeExtensions.fakeSpatialState.setAllSpatialCapabilities(false);
         assertThat(mEnvironment.setPassthroughOpacityPreference(0.6f))
                 .isEqualTo(SetPassthroughOpacityPreferenceResult.CHANGE_PENDING);
     }
@@ -296,68 +240,51 @@
 
     @Test
     public void setSpatialEnvironmentPreference_returnsAppliedWhenCapable() {
-        setupSplitEngineEnvironmentImpl();
         // Change should be applied if the spatial capabilities allow it, otherwise should be
         // pending.
-        SpatialState state = mXrExtensions.getSpatialState(mActivity);
-        ShadowSpatialState.extract(state)
-                .setSpatialCapabilities(ShadowSpatialCapabilities.createAll());
+        mFakeExtensions.fakeSpatialState.setAllSpatialCapabilities(true);
         SpatialEnvironmentPreference preference = mock(SpatialEnvironmentPreference.class);
         assertThat(mEnvironment.setSpatialEnvironmentPreference(preference))
                 .isEqualTo(SetSpatialEnvironmentPreferenceResult.CHANGE_APPLIED);
 
-        ShadowSpatialState.extract(state)
-                .setSpatialCapabilities(ShadowSpatialCapabilities.create());
+        mFakeExtensions.fakeSpatialState.setAllSpatialCapabilities(false);
         preference = mock(SpatialEnvironmentPreference.class);
         assertThat(mEnvironment.setSpatialEnvironmentPreference(preference))
                 .isEqualTo(SetSpatialEnvironmentPreferenceResult.CHANGE_PENDING);
     }
 
-    private Node getNodeWithEnvironmentToken(EnvironmentToken token) {
-        return mNodeRepository.findNode(
-                (NodeRepository.NodeMetadata metadata) ->
-                        token.equals(metadata.getEnvironmentToken()));
-    }
-
-    private Node getNodeWithGltfToken(GltfModelToken token) {
-        return mNodeRepository.findNode(
-                (NodeRepository.NodeMetadata metadata) ->
-                        token.equals(metadata.getGltfModelToken()));
-    }
-
     @Test
     public void setSpatialEnvironmentPreferenceNull_removesEnvironment() {
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
-        GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
 
         // Ensure that an environment is set.
         mEnvironment.setSpatialEnvironmentPreference(
                 new SpatialEnvironmentPreference(
                         new ExrImageResourceImpl(exr), new GltfModelResourceImpl(gltf)));
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
-        Node geometryNode = getNodeWithGltfToken(gltf);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
+        FakeNode geometryNode = mFakeExtensions.testGetNodeWithGltfToken(gltf);
 
         assertThat(skyboxNode).isNotNull();
         assertThat(geometryNode).isNotNull();
 
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
-        assertThat(mNodeRepository.getParent(geometryNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
+        assertThat(geometryNode.getParent()).isNotNull();
 
         // Ensure environment is removed
         mEnvironment.setSpatialEnvironmentPreference(null);
 
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNull();
-        assertThat(mNodeRepository.getParent(geometryNode)).isNull();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNull();
+        assertThat(skyboxNode.getParent()).isNull();
+        assertThat(geometryNode.getParent()).isNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNull();
     }
 
     @Test
-    public void setSpatialEnvironmentPreferenceNullWithGeometrySplitEngine_removesEnvironment() {
+    public void setSpatialEnvironmentPreferenceNullWithSplitEngine_removesEnvironment() {
         setupSplitEngineEnvironmentImpl();
 
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
         long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
 
         // Ensure that an environment is set.
@@ -365,101 +292,60 @@
                 new SpatialEnvironmentPreference(
                         new ExrImageResourceImpl(exr), new GltfModelResourceImplSplitEngine(gltf)));
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
         List<Integer> geometryNodes = mFakeImpressApi.getImpressNodesForToken(gltf);
-        Map<Long, MaterialData> materials = mFakeImpressApi.getMaterials();
-        int animatingNodes = mFakeImpressApi.impressNodeAnimatingSize();
-        int loopingAnimatingNodes = mFakeImpressApi.impressNodeLoopAnimatingSize();
 
         assertThat(skyboxNode).isNotNull();
         assertThat(geometryNodes).isNotEmpty();
-        assertThat(materials).isEmpty();
-        assertThat(animatingNodes).isEqualTo(0);
-        assertThat(loopingAnimatingNodes).isEqualTo(0);
 
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
         assertThat(mFakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isTrue();
 
         // Ensure environment is removed
         mEnvironment.setSpatialEnvironmentPreference(null);
 
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNull();
+        assertThat(skyboxNode.getParent()).isNull();
         // TODO: b/354711945 - Uncomment when we can test the SetGeometrySplitEngine(null) path.
         // assertThat(fakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isFalse();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNull();
-    }
-
-    @Test
-    public void
-            setSpatialEnvironmentPreferenceNullWithSkyboxAndGeometrySplitEngine_removesEnvironment() {
-        setupSplitEngineEnvironmentImpl();
-
-        long exr = fakeLoadEnvironmentSplitEngine("fakeEnvironment");
-        long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
-
-        // Ensure that an environment is set.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(
-                        new ExrImageResourceImplSplitEngine(exr),
-                        new GltfModelResourceImplSplitEngine(gltf)));
-
-        long initialSkybox = mFakeImpressApi.getCurrentEnvironmentLight();
-        List<Integer> geometryNodes = mFakeImpressApi.getImpressNodesForToken(gltf);
-
-        assertThat(initialSkybox).isNotEqualTo(INVALID_SPLIT_ENGINE_ID);
-        assertThat(geometryNodes).isNotEmpty();
-        assertThat(mFakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isTrue();
-
-        // Ensure environment is removed
-        mEnvironment.setSpatialEnvironmentPreference(null);
-
-        long finalSkybox = mFakeImpressApi.getCurrentEnvironmentLight();
-        assertThat(finalSkybox).isEqualTo(INVALID_SPLIT_ENGINE_ID);
-        // TODO: b/354711945 - Uncomment when we can test the SetGeometrySplitEngine(null) path.
-        // assertThat(fakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isFalse();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNull();
     }
 
     @Test
     public void
             setSpatialEnvironmentPreferenceWithNullSkyboxAndGeometry_doesNotDetachEnvironment() {
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
-        GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
 
         // Ensure that an environment is set.
         mEnvironment.setSpatialEnvironmentPreference(
                 new SpatialEnvironmentPreference(
                         new ExrImageResourceImpl(exr), new GltfModelResourceImpl(gltf)));
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
-        Node geometryNode = getNodeWithGltfToken(gltf);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
+        FakeNode geometryNode = mFakeExtensions.testGetNodeWithGltfToken(gltf);
 
         assertThat(skyboxNode).isNotNull();
         assertThat(geometryNode).isNotNull();
 
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
-        assertThat(mNodeRepository.getParent(geometryNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
+        assertThat(geometryNode.getParent()).isNotNull();
 
         // Ensure environment is not removed if both skybox and geometry are updated to null.
         mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
 
-        assertThat(mNodeRepository.getParent(skyboxNode))
-                .isNull(); // Skybox should be set to a black skybox node.
-        assertThat(mNodeRepository.getParent(geometryNode)).isNull();
+        assertThat(skyboxNode.getParent()).isNull(); // Skybox should be set to a black skybox node.
+        assertThat(geometryNode.getParent()).isNull();
 
         // The skybox should be set to a black skybox node. This isn't relevant for end users but it
         // confirms the environment implementation is working as designed.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNotNull();
     }
 
     @Test
     public void
-            setSpatialEnvironmentPreferenceWithNullSkyboxExtensionAndNullGeometrySplitEngine_doesNotDetachEnvironment() {
+            setSpatialEnvironmentPreferenceWithNullSkyboxAndGeometrySplitEngine_doesNotDetachEnvironment() {
         setupSplitEngineEnvironmentImpl();
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
         long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
 
         // Ensure that an environment is set.
@@ -467,115 +353,26 @@
                 new SpatialEnvironmentPreference(
                         new ExrImageResourceImpl(exr), new GltfModelResourceImplSplitEngine(gltf)));
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
         List<Integer> geometryNodes = mFakeImpressApi.getImpressNodesForToken(gltf);
 
         assertThat(skyboxNode).isNotNull();
         assertThat(geometryNodes).isNotEmpty();
 
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
         assertThat(mFakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isTrue();
 
         // Ensure environment is not removed if both skybox and geometry are updated to null.
         mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
-        skyboxNode = getNodeWithEnvironmentToken(mNullSkyboxToken);
+        skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(mNullSkyboxToken);
         assertThat(skyboxNode).isNotNull(); // Skybox should be set to a black skybox node.
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
         // TODO: b/354711945 - Uncomment when we can test the SetGeometrySplitEngine(null) path.
         // assertThat(fakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isFalse();
 
         // The skybox should be set to a black skybox node. This isn't relevant for end users but it
         // confirms the environment implementation is working as designed.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
-    }
-
-    @Test
-    public void
-            setSpatialEnvironmentPreferenceWithNullSkyboxSplitEngineAndNullGeometrySplitEngine_doesNotDetachEnvironment() {
-        setupSplitEngineEnvironmentImpl();
-        long exr = fakeLoadEnvironmentSplitEngine("fakeEnvironment");
-        long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
-
-        // Ensure that an environment is set.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(
-                        new ExrImageResourceImplSplitEngine(exr),
-                        new GltfModelResourceImplSplitEngine(gltf)));
-
-        long initialSkybox = mFakeImpressApi.getCurrentEnvironmentLight();
-        List<Integer> geometryNodes = mFakeImpressApi.getImpressNodesForToken(gltf);
-
-        assertThat(initialSkybox).isNotEqualTo(INVALID_SPLIT_ENGINE_ID);
-        assertThat(geometryNodes).isNotEmpty();
-        assertThat(mFakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isTrue();
-
-        // Ensure environment is not removed if both skybox and geometry are updated to null.
-        mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
-
-        long finalSkybox = mFakeImpressApi.getCurrentEnvironmentLight();
-        assertThat(finalSkybox)
-                .isNotEqualTo(
-                        INVALID_SPLIT_ENGINE_ID); // Skybox should be set to a black skybox node.
-        // TODO: b/354711945 - Uncomment when we can test the SetGeometrySplitEngine(null) path.
-        // assertThat(fakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isFalse();
-
-        // The skybox should be set to a black skybox node. This isn't relevant for end users but it
-        // confirms the environment implementation is working as designed.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
-    }
-
-    @Test
-    public void
-            setSpatialEnvironmentPreferenceWithSkyboxSplitEngineAndGeometryWithMeshAndAnimationSplitEngine_doesNotDetachEnvironment() {
-        setupSplitEngineEnvironmentImpl();
-        long exr = fakeLoadEnvironmentSplitEngine("fakeEnvironment");
-        long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
-        // Create dummy regular version of the water material.
-        MaterialResource material = fakeLoadMaterialSplitEngine(false);
-        String meshName = "fakeMesh";
-        String animationName = "fakeAnimation";
-
-        // Ensure that an environment is set.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(
-                        new ExrImageResourceImplSplitEngine(exr),
-                        new GltfModelResourceImplSplitEngine(gltf),
-                        material,
-                        meshName,
-                        animationName));
-
-        long initialSkybox = mFakeImpressApi.getCurrentEnvironmentLight();
-        List<Integer> geometryNodes = mFakeImpressApi.getImpressNodesForToken(gltf);
-        Map<Long, MaterialData> materials = mFakeImpressApi.getMaterials();
-        int animatingNodes = mFakeImpressApi.impressNodeAnimatingSize();
-        int loopingAnimatingNodes = mFakeImpressApi.impressNodeLoopAnimatingSize();
-
-        assertThat(initialSkybox).isNotEqualTo(INVALID_SPLIT_ENGINE_ID);
-        assertThat(geometryNodes).isNotEmpty();
-        assertThat(mFakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isTrue();
-        assertThat(materials).isNotEmpty();
-        assertThat(materials.keySet().toArray()[0]).isEqualTo(WATER_MATERIAL_ID);
-        assertThat(materials.get(WATER_MATERIAL_ID).type).isEqualTo(MaterialData.Type.WATER);
-        assertThat(animatingNodes).isEqualTo(0);
-        assertThat(loopingAnimatingNodes).isEqualTo(1);
-
-        // Ensure environment is not removed if both skybox and geometry are updated to null.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(null, null, null, null, null));
-
-        long finalSkybox = mFakeImpressApi.getCurrentEnvironmentLight();
-        assertThat(finalSkybox)
-                .isNotEqualTo(
-                        INVALID_SPLIT_ENGINE_ID); // Skybox should be set to a black skybox node.
-        // TODO: b/354711945 - Uncomment when we can test the SetGeometrySplitEngine(null) path.
-        // assertThat(fakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isFalse();
-
-        // The skybox should be set to a black skybox node. This isn't relevant for end users but it
-        // confirms the environment implementation is working as designed.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNotNull();
     }
 
     @Test
@@ -584,24 +381,22 @@
         setupSplitEngineEnvironmentImpl();
         // Ensure environment is attached if both skybox and geometry are set to null at start.
         mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
-        Node skyboxNode = getNodeWithEnvironmentToken(mNullSkyboxToken);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(mNullSkyboxToken);
         assertThat(skyboxNode).isNotNull();
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
 
         // The skybox should be set to a black skybox node. This isn't relevant for end users but it
         // confirms the environment implementation is working as designed.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNotNull();
     }
 
     @Test
     public void
             setSpatialEnvironmentPreferenceWithNullSkyboxAndGeometryButMisingResource_doesntAttachEnvironment() {
         // Reset our state and setup environment with null skybox resource.
-        ShadowXrExtensions.extract(mXrExtensions).removeStateFor(mActivity);
-
-        Node sceneRootNode = mXrExtensions.createNode();
-        mSubspaceNode = mXrExtensions.createNode();
+        mFakeExtensions = new FakeXrExtensions();
+        FakeNode fakeSceneRootNode = (FakeNode) mFakeExtensions.createNode();
+        mSubspaceNode = (FakeNode) mFakeExtensions.createNode();
         mExpectedSubspace = new SubspaceNode(SUBSPACE_ID, mSubspaceNode);
         mSplitEngineSubspaceManager = Mockito.mock(SplitEngineSubspaceManager.class);
         when(mSplitEngineSubspaceManager.createSubspace(anyString(), anyInt()))
@@ -609,32 +404,31 @@
         mEnvironment =
                 new SpatialEnvironmentImpl(
                         mActivity,
-                        mXrExtensions,
-                        sceneRootNode,
+                        mFakeExtensions,
+                        fakeSceneRootNode,
                         this::getSpatialState,
+                        /* nullSkyboxResourceFuture= */ null,
                         /* useSplitEngine= */ true);
         mEnvironment.onSplitEngineReady(mSplitEngineSubspaceManager, mFakeImpressApi);
-        mEnvironment.onNullSkyboxResourceReady(null);
 
         // If the skybox resource is missing, we don't attach anything to the environment.
         mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
-        Node skyboxNode = getNodeWithEnvironmentToken(mNullSkyboxToken);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(mNullSkyboxToken);
         assertThat(skyboxNode).isNull();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNull();
     }
 
     @Test
     public void
             setSpatialEnvironmentPreferenceFromNullPreferenceToNullSkyboxAndGeometrySplitEngine_doesNotDetachEnvironment() {
         setupSplitEngineEnvironmentImpl();
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
         long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
 
         // Ensure that an environment is set.
         mEnvironment.setSpatialEnvironmentPreference(null);
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
         List<Integer> geometryNodes = mFakeImpressApi.getImpressNodesForToken(gltf);
 
         assertThat(skyboxNode).isNull();
@@ -642,40 +436,40 @@
 
         // Ensure environment is not removed if both skybox and geometry are updated to null.
         mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
-        skyboxNode = getNodeWithEnvironmentToken(mNullSkyboxToken);
+        skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(mNullSkyboxToken);
         assertThat(skyboxNode).isNotNull(); // Skybox should be set to a black skybox node.
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
         // TODO: b/354711945 - Uncomment when we can test the SetGeometrySplitEngine(null) path.
         // assertThat(fakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isFalse();
 
         // The skybox should be set to a black skybox node. This isn't relevant for end users but it
         // confirms the environment implementation is working as designed.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNotNull();
     }
 
     @Test
     public void setNewSpatialEnvironmentPreference_replacesOldSpatialEnvironmentPreference() {
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
-        EnvironmentToken newExr = fakeLoadEnvironment("newFakeEnvironment");
-        GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
-        GltfModelToken newGltf = fakeLoadGltfModel("newFakeGltfModel");
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.EnvironmentToken newExr =
+                fakeLoadEnvironment("newFakeEnvironment");
+        androidx.xr.extensions.asset.GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
+        androidx.xr.extensions.asset.GltfModelToken newGltf = fakeLoadGltfModel("newFakeGltfModel");
 
         // Ensure that an environment is set a first time.
         mEnvironment.setSpatialEnvironmentPreference(
                 new SpatialEnvironmentPreference(
                         new ExrImageResourceImpl(exr), new GltfModelResourceImpl(gltf)));
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
-        Node geometryNode = getNodeWithGltfToken(gltf);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
+        FakeNode geometryNode = mFakeExtensions.testGetNodeWithGltfToken(gltf);
 
         // Ensure that an environment is set a second time.
         mEnvironment.setSpatialEnvironmentPreference(
                 new SpatialEnvironmentPreference(
                         new ExrImageResourceImpl(newExr), new GltfModelResourceImpl(newGltf)));
 
-        Node newSkyboxNode = getNodeWithEnvironmentToken(newExr);
-        Node newGeometryNode = getNodeWithGltfToken(newGltf);
+        FakeNode newSkyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(newExr);
+        FakeNode newGeometryNode = mFakeExtensions.testGetNodeWithGltfToken(newGltf);
 
         // None of the nodes should be null.
         assertThat(skyboxNode).isNotNull();
@@ -684,36 +478,30 @@
         assertThat(newGeometryNode).isNotNull();
 
         // Only the new nodes should have a parent.
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNull();
-        assertThat(mNodeRepository.getParent(geometryNode)).isNull();
-        assertThat(mNodeRepository.getParent(newSkyboxNode)).isNotNull();
-        assertThat(mNodeRepository.getParent(newGeometryNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNull();
+        assertThat(geometryNode.getParent()).isNull();
+        assertThat(newSkyboxNode.getParent()).isNotNull();
+        assertThat(newGeometryNode.getParent()).isNotNull();
 
         // The names should be the same, but the resources should be different.
-        assertThat(mNodeRepository.getEnvironmentToken(skyboxNode))
-                .isNotEqualTo(mNodeRepository.getEnvironmentToken(newSkyboxNode));
-        assertThat(mNodeRepository.getName(skyboxNode))
-                .isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
-        assertThat(mNodeRepository.getName(newSkyboxNode))
-                .isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
-        assertThat(mNodeRepository.getGltfModelToken(geometryNode))
-                .isNotEqualTo(mNodeRepository.getGltfModelToken(newGeometryNode));
-        assertThat(mNodeRepository.getName(geometryNode))
-                .isEqualTo(SpatialEnvironmentImpl.GEOMETRY_NODE_NAME);
-        assertThat(mNodeRepository.getName(newGeometryNode))
-                .isEqualTo(SpatialEnvironmentImpl.GEOMETRY_NODE_NAME);
+        assertThat(skyboxNode.getEnvironment()).isNotEqualTo(newSkyboxNode.getEnvironment());
+        assertThat(skyboxNode.getName()).isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
+        assertThat(newSkyboxNode.getName()).isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
+        assertThat(geometryNode.getGltfModel()).isNotEqualTo(newGeometryNode.getGltfModel());
+        assertThat(geometryNode.getName()).isEqualTo(SpatialEnvironmentImpl.GEOMETRY_NODE_NAME);
+        assertThat(newGeometryNode.getName()).isEqualTo(SpatialEnvironmentImpl.GEOMETRY_NODE_NAME);
 
         // The environment node should still be attached.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNotNull();
     }
 
     @Test
     public void
             setNewSpatialEnvironmentPreferenceSplitEngine_replacesOldSpatialEnvironmentPreference() {
         setupSplitEngineEnvironmentImpl();
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
-        EnvironmentToken newExr = fakeLoadEnvironment("newFakeEnvironment");
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.EnvironmentToken newExr =
+                fakeLoadEnvironment("newFakeEnvironment");
         long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
         long newGltf = fakeLoadGltfModelSplitEngine("newFakeGltfModel");
 
@@ -722,7 +510,7 @@
                 new SpatialEnvironmentPreference(
                         new ExrImageResourceImpl(exr), new GltfModelResourceImplSplitEngine(gltf)));
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
         List<Integer> geometryNodes = mFakeImpressApi.getImpressNodesForToken(gltf);
 
         // Ensure that an environment is set a second time.
@@ -731,7 +519,7 @@
                         new ExrImageResourceImpl(newExr),
                         new GltfModelResourceImplSplitEngine(newGltf)));
 
-        Node newSkyboxNode = getNodeWithEnvironmentToken(newExr);
+        FakeNode newSkyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(newExr);
         List<Integer> newGeometryNodes = mFakeImpressApi.getImpressNodesForToken(newGltf);
 
         // None of the nodes should be null.
@@ -741,160 +529,20 @@
         assertThat(newGeometryNodes).isNotEmpty();
 
         // Only the new nodes should have a parent.
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNull();
+        assertThat(skyboxNode.getParent()).isNull();
         // TODO: b/354711945 - Uncomment when we can test the SetGeometrySplitEngine(null) path.
         // assertThat(fakeImpressApi.impressNodeHasParent(geometryNodes.get(0))).isFalse();
-        assertThat(mNodeRepository.getParent(newSkyboxNode)).isNotNull();
+        assertThat(newSkyboxNode.getParent()).isNotNull();
         assertThat(mFakeImpressApi.impressNodeHasParent(newGeometryNodes.get(0))).isTrue();
 
         // The resources should be different.
-        assertThat(mNodeRepository.getEnvironmentToken(skyboxNode))
-                .isNotEqualTo(mNodeRepository.getEnvironmentToken(newSkyboxNode));
-        assertThat(mNodeRepository.getName(skyboxNode))
-                .isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
-        assertThat(mNodeRepository.getName(newSkyboxNode))
-                .isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
+        assertThat(skyboxNode.getEnvironment()).isNotEqualTo(newSkyboxNode.getEnvironment());
+        assertThat(skyboxNode.getName()).isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
+        assertThat(newSkyboxNode.getName()).isEqualTo(SpatialEnvironmentImpl.SKYBOX_NODE_NAME);
         assertThat(geometryNodes.get(0)).isNotEqualTo(newGeometryNodes.get(0));
 
         // The environment node should still be attached.
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
-    }
-
-    @Test
-    public void
-            setSpatialEnvironmentPreferenceWithSplitEngineAndGeometryWithMaterialAndMeshNameSplitEngine_materialIsOverriden() {
-        setupSplitEngineEnvironmentImpl();
-        long exr = fakeLoadEnvironmentSplitEngine("fakeEnvironment");
-        long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
-        // Create dummy regular version of the water material.
-        MaterialResource material = fakeLoadMaterialSplitEngine(false);
-        String meshName = "fakeMesh";
-        String animationName = "fakeAnimation";
-
-        // Ensure that an environment is set.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(
-                        new ExrImageResourceImplSplitEngine(exr),
-                        new GltfModelResourceImplSplitEngine(gltf),
-                        material,
-                        meshName,
-                        animationName));
-
-        Map<Long, MaterialData> materials = mFakeImpressApi.getMaterials();
-        int loopingAnimatingNodes = mFakeImpressApi.impressNodeLoopAnimatingSize();
-
-        assertThat(
-                        mFakeImpressApi.getImpressNodes().keySet().stream()
-                                .filter(
-                                        node ->
-                                                node.materialOverride != null
-                                                        && node.materialOverride.type
-                                                                == MaterialData.Type.WATER)
-                                .toArray())
-                .hasLength(1); // 1 glTF node that should be overridden with the water material.
-
-        assertThat(materials).isNotEmpty();
-        assertThat(materials.keySet().toArray()[0]).isEqualTo(WATER_MATERIAL_ID);
-        assertThat(materials.get(WATER_MATERIAL_ID).type).isEqualTo(MaterialData.Type.WATER);
-        assertThat(loopingAnimatingNodes).isEqualTo(1);
-    }
-
-    @Test
-    public void
-            setSpatialEnvironmentPreferenceWithSplitEngineAndGeometryWithMaterialAndNoMeshNameSplitEngine_materialIsNotOverriden() {
-        setupSplitEngineEnvironmentImpl();
-        long exr = fakeLoadEnvironmentSplitEngine("fakeEnvironment");
-        long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
-        // Create dummy regular version of the water material.
-        MaterialResource material = fakeLoadMaterialSplitEngine(false);
-        String animationName = "fakeAnimation";
-
-        // Ensure that an environment is set.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(
-                        new ExrImageResourceImplSplitEngine(exr),
-                        new GltfModelResourceImplSplitEngine(gltf),
-                        material,
-                        null,
-                        animationName));
-
-        Map<Long, MaterialData> materials = mFakeImpressApi.getMaterials();
-
-        assertThat(
-                        mFakeImpressApi.getImpressNodes().keySet().stream()
-                                .filter(node -> node.materialOverride == null)
-                                .toArray())
-                .hasLength(2); // 2 nodes are subspace (parent) and glTF (child) used for the
-        // environment. Both
-        // have no material override so we expect the length of the filter to be 2.
-
-        assertThat(materials).isNotEmpty();
-        assertThat(materials.keySet().toArray()[0]).isEqualTo(WATER_MATERIAL_ID);
-        assertThat(materials.get(WATER_MATERIAL_ID).type).isEqualTo(MaterialData.Type.WATER);
-    }
-
-    @Test
-    public void
-            setSpatialEnvironmentPreferenceWithSplitEngineAndGeometryWithNoMaterialAndMeshNameSplitEngine_materialIsNotOverriden() {
-        setupSplitEngineEnvironmentImpl();
-        long exr = fakeLoadEnvironmentSplitEngine("fakeEnvironment");
-        long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
-        String meshName = "fakeMesh";
-        String animationName = "fakeAnimation";
-
-        // Ensure that an environment is set.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(
-                        new ExrImageResourceImplSplitEngine(exr),
-                        new GltfModelResourceImplSplitEngine(gltf),
-                        null,
-                        meshName,
-                        animationName));
-
-        Map<Long, MaterialData> materials = mFakeImpressApi.getMaterials();
-
-        assertThat(
-                        mFakeImpressApi.getImpressNodes().keySet().stream()
-                                .filter(node -> node.materialOverride == null)
-                                .toArray())
-                .hasLength(2); // 2 nodes are subspace (parent) and glTF (child) used for the
-        // environment. Both
-        // have no material override so we expect the length of the filter to be 2.
-
-        assertThat(materials).isEmpty();
-    }
-
-    @Test
-    public void
-            setSpatialEnvironmentPreferenceWithSplitEngineAndGeometryWithNoAnimationNameSplitEngine_geometryIsNotAnimating() {
-        setupSplitEngineEnvironmentImpl();
-        long exr = fakeLoadEnvironmentSplitEngine("fakeEnvironment");
-        long gltf = fakeLoadGltfModelSplitEngine("fakeGltfModel");
-        String animationName = "fakeAnimation";
-
-        // Ensure that an environment is set.
-        mEnvironment.setSpatialEnvironmentPreference(
-                new SpatialEnvironmentPreference(
-                        new ExrImageResourceImplSplitEngine(exr),
-                        new GltfModelResourceImplSplitEngine(gltf),
-                        null,
-                        null,
-                        animationName));
-
-        int loopingAnimatingNodes = mFakeImpressApi.impressNodeLoopAnimatingSize();
-        Map<Long, MaterialData> materials = mFakeImpressApi.getMaterials();
-
-        assertThat(loopingAnimatingNodes).isEqualTo(1);
-
-        assertThat(
-                        mFakeImpressApi.getImpressNodes().keySet().stream()
-                                .filter(node -> node.materialOverride == null)
-                                .toArray())
-                .hasLength(2); // 2 nodes are subspace (parent) and glTF (child) used for the
-        // environment. Both
-        // have no material override so we expect the length of the filter to be 2.
-        assertThat(materials).isEmpty();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNotNull();
     }
 
     @Test
@@ -955,38 +603,25 @@
     @Test
     public void dispose_clearsNullSkyboxResource() {
         mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNotNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNotNull();
 
         // Ensure null skybox resource is cleared and doesn't re-attach the environment after a
         // dispose.
         mEnvironment.dispose();
-        // TODO(b/401587057): Follow up on this assertThrows which is new behaviour.
-        Exception thrown =
-                assertThrows(
-                        NullPointerException.class,
-                        () ->
-                                mEnvironment.setSpatialEnvironmentPreference(
-                                        new SpatialEnvironmentPreference(null, null)));
-        assertThat(thrown).hasMessageThat().contains("Activity cannot be null");
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNull();
+        mEnvironment.setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, null));
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNull();
     }
 
     @Test
     public void dispose_clearsResources() {
-        EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
-        GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
-        SpatialState spatialState = ShadowSpatialState.create();
-        ShadowSpatialState.extract(spatialState)
-                .setEnvironmentVisibilityState(
-                        /* environmentVisibilityState= */ ShadowEnvironmentVisibilityState.create(
-                                EnvironmentVisibilityState.APP_VISIBLE));
-        ShadowSpatialState.extract(spatialState)
-                .setPassthroughVisibilityState(
-                        /* passthroughVisibilityState= */ ShadowPassthroughVisibilityState.create(
-                                PassthroughVisibilityState.APP, 0.5f));
+        androidx.xr.extensions.asset.EnvironmentToken exr = fakeLoadEnvironment("fakeEnvironment");
+        androidx.xr.extensions.asset.GltfModelToken gltf = fakeLoadGltfModel("fakeGltfModel");
+        FakeSpatialState spatialState = new FakeSpatialState();
 
+        spatialState.setEnvironmentVisibility(
+                new FakeEnvironmentVisibilityState(EnvironmentVisibilityState.APP_VISIBLE));
+        spatialState.setPassthroughVisibility(
+                new FakePassthroughVisibilityState(PassthroughVisibilityState.APP, 0.5f));
         mEnvironment.setSpatialState(spatialState);
 
         mEnvironment.setSpatialEnvironmentPreference(
@@ -994,14 +629,14 @@
                         new ExrImageResourceImpl(exr), new GltfModelResourceImpl(gltf)));
         mEnvironment.setPassthroughOpacityPreference(0.5f);
 
-        Node skyboxNode = getNodeWithEnvironmentToken(exr);
-        Node geometryNode = getNodeWithGltfToken(gltf);
+        FakeNode skyboxNode = mFakeExtensions.testGetNodeWithEnvironmentToken(exr);
+        FakeNode geometryNode = mFakeExtensions.testGetNodeWithGltfToken(gltf);
 
         assertThat(skyboxNode).isNotNull();
         assertThat(geometryNode).isNotNull();
 
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNotNull();
-        assertThat(mNodeRepository.getParent(geometryNode)).isNotNull();
+        assertThat(skyboxNode.getParent()).isNotNull();
+        assertThat(geometryNode.getParent()).isNotNull();
 
         assertThat(mEnvironment.getSpatialEnvironmentPreference()).isNotNull();
         assertThat(mEnvironment.isSpatialEnvironmentPreferenceActive()).isTrue();
@@ -1010,10 +645,9 @@
         assertThat(mEnvironment.getCurrentPassthroughOpacity()).isEqualTo(0.5f);
 
         mEnvironment.dispose();
-        assertThat(mNodeRepository.getParent(skyboxNode)).isNull();
-        assertThat(mNodeRepository.getParent(geometryNode)).isNull();
-        assertThat(ShadowXrExtensions.extract(mXrExtensions).getEnvironmentNode(mActivity))
-                .isNull();
+        assertThat(skyboxNode.getParent()).isNull();
+        assertThat(geometryNode.getParent()).isNull();
+        assertThat(mFakeExtensions.getFakeEnvironmentNode()).isNull();
         assertThat(mEnvironment.getSpatialEnvironmentPreference()).isNull();
         assertThat(mEnvironment.isSpatialEnvironmentPreferenceActive()).isFalse();
         assertThat(mEnvironment.getPassthroughOpacityPreference()).isNull();
diff --git a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SystemSpaceEntityImplTest.java b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SystemSpaceEntityImplTest.java
index 3e1b521..10df5fe 100644
--- a/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SystemSpaceEntityImplTest.java
+++ b/xr/scenecore/scenecore/src/test/java/androidx/xr/scenecore/impl/SystemSpaceEntityImplTest.java
@@ -23,26 +23,20 @@
 
 import static org.mockito.Mockito.verify;
 
+import androidx.xr.extensions.node.Mat4f;
 import androidx.xr.runtime.math.Matrix4;
 import androidx.xr.runtime.math.Pose;
 import androidx.xr.runtime.math.Quaternion;
 import androidx.xr.runtime.math.Vector3;
 import androidx.xr.scenecore.JxrPlatformAdapter.SystemSpaceEntity.OnSpaceUpdatedListener;
 import androidx.xr.scenecore.testing.FakeScheduledExecutorService;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeCloseable;
 import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNode;
-
-import com.android.extensions.xr.node.FakeCloseable;
-import com.android.extensions.xr.node.Mat4f;
-import com.android.extensions.xr.node.Node;
-import com.android.extensions.xr.node.NodeRepository;
-import com.android.extensions.xr.node.NodeTransform;
-import com.android.extensions.xr.node.ShadowNodeTransform;
+import androidx.xr.scenecore.testing.FakeXrExtensions.FakeNodeTransform;
 
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import java.time.Duration;
-
 /**
  * Abstract test class for {@link SystemSpaceEntityImpl} implementations.
  *
@@ -67,12 +61,7 @@
     public void systemSpaceEntityImplConstructor_setsNodeTransformSubscription() {
         SystemSpaceEntityImpl systemSpaceEntity = getSystemSpaceEntityImpl();
         FakeScheduledExecutorService fakeExecutor = getDefaultFakeExecutor();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        getDefaultFakeExecutor()
-                .simulateSleepExecutingAllTasks(
-                        Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
-        FakeNode node = new FakeNode(systemSpaceEntity.getNode());
+        FakeNode node = (FakeNode) systemSpaceEntity.getNode();
         assertThat(node.getTransformListener()).isNotNull();
         assertThat(node.getTransformExecutor()).isEqualTo(fakeExecutor);
         assertThat(systemSpaceEntity.mNodeTransformCloseable).isNotNull();
@@ -81,11 +70,6 @@
     @Test
     public void dispose_closesNodeTransformSubscription() {
         SystemSpaceEntityImpl systemSpaceEntity = getSystemSpaceEntityImpl();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        getDefaultFakeExecutor()
-                .simulateSleepExecutingAllTasks(
-                        Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
         FakeCloseable nodeTransformCloseable =
                 (FakeCloseable) systemSpaceEntity.mNodeTransformCloseable;
         assertThat(nodeTransformCloseable.isClosed()).isFalse();
@@ -168,12 +152,7 @@
     @Test
     public void getPoseInOpenXrReferenceSpace_returnsPoseFromSubscribeToNodeTransform() {
         SystemSpaceEntityImpl systemSpaceEntity = getSystemSpaceEntityImpl();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        getDefaultFakeExecutor()
-                .simulateSleepExecutingAllTasks(
-                        Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
-        FakeNode node = new FakeNode(systemSpaceEntity.getNode());
+        FakeNode node = (FakeNode) systemSpaceEntity.getNode();
         Mat4f mat4f =
                 new Mat4f( // --                Column major, right handed 4x4 Transformation Matrix
                         // with
@@ -184,7 +163,7 @@
                             0f, 0f, 1f, 0f, // --     0,        0,      1,  0
                             4f, 8f, 12f, 1f, // --    tx,       ty,     tz, 1
                         });
-        NodeTransform nodeTransformEvent = ShadowNodeTransform.create(mat4f);
+        FakeNodeTransform nodeTransformEvent = new FakeNodeTransform(mat4f);
 
         node.sendTransformEvent(nodeTransformEvent);
         getDefaultFakeExecutor().runAll();
@@ -200,14 +179,9 @@
     @Test
     public void setOnSpaceUpdatedListener_callsListenerOnNodeTransformEvent() {
         SystemSpaceEntityImpl systemSpaceEntity = getSystemSpaceEntityImpl();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        getDefaultFakeExecutor()
-                .simulateSleepExecutingAllTasks(
-                        Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
-        FakeNode node = new FakeNode(systemSpaceEntity.getNode());
+        FakeNode node = (FakeNode) systemSpaceEntity.getNode();
         Mat4f mat4f = new Mat4f(Matrix4.Identity.getData());
-        NodeTransform nodeTransformEvent = ShadowNodeTransform.create(mat4f);
+        FakeNodeTransform nodeTransformEvent = new FakeNodeTransform(mat4f);
 
         OnSpaceUpdatedListener listener = Mockito.mock(OnSpaceUpdatedListener.class);
         FakeScheduledExecutorService executor = new FakeScheduledExecutorService();
@@ -227,13 +201,9 @@
             setOnSpaceUpdatedListener_multipleListeners_callsLastListenerOnNodeTransformEvent() {
         SystemSpaceEntityImpl systemSpaceEntity = getSystemSpaceEntityImpl();
         FakeScheduledExecutorService fakeExecutor = getDefaultFakeExecutor();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        fakeExecutor.simulateSleepExecutingAllTasks(
-                Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
-        FakeNode node = new FakeNode(systemSpaceEntity.getNode());
+        FakeNode node = (FakeNode) systemSpaceEntity.getNode();
         Mat4f mat4f = new Mat4f(Matrix4.Identity.getData());
-        NodeTransform nodeTransformEvent = ShadowNodeTransform.create(mat4f);
+        FakeNodeTransform nodeTransformEvent = new FakeNodeTransform(mat4f);
 
         OnSpaceUpdatedListener listener = Mockito.mock(OnSpaceUpdatedListener.class);
         OnSpaceUpdatedListener listener2 = Mockito.mock(OnSpaceUpdatedListener.class);
@@ -254,14 +224,9 @@
     public void
             setOnSpaceUpdatedListener_withNullExecutor_callsListenerOnNodeTransformEventExecutor() {
         SystemSpaceEntityImpl systemSpaceEntity = getSystemSpaceEntityImpl();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        getDefaultFakeExecutor()
-                .simulateSleepExecutingAllTasks(
-                        Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
-        FakeNode node = new FakeNode(systemSpaceEntity.getNode());
+        FakeNode node = (FakeNode) systemSpaceEntity.getNode();
         Mat4f mat4f = new Mat4f(Matrix4.Identity.getData());
-        NodeTransform nodeTransformEvent = ShadowNodeTransform.create(mat4f);
+        FakeNodeTransform nodeTransformEvent = new FakeNodeTransform(mat4f);
 
         OnSpaceUpdatedListener listener = Mockito.mock(OnSpaceUpdatedListener.class);
         systemSpaceEntity.setOnSpaceUpdatedListener(listener, null);
@@ -275,14 +240,9 @@
     @Test
     public void setOnSpaceUpdatedListener_withNullListener_noListenerCalledOnNodeTransformEvent() {
         SystemSpaceEntityImpl systemSpaceEntity = getSystemSpaceEntityImpl();
-        // TODO: b/377554103 - Remove delay once the subscription API are synced with the node
-        // creation.
-        getDefaultFakeExecutor()
-                .simulateSleepExecutingAllTasks(
-                        Duration.ofMillis(SystemSpaceEntityImpl.SUBSCRIPTION_DELAY_MS));
-        FakeNode node = new FakeNode(systemSpaceEntity.getNode());
+        FakeNode node = (FakeNode) systemSpaceEntity.getNode();
         Mat4f mat4f = new Mat4f(Matrix4.Identity.getData());
-        NodeTransform nodeTransformEvent = ShadowNodeTransform.create(mat4f);
+        FakeNodeTransform nodeTransformEvent = new FakeNodeTransform(mat4f);
 
         OnSpaceUpdatedListener listener = Mockito.mock(OnSpaceUpdatedListener.class);
         systemSpaceEntity.setOnSpaceUpdatedListener(listener, null);
@@ -302,14 +262,14 @@
         systemSpaceEntity.addChild(childEntity);
 
         // Verify the parent of the child node is the space node before disposing it.
-        Node systemSpaceNode = systemSpaceEntity.getNode();
-        assertThat(NodeRepository.getInstance().getParent(childEntity.getNode()))
-                .isEqualTo(systemSpaceNode);
+        FakeNode systemSpaceNode = (FakeNode) systemSpaceEntity.getNode();
+        FakeNode childNode = (FakeNode) childEntity.getNode();
+        assertThat(childNode.getParent()).isEqualTo(systemSpaceNode);
 
         // Dispose the space entity and verify that the children were disposed.
         systemSpaceEntity.dispose();
 
-        assertThat(NodeRepository.getInstance().getParent(childEntity.getNode())).isNull();
+        assertThat(childNode.getParent()).isNull();
     }
 
     @Test
diff --git a/pdf/pdf-compose/api/current.txt b/xr/xr-stubs/api/current.txt
similarity index 100%
rename from pdf/pdf-compose/api/current.txt
rename to xr/xr-stubs/api/current.txt
diff --git a/pdf/pdf-compose/api/res-current.txt b/xr/xr-stubs/api/res-current.txt
similarity index 100%
rename from pdf/pdf-compose/api/res-current.txt
rename to xr/xr-stubs/api/res-current.txt
diff --git a/xr/xr-stubs/api/restricted_current.txt b/xr/xr-stubs/api/restricted_current.txt
new file mode 100644
index 0000000..4726632
--- /dev/null
+++ b/xr/xr-stubs/api/restricted_current.txt
@@ -0,0 +1,462 @@
+// Signature format: 4.0
+package com.android.extensions.xr {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Config {
+    method public float defaultPixelsPerMeter(float);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class XrExtensionResult {
+    method public int getResult();
+    field @Deprecated public static final int XR_RESULT_ERROR_IGNORED = 3; // 0x3
+    field @Deprecated public static final int XR_RESULT_ERROR_INVALID_STATE = 2; // 0x2
+    field public static final int XR_RESULT_ERROR_NOT_ALLOWED = 3; // 0x3
+    field public static final int XR_RESULT_ERROR_SYSTEM = 4; // 0x4
+    field public static final int XR_RESULT_IGNORED_ALREADY_APPLIED = 2; // 0x2
+    field public static final int XR_RESULT_SUCCESS = 0; // 0x0
+    field public static final int XR_RESULT_SUCCESS_NOT_VISIBLE = 1; // 0x1
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class XrExtensions {
+    ctor public XrExtensions();
+    method public void addFindableView(android.view.View!, android.view.ViewGroup!);
+    method public void attachSpatialEnvironment(android.app.Activity!, com.android.extensions.xr.node.Node!, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.XrExtensionResult!>!, java.util.concurrent.Executor!);
+    method public void attachSpatialScene(android.app.Activity!, com.android.extensions.xr.node.Node!, com.android.extensions.xr.node.Node!, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.XrExtensionResult!>!, java.util.concurrent.Executor!);
+    method public void clearSpatialStateCallback(android.app.Activity!);
+    method public com.android.extensions.xr.space.ActivityPanel! createActivityPanel(android.app.Activity!, com.android.extensions.xr.space.ActivityPanelLaunchParameters!);
+    method public com.android.extensions.xr.node.Node! createNode();
+    method public com.android.extensions.xr.node.NodeTransaction! createNodeTransaction();
+    method public com.android.extensions.xr.node.ReformOptions! createReformOptions(com.android.extensions.xr.function.Consumer<com.android.extensions.xr.node.ReformEvent!>!, java.util.concurrent.Executor!);
+    method public com.android.extensions.xr.splitengine.SplitEngineBridge! createSplitEngineBridge();
+    method public com.android.extensions.xr.subspace.Subspace! createSubspace(com.android.extensions.xr.splitengine.SplitEngineBridge!, int);
+    method public void detachSpatialEnvironment(android.app.Activity!, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.XrExtensionResult!>!, java.util.concurrent.Executor!);
+    method public void detachSpatialScene(android.app.Activity!, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.XrExtensionResult!>!, java.util.concurrent.Executor!);
+    method public int getApiVersion();
+    method public com.android.extensions.xr.Config! getConfig();
+    method public int getOpenXrWorldReferenceSpaceType();
+    method public com.android.extensions.xr.space.SpatialState! getSpatialState(android.app.Activity!);
+    method public com.android.extensions.xr.node.Node! getSurfaceTrackingNode(android.view.View!);
+    method public com.android.extensions.xr.media.XrSpatialAudioExtensions! getXrSpatialAudioExtensions();
+    method public void hitTest(android.app.Activity!, com.android.extensions.xr.node.Vec3!, com.android.extensions.xr.node.Vec3!, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.space.HitTestResult!>!, java.util.concurrent.Executor!);
+    method @Deprecated public java.util.concurrent.CompletableFuture<com.android.extensions.xr.asset.EnvironmentToken!>! loadEnvironment(java.io.InputStream!, int, int, String!);
+    method @Deprecated public java.util.concurrent.CompletableFuture<com.android.extensions.xr.asset.EnvironmentToken!>! loadEnvironment(java.io.InputStream!, int, int, String!, int, int);
+    method @Deprecated public java.util.concurrent.CompletableFuture<com.android.extensions.xr.asset.GltfModelToken!>! loadGltfModel(java.io.InputStream!, int, int, String!);
+    method @Deprecated public java.util.concurrent.CompletableFuture<com.android.extensions.xr.asset.SceneToken!>! loadImpressScene(java.io.InputStream!, int, int);
+    method public void removeFindableView(android.view.View!, android.view.ViewGroup!);
+    method public void requestFullSpaceMode(android.app.Activity!, boolean, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.XrExtensionResult!>!, java.util.concurrent.Executor!);
+    method public android.os.Bundle! setFullSpaceStartMode(android.os.Bundle!);
+    method public android.os.Bundle! setFullSpaceStartModeWithEnvironmentInherited(android.os.Bundle!);
+    method @Deprecated public void setMainWindowCurvatureRadius(android.app.Activity!, float);
+    method public void setMainWindowSize(android.app.Activity!, int, int, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.XrExtensionResult!>!, java.util.concurrent.Executor!);
+    method public void setPreferredAspectRatio(android.app.Activity!, float, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.XrExtensionResult!>!, java.util.concurrent.Executor!);
+    method public void setSpatialStateCallback(android.app.Activity!, com.android.extensions.xr.function.Consumer<com.android.extensions.xr.space.SpatialState!>!, java.util.concurrent.Executor!);
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class XrExtensions.SceneViewerResult {
+    ctor @Deprecated public XrExtensions.SceneViewerResult();
+  }
+
+}
+
+package com.android.extensions.xr.asset {
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface AssetToken {
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface EnvironmentToken extends com.android.extensions.xr.asset.AssetToken {
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface GltfAnimation {
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public enum GltfAnimation.State {
+    enum_constant @Deprecated public static final com.android.extensions.xr.asset.GltfAnimation.State LOOP;
+    enum_constant @Deprecated public static final com.android.extensions.xr.asset.GltfAnimation.State PLAY;
+    enum_constant @Deprecated public static final com.android.extensions.xr.asset.GltfAnimation.State STOP;
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface GltfModelToken extends com.android.extensions.xr.asset.AssetToken {
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SceneToken extends com.android.extensions.xr.asset.AssetToken {
+  }
+
+}
+
+package com.android.extensions.xr.environment {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class EnvironmentVisibilityState {
+    method public int getCurrentState();
+    field public static final int APP_VISIBLE = 2; // 0x2
+    field public static final int HOME_VISIBLE = 1; // 0x1
+    field public static final int INVISIBLE = 0; // 0x0
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class PassthroughVisibilityState {
+    method public int getCurrentState();
+    method public float getOpacity();
+    field public static final int APP = 2; // 0x2
+    field public static final int DISABLED = 0; // 0x0
+    field public static final int HOME = 1; // 0x1
+    field public static final int SYSTEM = 3; // 0x3
+  }
+
+}
+
+package com.android.extensions.xr.function {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @java.lang.FunctionalInterface public interface Consumer<T> {
+    method public void accept(T!);
+  }
+
+}
+
+package com.android.extensions.xr.media {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AudioManagerExtensions {
+    method public void playSoundEffectAsPointSource(android.media.AudioManager!, int, com.android.extensions.xr.media.PointSourceAttributes!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class AudioTrackExtensions {
+    method public com.android.extensions.xr.media.PointSourceAttributes! getPointSourceAttributes(android.media.AudioTrack!);
+    method public com.android.extensions.xr.media.SoundFieldAttributes! getSoundFieldAttributes(android.media.AudioTrack!);
+    method public int getSpatialSourceType(android.media.AudioTrack!);
+    method public android.media.AudioTrack.Builder! setPointSourceAttributes(android.media.AudioTrack.Builder!, com.android.extensions.xr.media.PointSourceAttributes!);
+    method public android.media.AudioTrack.Builder! setSoundFieldAttributes(android.media.AudioTrack.Builder!, com.android.extensions.xr.media.SoundFieldAttributes!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class MediaPlayerExtensions {
+    method public android.media.MediaPlayer! setPointSourceAttributes(android.media.MediaPlayer!, com.android.extensions.xr.media.PointSourceAttributes!);
+    method public android.media.MediaPlayer! setSoundFieldAttributes(android.media.MediaPlayer!, com.android.extensions.xr.media.SoundFieldAttributes!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class PointSourceAttributes {
+    method public com.android.extensions.xr.node.Node! getNode();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class PointSourceAttributes.Builder {
+    ctor public PointSourceAttributes.Builder();
+    method public com.android.extensions.xr.media.PointSourceAttributes! build() throws java.lang.UnsupportedOperationException;
+    method public com.android.extensions.xr.media.PointSourceAttributes.Builder! setNode(com.android.extensions.xr.node.Node!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SoundFieldAttributes {
+    method public int getAmbisonicsOrder();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class SoundFieldAttributes.Builder {
+    ctor public SoundFieldAttributes.Builder();
+    method public com.android.extensions.xr.media.SoundFieldAttributes! build() throws java.lang.UnsupportedOperationException;
+    method public com.android.extensions.xr.media.SoundFieldAttributes.Builder! setAmbisonicsOrder(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SoundPoolExtensions {
+    method public int getSpatialSourceType(android.media.SoundPool!, int);
+    method public int playAsPointSource(android.media.SoundPool!, int, com.android.extensions.xr.media.PointSourceAttributes!, float, int, int, float);
+    method public int playAsSoundField(android.media.SoundPool!, int, com.android.extensions.xr.media.SoundFieldAttributes!, float, int, int, float);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SpatializerExtensions {
+    field public static final int AMBISONICS_ORDER_FIRST_ORDER = 0; // 0x0
+    field public static final int AMBISONICS_ORDER_SECOND_ORDER = 1; // 0x1
+    field public static final int AMBISONICS_ORDER_THIRD_ORDER = 2; // 0x2
+    field public static final int SOURCE_TYPE_BYPASS = 0; // 0x0
+    field public static final int SOURCE_TYPE_POINT_SOURCE = 1; // 0x1
+    field public static final int SOURCE_TYPE_SOUND_FIELD = 2; // 0x2
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class XrSpatialAudioExtensions {
+    method public com.android.extensions.xr.media.AudioManagerExtensions! getAudioManagerExtensions();
+    method public com.android.extensions.xr.media.AudioTrackExtensions! getAudioTrackExtensions();
+    method public com.android.extensions.xr.media.MediaPlayerExtensions! getMediaPlayerExtensions();
+    method public com.android.extensions.xr.media.SoundPoolExtensions! getSoundPoolExtensions();
+  }
+
+}
+
+package com.android.extensions.xr.node {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class InputEvent {
+    method public int getAction();
+    method public com.android.extensions.xr.node.Vec3! getDirection();
+    method public int getDispatchFlags();
+    method public com.android.extensions.xr.node.InputEvent.HitInfo! getHitInfo();
+    method public com.android.extensions.xr.node.Vec3! getOrigin();
+    method public int getPointerType();
+    method public com.android.extensions.xr.node.InputEvent.HitInfo! getSecondaryHitInfo();
+    method public int getSource();
+    method public long getTimestamp();
+    field public static final int ACTION_CANCEL = 3; // 0x3
+    field public static final int ACTION_DOWN = 0; // 0x0
+    field public static final int ACTION_HOVER_ENTER = 5; // 0x5
+    field public static final int ACTION_HOVER_EXIT = 6; // 0x6
+    field public static final int ACTION_HOVER_MOVE = 4; // 0x4
+    field public static final int ACTION_MOVE = 2; // 0x2
+    field public static final int ACTION_UP = 1; // 0x1
+    field public static final int DISPATCH_FLAG_2D = 2; // 0x2
+    field public static final int DISPATCH_FLAG_CAPTURED_POINTER = 1; // 0x1
+    field public static final int DISPATCH_FLAG_NONE = 0; // 0x0
+    field public static final int POINTER_TYPE_DEFAULT = 0; // 0x0
+    field public static final int POINTER_TYPE_LEFT = 1; // 0x1
+    field public static final int POINTER_TYPE_RIGHT = 2; // 0x2
+    field public static final int SOURCE_CONTROLLER = 2; // 0x2
+    field public static final int SOURCE_GAZE_AND_GESTURE = 5; // 0x5
+    field public static final int SOURCE_HANDS = 3; // 0x3
+    field public static final int SOURCE_HEAD = 1; // 0x1
+    field public static final int SOURCE_MOUSE = 4; // 0x4
+    field public static final int SOURCE_UNKNOWN = 0; // 0x0
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static class InputEvent.HitInfo {
+    ctor public InputEvent.HitInfo(int, com.android.extensions.xr.node.Node!, com.android.extensions.xr.node.Mat4f!, com.android.extensions.xr.node.Vec3!);
+    method public com.android.extensions.xr.node.Vec3! getHitPosition();
+    method public com.android.extensions.xr.node.Node! getInputNode();
+    method public int getSubspaceImpressNodeId();
+    method public com.android.extensions.xr.node.Mat4f! getTransform();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Mat4f {
+    ctor public Mat4f(float[]!);
+    method public float get(int, int);
+    method public float[]! getFlattenedMatrix();
+    method public void set(int, int, float);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Node implements android.os.Parcelable {
+    method public int describeContents();
+    method public void listenForInput(com.android.extensions.xr.function.Consumer<com.android.extensions.xr.node.InputEvent!>!, java.util.concurrent.Executor!);
+    method public void requestPointerCapture(com.android.extensions.xr.function.Consumer<java.lang.Integer!>!, java.util.concurrent.Executor!);
+    method public void setNonPointerFocusTarget(android.view.AttachedSurfaceControl!);
+    method public void stopListeningForInput();
+    method public void stopPointerCapture();
+    method public java.io.Closeable! subscribeToTransform(com.android.extensions.xr.function.Consumer<com.android.extensions.xr.node.NodeTransform!>!, java.util.concurrent.Executor!);
+    method public void writeToParcel(android.os.Parcel!, int);
+    field public static final int POINTER_CAPTURE_STATE_ACTIVE = 1; // 0x1
+    field public static final int POINTER_CAPTURE_STATE_PAUSED = 0; // 0x0
+    field public static final int POINTER_CAPTURE_STATE_STOPPED = 2; // 0x2
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class NodeTransaction implements java.io.Closeable {
+    method public void apply();
+    method public void close();
+    method public com.android.extensions.xr.node.NodeTransaction! disableReform(com.android.extensions.xr.node.Node!);
+    method public com.android.extensions.xr.node.NodeTransaction! enableReform(com.android.extensions.xr.node.Node!, com.android.extensions.xr.node.ReformOptions!);
+    method public com.android.extensions.xr.node.NodeTransaction! merge(com.android.extensions.xr.node.NodeTransaction!);
+    method public com.android.extensions.xr.node.NodeTransaction! removeCornerRadius(com.android.extensions.xr.node.Node!);
+    method public com.android.extensions.xr.node.NodeTransaction! setAlpha(com.android.extensions.xr.node.Node!, float);
+    method public com.android.extensions.xr.node.NodeTransaction! setAnchorId(com.android.extensions.xr.node.Node!, android.os.IBinder!);
+    method public com.android.extensions.xr.node.NodeTransaction! setCornerRadius(com.android.extensions.xr.node.Node!, float);
+    method @Deprecated public com.android.extensions.xr.node.NodeTransaction! setCurvature(com.android.extensions.xr.node.Node!, float);
+    method @Deprecated public com.android.extensions.xr.node.NodeTransaction! setEnvironment(com.android.extensions.xr.node.Node!, com.android.extensions.xr.asset.EnvironmentToken!);
+    method @Deprecated public com.android.extensions.xr.node.NodeTransaction! setGltfAnimation(com.android.extensions.xr.node.Node!, String!, com.android.extensions.xr.asset.GltfAnimation.State!);
+    method @Deprecated public com.android.extensions.xr.node.NodeTransaction! setGltfModel(com.android.extensions.xr.node.Node!, com.android.extensions.xr.asset.GltfModelToken!);
+    method @Deprecated public com.android.extensions.xr.node.NodeTransaction! setImpressScene(com.android.extensions.xr.node.Node!, com.android.extensions.xr.asset.SceneToken!);
+    method public com.android.extensions.xr.node.NodeTransaction! setName(com.android.extensions.xr.node.Node!, String!);
+    method public com.android.extensions.xr.node.NodeTransaction! setOrientation(com.android.extensions.xr.node.Node!, float, float, float, float);
+    method public com.android.extensions.xr.node.NodeTransaction! setParent(com.android.extensions.xr.node.Node!, com.android.extensions.xr.node.Node!);
+    method public com.android.extensions.xr.node.NodeTransaction! setPassthroughState(com.android.extensions.xr.node.Node!, float, int);
+    method public com.android.extensions.xr.node.NodeTransaction! setPixelPositioning(com.android.extensions.xr.node.Node!, int);
+    method public com.android.extensions.xr.node.NodeTransaction! setPixelResolution(com.android.extensions.xr.node.Node!, float);
+    method public com.android.extensions.xr.node.NodeTransaction! setPosition(com.android.extensions.xr.node.Node!, float, float, float);
+    method public com.android.extensions.xr.node.NodeTransaction! setReformSize(com.android.extensions.xr.node.Node!, com.android.extensions.xr.node.Vec3!);
+    method public com.android.extensions.xr.node.NodeTransaction! setScale(com.android.extensions.xr.node.Node!, float, float, float);
+    method public com.android.extensions.xr.node.NodeTransaction! setSubspace(com.android.extensions.xr.node.Node!, com.android.extensions.xr.subspace.Subspace!);
+    method public com.android.extensions.xr.node.NodeTransaction! setSurfaceControl(com.android.extensions.xr.node.Node!, android.view.SurfaceControl!);
+    method public com.android.extensions.xr.node.NodeTransaction! setSurfacePackage(com.android.extensions.xr.node.Node!, android.view.SurfaceControlViewHost.SurfacePackage!);
+    method public com.android.extensions.xr.node.NodeTransaction! setVisibility(com.android.extensions.xr.node.Node!, boolean);
+    method public com.android.extensions.xr.node.NodeTransaction! setWindowBounds(android.view.SurfaceControl!, int, int);
+    method public com.android.extensions.xr.node.NodeTransaction! setWindowBounds(android.view.SurfaceControlViewHost.SurfacePackage!, int, int);
+    field public static final int POSITION_FROM_PARENT_TOP_LEFT = 64; // 0x40
+    field public static final int X_POSITION_IN_PIXELS = 1; // 0x1
+    field public static final int Y_POSITION_IN_PIXELS = 2; // 0x2
+    field public static final int Z_POSITION_IN_PIXELS = 4; // 0x4
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class NodeTransform {
+    method public long getTimestamp();
+    method public com.android.extensions.xr.node.Mat4f! getTransform();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Quatf {
+    ctor public Quatf(float, float, float, float);
+    field public final float w;
+    field public final float x;
+    field public final float y;
+    field public final float z;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ReformEvent {
+    method public com.android.extensions.xr.node.Vec3! getCurrentRayDirection();
+    method public com.android.extensions.xr.node.Vec3! getCurrentRayOrigin();
+    method public int getId();
+    method public com.android.extensions.xr.node.Vec3! getInitialRayDirection();
+    method public com.android.extensions.xr.node.Vec3! getInitialRayOrigin();
+    method public com.android.extensions.xr.node.Quatf! getProposedOrientation();
+    method public com.android.extensions.xr.node.Vec3! getProposedPosition();
+    method public com.android.extensions.xr.node.Vec3! getProposedScale();
+    method public com.android.extensions.xr.node.Vec3! getProposedSize();
+    method public int getState();
+    method public int getType();
+    field public static final int REFORM_STATE_END = 3; // 0x3
+    field public static final int REFORM_STATE_ONGOING = 2; // 0x2
+    field public static final int REFORM_STATE_START = 1; // 0x1
+    field public static final int REFORM_STATE_UNKNOWN = 0; // 0x0
+    field public static final int REFORM_TYPE_MOVE = 1; // 0x1
+    field public static final int REFORM_TYPE_RESIZE = 2; // 0x2
+    field public static final int REFORM_TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ReformOptions {
+    method public com.android.extensions.xr.node.Vec3! getCurrentSize();
+    method public int getEnabledReform();
+    method public com.android.extensions.xr.function.Consumer<com.android.extensions.xr.node.ReformEvent!>! getEventCallback();
+    method public java.util.concurrent.Executor! getEventExecutor();
+    method public float getFixedAspectRatio();
+    method public int getFlags();
+    method public boolean getForceShowResizeOverlay();
+    method public com.android.extensions.xr.node.Vec3! getMaximumSize();
+    method public com.android.extensions.xr.node.Vec3! getMinimumSize();
+    method public int getScaleWithDistanceMode();
+    method public com.android.extensions.xr.node.ReformOptions! setCurrentSize(com.android.extensions.xr.node.Vec3!);
+    method public com.android.extensions.xr.node.ReformOptions! setEnabledReform(int);
+    method public com.android.extensions.xr.node.ReformOptions! setEventCallback(com.android.extensions.xr.function.Consumer<com.android.extensions.xr.node.ReformEvent!>!);
+    method public com.android.extensions.xr.node.ReformOptions! setEventExecutor(java.util.concurrent.Executor!);
+    method public com.android.extensions.xr.node.ReformOptions! setFixedAspectRatio(float);
+    method public com.android.extensions.xr.node.ReformOptions! setFlags(int);
+    method public com.android.extensions.xr.node.ReformOptions! setForceShowResizeOverlay(boolean);
+    method public com.android.extensions.xr.node.ReformOptions! setMaximumSize(com.android.extensions.xr.node.Vec3!);
+    method public com.android.extensions.xr.node.ReformOptions! setMinimumSize(com.android.extensions.xr.node.Vec3!);
+    method public com.android.extensions.xr.node.ReformOptions! setScaleWithDistanceMode(int);
+    field public static final int ALLOW_MOVE = 1; // 0x1
+    field public static final int ALLOW_RESIZE = 2; // 0x2
+    field public static final int FLAG_ALLOW_SYSTEM_MOVEMENT = 2; // 0x2
+    field public static final int FLAG_POSE_RELATIVE_TO_PARENT = 4; // 0x4
+    field public static final int FLAG_SCALE_WITH_DISTANCE = 1; // 0x1
+    field public static final int SCALE_WITH_DISTANCE_MODE_DEFAULT = 3; // 0x3
+    field public static final int SCALE_WITH_DISTANCE_MODE_DMM = 2; // 0x2
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class Vec3 {
+    ctor public Vec3(float, float, float);
+    field public final float x;
+    field public final float y;
+    field public final float z;
+  }
+
+}
+
+package com.android.extensions.xr.passthrough {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class PassthroughState {
+    field public static final int PASSTHROUGH_MODE_MAX = 1; // 0x1
+    field public static final int PASSTHROUGH_MODE_MIN = 2; // 0x2
+    field public static final int PASSTHROUGH_MODE_OFF = 0; // 0x0
+  }
+
+}
+
+package com.android.extensions.xr.space {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ActivityPanel {
+    method public void delete();
+    method public com.android.extensions.xr.node.Node! getNode();
+    method public void launchActivity(android.content.Intent!, android.os.Bundle!);
+    method public void moveActivity(android.app.Activity!);
+    method public void setWindowBounds(android.graphics.Rect!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ActivityPanelLaunchParameters {
+    ctor public ActivityPanelLaunchParameters(android.graphics.Rect!);
+    method public android.graphics.Rect! getWindowBounds();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Bounds {
+    ctor public Bounds(float, float, float);
+    method public float getDepth();
+    method public float getHeight();
+    method public float getWidth();
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class BoundsChangeEvent implements com.android.extensions.xr.space.SpatialStateEvent {
+    ctor @Deprecated public BoundsChangeEvent(com.android.extensions.xr.space.Bounds!);
+    method @Deprecated public com.android.extensions.xr.space.Bounds! getBounds();
+    method @Deprecated public float getDepth();
+    method @Deprecated public float getHeight();
+    method @Deprecated public float getWidth();
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class EnvironmentControlChangeEvent implements com.android.extensions.xr.space.SpatialStateEvent {
+    ctor @Deprecated public EnvironmentControlChangeEvent(boolean);
+    method @Deprecated public boolean getEnvironmentControlAllowed();
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class EnvironmentVisibilityChangeEvent implements com.android.extensions.xr.space.SpatialStateEvent {
+    ctor @Deprecated public EnvironmentVisibilityChangeEvent(int);
+    method @Deprecated public int getEnvironmentState();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class HitTestResult {
+    method public float getDistance();
+    method public com.android.extensions.xr.node.Vec3! getHitPosition();
+    method public com.android.extensions.xr.node.Vec3! getSurfaceNormal();
+    method public int getSurfaceType();
+    method public boolean getVirtualEnvironmentIsVisible();
+    field public static final int SURFACE_3D_OBJECT = 2; // 0x2
+    field public static final int SURFACE_PANEL = 1; // 0x1
+    field public static final int SURFACE_UNKNOWN = 0; // 0x0
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public static final class HitTestResult.Builder {
+    ctor public HitTestResult.Builder(float, com.android.extensions.xr.node.Vec3!, boolean, int);
+    method public com.android.extensions.xr.space.HitTestResult! build();
+    method public com.android.extensions.xr.space.HitTestResult.Builder! setSurfaceNormal(com.android.extensions.xr.node.Vec3!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SpatialCapabilities {
+    ctor public SpatialCapabilities();
+    method public boolean get(int);
+    field public static final int APP_ENVIRONMENTS_CAPABLE = 3; // 0x3
+    field public static final int PASSTHROUGH_CONTROL_CAPABLE = 2; // 0x2
+    field public static final int SPATIAL_3D_CONTENTS_CAPABLE = 1; // 0x1
+    field public static final int SPATIAL_ACTIVITY_EMBEDDING_CAPABLE = 5; // 0x5
+    field public static final int SPATIAL_AUDIO_CAPABLE = 4; // 0x4
+    field public static final int SPATIAL_UI_CAPABLE = 0; // 0x0
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class SpatialCapabilityChangeEvent implements com.android.extensions.xr.space.SpatialStateEvent {
+    ctor @Deprecated public SpatialCapabilityChangeEvent(com.android.extensions.xr.space.SpatialCapabilities!);
+    method @Deprecated public com.android.extensions.xr.space.SpatialCapabilities! getCurrentCapabilities();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SpatialState {
+    method public com.android.extensions.xr.space.Bounds! getBounds();
+    method public com.android.extensions.xr.environment.EnvironmentVisibilityState! getEnvironmentVisibility();
+    method public android.util.Size! getMainWindowSize();
+    method public com.android.extensions.xr.environment.PassthroughVisibilityState! getPassthroughVisibility();
+    method public float getPreferredAspectRatio();
+    method public com.android.extensions.xr.space.SpatialCapabilities! getSpatialCapabilities();
+    method public boolean isActiveEnvironmentNode(com.android.extensions.xr.node.Node!);
+    method public boolean isActiveSceneNode(com.android.extensions.xr.node.Node!);
+    method public boolean isActiveWindowLeashNode(com.android.extensions.xr.node.Node!);
+    method public boolean isEnvironmentInherited();
+  }
+
+  @Deprecated @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface SpatialStateEvent {
+  }
+
+}
+
+package com.android.extensions.xr.splitengine {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class SplitEngineBridge {
+    method public long getNativeHandle();
+  }
+
+}
+
+package com.android.extensions.xr.subspace {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class Subspace {
+  }
+
+}
+
diff --git a/xr/xr-stubs/build.gradle b/xr/xr-stubs/build.gradle
index 40ad4d8..4bdaa32 100644
--- a/xr/xr-stubs/build.gradle
+++ b/xr/xr-stubs/build.gradle
@@ -40,7 +40,7 @@
 
 androidx {
     name = "Android XR Extensions Stub"
-    type = SoftwareType.SNAPSHOT_ONLY_LIBRARY
+    type = SoftwareType.PUBLISHED_LIBRARY
     inceptionYear = "2024"
     description = "Stub implementation of the Android XR Extensions."
     // TODO: b/379715750 - Remove this flag once the deprecated methods have been removed from the API.
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/Config.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/Config.java
index 9cb59f1..c3a767e 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/Config.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/Config.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr;
 
+import androidx.annotation.RestrictTo;
 
 /** XR configuration information. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class Config {
 
     Config() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensionResult.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensionResult.java
index d91db73..a34f008 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensionResult.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensionResult.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr;
 
+import androidx.annotation.RestrictTo;
 
 /** Represents a result of an asynchronous XR Extension call. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class XrExtensionResult {
 
     XrExtensionResult() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensions.java
index 9bdb861..a7c77dc 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/XrExtensions.java
@@ -18,10 +18,13 @@
 
 import android.content.Intent;
 
+import androidx.annotation.RestrictTo;
+
 /**
  * The main extensions class that creates or provides instances of various XR Extensions components.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class XrExtensions {
 
     public XrExtensions() {
@@ -548,8 +551,7 @@
      * Synchronously returns the OpenXR reference space type.
      *
      * @return the OpenXR reference space type used as world space for the shared scene.
-     * @see <a
-     *     href="https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#spaces-reference-spaces">
+     * @see <a href="https://registry.khronos.org/OpenXR/specs/1.1/html/xrspec.html#spaces-reference-spaces">
      *     OpenXR specs</a>
      */
     public int getOpenXrWorldReferenceSpaceType() {
@@ -662,6 +664,7 @@
      * @deprecated JXR Core doesn't need this anymore as it does the same with Split Engine.
      */
     @SuppressWarnings({"unchecked", "deprecation", "all"})
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @Deprecated
     public class SceneViewerResult {
 
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/AssetToken.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/AssetToken.java
index 01a872a..d45c181 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/AssetToken.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/AssetToken.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.asset;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Token of a spatial asset cached in the SpaceFlinger.
@@ -30,5 +31,6 @@
  * @deprecated JXR Core doesn't need this anymore as it does the same with Split Engine.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public interface AssetToken {}
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/EnvironmentToken.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/EnvironmentToken.java
index 9ab118e..e289a67 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/EnvironmentToken.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/EnvironmentToken.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.asset;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Token of an environment cached in the SpaceFlinger.
@@ -30,5 +31,6 @@
  * @deprecated JXR Core doesn't need this anymore as it does the same with Split Engine.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public interface EnvironmentToken extends com.android.extensions.xr.asset.AssetToken {}
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfAnimation.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfAnimation.java
index 8a1dc45..238487f 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfAnimation.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfAnimation.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.asset;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Animation configuration to be played on a glTF model.
@@ -23,6 +24,7 @@
  * @deprecated SceneCore doesn't need this anymore as it does the same with Split Engine.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public interface GltfAnimation {
     /**
@@ -31,6 +33,7 @@
      * @deprecated No longer needed by SceneCore.
      */
     @SuppressWarnings({"unchecked", "deprecation", "all"})
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     @Deprecated
     enum State {
         /**
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfModelToken.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfModelToken.java
index 02a0513..0b8f80e 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfModelToken.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/GltfModelToken.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.asset;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Token of a glTF model cached in the SpaceFlinger.
@@ -30,5 +31,6 @@
  * @deprecated JXR Core doesn't need this anymore as it does the same with Split Engine.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public interface GltfModelToken extends com.android.extensions.xr.asset.AssetToken {}
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/SceneToken.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/SceneToken.java
index 395f67e..c424750 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/SceneToken.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/asset/SceneToken.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.asset;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Token of a scene cached in the SpaceFlinger.
@@ -30,5 +31,6 @@
  * @deprecated JXR Core doesn't need this anymore as it does the same with Split Engine.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public interface SceneToken extends com.android.extensions.xr.asset.AssetToken {}
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/EnvironmentVisibilityState.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/EnvironmentVisibilityState.java
index 7427607..cc42a07 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/EnvironmentVisibilityState.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/EnvironmentVisibilityState.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.environment;
 
+import androidx.annotation.RestrictTo;
 
 /** Visibility states of an environment. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class EnvironmentVisibilityState {
 
     EnvironmentVisibilityState() {
@@ -52,8 +54,8 @@
     public static final int HOME_VISIBLE = 1; // 0x1
 
     /**
-     * No environment is shown. This could mean Passthrough is on with 100% opacity or the home
-     * environment app has crashed.
+     * No environment is shown. This could mean Passthrough is on with 100% opacity or the
+     * home environment app has crashed.
      */
     public static final int INVISIBLE = 0; // 0x0
 }
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/PassthroughVisibilityState.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/PassthroughVisibilityState.java
index 3987d3e..aa48496 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/PassthroughVisibilityState.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/environment/PassthroughVisibilityState.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.environment;
 
+import androidx.annotation.RestrictTo;
 
 /** Visibility states of passthrough. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class PassthroughVisibilityState {
 
     PassthroughVisibilityState() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/function/Consumer.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/function/Consumer.java
index 275bd01..56a4e5442 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/function/Consumer.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/function/Consumer.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.function;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Represents a function that accepts an argument and produces no result. It is used internally to
@@ -25,6 +26,7 @@
  * @see java.util.function.Consumer
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @java.lang.FunctionalInterface
 public interface Consumer<T> {
 
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioManagerExtensions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioManagerExtensions.java
index a1916ec..f980590 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioManagerExtensions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioManagerExtensions.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Provides spatial audio extensions on the framework {@link
  * com.android.extensions.xr.media.AudioManagerExtensions AudioManagerExtensions} class.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class AudioManagerExtensions {
 
     AudioManagerExtensions() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioTrackExtensions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioTrackExtensions.java
index a532bde..b8e6aaa 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioTrackExtensions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/AudioTrackExtensions.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Provides spatial audio extensions on the framework {@link android.media.AudioTrack AudioTrack}
  * class.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class AudioTrackExtensions {
 
     AudioTrackExtensions() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/MediaPlayerExtensions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/MediaPlayerExtensions.java
index 2c46fd7..52bb573 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/MediaPlayerExtensions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/MediaPlayerExtensions.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Provides spatial audio extensions on the framework {@link android.media.MediaPlayer MediaPlayer}
  * class.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class MediaPlayerExtensions {
 
     MediaPlayerExtensions() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/PointSourceAttributes.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/PointSourceAttributes.java
index 52b03c8..383187d 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/PointSourceAttributes.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/PointSourceAttributes.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * {@link com.android.extensions.xr.media.PointSourceAttributes PointSourceAttributes} is used to
  * configure a sound be spatialized as a 3D point.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class PointSourceAttributes {
 
     PointSourceAttributes() {
@@ -45,6 +47,7 @@
      * PointSourceAttributes}
      */
     @SuppressWarnings({"unchecked", "deprecation", "all"})
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     public static final class Builder {
 
         public Builder() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundFieldAttributes.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundFieldAttributes.java
index f92f512..7ab72ea 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundFieldAttributes.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundFieldAttributes.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * {@link com.android.extensions.xr.media.SoundFieldAttributes SoundFieldAttributes} is used to
  * configure ambisonic sound sources.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class SoundFieldAttributes {
 
     SoundFieldAttributes() {
@@ -41,6 +43,7 @@
      * SoundFieldAttributes}
      */
     @SuppressWarnings({"unchecked", "deprecation", "all"})
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     public static final class Builder {
 
         public Builder() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundPoolExtensions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundPoolExtensions.java
index 915f375..841b69b 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundPoolExtensions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SoundPoolExtensions.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Provides spatial audio extensions on the framework {@link android.media.SoundPool SoundPool}
  * class.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class SoundPoolExtensions {
 
     SoundPoolExtensions() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SpatializerExtensions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SpatializerExtensions.java
index 82379d1..b08d6bd 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SpatializerExtensions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/SpatializerExtensions.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /** Extensions of the existing {@link Spatializer} class. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class SpatializerExtensions {
 
     SpatializerExtensions() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/XrSpatialAudioExtensions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/XrSpatialAudioExtensions.java
index db93ff1..acd9deb 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/XrSpatialAudioExtensions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/media/XrSpatialAudioExtensions.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.media;
 
+import androidx.annotation.RestrictTo;
 
 /** Provides new functionality of existing framework APIs needed to Spatialize audio sources. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class XrSpatialAudioExtensions {
 
     XrSpatialAudioExtensions() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/InputEvent.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/InputEvent.java
index 2342c2b..4f39f6c 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/InputEvent.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/InputEvent.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /** A single 6DOF pointer event. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public final class InputEvent {
 
     InputEvent() {
@@ -204,6 +206,7 @@
 
     /** Info about a single ray hit. */
     @SuppressWarnings({"unchecked", "deprecation", "all"})
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     public static class HitInfo {
 
         public HitInfo(
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Mat4f.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Mat4f.java
index a64fddb..e98f907 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Mat4f.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Mat4f.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /** 4x4 matrix. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public final class Mat4f {
 
     public Mat4f(float[] m) {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Node.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Node.java
index 2916fe8..0a8589e 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Node.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Node.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Handle to a node in the SpaceFlinger scene graph that can also host a 2D Panel or 3D subspace.
@@ -29,6 +30,7 @@
  * system, i.e. +X points to the right, +Y up, and +Z points towards the camera.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class Node implements android.os.Parcelable {
 
     Node() {
@@ -123,7 +125,7 @@
         throw new RuntimeException("Stub!");
     }
 
-    /** A no-op override. */
+    /** A no-op override.  */
     public int describeContents() {
         throw new RuntimeException("Stub!");
     }
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransaction.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransaction.java
index c729e2c..1983264 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransaction.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransaction.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * An atomic set of changes to apply to a set of {@link com.android.extensions.xr.node.Node Node}s.
@@ -24,6 +25,7 @@
  * system, i.e. +X points to the right, +Y up, and +Z points towards the camera.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class NodeTransaction implements java.io.Closeable {
 
     NodeTransaction() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransform.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransform.java
index 6fac3b6..189dd51 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransform.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/NodeTransform.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /** interface containing the Node transform */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class NodeTransform {
 
     NodeTransform() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Quatf.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Quatf.java
index 690983d..9879687 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Quatf.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Quatf.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /** Quaternion. q = w + xi + yj + zk */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public final class Quatf {
 
     public Quatf(float x, float y, float z, float w) {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformEvent.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformEvent.java
index b8285d0..fc8a5f0 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformEvent.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformEvent.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /** A reform (move / resize) event. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class ReformEvent {
 
     ReformEvent() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformOptions.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformOptions.java
index cbd096b..3c0242c 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformOptions.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/ReformOptions.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Configuration options for reform (move/resize) UX. To create a ReformOptions instance, call
  * {@code XrExtensions.createReformOptions()}.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class ReformOptions {
 
     ReformOptions() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Vec3.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Vec3.java
index 2dee764..746d909 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Vec3.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/node/Vec3.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.node;
 
+import androidx.annotation.RestrictTo;
 
 /** 3D vector. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public final class Vec3 {
 
     public Vec3(float x, float y, float z) {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/passthrough/PassthroughState.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/passthrough/PassthroughState.java
index 7a5f2c7..42f3901 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/passthrough/PassthroughState.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/passthrough/PassthroughState.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.passthrough;
 
+import androidx.annotation.RestrictTo;
 
 /** Allows to configure the passthrough when the application is in full-space mode. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class PassthroughState {
 
     PassthroughState() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanel.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanel.java
index 2b3d866..c33ca4a 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanel.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanel.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Defines the panel in XR scene to support embedding activities within a host activity.
@@ -24,6 +25,7 @@
  * com.android.extensions.xr.space.ActivityPanel ActivityPanel} will also be destroyed.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class ActivityPanel {
 
     ActivityPanel() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanelLaunchParameters.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanelLaunchParameters.java
index d97fd88..cf58741 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanelLaunchParameters.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/ActivityPanelLaunchParameters.java
@@ -16,12 +16,14 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Defines the launch parameters when creating an {@link
  * com.android.extensions.xr.space.ActivityPanel ActivityPanel}.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public final class ActivityPanelLaunchParameters {
 
     /**
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/Bounds.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/Bounds.java
index beb02b8fc..5562fc58d 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/Bounds.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/Bounds.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Bounds values in meters.
@@ -23,6 +24,7 @@
  * @see androidx.xr.extensions.XrExtensions#getSpatialState
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class Bounds {
 
     public Bounds(float width, float height, float depth) {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/BoundsChangeEvent.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/BoundsChangeEvent.java
index f86cb73..255c6198 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/BoundsChangeEvent.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/BoundsChangeEvent.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Triggers when there is a bounds change. For example, resize the panel in home space, or
@@ -24,6 +25,7 @@
  * @deprecated Use SpatialState instead.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public final class BoundsChangeEvent implements com.android.extensions.xr.space.SpatialStateEvent {
 
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentControlChangeEvent.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentControlChangeEvent.java
index 1fcabeb..73ec74e 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentControlChangeEvent.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentControlChangeEvent.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Triggers when the ability to control the environment changes.
@@ -23,6 +24,7 @@
  * @deprecated Use SpatialState instead.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public final class EnvironmentControlChangeEvent
         implements com.android.extensions.xr.space.SpatialStateEvent {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentVisibilityChangeEvent.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentVisibilityChangeEvent.java
index afac561..233f5c7 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentVisibilityChangeEvent.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/EnvironmentVisibilityChangeEvent.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * For all resumed top activities with this spatialstate callback set, this is called whenever the
@@ -24,6 +25,7 @@
  * @deprecated Use SpatialState instead.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public final class EnvironmentVisibilityChangeEvent
         implements com.android.extensions.xr.space.SpatialStateEvent {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/HitTestResult.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/HitTestResult.java
index 2891c0d..007a3ca 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/HitTestResult.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/HitTestResult.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Hit test result.
@@ -23,6 +24,7 @@
  * @see androidx.xr.extensions.XrExtensions#hitTest
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class HitTestResult {
 
     HitTestResult() {
@@ -64,6 +66,7 @@
     public static final int SURFACE_UNKNOWN = 0; // 0x0
 
     @SuppressWarnings({"unchecked", "deprecation", "all"})
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
     public static final class Builder {
 
         public Builder(
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilities.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilities.java
index c250719..a9f25752 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilities.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilities.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /** Represents a set of capabilities an activity has. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class SpatialCapabilities {
 
     public SpatialCapabilities() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilityChangeEvent.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilityChangeEvent.java
index fbddc6a..be1b160 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilityChangeEvent.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialCapabilityChangeEvent.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Triggers when the spatial capability set has changed.
@@ -23,6 +24,7 @@
  * @deprecated Use SpatialState instead.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public final class SpatialCapabilityChangeEvent
         implements com.android.extensions.xr.space.SpatialStateEvent {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialState.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialState.java
index de77088..bd2356f 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialState.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialState.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * An interface that represents an activity's spatial state.
@@ -27,6 +28,7 @@
  * @see androidx.xr.extensions.XrExtensions#registerSpatialStateCallback
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class SpatialState {
 
     SpatialState() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialStateEvent.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialStateEvent.java
index 2eff54b..7f520fb 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialStateEvent.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/space/SpatialStateEvent.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.space;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Base class for spatial state change events.
@@ -24,5 +25,6 @@
  * @deprecated Use SpatialState instead.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 @Deprecated
 public interface SpatialStateEvent {}
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/splitengine/SplitEngineBridge.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/splitengine/SplitEngineBridge.java
index df40a8d..fcc89dd 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/splitengine/SplitEngineBridge.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/splitengine/SplitEngineBridge.java
@@ -16,9 +16,11 @@
 
 package com.android.extensions.xr.splitengine;
 
+import androidx.annotation.RestrictTo;
 
 /** Wrapper object around a native SplitEngineBridge. */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class SplitEngineBridge {
 
     SplitEngineBridge() {
diff --git a/xr/xr-stubs/src/main/java/com/android/extensions/xr/subspace/Subspace.java b/xr/xr-stubs/src/main/java/com/android/extensions/xr/subspace/Subspace.java
index 015b4ed..e8bb053 100644
--- a/xr/xr-stubs/src/main/java/com/android/extensions/xr/subspace/Subspace.java
+++ b/xr/xr-stubs/src/main/java/com/android/extensions/xr/subspace/Subspace.java
@@ -16,6 +16,7 @@
 
 package com.android.extensions.xr.subspace;
 
+import androidx.annotation.RestrictTo;
 
 /**
  * Handle to a subspace in the system scene graph.
@@ -27,6 +28,7 @@
  * coordinate system, i.e. +X points to the right, +Y up, and +Z points towards the camera.
  */
 @SuppressWarnings({"unchecked", "deprecation", "all"})
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX)
 public class Subspace {
 
     Subspace() {