Merge changes from topic "314048186_experimental_lint_bugfix" into androidx-main

* changes:
  Opt-in previously unchecked usage of experimental API
  Update to annotation-experimental compatible with K2
diff --git a/activity/activity-compose-lint/build.gradle b/activity/activity-compose-lint/build.gradle
index 327ee7a..7ace495 100644
--- a/activity/activity-compose-lint/build.gradle
+++ b/activity/activity-compose-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/activity/activity-compose/build.gradle b/activity/activity-compose/build.gradle
index 314f1a6..257bb1c 100644
--- a/activity/activity-compose/build.gradle
+++ b/activity/activity-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/activity/activity-compose/integration-tests/activity-demos/build.gradle b/activity/activity-compose/integration-tests/activity-demos/build.gradle
index 5b17987..bfcfdbe 100644
--- a/activity/activity-compose/integration-tests/activity-demos/build.gradle
+++ b/activity/activity-compose/integration-tests/activity-demos/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/activity/activity-compose/samples/build.gradle b/activity/activity-compose/samples/build.gradle
index 27bc33d..9f5fa5b 100644
--- a/activity/activity-compose/samples/build.gradle
+++ b/activity/activity-compose/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/activity/activity-ktx/build.gradle b/activity/activity-ktx/build.gradle
index 0e25e28..730d9b9 100644
--- a/activity/activity-ktx/build.gradle
+++ b/activity/activity-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/activity/activity-lint/build.gradle b/activity/activity-lint/build.gradle
index 554da78..857884f 100644
--- a/activity/activity-lint/build.gradle
+++ b/activity/activity-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/activity/activity/build.gradle b/activity/activity/build.gradle
index 3e23e77..0dd4fe8 100644
--- a/activity/activity/build.gradle
+++ b/activity/activity/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/activity/integration-tests/baselineprofile/build.gradle b/activity/integration-tests/baselineprofile/build.gradle
index 51e930b..b340454 100644
--- a/activity/integration-tests/baselineprofile/build.gradle
+++ b/activity/integration-tests/baselineprofile/build.gradle
@@ -14,6 +14,13 @@
  * 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 com.android.build.api.dsl.ManagedVirtualDevice
 
 plugins {
diff --git a/annotation/annotation-experimental-lint/build.gradle b/annotation/annotation-experimental-lint/build.gradle
index 23fa122..4deb784 100644
--- a/annotation/annotation-experimental-lint/build.gradle
+++ b/annotation/annotation-experimental-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/annotation/annotation-experimental-lint/integration-tests/build.gradle b/annotation/annotation-experimental-lint/integration-tests/build.gradle
index d81eeec..a617bfa 100644
--- a/annotation/annotation-experimental-lint/integration-tests/build.gradle
+++ b/annotation/annotation-experimental-lint/integration-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/annotation/annotation-experimental/build.gradle b/annotation/annotation-experimental/build.gradle
index a196d54..d703028 100644
--- a/annotation/annotation-experimental/build.gradle
+++ b/annotation/annotation-experimental/build.gradle
@@ -14,7 +14,13 @@
  * 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.KotlinTarget
 import androidx.build.Publish
 
diff --git a/annotation/annotation/build.gradle b/annotation/annotation/build.gradle
index ef71109..4ac4d65 100644
--- a/annotation/annotation/build.gradle
+++ b/annotation/annotation/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.KmpPlatformsKt
 import androidx.build.KotlinTarget
 import androidx.build.LibraryType
diff --git a/appactions/builtintypes/builtintypes/build.gradle b/appactions/builtintypes/builtintypes/build.gradle
index 2811542..58af259 100644
--- a/appactions/builtintypes/builtintypes/build.gradle
+++ b/appactions/builtintypes/builtintypes/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/appactions/builtintypes/builtintypes/samples/build.gradle b/appactions/builtintypes/builtintypes/samples/build.gradle
index 151b129..561d5cb 100644
--- a/appactions/builtintypes/builtintypes/samples/build.gradle
+++ b/appactions/builtintypes/builtintypes/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appactions/interaction/interaction-capabilities-communication/build.gradle b/appactions/interaction/interaction-capabilities-communication/build.gradle
index 338a653..7822365 100644
--- a/appactions/interaction/interaction-capabilities-communication/build.gradle
+++ b/appactions/interaction/interaction-capabilities-communication/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appactions/interaction/interaction-capabilities-fitness/build.gradle b/appactions/interaction/interaction-capabilities-fitness/build.gradle
index faf8c7d..3017f07 100644
--- a/appactions/interaction/interaction-capabilities-fitness/build.gradle
+++ b/appactions/interaction/interaction-capabilities-fitness/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appactions/interaction/interaction-capabilities-productivity/build.gradle b/appactions/interaction/interaction-capabilities-productivity/build.gradle
index b1b2483..3f83e65 100644
--- a/appactions/interaction/interaction-capabilities-productivity/build.gradle
+++ b/appactions/interaction/interaction-capabilities-productivity/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appactions/interaction/interaction-capabilities-safety/build.gradle b/appactions/interaction/interaction-capabilities-safety/build.gradle
index 4e96499..a8a0230 100644
--- a/appactions/interaction/interaction-capabilities-safety/build.gradle
+++ b/appactions/interaction/interaction-capabilities-safety/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appactions/interaction/interaction-capabilities-testing/build.gradle b/appactions/interaction/interaction-capabilities-testing/build.gradle
index a78f672..6185156 100644
--- a/appactions/interaction/interaction-capabilities-testing/build.gradle
+++ b/appactions/interaction/interaction-capabilities-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appactions/interaction/interaction-service-proto/build.gradle b/appactions/interaction/interaction-service-proto/build.gradle
index 7662e1a..ca8bcc1 100644
--- a/appactions/interaction/interaction-service-proto/build.gradle
+++ b/appactions/interaction/interaction-service-proto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/appactions/interaction/interaction-service-testing/build.gradle b/appactions/interaction/interaction-service-testing/build.gradle
index dfd09e1..e024c97 100644
--- a/appactions/interaction/interaction-service-testing/build.gradle
+++ b/appactions/interaction/interaction-service-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appactions/interaction/interaction-service-wear/build.gradle b/appactions/interaction/interaction-service-wear/build.gradle
index 7ac6afc..4865eda 100644
--- a/appactions/interaction/interaction-service-wear/build.gradle
+++ b/appactions/interaction/interaction-service-wear/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appcompat/appcompat-lint/build.gradle b/appcompat/appcompat-lint/build.gradle
index 57b7f23..642f89a 100644
--- a/appcompat/appcompat-lint/build.gradle
+++ b/appcompat/appcompat-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appcompat/appcompat-lint/integration-tests/build.gradle b/appcompat/appcompat-lint/integration-tests/build.gradle
index 13246f8..cd7691f 100644
--- a/appcompat/appcompat-lint/integration-tests/build.gradle
+++ b/appcompat/appcompat-lint/integration-tests/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/appcompat/appcompat-resources/build.gradle b/appcompat/appcompat-resources/build.gradle
index 03df72e..04d4729 100644
--- a/appcompat/appcompat-resources/build.gradle
+++ b/appcompat/appcompat-resources/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
index 9fd6026..104efb4 100644
--- a/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
+++ b/appcompat/appcompat-resources/src/main/java/androidx/appcompat/graphics/drawable/DrawableContainerCompat.java
@@ -32,13 +32,13 @@
 import android.os.SystemClock;
 import android.util.DisplayMetrics;
 import android.util.SparseArray;
+import android.view.View;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
 import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.core.view.ViewCompat;
 
 /**
  * A helper class that contains several {@link Drawable}s and selects which one to use.
@@ -94,7 +94,7 @@
 
     private boolean needsMirroring() {
         return isAutoMirrored()
-                && (DrawableCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL);
+                && (DrawableCompat.getLayoutDirection(this) == View.LAYOUT_DIRECTION_RTL);
     }
 
     @Override
diff --git a/appcompat/appcompat/api/restricted_current.txt b/appcompat/appcompat/api/restricted_current.txt
index 1eaac7d..3afd9d3 100644
--- a/appcompat/appcompat/api/restricted_current.txt
+++ b/appcompat/appcompat/api/restricted_current.txt
@@ -2275,7 +2275,7 @@
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ViewUtils {
-    method public static void computeFitSystemWindows(android.view.View!, android.graphics.Rect!, android.graphics.Rect!);
+    method public static void computeFitSystemWindows(android.view.View, android.graphics.Rect, android.graphics.Rect);
     method public static boolean isLayoutRtl(android.view.View!);
     method public static void makeOptionalFitsSystemWindows(android.view.View!);
   }
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index e4378aad..e423942 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerDynamicLayoutTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerDynamicLayoutTest.java
index 851fbe9..6b2b4c5 100755
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerDynamicLayoutTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerDynamicLayoutTest.java
@@ -30,7 +30,6 @@
 import androidx.annotation.LayoutRes;
 import androidx.appcompat.test.R;
 import androidx.core.view.GravityCompat;
-import androidx.core.view.ViewCompat;
 import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.espresso.UiController;
@@ -124,9 +123,9 @@
             View child = drawer.getChildAt(i);
             final int gravity = ((DrawerLayout.LayoutParams) child.getLayoutParams()).gravity;
             final int absGravity = GravityCompat.getAbsoluteGravity(gravity,
-                    ViewCompat.getLayoutDirection(child));
+                    child.getLayoutDirection());
             final int gravityInParent = GravityCompat.getAbsoluteGravity(gravity,
-                    ViewCompat.getLayoutDirection(drawer));
+                    drawer.getLayoutDirection());
             Log.e("DrawerDynamicLayoutTest", "gravity of child[" + i + "] "
                     + " = " + absGravity +  "; gravity in parent " + gravityInParent);
         }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerLayoutDoubleTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerLayoutDoubleTest.java
index 37d13f6..5ec1c80 100755
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerLayoutDoubleTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/DrawerLayoutDoubleTest.java
@@ -30,7 +30,6 @@
 
 import androidx.appcompat.custom.CustomDrawerLayout;
 import androidx.appcompat.test.R;
-import androidx.core.view.ViewCompat;
 import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
@@ -161,7 +160,7 @@
     @LargeTest
     public void testDrawerOpenCloseLtr() {
         onView(withId(R.id.drawer_layout)).perform(
-                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_LTR));
+                setLayoutDirection(View.LAYOUT_DIRECTION_LTR));
 
         verifyDrawerOpenClose();
     }
@@ -170,7 +169,7 @@
     @LargeTest
     public void testDrawerOpenCloseRtl() {
         onView(withId(R.id.drawer_layout)).perform(
-                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+                setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
         verifyDrawerOpenClose();
     }
@@ -224,7 +223,7 @@
     @LargeTest
     public void testDrawerLockUnlockLtr() {
         onView(withId(R.id.drawer_layout)).perform(
-                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_LTR));
+                setLayoutDirection(View.LAYOUT_DIRECTION_LTR));
 
         verifyDrawerLockUnlock();
     }
@@ -233,7 +232,7 @@
     @LargeTest
     public void testDrawerLockUnlockRtl() {
         onView(withId(R.id.drawer_layout)).perform(
-                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+                setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
         verifyDrawerLockUnlock();
     }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/MenuPopupWindowTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/MenuPopupWindowTest.java
index 0525b0a..2fd68c0 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/MenuPopupWindowTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/MenuPopupWindowTest.java
@@ -19,11 +19,11 @@
 import android.content.res.Resources;
 import android.os.Build;
 import android.view.KeyEvent;
+import android.view.View;
 import android.widget.ArrayAdapter;
 import android.widget.HeaderViewListAdapter;
 import android.widget.ListView;
 
-import androidx.core.view.ViewCompat;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
@@ -52,7 +52,7 @@
         final Resources res = mActivity.getResources();
         final Configuration config = res.getConfiguration();
         if (Build.VERSION.SDK_INT >= 17
-                && ViewCompat.LAYOUT_DIRECTION_RTL == config.getLayoutDirection()) {
+                && View.LAYOUT_DIRECTION_RTL == config.getLayoutDirection()) {
             mRetreatEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT);
         } else {
             mRetreatEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index 7d16378..64b429e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -1443,7 +1443,7 @@
     final boolean shouldAnimateActionModeView() {
         // We only to animate the action mode in if the sub decor has already been laid out.
         // If it hasn't been laid out, it hasn't been drawn to screen yet.
-        return mSubDecorInstalled && mSubDecor != null && ViewCompat.isLaidOut(mSubDecor);
+        return mSubDecorInstalled && mSubDecor != null && mSubDecor.isLaidOut();
     }
 
     @Override
@@ -1679,7 +1679,7 @@
                 // added to the hierarchy at the end of the inflate() call.
                 return true;
             } else if (parent == windowDecor || !(parent instanceof View)
-                    || ViewCompat.isAttachedToWindow((View) parent)) {
+                    || ((View) parent).isAttachedToWindow()) {
                 // We have either hit the window's decor view, a parent which isn't a View
                 // (i.e. ViewRootImpl), or an attached view, so we know that the original parent
                 // is currently added to the view hierarchy. This means that it has not be
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
index 8b6627c..ff2e791f1 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/WindowDecorActionBar.java
@@ -907,7 +907,7 @@
     private boolean shouldAnimateContextView() {
         // We only to animate the action mode in if the container view has already been laid out.
         // If it hasn't been laid out, it hasn't been drawn to screen yet.
-        return ViewCompat.isLaidOut(mContainerView);
+        return mContainerView.isLaidOut();
     }
 
     @Override
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java b/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
index bba9fa3..ae0eb0d 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/graphics/drawable/DrawerArrowDrawable.java
@@ -27,6 +27,7 @@
 import android.graphics.PixelFormat;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.view.View;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.FloatRange;
@@ -335,12 +336,12 @@
                 break;
             case ARROW_DIRECTION_END:
                 flipToPointRight = DrawableCompat.getLayoutDirection(this)
-                        == ViewCompat.LAYOUT_DIRECTION_LTR;
+                        == View.LAYOUT_DIRECTION_LTR;
                 break;
             case ARROW_DIRECTION_START:
             default:
                 flipToPointRight = DrawableCompat.getLayoutDirection(this)
-                        == ViewCompat.LAYOUT_DIRECTION_RTL;
+                        == View.LAYOUT_DIRECTION_RTL;
                 break;
         }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
index de4a785..3957a72 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/CascadingMenuPopup.java
@@ -50,7 +50,6 @@
 import androidx.appcompat.widget.MenuPopupWindow;
 import androidx.core.internal.view.SupportMenu;
 import androidx.core.view.GravityCompat;
-import androidx.core.view.ViewCompat;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -313,8 +312,8 @@
      */
     @HorizPosition
     private int getInitialMenuPosition() {
-        final int layoutDirection = ViewCompat.getLayoutDirection(mAnchorView);
-        return layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL ? HORIZ_POSITION_LEFT :
+        final int layoutDirection = mAnchorView.getLayoutDirection();
+        return layoutDirection == View.LAYOUT_DIRECTION_RTL ? HORIZ_POSITION_LEFT :
                 HORIZ_POSITION_RIGHT;
     }
 
@@ -741,7 +740,7 @@
         if (mRawDropDownGravity != dropDownGravity) {
             mRawDropDownGravity = dropDownGravity;
             mDropDownGravity = GravityCompat.getAbsoluteGravity(
-                    dropDownGravity, ViewCompat.getLayoutDirection(mAnchorView));
+                    dropDownGravity, mAnchorView.getLayoutDirection());
         }
     }
 
@@ -752,7 +751,7 @@
 
             // Gravity resolution may have changed, update from raw gravity.
             mDropDownGravity = GravityCompat.getAbsoluteGravity(
-                    mRawDropDownGravity, ViewCompat.getLayoutDirection(mAnchorView));
+                    mRawDropDownGravity, mAnchorView.getLayoutDirection());
         }
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java
index 20af09b..a952904 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/ListMenuItemView.java
@@ -37,7 +37,6 @@
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
 import androidx.appcompat.widget.TintTypedArray;
-import androidx.core.view.ViewCompat;
 
 /**
  * The item view for each item in the ListView-based MenuViews.
@@ -100,7 +99,7 @@
     protected void onFinishInflate() {
         super.onFinishInflate();
 
-        ViewCompat.setBackground(this, mBackground);
+        setBackground(mBackground);
 
         mTitleView = findViewById(R.id.title);
         if (mTextAppearance != -1) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
index aa98768..7bf848f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/MenuPopupHelper.java
@@ -37,7 +37,6 @@
 import androidx.annotation.StyleRes;
 import androidx.appcompat.R;
 import androidx.core.view.GravityCompat;
-import androidx.core.view.ViewCompat;
 
 /**
  * Presents a menu as a small, simple popup anchored to another view.
@@ -268,7 +267,7 @@
             // edge will be aligned with the anchor view. Adjust by the anchor
             // width such that the top-right corner is at the X offset.
             final int hgrav = GravityCompat.getAbsoluteGravity(mDropDownGravity,
-                    ViewCompat.getLayoutDirection(mAnchorView)) & Gravity.HORIZONTAL_GRAVITY_MASK;
+                    mAnchorView.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
             if (hgrav == Gravity.RIGHT) {
                 xOffset -= mAnchorView.getWidth();
             }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/StandardMenuPopup.java b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/StandardMenuPopup.java
index 3f78039..ef6c140 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/StandardMenuPopup.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/view/menu/StandardMenuPopup.java
@@ -35,7 +35,6 @@
 
 import androidx.appcompat.R;
 import androidx.appcompat.widget.MenuPopupWindow;
-import androidx.core.view.ViewCompat;
 
 /**
  * A standard menu popup in which when a submenu is opened, it replaces its parent menu in the
@@ -280,7 +279,7 @@
             // As xOffset of parent menu popup is subtracted with Anchor width for Gravity.RIGHT,
             // So, again to display sub-menu popup in same xOffset, add the Anchor width.
             final int hgrav = Gravity.getAbsoluteGravity(mDropDownGravity,
-                    ViewCompat.getLayoutDirection(mAnchorView)) & Gravity.HORIZONTAL_GRAVITY_MASK;
+                    mAnchorView.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
             if (hgrav == Gravity.RIGHT) {
                 horizontalOffset += mAnchorView.getWidth();
             }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
index 41c14b2..0b01437 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContainer.java
@@ -32,7 +32,6 @@
 import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
-import androidx.core.view.ViewCompat;
 
 /**
  * This class acts as a container for the action bar view and action mode context views.
@@ -61,7 +60,7 @@
 
         // Set a transparent background so that we project appropriately.
         final Drawable bg = new ActionBarBackgroundDrawable(this);
-        ViewCompat.setBackground(this, bg);
+        setBackground(bg);
 
         TypedArray a = context.obtainStyledAttributes(attrs,
                 R.styleable.ActionBar);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
index e314c7b..3fbccd1 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ActionBarContextView.java
@@ -67,7 +67,7 @@
 
         final TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs,
                 R.styleable.ActionMode, defStyle, 0);
-        ViewCompat.setBackground(this, a.getDrawable(R.styleable.ActionMode_background));
+        setBackground(a.getDrawable(R.styleable.ActionMode_background));
         mTitleStyleRes = a.getResourceId(
                 R.styleable.ActionMode_titleTextStyle, 0);
         mSubtitleStyleRes = a.getResourceId(
@@ -186,7 +186,7 @@
                 LayoutParams.MATCH_PARENT);
         menu.addMenuPresenter(mActionMenuPresenter, mPopupContext);
         mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
-        ViewCompat.setBackground(mMenuView, null);
+        mMenuView.setBackground(null);
         addView(mMenuView, layoutParams);
     }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
index 59a8791..819c18f 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AlertDialogLayout.java
@@ -311,7 +311,7 @@
                 if (layoutGravity < 0) {
                     layoutGravity = minorGravity;
                 }
-                final int layoutDirection = ViewCompat.getLayoutDirection(this);
+                final int layoutDirection = getLayoutDirection();
                 final int absoluteGravity = GravityCompat.getAbsoluteGravity(
                         layoutGravity, layoutDirection);
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
index 5d5bed5..ada8287 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSeekBarHelper.java
@@ -85,7 +85,7 @@
 
         if (tickMark != null) {
             tickMark.setCallback(mView);
-            DrawableCompat.setLayoutDirection(tickMark, ViewCompat.getLayoutDirection(mView));
+            DrawableCompat.setLayoutDirection(tickMark, mView.getLayoutDirection());
             if (tickMark.isStateful()) {
                 tickMark.setState(mView.getDrawableState());
             }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 5d5782e..638e833 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -61,7 +61,6 @@
 import androidx.appcompat.view.menu.ShowableListMenu;
 import androidx.core.util.ObjectsCompat;
 import androidx.core.view.TintableBackgroundView;
-import androidx.core.view.ViewCompat;
 import androidx.resourceinspection.annotation.AppCompatShadowedAttributes;
 
 
@@ -1084,7 +1083,7 @@
          * Simplified version of the the hidden View.isVisibleToUser()
          */
         boolean isVisibleToUser(View view) {
-            return ViewCompat.isAttachedToWindow(view) && view.getGlobalVisibleRect(mVisibleRect);
+            return view.isAttachedToWindow() && view.getGlobalVisibleRect(mVisibleRect);
         }
 
         @Override
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
index 14c8a92..c62e1f0 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextHelper.java
@@ -458,7 +458,7 @@
             mFontTypeface = typeface;
             final TextView textView = textViewWeak.get();
             if (textView != null) {
-                if (ViewCompat.isAttachedToWindow(textView)) {
+                if (textView.isAttachedToWindow()) {
                     final int style = mStyle;
                     textView.post(new Runnable() {
                         @Override
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
index 8278e52..6dda3d0 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
@@ -32,7 +32,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
-import androidx.core.view.ViewCompat;
 
 /**
  */
@@ -88,7 +87,7 @@
     @RestrictTo(LIBRARY)
     public void setDecorPadding(int left, int top, int right, int bottom) {
         mDecorPadding.set(left, top, right, bottom);
-        if (ViewCompat.isLaidOut(this)) {
+        if (isLaidOut()) {
             requestLayout();
         }
     }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
index 414f5a3..c6f23eb 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
@@ -1492,7 +1492,7 @@
                 if (gravity < 0) {
                     gravity = minorGravity;
                 }
-                final int layoutDirection = ViewCompat.getLayoutDirection(this);
+                final int layoutDirection = getLayoutDirection();
                 final int absoluteGravity = GravityCompat.getAbsoluteGravity(gravity,
                         layoutDirection);
                 switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
@@ -1561,7 +1561,7 @@
         final int[] maxAscent = mMaxAscent;
         final int[] maxDescent = mMaxDescent;
 
-        final int layoutDirection = ViewCompat.getLayoutDirection(this);
+        final int layoutDirection = getLayoutDirection();
         switch (GravityCompat.getAbsoluteGravity(majorGravity, layoutDirection)) {
             case Gravity.RIGHT:
                 // mTotalLength contains the padding already
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
index 116a26a..0045e43 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ListPopupWindow.java
@@ -53,7 +53,6 @@
 import androidx.annotation.StyleRes;
 import androidx.appcompat.R;
 import androidx.appcompat.view.menu.ShowableListMenu;
-import androidx.core.view.ViewCompat;
 import androidx.core.widget.PopupWindowCompat;
 
 import java.lang.reflect.Method;
@@ -666,7 +665,7 @@
         PopupWindowCompat.setWindowLayoutType(mPopup, mDropDownWindowLayoutType);
 
         if (mPopup.isShowing()) {
-            if (!ViewCompat.isAttachedToWindow(getAnchorView())) {
+            if (!getAnchorView().isAttachedToWindow()) {
                 //Don't update position if the anchor view is detached from window.
                 return;
             }
@@ -1372,7 +1371,7 @@
 
         @Override
         public void run() {
-            if (mDropDownList != null && ViewCompat.isAttachedToWindow(mDropDownList)
+            if (mDropDownList != null && mDropDownList.isAttachedToWindow()
                     && mDropDownList.getCount() > mDropDownList.getChildCount()
                     && mDropDownList.getChildCount() <= mListItemExpandMaximum) {
                 mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
index d4781ae..bc3cf31 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/MenuPopupWindow.java
@@ -28,6 +28,7 @@
 import android.view.KeyEvent;
 import android.view.MenuItem;
 import android.view.MotionEvent;
+import android.view.View;
 import android.widget.HeaderViewListAdapter;
 import android.widget.ListAdapter;
 import android.widget.PopupWindow;
@@ -40,7 +41,6 @@
 import androidx.appcompat.view.menu.ListMenuItemView;
 import androidx.appcompat.view.menu.MenuAdapter;
 import androidx.appcompat.view.menu.MenuBuilder;
-import androidx.core.view.ViewCompat;
 
 import java.lang.reflect.Method;
 
@@ -148,7 +148,7 @@
 
             final Resources res = context.getResources();
             final Configuration config = res.getConfiguration();
-            if (ViewCompat.LAYOUT_DIRECTION_RTL == config.getLayoutDirection()) {
+            if (View.LAYOUT_DIRECTION_RTL == config.getLayoutDirection()) {
                 mAdvanceKey = KeyEvent.KEYCODE_DPAD_LEFT;
                 mRetreatKey = KeyEvent.KEYCODE_DPAD_RIGHT;
             } else {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
index 24ca26b..661dfb2 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/SwitchCompat.java
@@ -1188,7 +1188,7 @@
             setOffStateDescriptionOnRAndAbove();
         }
 
-        if (getWindowToken() != null && ViewCompat.isLaidOut(this)) {
+        if (getWindowToken() != null && isLaidOut()) {
             animateThumbToCheckedState(checked);
         } else {
             // Immediately move the thumb to the new position.
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
index 9198f6a..e29acef 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/Toolbar.java
@@ -562,7 +562,7 @@
         super.onRtlPropertiesChanged(layoutDirection);
 
         ensureContentInsets();
-        mContentInsets.setDirection(layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL);
+        mContentInsets.setDirection(layoutDirection == View.LAYOUT_DIRECTION_RTL);
     }
 
     /**
@@ -1571,7 +1571,7 @@
      * @see #getContentInsetEndWithActions()
      */
     public int getCurrentContentInsetLeft() {
-        return ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL
+        return getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
                 ? getCurrentContentInsetEnd()
                 : getCurrentContentInsetStart();
     }
@@ -1586,7 +1586,7 @@
      * @see #getContentInsetEndWithActions()
      */
     public int getCurrentContentInsetRight() {
-        return ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL
+        return getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
                 ? getCurrentContentInsetStart()
                 : getCurrentContentInsetEnd();
     }
@@ -1953,7 +1953,7 @@
 
     @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        final boolean isRtl =  ViewCompat.getLayoutDirection(this) ==  ViewCompat.LAYOUT_DIRECTION_RTL;
+        final boolean isRtl =  getLayoutDirection() ==  View.LAYOUT_DIRECTION_RTL;
         final int width = getWidth();
         final int height = getHeight();
         final int paddingLeft = getPaddingLeft();
@@ -2267,10 +2267,10 @@
      * @param gravity Horizontal gravity to match against
      */
     private void addCustomViewsWithGravity(List<View> views, int gravity) {
-        final boolean isRtl =  ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL;
+        final boolean isRtl =  getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
         final int childCount = getChildCount();
         final int absGrav = GravityCompat.getAbsoluteGravity(gravity,
-                ViewCompat.getLayoutDirection(this));
+                getLayoutDirection());
 
         views.clear();
 
@@ -2296,7 +2296,7 @@
     }
 
     private int getChildHorizontalGravity(int gravity) {
-        final int ld =  ViewCompat.getLayoutDirection(this);
+        final int ld =  getLayoutDirection();
         final int absGrav = GravityCompat.getAbsoluteGravity(gravity, ld);
         final int hGrav = absGrav & Gravity.HORIZONTAL_GRAVITY_MASK;
         switch (hGrav) {
@@ -2305,7 +2305,7 @@
             case Gravity.CENTER_HORIZONTAL:
                 return hGrav;
             default:
-                return ld == ViewCompat.LAYOUT_DIRECTION_RTL ? Gravity.RIGHT : Gravity.LEFT;
+                return ld == View.LAYOUT_DIRECTION_RTL ? Gravity.RIGHT : Gravity.LEFT;
         }
     }
 
@@ -2515,7 +2515,7 @@
                     Api33Impl.findOnBackInvokedDispatcher(this);
             boolean shouldBeRegistered = hasExpandedActionView()
                     && currentDispatcher != null
-                    && ViewCompat.isAttachedToWindow(this)
+                    && this.isAttachedToWindow()
                     && mBackInvokedCallbackEnabled;
 
             if (shouldBeRegistered && mBackInvokedDispatcher == null) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java
index 93c3144..322172b 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ToolbarWidgetWrapper.java
@@ -650,7 +650,7 @@
 
     @Override
     public void setBackgroundDrawable(Drawable d) {
-        ViewCompat.setBackground(mToolbar, d);
+        mToolbar.setBackground(d);
     }
 
     @Override
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompatHandler.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompatHandler.java
index 97d7f0f..c11c471 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompatHandler.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/TooltipCompatHandler.java
@@ -151,7 +151,7 @@
 
     @SuppressWarnings("deprecation")
     void show(boolean fromTouch) {
-        if (!ViewCompat.isAttachedToWindow(mAnchor)) {
+        if (!mAnchor.isAttachedToWindow()) {
             return;
         }
 
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
index 4e70f9d..6d5238c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ViewUtils.java
@@ -20,14 +20,18 @@
 import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
 import android.annotation.SuppressLint;
+import android.graphics.Insets;
 import android.graphics.Rect;
 import android.os.Build;
 import android.util.Log;
 import android.view.View;
+import android.view.WindowInsets;
 
 import androidx.annotation.ChecksSdkIntAtLeast;
+import androidx.annotation.DoNotInline;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.annotation.RestrictTo;
-import androidx.core.view.ViewCompat;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -38,6 +42,7 @@
 public class ViewUtils {
     private static final String TAG = "ViewUtils";
 
+    private static boolean sInitComputeFitSystemWindowsMethod;
     private static Method sComputeFitSystemWindowsMethod;
 
     /**
@@ -46,35 +51,40 @@
     @ChecksSdkIntAtLeast(api = 27)
     static final boolean SDK_LEVEL_SUPPORTS_AUTOSIZE = Build.VERSION.SDK_INT >= 27;
 
-    static {
-        try {
-            sComputeFitSystemWindowsMethod = View.class.getDeclaredMethod(
-                    "computeFitSystemWindows", Rect.class, Rect.class);
-            if (!sComputeFitSystemWindowsMethod.isAccessible()) {
-                sComputeFitSystemWindowsMethod.setAccessible(true);
-            }
-        } catch (NoSuchMethodException e) {
-            Log.d(TAG, "Could not find method computeFitSystemWindows. Oh well.");
-        }
-    }
-
     private ViewUtils() {}
 
     public static boolean isLayoutRtl(View view) {
-        return ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_RTL;
+        return view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
     }
 
     /**
      * Allow calling the hidden method {@code computeFitSystemWindows(Rect, Rect)} through
      * reflection on {@code view}.
      */
-    @SuppressLint("BanUncheckedReflection")
-    public static void computeFitSystemWindows(View view, Rect inoutInsets, Rect outLocalInsets) {
-        if (sComputeFitSystemWindowsMethod != null) {
-            try {
-                sComputeFitSystemWindowsMethod.invoke(view, inoutInsets, outLocalInsets);
-            } catch (Exception e) {
-                Log.d(TAG, "Could not invoke computeFitSystemWindows", e);
+    public static void computeFitSystemWindows(@NonNull View view, @NonNull Rect inoutInsets,
+            @NonNull Rect outLocalInsets) {
+        if (Build.VERSION.SDK_INT >= 29) {
+            Api29Impl.computeFitSystemWindows(view, inoutInsets, outLocalInsets);
+        } else {
+            if (!sInitComputeFitSystemWindowsMethod) {
+                sInitComputeFitSystemWindowsMethod = true;
+                try {
+                    sComputeFitSystemWindowsMethod = View.class.getDeclaredMethod(
+                            "computeFitSystemWindows", Rect.class, Rect.class);
+                    if (!sComputeFitSystemWindowsMethod.isAccessible()) {
+                        sComputeFitSystemWindowsMethod.setAccessible(true);
+                    }
+                } catch (NoSuchMethodException e) {
+                    Log.d(TAG, "Could not find method computeFitSystemWindows. Oh well.");
+                }
+            }
+
+            if (sComputeFitSystemWindowsMethod != null) {
+                try {
+                    sComputeFitSystemWindowsMethod.invoke(view, inoutInsets, outLocalInsets);
+                } catch (Exception e) {
+                    Log.d(TAG, "Could not invoke computeFitSystemWindows", e);
+                }
             }
         }
     }
@@ -101,4 +111,24 @@
             Log.d(TAG, "Could not invoke makeOptionalFitsSystemWindows", e);
         }
     }
+
+    @RequiresApi(29)
+    static class Api29Impl {
+        private Api29Impl() {
+            // This class is not instantiable.
+        }
+
+        @DoNotInline
+        static void computeFitSystemWindows(@NonNull View view, @NonNull Rect inoutInsets,
+                @NonNull Rect outLocalInsets) {
+            WindowInsets in =
+                    new WindowInsets.Builder()
+                            .setSystemWindowInsets(Insets.of(inoutInsets))
+                            .build();
+            WindowInsets innerInsets = view.computeSystemWindowInsets(in, outLocalInsets);
+            Insets systemWindowInsets = innerInsets.getSystemWindowInsets();
+            inoutInsets.set(systemWindowInsets.left, systemWindowInsets.top,
+                    systemWindowInsets.right, systemWindowInsets.bottom);
+        }
+    }
 }
diff --git a/appsearch/appsearch-builtin-types/build.gradle b/appsearch/appsearch-builtin-types/build.gradle
index 3f6fb05..582d931 100644
--- a/appsearch/appsearch-builtin-types/build.gradle
+++ b/appsearch/appsearch-builtin-types/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/appsearch/appsearch-debug-view/build.gradle b/appsearch/appsearch-debug-view/build.gradle
index 75a6f89..50a0025 100644
--- a/appsearch/appsearch-debug-view/build.gradle
+++ b/appsearch/appsearch-debug-view/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appsearch/appsearch-debug-view/samples/build.gradle b/appsearch/appsearch-debug-view/samples/build.gradle
index 23cf51f..9b9f3f5 100644
--- a/appsearch/appsearch-debug-view/samples/build.gradle
+++ b/appsearch/appsearch-debug-view/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/appsearch/appsearch-ktx/build.gradle b/appsearch/appsearch-ktx/build.gradle
index e22de42..afd8740 100644
--- a/appsearch/appsearch-ktx/build.gradle
+++ b/appsearch/appsearch-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/appsearch/appsearch-local-storage/build.gradle b/appsearch/appsearch-local-storage/build.gradle
index df4e5b0..0679c7c 100644
--- a/appsearch/appsearch-local-storage/build.gradle
+++ b/appsearch/appsearch-local-storage/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.Publish
 
diff --git a/appsearch/appsearch-platform-storage/build.gradle b/appsearch/appsearch-platform-storage/build.gradle
index 88032db..8ccc5bc 100644
--- a/appsearch/appsearch-platform-storage/build.gradle
+++ b/appsearch/appsearch-platform-storage/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/appsearch/appsearch-play-services-storage/build.gradle b/appsearch/appsearch-play-services-storage/build.gradle
index 4fbcd2fa..ec30664 100644
--- a/appsearch/appsearch-play-services-storage/build.gradle
+++ b/appsearch/appsearch-play-services-storage/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index a940b11..81408d5 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/appsearch/compiler/build.gradle b/appsearch/compiler/build.gradle
index 8892047..798bc48 100644
--- a/appsearch/compiler/build.gradle
+++ b/appsearch/compiler/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/arch/core/core-common/build.gradle b/arch/core/core-common/build.gradle
index c4489ba..e49834a 100644
--- a/arch/core/core-common/build.gradle
+++ b/arch/core/core-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/arch/core/core-runtime/build.gradle b/arch/core/core-runtime/build.gradle
index a2fb328..55a29bc 100644
--- a/arch/core/core-runtime/build.gradle
+++ b/arch/core/core-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/arch/core/core-testing/build.gradle b/arch/core/core-testing/build.gradle
index f34646a..6e2aee9 100644
--- a/arch/core/core-testing/build.gradle
+++ b/arch/core/core-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
index d02eed2..2746e50 100644
--- a/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater-appcompat/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/asynclayoutinflater/asynclayoutinflater/build.gradle b/asynclayoutinflater/asynclayoutinflater/build.gradle
index 350aaf2..272efec 100644
--- a/asynclayoutinflater/asynclayoutinflater/build.gradle
+++ b/asynclayoutinflater/asynclayoutinflater/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/autofill/autofill/build.gradle b/autofill/autofill/build.gradle
index 84473c97..ff30870 100644
--- a/autofill/autofill/build.gradle
+++ b/autofill/autofill/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/benchmark/baseline-profile-gradle-plugin/build.gradle b/benchmark/baseline-profile-gradle-plugin/build.gradle
index 0d84e52..39d5872 100644
--- a/benchmark/baseline-profile-gradle-plugin/build.gradle
+++ b/benchmark/baseline-profile-gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.*
 
 plugins {
diff --git a/benchmark/baseline-profile-gradle-plugin/src/test/test-data/dependency/build.gradle b/benchmark/baseline-profile-gradle-plugin/src/test/test-data/dependency/build.gradle
index b600092..37b84ed 100644
--- a/benchmark/baseline-profile-gradle-plugin/src/test/test-data/dependency/build.gradle
+++ b/benchmark/baseline-profile-gradle-plugin/src/test/test-data/dependency/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("java-library")
 }
diff --git a/benchmark/benchmark-common/build.gradle b/benchmark/benchmark-common/build.gradle
index 538be04..c472c6d 100644
--- a/benchmark/benchmark-common/build.gradle
+++ b/benchmark/benchmark-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.AndroidXConfig
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/benchmark/benchmark-darwin-core/build.gradle b/benchmark/benchmark-darwin-core/build.gradle
index 01d3143..2ac5989f 100644
--- a/benchmark/benchmark-darwin-core/build.gradle
+++ b/benchmark/benchmark-darwin-core/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
diff --git a/benchmark/benchmark-darwin-gradle-plugin/build.gradle b/benchmark/benchmark-darwin-gradle-plugin/build.gradle
index 5c3aa31..83b5677 100644
--- a/benchmark/benchmark-darwin-gradle-plugin/build.gradle
+++ b/benchmark/benchmark-darwin-gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.*
 
 plugins {
diff --git a/benchmark/benchmark-darwin-samples/build.gradle b/benchmark/benchmark-darwin-samples/build.gradle
index 31e75b7..2ce2d6d 100644
--- a/benchmark/benchmark-darwin-samples/build.gradle
+++ b/benchmark/benchmark-darwin-samples/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.BuildOnServerKt
 import androidx.build.KmpPlatformsKt
 import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
diff --git a/benchmark/benchmark-darwin/build.gradle b/benchmark/benchmark-darwin/build.gradle
index 61649a55..483c0bb 100644
--- a/benchmark/benchmark-darwin/build.gradle
+++ b/benchmark/benchmark-darwin/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
diff --git a/benchmark/benchmark-junit4/build.gradle b/benchmark/benchmark-junit4/build.gradle
index d1a1347..3e1de92 100644
--- a/benchmark/benchmark-junit4/build.gradle
+++ b/benchmark/benchmark-junit4/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/benchmark/benchmark-macro-junit4/build.gradle b/benchmark/benchmark-macro-junit4/build.gradle
index 1e1dcaf4..0e64ea3 100644
--- a/benchmark/benchmark-macro-junit4/build.gradle
+++ b/benchmark/benchmark-macro-junit4/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle
index a582de4..b7e428e 100644
--- a/benchmark/benchmark-macro/build.gradle
+++ b/benchmark/benchmark-macro/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.AndroidXConfig
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/benchmark/benchmark/build.gradle b/benchmark/benchmark/build.gradle
index 87c1d07..1c74f20 100644
--- a/benchmark/benchmark/build.gradle
+++ b/benchmark/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/benchmark/gradle-plugin/build.gradle b/benchmark/gradle-plugin/build.gradle
index 30b1ddb..bc72805 100644
--- a/benchmark/gradle-plugin/build.gradle
+++ b/benchmark/gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.*
 
 plugins {
diff --git a/benchmark/integration-tests/baselineprofile-consumer/build.gradle b/benchmark/integration-tests/baselineprofile-consumer/build.gradle
index 10ed16a..c98970f 100644
--- a/benchmark/integration-tests/baselineprofile-consumer/build.gradle
+++ b/benchmark/integration-tests/baselineprofile-consumer/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 com.android.build.api.artifact.SingleArtifact
 
 /*
diff --git a/benchmark/integration-tests/baselineprofile-flavors-producer/build.gradle b/benchmark/integration-tests/baselineprofile-flavors-producer/build.gradle
index dcec54e..25b403d 100644
--- a/benchmark/integration-tests/baselineprofile-flavors-producer/build.gradle
+++ b/benchmark/integration-tests/baselineprofile-flavors-producer/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 com.android.build.api.dsl.ManagedVirtualDevice
 
 /*
diff --git a/benchmark/integration-tests/baselineprofile-library-producer/build.gradle b/benchmark/integration-tests/baselineprofile-library-producer/build.gradle
index 44b3bda..45e81a0 100644
--- a/benchmark/integration-tests/baselineprofile-library-producer/build.gradle
+++ b/benchmark/integration-tests/baselineprofile-library-producer/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 com.android.build.api.dsl.ManagedVirtualDevice
 
 /*
diff --git a/benchmark/integration-tests/baselineprofile-producer/build.gradle b/benchmark/integration-tests/baselineprofile-producer/build.gradle
index e04a270..0f1243c 100644
--- a/benchmark/integration-tests/baselineprofile-producer/build.gradle
+++ b/benchmark/integration-tests/baselineprofile-producer/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 com.android.build.api.dsl.ManagedVirtualDevice
 
 /*
diff --git a/benchmark/integration-tests/macrobenchmark/build.gradle b/benchmark/integration-tests/macrobenchmark/build.gradle
index be53848..07b8c7f 100644
--- a/benchmark/integration-tests/macrobenchmark/build.gradle
+++ b/benchmark/integration-tests/macrobenchmark/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.AndroidXConfig
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/biometric/biometric-ktx/build.gradle b/biometric/biometric-ktx/build.gradle
index 447aa92..809c1ba 100644
--- a/biometric/biometric-ktx/build.gradle
+++ b/biometric/biometric-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/biometric/biometric-ktx/samples/build.gradle b/biometric/biometric-ktx/samples/build.gradle
index 5d20e55..0e63ec0 100644
--- a/biometric/biometric-ktx/samples/build.gradle
+++ b/biometric/biometric-ktx/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/biometric/biometric/build.gradle b/biometric/biometric/build.gradle
index c87757db..99d096d 100644
--- a/biometric/biometric/build.gradle
+++ b/biometric/biometric/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/bluetooth/bluetooth-testing/build.gradle b/bluetooth/bluetooth-testing/build.gradle
index ca6faa2..1e803b5 100644
--- a/bluetooth/bluetooth-testing/build.gradle
+++ b/bluetooth/bluetooth-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/bluetooth/bluetooth/build.gradle b/bluetooth/bluetooth/build.gradle
index d8b3651e..ef5e849 100644
--- a/bluetooth/bluetooth/build.gradle
+++ b/bluetooth/bluetooth/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/bluetooth/integration-tests/testapp/build.gradle b/bluetooth/integration-tests/testapp/build.gradle
index c760ce7..54965f0 100644
--- a/bluetooth/integration-tests/testapp/build.gradle
+++ b/bluetooth/integration-tests/testapp/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 /*
diff --git a/browser/browser/build.gradle b/browser/browser/build.gradle
index 67d7ae8..b06a225 100644
--- a/browser/browser/build.gradle
+++ b/browser/browser/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/browser/browser/src/main/res/values-te/strings.xml b/browser/browser/src/main/res/values-te/strings.xml
index 8844d82..b268bb3 100644
--- a/browser/browser/src/main/res/values-te/strings.xml
+++ b/browser/browser/src/main/res/values-te/strings.xml
@@ -17,7 +17,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="fallback_menu_item_open_in_browser" msgid="3413186855122069269">"బ్రౌజర్‌లో తెరువు"</string>
-    <string name="fallback_menu_item_copy_link" msgid="4566929209979330987">"లింక్‌ను కాపీ చేయి"</string>
+    <string name="fallback_menu_item_copy_link" msgid="4566929209979330987">"లింక్‌ను కాపీ చేయండి"</string>
     <string name="fallback_menu_item_share_link" msgid="7145444925855055364">"లింక్‌ను షేర్ చేయి"</string>
     <string name="copy_toast_msg" msgid="3260749812566568062">"క్లిప్‌బోర్డ్‌కు లింక్ కాపీ చేయబడింది"</string>
 </resources>
diff --git a/build.gradle b/build.gradle
index fc4788f..111387a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,6 +14,13 @@
  * 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.AndroidXRootPlugin
 import androidx.build.SdkHelperKt
 
diff --git a/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle b/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle
index eae2213..a3aead5 100644
--- a/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle
+++ b/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-dep/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-main/build.gradle b/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-main/build.gradle
index cfbfab5..e013879 100644
--- a/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-main/build.gradle
+++ b/buildSrc-tests/max-dep-versions/buildSrc-tests-max-dep-versions-main/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 
 plugins {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index f81698e..007b8ec 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -176,6 +176,7 @@
             if (extension.shouldPublish()) {
                 project.validatePublishedMultiplatformHasDefault()
             }
+            project.registerValidateMultiplatformSourceSetNamingTask()
         }
         project.disallowAccidentalAndroidDependenciesInKmpProject(kmpExtension)
         TaskUpToDateValidator.setup(project, registry)
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
index 2b6b2b5..310e5ff 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXMultiplatformExtension.kt
@@ -14,22 +14,36 @@
  * limitations under the License.
  */
 
+@file:Suppress("UnstableApiUsage") // KotlinMultiplatformAndroidTarget
+
 package androidx.build
 
 import androidx.build.clang.AndroidXClang
 import androidx.build.clang.MultiTargetNativeCompilation
 import androidx.build.clang.NativeLibraryBundler
 import androidx.build.clang.configureCinterop
+import androidx.build.uptodatedness.cacheEvenIfNoOutputs
 import com.android.build.api.dsl.KotlinMultiplatformAndroidTarget
 import com.android.build.gradle.api.KotlinMultiplatformAndroidPlugin
 import groovy.lang.Closure
+import java.io.File
 import org.gradle.api.Action
+import org.gradle.api.DefaultTask
 import org.gradle.api.GradleException
 import org.gradle.api.NamedDomainObjectCollection
 import org.gradle.api.Project
 import org.gradle.api.artifacts.Configuration
+import org.gradle.api.file.FileCollection
 import org.gradle.api.plugins.ExtensionAware
+import org.gradle.api.provider.Property
 import org.gradle.api.provider.Provider
+import org.gradle.api.tasks.Input
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.PathSensitive
+import org.gradle.api.tasks.PathSensitivity
+import org.gradle.api.tasks.TaskAction
+import org.gradle.api.tasks.options.Option
+import org.gradle.work.DisableCachingByDefault
 import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
 import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
 import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
@@ -543,3 +557,118 @@
         )
     }
 }
+
+/**
+ * Ensures that multiplatform sources are suffixed with their target platform, ex. `MyClass.jvm.kt`.
+ *
+ * Must be called in afterEvaluate().
+ */
+fun Project.registerValidateMultiplatformSourceSetNamingTask() {
+    val targets = multiplatformExtension?.targets?.filterNot { target -> target.name == "metadata" }
+    if (targets == null || targets.size <= 1) {
+        // We only care about multiplatform projects with more than one target platform.
+        return
+    }
+
+    tasks.register(
+        "validateMultiplatformSourceSetNaming",
+        ValidateMultiplatformSourceSetNaming::class.java
+    ) { task ->
+        targets
+            .filterNot { target -> target.platformType.name == "common" }
+            .forEach { target -> task.addTarget(project, target) }
+        task.rootDir.set(rootDir.path)
+        task.cacheEvenIfNoOutputs()
+    }.also { validateTask ->
+        // Multiplatform projects with no enabled platforms do not actually apply the Kotlin plugin
+        // and therefore do not have the check task. They are skipped unless a platform is enabled.
+        if (project.tasks.findByName("check") != null) {
+            project.addToCheckTask(validateTask)
+            project.addToBuildOnServer(validateTask)
+        }
+    }
+}
+
+@DisableCachingByDefault(because = "Doesn't benefit from caching")
+abstract class ValidateMultiplatformSourceSetNaming : DefaultTask() {
+
+    @get:Input
+    abstract val rootDir: Property<String>
+
+    @InputFiles
+    @PathSensitive(PathSensitivity.RELATIVE)
+    fun getInputFiles(): Collection<FileCollection> = sourceSetMap.values
+
+    private val sourceSetMap: MutableMap<String, FileCollection> = mutableMapOf()
+
+    @set:Option(
+        option = "autoFix",
+        description = "Whether to automatically rename files instead of throwing an exception",
+    )
+    @get:Input
+    var autoFix: Boolean = false
+
+    @TaskAction
+    fun validate() {
+        // Files or entire source sets may duplicated shared across compilations, but it's more
+        // expensive to de-dupe them than to check the suffixes for everything multiple times.
+        for ((sourceFileSuffix, kotlinSourceSet) in sourceSetMap) {
+            for (fileOrDir in kotlinSourceSet) {
+                for (file in fileOrDir.walk()) {
+                    // Kotlin source files must be uniquely-named across platforms.
+                    if (
+                        file.isFile &&
+                        file.name.endsWith(".kt") &&
+                        !file.name.endsWith(".$sourceFileSuffix.kt")
+                    ) {
+                        val actualPath = file.toRelativeString(File(rootDir.get()))
+                        val expectedName = "${file.name.substringBefore('.')}.$sourceFileSuffix.kt"
+                        if (autoFix) {
+                            val destFile = File(file.parentFile, expectedName)
+                            file.renameTo(destFile)
+                            logger.info("Applied fix: $actualPath -> $expectedName")
+                        } else {
+                            throw GradleException(
+                                "Source files for non-common platforms must be suffixed with " +
+                                    "their target platform. Found '$actualPath' but expected " +
+                                    "'$expectedName'."
+                            )
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    fun addTarget(project: Project, target: KotlinTarget) {
+        sourceSetMap[target.preferredSourceFileSuffix] = project.files(
+            target.compilations
+                .filterNot { compilation ->
+                    // Don't enforce suffixes for test source sets.
+                    compilation.name == "test" ||
+                        compilation.name.endsWith("Test")
+                }
+                .flatMap { compilation -> compilation.kotlinSourceSets }
+                .map { kotlinSourceSet -> kotlinSourceSet.kotlin.sourceDirectories }
+                .toTypedArray()
+        )
+    }
+
+    /**
+     * List of Kotlin target names which may be used as source file suffixes. Any target whose name
+     * does not appear in this list will use its [KotlinPlatformType] name.
+     */
+    private val allowedTargetNameSuffixes = setOf(
+        "android",
+        "desktop",
+        "jvm"
+    )
+
+    /** The preferred source file suffix for the target's platform type. */
+    private val KotlinTarget.preferredSourceFileSuffix: String
+        get() = if (allowedTargetNameSuffixes.contains(name)) {
+            name
+        } else {
+            platformType.name
+        }
+}
diff --git a/busytown/androidx_with_metalava.sh b/busytown/androidx_with_metalava.sh
index 56a40a6..7f9356d 100755
--- a/busytown/androidx_with_metalava.sh
+++ b/busytown/androidx_with_metalava.sh
@@ -4,7 +4,7 @@
 
 # Use this flag to temporarily disable `checkApi`
 # while landing Metalava w/ breaking API changes
-METALAVA_INTEGRATION_ENFORCED=true
+METALAVA_INTEGRATION_ENFORCED=false
 
 if $METALAVA_INTEGRATION_ENFORCED
 then
diff --git a/camera/camera-camera2-pipe-integration/build.gradle b/camera/camera-camera2-pipe-integration/build.gradle
index 30f020c..1818b1c 100644
--- a/camera/camera-camera2-pipe-integration/build.gradle
+++ b/camera/camera-camera2-pipe-integration/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-camera2-pipe-testing/build.gradle b/camera/camera-camera2-pipe-testing/build.gradle
index cf171ed..fbba598 100644
--- a/camera/camera-camera2-pipe-testing/build.gradle
+++ b/camera/camera-camera2-pipe-testing/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/camera/camera-camera2-pipe/build.gradle b/camera/camera-camera2-pipe/build.gradle
index 0aaed9a..3c3ebc4 100644
--- a/camera/camera-camera2-pipe/build.gradle
+++ b/camera/camera-camera2-pipe/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt
index 0194989..a2aced6 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/graph/StreamGraphImpl.kt
@@ -42,33 +42,10 @@
 import javax.inject.Inject
 import kotlinx.atomicfu.atomic
 
-private val streamIds = atomic(0)
-
-internal fun nextStreamId(): StreamId = StreamId(streamIds.incrementAndGet())
-
-private val outputIds = atomic(0)
-
-internal fun nextOutputId(): OutputId = OutputId(outputIds.incrementAndGet())
-
-private val configIds = atomic(0)
-
-internal fun nextConfigId(): OutputConfigId = OutputConfigId(configIds.incrementAndGet())
-
-private val groupIds = atomic(0)
-
-internal fun nextGroupId(): Int = groupIds.incrementAndGet()
-
-private val previewOutputTypes = listOf(
-    OutputStream.OutputType.SURFACE_VIEW,
-    OutputStream.OutputType.SURFACE_TEXTURE
-)
-
-private val previewFormats = listOf(StreamFormat.UNKNOWN, StreamFormat.PRIVATE)
-
 /**
- * This object keeps track of which surfaces have been configured for each stream. In addition, it
- * will keep track of which surfaces have changed or replaced so that the CaptureSession can be
- * reconfigured if the configured surfaces change.
+ * This object builds an internal graph of inputs and outputs from a graphConfig. It is responsible
+ * for defining the identifiers for each input and output stream, and for building an abstract
+ * representation of the internal camera output configuration(s).
  */
 @CameraGraphScope
 internal class StreamGraphImpl
@@ -136,8 +113,7 @@
                         dynamicRangeProfile = output.dynamicRangeProfile,
                         streamUseCase = output.streamUseCase,
                         streamUseHint = output.streamUseHint,
-                        externalOutputConfig =
-                        (output as? OutputStream.Config.ExternalOutputConfig)?.output
+                        externalOutputConfig = getOutputConfigurationOrNull(output)
                     )
                 outputConfigMap[output] = outputConfig
                 outputConfigListBuilder.add(outputConfig)
@@ -179,14 +155,16 @@
             }
         }
 
-        streams = streamListBuilder
+        val streamSortedByPreview = sortOutputsByPreviewStream(streamListBuilder)
+        val streamSortedByVideo = sortOutputsByVideoStream(streamSortedByPreview)
+
+        streams = streamSortedByVideo
         streamIds = streams.map { it.id }.toSet()
         _streamMap = streamMapBuilder
-        outputConfigs = outputConfigListBuilder
-
-        val unsortedOutputs = streams.flatMap { it.outputs }
-        val outputsSortedByPreview = sortOutputsByPreviewStream(unsortedOutputs)
-        outputs = sortOutputsByVideoStream(outputsSortedByPreview)
+        outputConfigs = outputConfigListBuilder.sortedBy {
+            it.streams.minOf { stream -> streams.indexOf(stream) }
+        }
+        outputs = streams.flatMap { it.outputs }
     }
 
     class OutputConfig(
@@ -232,6 +210,15 @@
         fun onSurfaceMapUpdated(surfaces: Map<StreamId, Surface>)
     }
 
+    private fun getOutputConfigurationOrNull(
+        outputConfig: OutputStream.Config
+    ): OutputConfiguration? {
+        if (Build.VERSION.SDK_INT >= 33) {
+            return (outputConfig as? OutputStream.Config.ExternalOutputConfig)?.output
+        }
+        return null
+    }
+
     private fun computeNextSurfaceGroupId(graphConfig: CameraGraph.Config): Int {
         // If there are any existing surfaceGroups, make sure the groups we define do not overlap
         // with any existing values.
@@ -292,48 +279,59 @@
      *                  original order.
      */
     private fun sortOutputsByPreviewStream(
-        unsortedOutputs: List<OutputStream>
-    ): List<OutputStream> {
+        unsortedStreams: List<CameraStream>
+    ): List<CameraStream> {
 
-        // Check if any streams have PREVIEW StreamUseCase set
-        val (previewStreamPartition, nonPreviewStreamPartition) = unsortedOutputs.partition {
-            it.streamUseCase == OutputStream.StreamUseCase.PREVIEW
+        // If any stream explicitly specifies "PREVIEW" for its use case, prioritize those streams
+        val (previewStreamPartition, nonPreviewStreamPartition) = unsortedStreams.partition {
+            it.outputs.any { output -> output.streamUseCase == OutputStream.StreamUseCase.PREVIEW }
         }
-        // Move streams with PREVIEW StreamUseCase to head of list
         if (previewStreamPartition.isNotEmpty()) {
             return previewStreamPartition + nonPreviewStreamPartition
         }
 
-        // Check if any streams have SURFACE_VIEW and SURFACE_TEXTURE OutputTypes
-        val (previewOutputTypePartition, nonPreviewOutputTypePartition) =
-            unsortedOutputs.partition { it.outputType in previewOutputTypes }
-        // Move streams with SURFACE_VIEW and SURFACE_TEXTURE OutputTypes to head of list
-        if (previewOutputTypePartition.isNotEmpty()) {
-            val comparator = compareBy<OutputStream> { previewOutputTypes.indexOf(it.outputType) }
-            return previewOutputTypePartition.sortedWith(comparator) + nonPreviewOutputTypePartition
+        // If no streams explicitly specify the PREVIEW UseCase, fall back to ordering by
+        // SURFACE_VIEW / SURFACE_TEXTURE output types.
+        val (previewTypePartition, nonPreviewTypePartition) = unsortedStreams.partition {
+            it.outputs.any { output -> output.outputType in previewOutputTypes }
+        }
+        if (previewTypePartition.isNotEmpty()) {
+            return previewTypePartition.sortedWith(previewOutputTypesComparator) +
+                nonPreviewTypePartition
         }
 
         // Check if any streams have UNKNOWN and PRIVATE StreamFormats
-        val (previewFormatPartition, nonPreviewFormatPartition) = unsortedOutputs.partition {
-            it.format in previewFormats
+        val (previewFormatPartition, nonPreviewFormatPartition) = unsortedStreams.partition {
+            it.outputs.any { output -> output.format in previewFormats }
         }
         // Move streams with UNKNOWN and PRIVATE StreamFormats to head of list
         if (previewFormatPartition.isNotEmpty()) {
-            val comparator = compareBy<OutputStream> { previewFormats.indexOf(it.format) }
-            return previewFormatPartition.sortedWith(comparator) + nonPreviewFormatPartition
+            return previewFormatPartition.sortedWith(previewFormatComparator) +
+                nonPreviewFormatPartition
         }
 
         // Return outputs in original order if no preview streams found
-        return unsortedOutputs
+        return unsortedStreams
     }
 
+    /**
+     * Sort the output streams to move video streams to the bottom of the list.
+     * The order of the outputs is determined by the following:
+     *
+     * 1. StreamUseCase: Check if any streams have StreamUseCase.VIDEO_RECORD and move these to the
+     *                   bottom of the list. Otherwise, go to step 2.
+     * 2. StreamUseHint: Check if any streams have StreamUseHint.VIDEO_RECORD and move these to the
+     *                   bottom of the list.
+     */
     private fun sortOutputsByVideoStream(
-        unsortedOutputs: List<OutputStream>
-    ): List<OutputStream> {
+        unsortedOutputs: List<CameraStream>
+    ): List<CameraStream> {
 
         // Check if any streams have VIDEO StreamUseCase set
         val (videoStreamPartition, nonVideoStreamPartition) = unsortedOutputs.partition {
-            it.streamUseCase == OutputStream.StreamUseCase.VIDEO_RECORD
+            it.outputs.any { output ->
+                output.streamUseCase == OutputStream.StreamUseCase.VIDEO_RECORD
+            }
         }
         // Move streams with VIDEO StreamUseCase to end of list
         if (videoStreamPartition.isNotEmpty()) {
@@ -342,7 +340,9 @@
 
         // Check if any streams have VIDEO StreamUseCaseHint set
         val (videoStreamHintPartition, nonVideoStreamHintPartition) = unsortedOutputs.partition {
-            it.streamUseHint == OutputStream.StreamUseHint.VIDEO_RECORD
+            it.outputs.any { output ->
+                output.streamUseHint == OutputStream.StreamUseHint.VIDEO_RECORD
+            }
         }
 
         // Move streams with VIDEO StreamUseCaseHint to end of list
@@ -353,6 +353,39 @@
         // Return outputs in original order if no video streams found
         return unsortedOutputs
     }
+
+    companion object {
+        private val streamIds = atomic(0)
+
+        internal fun nextStreamId(): StreamId = StreamId(streamIds.incrementAndGet())
+
+        private val outputIds = atomic(0)
+
+        internal fun nextOutputId(): OutputId = OutputId(outputIds.incrementAndGet())
+
+        private val configIds = atomic(0)
+
+        internal fun nextConfigId(): OutputConfigId = OutputConfigId(configIds.incrementAndGet())
+
+        private val groupIds = atomic(0)
+
+        internal fun nextGroupId(): Int = groupIds.incrementAndGet()
+
+        private val previewOutputTypes = listOf(
+            OutputStream.OutputType.SURFACE_VIEW,
+            OutputStream.OutputType.SURFACE_TEXTURE
+        )
+
+        private val previewOutputTypesComparator = compareBy<CameraStream> {
+            it.outputs.maxOf { output -> previewOutputTypes.indexOf(output.outputType) }
+        }
+
+        private val previewFormats = listOf(StreamFormat.UNKNOWN, StreamFormat.PRIVATE)
+
+        private val previewFormatComparator = compareBy<CameraStream> {
+            it.outputs.maxOf { output -> previewFormats.indexOf(output.format) }
+        }
+    }
 }
 
 @JvmInline
diff --git a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/StreamGraphImplTest.kt b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/StreamGraphImplTest.kt
index 46e44df..cd22cf5 100644
--- a/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/StreamGraphImplTest.kt
+++ b/camera/camera-camera2-pipe/src/test/java/androidx/camera/camera2/pipe/graph/StreamGraphImplTest.kt
@@ -81,7 +81,6 @@
 
     @Test
     fun testStreamWithMultipleOutputs() {
-
         val streamConfig =
             CameraStream.Config.create(
                 listOf(
@@ -104,313 +103,335 @@
 
     @Test
     fun testOutputSortingWithStreamUseCase() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.VIDEO_RECORD
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.PREVIEW
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.DEFAULT
-                    ),
-                )
-            )
+        val streamConfigA = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.VIDEO_RECORD
+        )
+        val streamConfigB = CameraStream.Config.create(
+            Size(1600, 1200),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.PREVIEW
+        )
+        val streamConfigC = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.DEFAULT
+        )
         val graphConfig =
             CameraGraph.Config(
                 camera = CameraId("0"),
-                streams = listOf(streamConfig),
+                streams = listOf(
+                    streamConfigA,
+                    streamConfigB,
+                    streamConfigC
+                ),
             )
+
         val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
 
-        val stream1 = streamGraph.outputs[0]
-        assertThat(stream1.streamUseCase).isEqualTo(OutputStream.StreamUseCase.PREVIEW)
+        // Get the stream for each streamConfig
+        val streamA = streamGraph[streamConfigA]
+        val streamB = streamGraph[streamConfigB]
+        val streamC = streamGraph[streamConfigC]
 
-        val stream2 = streamGraph.outputs[1]
-        assertThat(stream2.streamUseCase).isEqualTo(OutputStream.StreamUseCase.DEFAULT)
+        // Read the list of outputConfigs (in order)
+        val outputConfigAt0 = streamGraph.outputConfigs[0]
+        val outputConfigAt1 = streamGraph.outputConfigs[1]
+        val outputConfigAt2 = streamGraph.outputConfigs[2]
 
-        val stream3 = streamGraph.outputs[2]
-        assertThat(stream3.streamUseCase).isEqualTo(OutputStream.StreamUseCase.VIDEO_RECORD)
+        // Assert that the outputConfig order is B, C, A because:
+        // B is moved to the front of the list, because it is a PREVIEW stream.
+        // A is moved to the end of the list, because it is a VIDEO_RECORD output stream
+        assertThat(outputConfigAt0.streams).containsExactly(streamB)
+        assertThat(outputConfigAt1.streams).containsExactly(streamC)
+        assertThat(outputConfigAt2.streams).containsExactly(streamA)
     }
 
     @Test
     fun testOutputSortingWithOutputType() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.UNKNOWN,
-                        outputType = OutputStream.OutputType.SURFACE_TEXTURE
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        outputType = OutputStream.OutputType.SURFACE_VIEW
-                    ),
-                )
-            )
+        val streamConfigA = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            outputType = OutputStream.OutputType.SURFACE
+        )
+        val streamConfigB = CameraStream.Config.create(
+            Size(1600, 1200),
+            StreamFormat.UNKNOWN,
+            outputType = OutputStream.OutputType.SURFACE_TEXTURE
+        )
+        val streamConfigC = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            outputType = OutputStream.OutputType.SURFACE_VIEW
+        )
         val graphConfig =
             CameraGraph.Config(
                 camera = CameraId("0"),
-                streams = listOf(streamConfig),
+                streams = listOf(
+                    streamConfigA,
+                    streamConfigB,
+                    streamConfigC
+                ),
             )
+
         val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
 
-        val stream1 = streamGraph.outputs[0]
-        val stream2 = streamGraph.outputs[1]
-        val stream3 = streamGraph.outputs[2]
+        // Get the stream for each streamConfig
+        val streamA = streamGraph[streamConfigA]
+        val streamB = streamGraph[streamConfigB]
+        val streamC = streamGraph[streamConfigC]
+
+        // Read the list of outputConfigs (in order)
+        val outputConfigAt0 = streamGraph.outputConfigs[0]
+        val outputConfigAt1 = streamGraph.outputConfigs[1]
+        val outputConfigAt2 = streamGraph.outputConfigs[2]
 
         if (deferredStreamsAreSupported(config.fakeMetadata, graphConfig)) {
-            assertThat(stream1.outputType).isEqualTo(OutputStream.OutputType.SURFACE_VIEW)
-            assertThat(stream2.outputType).isEqualTo(OutputStream.OutputType.SURFACE_TEXTURE)
-            assertThat(stream3.outputType).isNull()
+            // Assert that the outputConfig order is C, B, A because:
+            // B and C are moved to the front of the list because they are SURFACE_VIEW/SURFACE_TEXTURE
+            // C is sorted before B because SURFACE_VIEW has higher precedence than SURFACE_TEXTURE
+            assertThat(outputConfigAt0.streams).containsExactly(streamC)
+            assertThat(outputConfigAt1.streams).containsExactly(streamB)
+            assertThat(outputConfigAt2.streams).containsExactly(streamA)
         } else {
-            assertThat(stream1.outputType).isNull()
-            assertThat(stream2.outputType).isNull()
-            assertThat(stream3.outputType).isNull()
+            // If deferred streams are not supported, the difference between
+            // SURFACE_VIEW/SURFACE_TEXTURE do not matter, and the order is preserved.
+            assertThat(outputConfigAt0.streams).containsExactly(streamA)
+            assertThat(outputConfigAt1.streams).containsExactly(streamB)
+            assertThat(outputConfigAt2.streams).containsExactly(streamC)
         }
     }
 
     @Test
     fun testOutputSortingWithStreamFormat() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.PRIVATE
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.UNKNOWN
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.DEPTH_POINT_CLOUD
-                    ),
-                )
-            )
+        val streamConfigA = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.DEPTH_POINT_CLOUD
+        )
+        val streamConfigB = CameraStream.Config.create(
+            Size(1600, 1200),
+            StreamFormat.PRIVATE
+        )
+        val streamConfigC = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN
+        )
         val graphConfig =
             CameraGraph.Config(
                 camera = CameraId("0"),
-                streams = listOf(streamConfig),
+                streams = listOf(
+                    streamConfigA,
+                    streamConfigB,
+                    streamConfigC
+                ),
             )
+
         val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
 
-        val stream1 = streamGraph.outputs[0]
-        assertThat(stream1.format).isEqualTo(StreamFormat.UNKNOWN)
+        // Get the stream for each streamConfig
+        val streamA = streamGraph[streamConfigA]
+        val streamB = streamGraph[streamConfigB]
+        val streamC = streamGraph[streamConfigC]
 
-        val stream2 = streamGraph.outputs[1]
-        assertThat(stream2.format).isEqualTo(StreamFormat.PRIVATE)
+        // Read the list of outputConfigs (in order)
+        val outputConfigAt0 = streamGraph.outputConfigs[0]
+        val outputConfigAt1 = streamGraph.outputConfigs[1]
+        val outputConfigAt2 = streamGraph.outputConfigs[2]
 
-        val stream3 = streamGraph.outputs[2]
-        assertThat(stream3.format).isEqualTo(StreamFormat.DEPTH_POINT_CLOUD)
+        // Assert that the outputConfig order is C, B, A because:
+        // B and C are moved to the front of the list because they are UNKNOWN/PRIVATE
+        // C is sorted before B because UNKNOWN has higher precedence than PRIVATE
+        assertThat(outputConfigAt0.streams).containsExactly(streamC)
+        assertThat(outputConfigAt1.streams).containsExactly(streamB)
+        assertThat(outputConfigAt2.streams).containsExactly(streamA)
     }
 
     @Test
     fun testOutputSortingWithNoConditionsMet() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.YUV_420_888,
-                        streamUseCase = OutputStream.StreamUseCase.DEFAULT,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.DEPTH16,
-                        streamUseCase = OutputStream.StreamUseCase.DEFAULT,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.JPEG,
-                        streamUseCase = OutputStream.StreamUseCase.VIDEO_CALL,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                )
-            )
+        val streamConfigA = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.YUV_420_888
+        )
+        val streamConfigB = CameraStream.Config.create(
+            Size(1600, 1200),
+            StreamFormat.YUV_420_888
+        )
+        val streamConfigC = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.YUV_420_888
+        )
         val graphConfig =
             CameraGraph.Config(
                 camera = CameraId("0"),
-                streams = listOf(streamConfig),
+                streams = listOf(
+                    streamConfigA,
+                    streamConfigB,
+                    streamConfigC
+                ),
             )
+
         val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
 
-        val stream1 = streamGraph.outputs[0]
-        assertThat(stream1.format).isEqualTo(StreamFormat.YUV_420_888)
+        // Get the stream for each streamConfig
+        val streamA = streamGraph[streamConfigA]
+        val streamB = streamGraph[streamConfigB]
+        val streamC = streamGraph[streamConfigC]
 
-        val stream2 = streamGraph.outputs[1]
-        assertThat(stream2.format).isEqualTo(StreamFormat.DEPTH16)
+        // Read the list of outputConfigs (in order)
+        val outputConfigAt0 = streamGraph.outputConfigs[0]
+        val outputConfigAt1 = streamGraph.outputConfigs[1]
+        val outputConfigAt2 = streamGraph.outputConfigs[2]
 
-        val stream3 = streamGraph.outputs[2]
-        assertThat(stream3.format).isEqualTo(StreamFormat.JPEG)
+        // Assert that the outputConfig order is A, B, C.
+        assertThat(outputConfigAt0.streams).containsExactly(streamA)
+        assertThat(outputConfigAt1.streams).containsExactly(streamB)
+        assertThat(outputConfigAt2.streams).containsExactly(streamC)
     }
 
     @Test
     fun testOutputSortingWithSameStreamUseCase() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.PRIVATE,
-                        streamUseCase = OutputStream.StreamUseCase.PREVIEW,
-                        outputType = OutputStream.OutputType.SURFACE_TEXTURE
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.PREVIEW,
-                        outputType = OutputStream.OutputType.SURFACE_VIEW
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.RAW12,
-                        streamUseCase = OutputStream.StreamUseCase.PREVIEW,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                )
-            )
+        val streamConfigA = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.RAW12,
+            streamUseCase = OutputStream.StreamUseCase.PREVIEW,
+            outputType = OutputStream.OutputType.SURFACE
+        )
+        val streamConfigB = CameraStream.Config.create(
+            Size(1600, 1200),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.PREVIEW,
+            outputType = OutputStream.OutputType.SURFACE_VIEW
+        )
+        val streamConfigC = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.PRIVATE,
+            streamUseCase = OutputStream.StreamUseCase.PREVIEW,
+            outputType = OutputStream.OutputType.SURFACE_TEXTURE
+        )
         val graphConfig =
             CameraGraph.Config(
                 camera = CameraId("0"),
-                streams = listOf(streamConfig),
+                streams = listOf(
+                    streamConfigA,
+                    streamConfigB,
+                    streamConfigC
+                ),
             )
+
         val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
 
-        val stream1 = streamGraph.outputs[0]
-        assertThat(stream1.format).isEqualTo(StreamFormat.PRIVATE)
+        // Get the stream for each streamConfig
+        val streamA = streamGraph[streamConfigA]
+        val streamB = streamGraph[streamConfigB]
+        val streamC = streamGraph[streamConfigC]
 
-        val stream2 = streamGraph.outputs[1]
-        assertThat(stream2.format).isEqualTo(StreamFormat.UNKNOWN)
+        // Read the list of outputConfigs (in order)
+        val outputConfigAt0 = streamGraph.outputConfigs[0]
+        val outputConfigAt1 = streamGraph.outputConfigs[1]
+        val outputConfigAt2 = streamGraph.outputConfigs[2]
 
-        val stream3 = streamGraph.outputs[2]
-        assertThat(stream3.format).isEqualTo(StreamFormat.RAW12)
+        // Assert that the outputConfig order is A, B, C:
+        // All outputs specify StreamUseCase.PREVIEW, and any additional ordering is preserved.
+        assertThat(outputConfigAt0.streams).containsExactly(streamA)
+        assertThat(outputConfigAt1.streams).containsExactly(streamB)
+        assertThat(outputConfigAt2.streams).containsExactly(streamC)
     }
 
     @Test
     fun testOutputSortingWithSameOutputType() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.DEFAULT,
-                        outputType = OutputStream.OutputType.SURFACE_TEXTURE
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.VIDEO_CALL,
-                        outputType = OutputStream.OutputType.SURFACE_TEXTURE
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.STILL_CAPTURE,
-                        outputType = OutputStream.OutputType.SURFACE_TEXTURE
-                    ),
-                )
-            )
+        val streamConfigA = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.DEFAULT,
+            outputType = OutputStream.OutputType.SURFACE_TEXTURE
+        )
+        val streamConfigB = CameraStream.Config.create(
+            Size(1600, 1200),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.VIDEO_CALL,
+            outputType = OutputStream.OutputType.SURFACE_TEXTURE
+        )
+        val streamConfigC = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.STILL_CAPTURE,
+            outputType = OutputStream.OutputType.SURFACE_TEXTURE
+        )
         val graphConfig =
             CameraGraph.Config(
                 camera = CameraId("0"),
-                streams = listOf(streamConfig),
+                streams = listOf(
+                    streamConfigA,
+                    streamConfigB,
+                    streamConfigC
+                ),
             )
+
         val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
 
-        val stream1 = streamGraph.outputs[0]
-        assertThat(stream1.streamUseCase).isEqualTo(OutputStream.StreamUseCase.DEFAULT)
+        // Get the stream for each streamConfig
+        val streamA = streamGraph[streamConfigA]
+        val streamB = streamGraph[streamConfigB]
+        val streamC = streamGraph[streamConfigC]
 
-        val stream2 = streamGraph.outputs[1]
-        assertThat(stream2.streamUseCase).isEqualTo(OutputStream.StreamUseCase.VIDEO_CALL)
+        // Read the list of outputConfigs (in order)
+        val outputConfigAt0 = streamGraph.outputConfigs[0]
+        val outputConfigAt1 = streamGraph.outputConfigs[1]
+        val outputConfigAt2 = streamGraph.outputConfigs[2]
 
-        val stream3 = streamGraph.outputs[2]
-        assertThat(stream3.streamUseCase).isEqualTo(OutputStream.StreamUseCase.STILL_CAPTURE)
-    }
-
-    @Test
-    fun testOutputSortingWithSameImageFormat() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.VIDEO_RECORD,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.VIDEO_CALL,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.STILL_CAPTURE,
-                        outputType = OutputStream.OutputType.SURFACE
-                    ),
-                )
-            )
-        val graphConfig =
-            CameraGraph.Config(
-                camera = CameraId("0"),
-                streams = listOf(streamConfig),
-            )
-        val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
-
-        val stream1 = streamGraph.outputs[0]
-        assertThat(stream1.streamUseCase).isEqualTo(OutputStream.StreamUseCase.VIDEO_CALL)
-
-        val stream2 = streamGraph.outputs[1]
-        assertThat(stream2.streamUseCase).isEqualTo(OutputStream.StreamUseCase.STILL_CAPTURE)
-
-        val stream3 = streamGraph.outputs[2]
-        assertThat(stream3.streamUseCase).isEqualTo(OutputStream.StreamUseCase.VIDEO_RECORD)
+        // Assert that the outputConfig order is A, B, C because all outputType are SURFACE_TEXTURE,
+        // and order should be preserved since there are no other conditions.
+        assertThat(outputConfigAt0.streams).containsExactly(streamA)
+        assertThat(outputConfigAt1.streams).containsExactly(streamB)
+        assertThat(outputConfigAt2.streams).containsExactly(streamC)
     }
 
     @Test
     fun testOutputSortingWithStreamUseHint() {
-
-        val streamConfig =
-            CameraStream.Config.create(
-                listOf(
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.DEFAULT,
-                        streamUseHint = OutputStream.StreamUseHint.VIDEO_RECORD
-                    ),
-                    OutputStream.Config.create(
-                        Size(1600, 1200), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.PREVIEW
-                    ),
-                    OutputStream.Config.create(
-                        Size(800, 600), StreamFormat.UNKNOWN,
-                        streamUseCase = OutputStream.StreamUseCase.STILL_CAPTURE
-                    ),
-                )
-            )
+        val streamConfigA = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.DEFAULT,
+            streamUseHint = OutputStream.StreamUseHint.VIDEO_RECORD
+        )
+        val streamConfigB = CameraStream.Config.create(
+            Size(1600, 1200),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.VIDEO_CALL
+        )
+        val streamConfigC = CameraStream.Config.create(
+            Size(800, 600),
+            StreamFormat.UNKNOWN,
+            streamUseCase = OutputStream.StreamUseCase.STILL_CAPTURE
+        )
         val graphConfig =
             CameraGraph.Config(
                 camera = CameraId("0"),
-                streams = listOf(streamConfig),
+                streams = listOf(
+                    streamConfigA,
+                    streamConfigB,
+                    streamConfigC
+                ),
             )
+
         val streamGraph = StreamGraphImpl(config.fakeMetadata, graphConfig)
 
-        val stream1 = streamGraph.outputs[0]
-        assertThat(stream1.streamUseCase).isEqualTo(OutputStream.StreamUseCase.PREVIEW)
+        // Get the stream for each streamConfig
+        val streamA = streamGraph[streamConfigA]
+        val streamB = streamGraph[streamConfigB]
+        val streamC = streamGraph[streamConfigC]
 
-        val stream2 = streamGraph.outputs[1]
-        assertThat(stream2.streamUseCase).isEqualTo(OutputStream.StreamUseCase.STILL_CAPTURE)
+        // Read the list of outputConfigs (in order)
+        val outputConfigAt0 = streamGraph.outputConfigs[0]
+        val outputConfigAt1 = streamGraph.outputConfigs[1]
+        val outputConfigAt2 = streamGraph.outputConfigs[2]
 
-        val stream3 = streamGraph.outputs[2]
-        assertThat(stream3.streamUseCase).isEqualTo(OutputStream.StreamUseCase.DEFAULT)
+        // Assert that the outputConfig order is B, C, A because A is moved to the bottom of the
+        // list due to StreamUseHint.VIDEO_RECORD
+        assertThat(outputConfigAt0.streams).containsExactly(streamB)
+        assertThat(outputConfigAt1.streams).containsExactly(streamC)
+        assertThat(outputConfigAt2.streams).containsExactly(streamA)
     }
 
     @Test
diff --git a/camera/camera-camera2/build.gradle b/camera/camera-camera2/build.gradle
index 7c53389..44b0f84 100644
--- a/camera/camera-camera2/build.gradle
+++ b/camera/camera-camera2/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-core/build.gradle b/camera/camera-core/build.gradle
index 13cd447..bc1c4d8 100644
--- a/camera/camera-core/build.gradle
+++ b/camera/camera-core/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/ResolutionsMerger.java b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/ResolutionsMerger.java
index 3ce389e..5165c31 100644
--- a/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/ResolutionsMerger.java
+++ b/camera/camera-core/src/main/java/androidx/camera/core/streamsharing/ResolutionsMerger.java
@@ -50,6 +50,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -68,6 +69,8 @@
     private static final double SAME_AREA_WIDTH_HEIGHT_RATIO = sqrt(4.0 / 3.0 * 16.0 / 9.0);
 
     @NonNull
+    private final Size mSensorSize;
+    @NonNull
     private final Rational mSensorAspectRatio;
     @NonNull
     private final Rational mFallbackAspectRatio;
@@ -96,6 +99,7 @@
     ResolutionsMerger(@NonNull Size sensorSize, @NonNull Set<UseCaseConfig<?>> childrenConfigs,
             @NonNull SupportedOutputSizesSorter supportedOutputSizesSorter,
             @NonNull List<Size> cameraSupportedResolutions) {
+        mSensorSize = sensorSize;
         mSensorAspectRatio = getSensorAspectRatio(sensorSize);
         mFallbackAspectRatio = getFallbackAspectRatio(mSensorAspectRatio);
         mChildrenConfigs = childrenConfigs;
@@ -121,7 +125,7 @@
             candidateSizes = getSupportedPrivResolutions(parentSupportedSizesMap);
         }
 
-        return mergeChildrenResolutions(candidateSizes);
+        return selectParentResolutions(candidateSizes);
     }
 
     /**
@@ -192,8 +196,9 @@
      * Returns the preferred child size with considering parent size and child's configuration.
      *
      * <p>Returns the first size in the child's ordered size list that can be cropped from {@code
-     * parentSize} without upscaling it and causing double-cropping, or {@code parentSize} if no
-     * matching is found.
+     * parentSize} without upscaling it, or {@code parentSize} if no matching is found.
+     *
+     * <p>The child size not causing double-cropping will be selected in priority.
      *
      * <p>Notes that the input {@code childConfig} is expected to be one of the values that use to
      * construct the {@link ResolutionsMerger}, if not an IllegalArgumentException will be thrown.
@@ -201,17 +206,11 @@
     @VisibleForTesting
     @NonNull
     Size getPreferredChildSize(@NonNull Size parentSize, @NonNull UseCaseConfig<?> childConfig) {
-        boolean isSourceCropped = !isSensorAspectRatio(parentSize);
-
+        // Select the first child resolution that does not result in double-cropping and upscaling.
         List<Size> candidateChildSizes = getSortedChildSizes(childConfig);
         for (Size childSize : candidateChildSizes) {
-            // Skip child sizes that need another cropping when source is already cropped.
-            if (isSourceCropped) {
-                boolean needAnotherCropping = !(isFallbackAspectRatio(parentSize)
-                        && isFallbackAspectRatio(childSize));
-                if (needAnotherCropping) {
-                    continue;
-                }
+            if (isDoubleCropping(parentSize, childSize)) {
+                continue;
             }
 
             if (!hasUpscaling(childSize, parentSize)) {
@@ -219,6 +218,16 @@
             }
         }
 
+        // Select the first child resolution that does not result in upscaling (might have
+        // smaller FOV due to double-cropping). This may occur when selecting parent resolutions
+        // that are expected to result in double-clipping in order to reduce binding failures in
+        // edge cases.
+        for (Size childSize : candidateChildSizes) {
+            if (!hasUpscaling(childSize, parentSize)) {
+                return childSize;
+            }
+        }
+
         return parentSize;
     }
 
@@ -251,40 +260,52 @@
     }
 
     @NonNull
-    private List<Size> mergeChildrenResolutions(@NonNull List<Size> candidateParentResolutions) {
+    private List<Size> selectParentResolutions(@NonNull List<Size> candidateParentResolutions) {
         // The following sequence of parent resolution selection is used to prevent double-cropping
         // from happening:
-        // 1. Add sensor aspect-ratio resolutions, which will not cause double-cropping when the
-        // child resolution is in any aspect-ratio. This is to provide parent resolution that can
-        // be accepted by children in general cases.
-        // 2. Add fallback aspect-ratio resolutions, which will not cause double-cropping only when
-        // the child resolution is in fallback aspect-ratio.
+        // 1. Add sensor aspect-ratio resolutions, which do not result in double-cropping with any
+        // aspect-ratio of child resolution. This is to provide parent resolution that can be
+        // accepted by children in general cases.
+        // 2. Add fallback aspect-ratio (the one between 4:3 and 16:9 that is not sensor
+        // aspect-ratio) resolutions, that can crop/downscale to at least one child size for
+        // each child.
+        // 3. Add other aspect-ratio resolutions, that can crop/downscale to at least one child
+        // size for each child.
+        // The parent sizes added in step 2 and step 3 will only be used to crop to child sizes
+        // that do not result in double-cropping. For example, if childRatio < parentRatio <
+        // sensorRatio or childRatio > parentRatio > sensorRatio, then there is no double-cropping.
         List<Size> result = new ArrayList<>();
 
         // Add resolutions for sensor aspect-ratio.
         if (needToAddSensorResolutions()) {
-            result.addAll(mergeChildrenResolutionsByAspectRatio(mSensorAspectRatio,
-                    candidateParentResolutions));
+            result.addAll(selectParentResolutionsByAspectRatio(mSensorAspectRatio,
+                    candidateParentResolutions, false));
         }
 
-        // Add resolutions for fallback aspect-ratio if needed.
-        if (needToAddFallbackResolutions()) {
-            result.addAll(mergeChildrenResolutionsByAspectRatio(mFallbackAspectRatio,
-                    candidateParentResolutions));
-        }
+        // Add resolutions for fallback aspect-ratio.
+        result.addAll(selectParentResolutionsByAspectRatio(mFallbackAspectRatio,
+                candidateParentResolutions, false));
 
-        // TODO(b/315098647): When the resulting parent resolution list is empty, consider adding
-        //  resolutions that are neither 4:3 nor 16:9, but have a high overlap area (e.g. 80%)
-        //  compared to the sensor size, which do not cause severe reduction of FOV, to prevent
-        //  binding failures in some edge cases.
+        // Add other aspect-ratio resolutions. Resolutions with larger FOV will be added first.
+        result.addAll(selectOtherAspectRatioParentResolutionsWithFovPriority(
+                candidateParentResolutions, false));
+
+        if (result.isEmpty()) {
+            // When the resulting parent resolution list is empty (this may be due to the camera
+            // not supporting 4:3 and 16:9 resolutions or a strict ResolutionSelector settings),
+            // add resolutions that are neither 4:3 nor 16:9 to prevent binding failures.
+            // Resolutions with larger FOV will be added first.
+            result.addAll(selectOtherAspectRatioParentResolutionsWithFovPriority(
+                    candidateParentResolutions, true));
+        }
 
         Logger.d(TAG, "Parent resolutions: " + result);
 
         return result;
     }
 
-    private List<Size> mergeChildrenResolutionsByAspectRatio(@NonNull Rational aspectRatio,
-            @NonNull List<Size> candidateParentResolutions) {
+    private List<Size> selectParentResolutionsByAspectRatio(@NonNull Rational aspectRatio,
+            @NonNull List<Size> candidateParentResolutions, boolean allowDoubleCropping) {
         List<Size> candidates = filterResolutionsByAspectRatio(aspectRatio,
                 candidateParentResolutions);
         sortInDescendingOrder(candidates);
@@ -293,9 +314,12 @@
         Set<Size> sizesTooLarge = new HashSet<>(candidates);
         for (UseCaseConfig<?> childConfig : mChildrenConfigs) {
             List<Size> childSizes = getSortedChildSizes(childConfig);
+            if (!allowDoubleCropping) {
+                childSizes = filterOutChildSizesCausingDoubleCropping(aspectRatio, childSizes);
+            }
             if (childSizes.isEmpty()) {
-                // When the list is empty, which means no child required resolutions are supported,
-                // make the parent list to be empty to reflect this.
+                // When the list is empty, which means no child sizes match requirement, make the
+                // parent list to be empty to reflect this.
                 return new ArrayList<>();
             }
 
@@ -313,6 +337,66 @@
         return result;
     }
 
+    @NonNull
+    private List<Size> selectOtherAspectRatioParentResolutionsWithFovPriority(
+            @NonNull List<Size> candidates, boolean allowDoubleCropping) {
+        Map<Rational, List<Size>> ratioToSizesMap = groupSizesByAspectRatio(candidates);
+
+        // Get aspect-ratio of candidate parent sizes and sort by overlapping area (FOV) in
+        // descending order.
+        List<Rational> ratios = new ArrayList<>(ratioToSizesMap.keySet());
+        sortByFov(ratios);
+
+        // Add resolutions that are neither 4:3 nor 16:9. Resolutions with larger FOV will be
+        // added first.
+        List<Size> result = new ArrayList<>();
+        for (Rational ratio: ratios) {
+            if (ratio.equals(ASPECT_RATIO_16_9) || ratio.equals(ASPECT_RATIO_4_3)) {
+                continue;
+            }
+
+            List<Size> sizes = Objects.requireNonNull(ratioToSizesMap.get(ratio));
+            result.addAll(selectParentResolutionsByAspectRatio(ratio, sizes, allowDoubleCropping));
+        }
+
+        return result;
+    }
+
+    @NonNull
+    private Map<Rational, List<Size>> groupSizesByAspectRatio(@NonNull List<Size> sizes) {
+        Map<Rational, List<Size>> result = new HashMap<>();
+
+        // Add 4:3 and 16:9 first so that other mod-16 sizes won't introduce additional keys.
+        result.put(ASPECT_RATIO_4_3, new ArrayList<>());
+        result.put(ASPECT_RATIO_16_9, new ArrayList<>());
+
+        // Group sizes by aspect-ratio with mod-16 considered.
+        for (Size size : sizes) {
+            if (size.getHeight() <= 0) {
+                continue;
+            }
+
+            // Get the aspect-ratio group if it is ready existed.
+            List<Size> group = null;
+            for (Rational ratio : result.keySet()) {
+                if (hasMatchingAspectRatio(size, ratio)) {
+                    group = result.get(ratio);
+                    break;
+                }
+            }
+
+            // Create a new aspect-ratio group if it is not existed.
+            if (group == null) {
+                group = new ArrayList<>();
+                result.put(toRational(size), group);
+            }
+
+            Objects.requireNonNull(group).add(size);
+        }
+
+        return result;
+    }
+
     /**
      * Gets child sizes sorted by {@link SupportedOutputSizesSorter}.
      *
@@ -347,16 +431,6 @@
         return false;
     }
 
-    private boolean needToAddFallbackResolutions() {
-        // Need to add fallback resolutions if any required resolution is fallback aspect-ratio.
-        for (Size size : getChildrenRequiredResolutions()) {
-            if (hasMatchingAspectRatio(size, mFallbackAspectRatio)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
     @NonNull
     private Set<Size> getChildrenRequiredResolutions() {
         Set<Size> result = new HashSet<>();
@@ -368,12 +442,64 @@
         return result;
     }
 
-    private boolean isSensorAspectRatio(@NonNull Size size) {
-        return hasMatchingAspectRatio(size, mSensorAspectRatio);
+    @NonNull
+    private List<Size> filterOutChildSizesCausingDoubleCropping(@NonNull Rational parentAspectRatio,
+            @NonNull List<Size> childSizes) {
+        List<Size> result = new ArrayList<>();
+        for (Size childSize: childSizes) {
+            if (!isDoubleCropping(parentAspectRatio, childSize)) {
+                result.add(childSize);
+            }
+        }
+
+        return result;
     }
 
-    private boolean isFallbackAspectRatio(@NonNull Size size) {
-        return hasMatchingAspectRatio(size, mFallbackAspectRatio);
+    private boolean isDoubleCropping(@NonNull Rational parentRatio, @NonNull Size childSize) {
+        // No double cropping results when the sensor and parent have the same aspect ratio or
+        // when the parent and child have the same aspect ratio.
+        if (mSensorAspectRatio.equals(parentRatio) || hasMatchingAspectRatio(childSize,
+                parentRatio)) {
+            return false;
+        }
+
+        // When the cropping from sensor to parent and from parent to child are in the same
+        // direction, there is no double-cropping.
+        return areCroppingInDifferentDirection(
+                mSensorAspectRatio.floatValue(),
+                parentRatio.floatValue(),
+                toRational(childSize).floatValue()
+        );
+    }
+
+    private boolean isDoubleCropping(@NonNull Size parentSize, @NonNull Size childSize) {
+        return isDoubleCropping(toRational(parentSize), childSize);
+    }
+
+    private boolean areCroppingInDifferentDirection(float sensorRatioValue, float parentRatioValue,
+            float childRatioValue) {
+        // There is only one cropping direction When the sensor and parent have the same
+        // aspect-ratio or when the parent and child have the same aspect-ratio.
+        if (sensorRatioValue == parentRatioValue || parentRatioValue == childRatioValue) {
+            return false;
+        }
+
+        // When childRatio < parentRatio < sensorRatio or childRatio > parentRatio > sensorRatio,
+        // the cropping from sensor to parent and from parent to child are in the same direction.
+        if (sensorRatioValue > parentRatioValue) {
+            return parentRatioValue < childRatioValue;
+        } else {
+            return parentRatioValue > childRatioValue;
+        }
+    }
+
+    /**
+     * Sorts the input aspect-ratio by overlapping area with sensor (FOV) in descending order.
+     */
+    private void sortByFov(@NonNull List<Rational> ratios) {
+        Rational actualSensorAspectRatio = toRational(mSensorSize);
+        Collections.sort(ratios, new CompareAspectRatioByOverlappingAreaToReference(
+                actualSensorAspectRatio, true));
     }
 
     /**
@@ -383,7 +509,7 @@
     @NonNull
     static Rect getCropRectOfReferenceAspectRatio(@NonNull Size targetSize,
             @NonNull Size referenceSize) {
-        Rational referenceRatio = new Rational(referenceSize.getWidth(), referenceSize.getHeight());
+        Rational referenceRatio = toRational(referenceSize);
         return getCenterCroppedRectangle(referenceRatio, targetSize);
     }
 
@@ -438,7 +564,7 @@
             @NonNull Size baseSize) {
         int width = baseSize.getWidth();
         int height = baseSize.getHeight();
-        Rational referenceRatio = new Rational(width, height);
+        Rational referenceRatio = toRational(baseSize);
 
         RectF cropRectInFloat;
         if (cropRatio.floatValue() == referenceRatio.floatValue()) {
@@ -593,4 +719,53 @@
         return childSize.getHeight() > parentSize.getHeight()
                 || childSize.getWidth() > parentSize.getWidth();
     }
+
+    @NonNull
+    private static Rational toRational(@NonNull Size size) {
+        // For 4:3 and 16:9, use hasMatchingAspectRatio to take "mod 16 calculation" into
+        // consideration. For example, a standard 16:9 supported size is 1920x1080. It may become
+        // 1920x1088 on some devices because 1088 is multiple of 16.
+        if (hasMatchingAspectRatio(size, ASPECT_RATIO_4_3)) {
+            return ASPECT_RATIO_4_3;
+        } else if (hasMatchingAspectRatio(size, ASPECT_RATIO_16_9)) {
+            return ASPECT_RATIO_16_9;
+        } else {
+            return new Rational(size.getWidth(), size.getHeight());
+        }
+    }
+
+    private static float computeAreaOverlapping(@NonNull Rational croppingRatio,
+            @NonNull Rational baseRatio) {
+        float croppingRatioValue = croppingRatio.floatValue();
+        float baseRatioValue = baseRatio.floatValue();
+
+        return (croppingRatioValue > baseRatioValue) ? baseRatioValue / croppingRatioValue
+                : croppingRatioValue / baseRatioValue;
+    }
+
+    private static class CompareAspectRatioByOverlappingAreaToReference implements
+            Comparator<Rational> {
+        @NonNull
+        private final Rational mReferenceAspectRatio;
+        private final boolean mReverse;
+
+        /** Creates a comparator which can reverse the total ordering. */
+        CompareAspectRatioByOverlappingAreaToReference(@NonNull Rational referenceAspectRatio,
+                boolean reverse) {
+            mReferenceAspectRatio = referenceAspectRatio;
+            mReverse = reverse;
+        }
+
+        @Override
+        public int compare(@NonNull Rational lhs, @NonNull Rational rhs) {
+            float lhsOverlapping = computeAreaOverlapping(lhs, mReferenceAspectRatio);
+            float rhsOverlapping = computeAreaOverlapping(rhs, mReferenceAspectRatio);
+
+            if (mReverse) {
+                return Float.compare(rhsOverlapping, lhsOverlapping);
+            } else {
+                return Float.compare(lhsOverlapping, rhsOverlapping);
+            }
+        }
+    }
 }
diff --git a/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/ResolutionsMergerTest.kt b/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/ResolutionsMergerTest.kt
index c4794b6..dde7b9e 100644
--- a/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/ResolutionsMergerTest.kt
+++ b/camera/camera-core/src/test/java/androidx/camera/core/streamsharing/ResolutionsMergerTest.kt
@@ -81,8 +81,8 @@
         val config1 = createUseCaseConfig()
         val config2 = createUseCaseConfig()
         val childConfigs = setOf(config1, config2)
-        val candidateChildSizes1 = listOf(SIZE_1920_1080, SIZE_1280_720) // 16:9
-        val candidateChildSizes2 = listOf(SIZE_1280_960, SIZE_960_720, SIZE_640_480) // 4:3
+        val candidateChildSizes1 = listOf(SIZE_1920_1080, SIZE_1280_720, SIZE_640_480) // 16:9, 4:3
+        val candidateChildSizes2 = listOf(SIZE_1280_960, SIZE_960_720, SIZE_1280_720) // 4:3, 16:9
         val sorter = FakeSupportedOutputSizesSorter(
             mapOf(
                 config1 to candidateChildSizes1,
@@ -91,12 +91,12 @@
         )
         val merger = ResolutionsMerger(sensorSize, childConfigs, sorter, CAMERA_SUPPORTED_SIZES)
 
-        // Act & Assert, should returns a list that concatenates 4:3 resolutions before 16:9
-        // resolutions and removes resolutions that are too large (no need for multiple resolutions
-        // that can be cropped to all child sizes) and too small (causing upscaling).
+        // Act & Assert, should returns a list that concatenates sensor (4:3) resolutions before
+        // 16:9 resolutions and removes resolutions that are too large (no need for multiple
+        // resolutions that can be cropped to all child sizes) and too small (causing upscaling).
         val parentConfig = MutableOptionsBundle.create()
         assertThat(merger.getMergedResolutions(parentConfig)).containsExactly(
-            SIZE_1920_1440, SIZE_1280_960, SIZE_1920_1080, SIZE_1280_720
+            SIZE_1920_1440, SIZE_1280_960, SIZE_960_720, SIZE_1920_1080, SIZE_1280_720
         ).inOrder()
     }
 
@@ -150,6 +150,107 @@
         ).inOrder()
     }
 
+    @Test
+    fun getMergedResolutions_whenDifferentChildRequiresDifferentAspectRatio_canReturnCorrectly() {
+        // Arrange.
+        val sensorSize = SIZE_3264_2448 // 4:3
+        val config1 = createUseCaseConfig()
+        val config2 = createUseCaseConfig()
+        val childConfigs = setOf(config1, config2)
+        val candidateChildSizes1 = listOf(SIZE_1920_1080, SIZE_1280_720) // 16:9
+        val candidateChildSizes2 = listOf(SIZE_1280_960, SIZE_960_720, SIZE_640_480) // 4:3
+        val sorter = FakeSupportedOutputSizesSorter(
+            mapOf(
+                config1 to candidateChildSizes1,
+                config2 to candidateChildSizes2
+            )
+        )
+        val merger = ResolutionsMerger(sensorSize, childConfigs, sorter, CAMERA_SUPPORTED_SIZES)
+
+        // Act & Assert, should returns a list of sensor (4:3) resolutions and removes resolutions
+        // that are too large and too small.
+        val parentConfig = MutableOptionsBundle.create()
+        assertThat(merger.getMergedResolutions(parentConfig)).containsExactly(
+            SIZE_1920_1440, SIZE_1280_960
+        ).inOrder()
+    }
+
+    @Test
+    fun getMergedResolutions_whenAllChildrenRequires720To480Resolution_canReturnCorrectly() {
+        // Arrange.
+        val sensorSize = SIZE_3264_2448 // 4:3
+        val config1 = createUseCaseConfig()
+        val config2 = createUseCaseConfig()
+        val childConfigs = setOf(config1, config2)
+        val candidateChildSizes1 = listOf(SIZE_2560_1920, SIZE_1920_1440, SIZE_720_480) // 4:3, 3:2
+        val candidateChildSizes2 = listOf(SIZE_1280_960, SIZE_960_720, SIZE_720_480) // 4:3, 3:2
+        val sorter = FakeSupportedOutputSizesSorter(
+            mapOf(
+                config1 to candidateChildSizes1,
+                config2 to candidateChildSizes2
+            )
+        )
+        val merger = ResolutionsMerger(sensorSize, childConfigs, sorter, CAMERA_SUPPORTED_SIZES)
+
+        // Act & Assert, should returns a list that concatenates 4:3 resolutions before 3:2
+        // resolutions and removes resolutions that are too large (no need for multiple resolutions
+        // that can be cropped to all child sizes) and too small (causing upscaling).
+        val parentConfig = MutableOptionsBundle.create()
+        assertThat(merger.getMergedResolutions(parentConfig)).containsExactly(
+            SIZE_2560_1920, SIZE_1920_1440, SIZE_1280_960, SIZE_960_720, SIZE_720_480
+        ).inOrder()
+    }
+
+    @Test
+    fun getMergedResolutions_whenOnlyOneChildRequires720To480Resolution_canReturnCorrectly() {
+        // Arrange.
+        val sensorSize = SIZE_3264_2448 // 4:3
+        val config1 = createUseCaseConfig()
+        val config2 = createUseCaseConfig()
+        val childConfigs = setOf(config1, config2)
+        val candidateChildSizes1 = listOf(SIZE_2560_1920, SIZE_1920_1440, SIZE_720_480) // 4:3, 3:2
+        val candidateChildSizes2 = listOf(SIZE_1280_960, SIZE_960_720, SIZE_192_108) // 4:3, 16:9
+        val sorter = FakeSupportedOutputSizesSorter(
+            mapOf(
+                config1 to candidateChildSizes1,
+                config2 to candidateChildSizes2
+            )
+        )
+        val merger = ResolutionsMerger(sensorSize, childConfigs, sorter, CAMERA_SUPPORTED_SIZES)
+
+        // Act & Assert, should returns a list that concatenates 4:3 resolutions before 3:2
+        // resolutions and removes resolutions that are too large and too small.
+        val parentConfig = MutableOptionsBundle.create()
+        assertThat(merger.getMergedResolutions(parentConfig)).containsExactly(
+            SIZE_2560_1920, SIZE_1920_1440, SIZE_1280_960, SIZE_960_720, SIZE_720_480
+        ).inOrder()
+    }
+
+    @Test
+    fun getMergedResolutions_whenNeither16To9Nor4To3AreSupported_canReturnCorrectly() {
+        // Arrange.
+        val sensorSize = SIZE_3840_2000 // near 2:1
+        val config1 = createUseCaseConfig()
+        val config2 = createUseCaseConfig()
+        val childConfigs = setOf(config1, config2)
+        val candidateChildSizes1 = listOf(SIZE_2560_1440, SIZE_1280_720) // 16:9
+        val candidateChildSizes2 = listOf(SIZE_1920_1080, SIZE_960_540) // 16:9
+        val sorter = FakeSupportedOutputSizesSorter(
+            mapOf(
+                config1 to candidateChildSizes1,
+                config2 to candidateChildSizes2
+            )
+        )
+        val merger = ResolutionsMerger(sensorSize, childConfigs, sorter, SIZES_OTHER_ASPECT_RATIO)
+
+        // Act & Assert, should returns a list of near 2:1 resolutions and removes resolutions that
+        // are too large and too small.
+        val parentConfig = MutableOptionsBundle.create()
+        assertThat(merger.getMergedResolutions(parentConfig)).containsExactly(
+            SIZE_3840_2000, SIZE_3840_1920, SIZE_2560_1280, SIZE_1440_720
+        ).inOrder()
+    }
+
     @Test(expected = IllegalArgumentException::class)
     fun getPreferredChildSizePair_whenConfigNotPassedToConstructor_throwsException() {
         // Arrange.
@@ -287,7 +388,9 @@
             SIZE_960_720,
             // 16:9
             SIZE_1920_1080,
-            SIZE_960_540
+            SIZE_960_540,
+            // 3:2
+            SIZE_720_480
         )
         val sorter = FakeSupportedOutputSizesSorter(mapOf(config to candidateChildSizes))
         val merger = ResolutionsMerger(SENSOR_SIZE, setOf(config), sorter, CAMERA_SUPPORTED_SIZES)
@@ -296,6 +399,7 @@
         // double-cropping.
         assertThat(merger.getPreferredChildSize(SIZE_2560_1440, config)).isEqualTo(SIZE_1920_1080)
         assertThat(merger.getPreferredChildSize(SIZE_1280_720, config)).isEqualTo(SIZE_960_540)
+        assertThat(merger.getPreferredChildSize(SIZE_720_480, config)).isEqualTo(SIZE_720_480)
 
         // Act & Assert, should returns parent size when no matching.
         assertThat(merger.getPreferredChildSize(SIZE_192_108, config)).isEqualTo(SIZE_192_108)
@@ -624,15 +728,23 @@
             SIZE_192_108
         )
         // Other aspect-ratio resolutions.
+        private val SIZE_3840_2000 = Size(3840, 2000)
+        private val SIZE_3840_1920 = Size(3840, 1920)
+        private val SIZE_2560_1280 = Size(2560, 1280)
         private val SIZE_1440_720 = Size(1440, 720)
         private val SIZE_800_800 = Size(800, 800)
         private val SIZE_720_720 = Size(720, 720)
+        private val SIZE_720_480 = Size(720, 480)
         private val SIZE_500_400 = Size(500, 400)
         private val SIZE_176_144 = Size(176, 144)
         private val SIZES_OTHER_ASPECT_RATIO = listOf(
+            SIZE_3840_2000,
+            SIZE_3840_1920,
+            SIZE_2560_1280,
             SIZE_1440_720,
             SIZE_800_800,
             SIZE_720_720,
+            SIZE_720_480,
             SIZE_500_400,
             SIZE_176_144
         )
diff --git a/camera/camera-extensions/build.gradle b/camera/camera-extensions/build.gradle
index bf8110aa..c9c82b6 100644
--- a/camera/camera-extensions/build.gradle
+++ b/camera/camera-extensions/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-lifecycle/build.gradle b/camera/camera-lifecycle/build.gradle
index 1d4129a..b224fbb 100644
--- a/camera/camera-lifecycle/build.gradle
+++ b/camera/camera-lifecycle/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-testing/build.gradle b/camera/camera-testing/build.gradle
index 99f9fd1..a763ddd 100644
--- a/camera/camera-testing/build.gradle
+++ b/camera/camera-testing/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-testlib-extensions/build.gradle b/camera/camera-testlib-extensions/build.gradle
index 7e445ca..155b67b 100644
--- a/camera/camera-testlib-extensions/build.gradle
+++ b/camera/camera-testlib-extensions/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-view/build.gradle b/camera/camera-view/build.gradle
index c467a2d..c5dbaba 100644
--- a/camera/camera-view/build.gradle
+++ b/camera/camera-view/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-viewfinder-compose/build.gradle b/camera/camera-viewfinder-compose/build.gradle
index d2e5af0..3f2ae90 100644
--- a/camera/camera-viewfinder-compose/build.gradle
+++ b/camera/camera-viewfinder-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/camera/camera-viewfinder-core/build.gradle b/camera/camera-viewfinder-core/build.gradle
index 7429936..7577a8b 100644
--- a/camera/camera-viewfinder-core/build.gradle
+++ b/camera/camera-viewfinder-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/camera/camera-viewfinder-core/samples/build.gradle b/camera/camera-viewfinder-core/samples/build.gradle
index 12f0f62..8d9dbaf 100644
--- a/camera/camera-viewfinder-core/samples/build.gradle
+++ b/camera/camera-viewfinder-core/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/camera/camera-viewfinder/build.gradle b/camera/camera-viewfinder/build.gradle
index 4323d89..d7e9211 100644
--- a/camera/camera-viewfinder/build.gradle
+++ b/camera/camera-viewfinder/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/camera/integration-tests/extensionstestapp/build.gradle b/camera/integration-tests/extensionstestapp/build.gradle
index b03cf58..3137f0a 100644
--- a/camera/integration-tests/extensionstestapp/build.gradle
+++ b/camera/integration-tests/extensionstestapp/build.gradle
@@ -15,6 +15,13 @@
  * 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.ApkCopyHelperKt
 
 plugins {
diff --git a/car/app/app-automotive/build.gradle b/car/app/app-automotive/build.gradle
index d8cccae8..aaf75d3 100644
--- a/car/app/app-automotive/build.gradle
+++ b/car/app/app-automotive/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/car/app/app-projected/build.gradle b/car/app/app-projected/build.gradle
index e453e6a..237ba43 100644
--- a/car/app/app-projected/build.gradle
+++ b/car/app/app-projected/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/car/app/app-samples/navigation/automotive/build.gradle b/car/app/app-samples/navigation/automotive/build.gradle
index 9984ce7..5b2284f 100644
--- a/car/app/app-samples/navigation/automotive/build.gradle
+++ b/car/app/app-samples/navigation/automotive/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/car/app/app-samples/navigation/common/build.gradle b/car/app/app-samples/navigation/common/build.gradle
index 02eec7a..d079e9e 100644
--- a/car/app/app-samples/navigation/common/build.gradle
+++ b/car/app/app-samples/navigation/common/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/car/app/app-samples/navigation/mobile/build.gradle b/car/app/app-samples/navigation/mobile/build.gradle
index ece98f3..c99a3f1 100644
--- a/car/app/app-samples/navigation/mobile/build.gradle
+++ b/car/app/app-samples/navigation/mobile/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/car/app/app-samples/showcase/common/build.gradle b/car/app/app-samples/showcase/common/build.gradle
index 734eccc..fe9ac9f 100644
--- a/car/app/app-samples/showcase/common/build.gradle
+++ b/car/app/app-samples/showcase/common/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml b/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
index 651b4e3..bcac7d9 100644
--- a/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
+++ b/car/app/app-samples/showcase/common/src/main/res/values-eu/strings.xml
@@ -176,7 +176,7 @@
     <string name="nav_map_template_demo_title" msgid="344985380763975398">"Nabigazioaren txantiloien (mapa soilik dutenak) demo-bertsioa"</string>
     <string name="nav_demos_title" msgid="72781206086461004">"Nabigazioaren demo-bertsioak"</string>
     <string name="navigation_alert_title" msgid="8306554249264200848">"Radar mugikorrak al daude oraindik?"</string>
-    <string name="navigation_alert_subtitle" msgid="3331130131492672264">"Duela 10 min jakinarazi da"</string>
+    <string name="navigation_alert_subtitle" msgid="3331130131492672264">"Duela 10 minutu jakinarazi da"</string>
     <string name="no_toll_card_permission" msgid="6789073114449712090">"Ez dago bidesarien txartela atzitzeko baimenik."</string>
     <string name="no_energy_level_permission" msgid="1684773185095107825">"Ez dago energia-maila atzitzeko baimenik."</string>
     <string name="no_speed_permission" msgid="5812532480922675390">"Ez dago abiadura atzitzeko baimenik."</string>
diff --git a/car/app/app-samples/showcase/mobile/build.gradle b/car/app/app-samples/showcase/mobile/build.gradle
index ac1eaeb..c5b6e95 100644
--- a/car/app/app-samples/showcase/mobile/build.gradle
+++ b/car/app/app-samples/showcase/mobile/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/car/app/app-testing/build.gradle b/car/app/app-testing/build.gradle
index 14d67e7..0abc8c7 100644
--- a/car/app/app-testing/build.gradle
+++ b/car/app/app-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/car/app/app/build.gradle b/car/app/app/build.gradle
index d041624..4582736 100644
--- a/car/app/app/build.gradle
+++ b/car/app/app/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Release
 import androidx.build.metalava.MetalavaRunnerKt
diff --git a/cardview/cardview/build.gradle b/cardview/cardview/build.gradle
index 85ca6c6..068396b 100644
--- a/cardview/cardview/build.gradle
+++ b/cardview/cardview/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/collection/collection-benchmark-kmp/build.gradle b/collection/collection-benchmark-kmp/build.gradle
index 0bad6ce..6b84523 100644
--- a/collection/collection-benchmark-kmp/build.gradle
+++ b/collection/collection-benchmark-kmp/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.Publish
 import org.jetbrains.kotlin.konan.target.HostManager
diff --git a/collection/collection-benchmark/build.gradle b/collection/collection-benchmark/build.gradle
index dc86ea8..09e05f5 100644
--- a/collection/collection-benchmark/build.gradle
+++ b/collection/collection-benchmark/build.gradle
@@ -14,7 +14,13 @@
  * 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.KmpPlatformsKt
 import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
 import org.jetbrains.kotlin.gradle.plugin.mpp.BitcodeEmbeddingMode
diff --git a/collection/collection-ktx/build.gradle b/collection/collection-ktx/build.gradle
index 04c7a84..1cdeaee 100644
--- a/collection/collection-ktx/build.gradle
+++ b/collection/collection-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/collection/collection/build.gradle b/collection/collection/build.gradle
index dded829..9d80dea 100644
--- a/collection/collection/build.gradle
+++ b/collection/collection/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt b/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.jvm.kt
similarity index 96%
rename from collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt
rename to collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.jvm.kt
index 3e4c81a..ff01e47 100644
--- a/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt
+++ b/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.jvm.kt
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+@file:JvmName("ArrayMapKt") // Workaround for b/313964643.
 @file:Suppress("NOTHING_TO_INLINE") // Aliases to public API.
 
 package androidx.collection
diff --git a/collection/integration-tests/testapp/build.gradle b/collection/integration-tests/testapp/build.gradle
index 67a0ce6..14410da 100644
--- a/collection/integration-tests/testapp/build.gradle
+++ b/collection/integration-tests/testapp/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/compose/animation/animation-core-lint/build.gradle b/compose/animation/animation-core-lint/build.gradle
index 0e84803..fcdf271 100644
--- a/compose/animation/animation-core-lint/build.gradle
+++ b/compose/animation/animation-core-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/animation/animation-core/build.gradle b/compose/animation/animation-core/build.gradle
index f36db96..4ba3872 100644
--- a/compose/animation/animation-core/build.gradle
+++ b/compose/animation/animation-core/build.gradle
@@ -14,7 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/compose/animation/animation-core/samples/build.gradle b/compose/animation/animation-core/samples/build.gradle
index c90aace..dc3cfcbd 100644
--- a/compose/animation/animation-core/samples/build.gradle
+++ b/compose/animation/animation-core/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/animation/animation-graphics/build.gradle b/compose/animation/animation-graphics/build.gradle
index 12df0f9..1c7a544 100644
--- a/compose/animation/animation-graphics/build.gradle
+++ b/compose/animation/animation-graphics/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/animation/animation-graphics/samples/build.gradle b/compose/animation/animation-graphics/samples/build.gradle
index c317288..c794e59 100644
--- a/compose/animation/animation-graphics/samples/build.gradle
+++ b/compose/animation/animation-graphics/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/animation/animation-lint/build.gradle b/compose/animation/animation-lint/build.gradle
index e71729a..ce9b351 100644
--- a/compose/animation/animation-lint/build.gradle
+++ b/compose/animation/animation-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/animation/animation-tooling-internal/build.gradle b/compose/animation/animation-tooling-internal/build.gradle
index 0faae84..0d41720 100644
--- a/compose/animation/animation-tooling-internal/build.gradle
+++ b/compose/animation/animation-tooling-internal/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/compose/animation/animation/build.gradle b/compose/animation/animation/build.gradle
index a03b360..4532e53 100644
--- a/compose/animation/animation/build.gradle
+++ b/compose/animation/animation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/animation/animation/integration-tests/animation-demos/build.gradle b/compose/animation/animation/integration-tests/animation-demos/build.gradle
index 3d6e7aa..2eb0a79 100644
--- a/compose/animation/animation/integration-tests/animation-demos/build.gradle
+++ b/compose/animation/animation/integration-tests/animation-demos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
diff --git a/compose/animation/animation/samples/build.gradle b/compose/animation/animation/samples/build.gradle
index 9fd59da..d7aecde 100644
--- a/compose/animation/animation/samples/build.gradle
+++ b/compose/animation/animation/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/benchmark-utils/build.gradle b/compose/benchmark-utils/build.gradle
index 75e3b28..d43e9da 100644
--- a/compose/benchmark-utils/build.gradle
+++ b/compose/benchmark-utils/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
diff --git a/compose/compiler/compiler-hosted/build.gradle b/compose/compiler/compiler-hosted/build.gradle
index e4ce28e..dfa7c90 100644
--- a/compose/compiler/compiler-hosted/build.gradle
+++ b/compose/compiler/compiler-hosted/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 import androidx.build.LibraryType
diff --git a/compose/compiler/compiler-hosted/integration-tests/build.gradle b/compose/compiler/compiler-hosted/integration-tests/build.gradle
index 9539eea..5f14477 100644
--- a/compose/compiler/compiler-hosted/integration-tests/build.gradle
+++ b/compose/compiler/compiler-hosted/integration-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/compose/compiler/compiler-hosted/integration-tests/kotlin-compiler-repackaged/build.gradle b/compose/compiler/compiler-hosted/integration-tests/kotlin-compiler-repackaged/build.gradle
index 5fb10af..0c1c377c 100644
--- a/compose/compiler/compiler-hosted/integration-tests/kotlin-compiler-repackaged/build.gradle
+++ b/compose/compiler/compiler-hosted/integration-tests/kotlin-compiler-repackaged/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
 
diff --git a/compose/compiler/compiler-hosted/integration-tests/protobuf-test-classes/build.gradle b/compose/compiler/compiler-hosted/integration-tests/protobuf-test-classes/build.gradle
index b7168d5..40b8acd 100644
--- a/compose/compiler/compiler-hosted/integration-tests/protobuf-test-classes/build.gradle
+++ b/compose/compiler/compiler-hosted/integration-tests/protobuf-test-classes/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/compose/compiler/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt b/compose/compiler/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
index 9aec5bf..9675502 100644
--- a/compose/compiler/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
+++ b/compose/compiler/compiler-hosted/integration-tests/src/jvmTest/kotlin/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
@@ -844,4 +844,23 @@
             }
         """,
     )
+
+    @Test
+    fun testRememberWithDefaultParams() = verifyGoldenComposeIrTransform(
+        extra = """
+            import androidx.compose.runtime.*
+
+            val LocalColor = compositionLocalOf { 0 }
+        """,
+        source = """
+            import androidx.compose.runtime.*
+
+            @Composable fun Icon(
+                param: Int,
+                defaultParam: Int = LocalColor.current
+            ) {
+                val remembered = remember(param, defaultParam) { TODO() }
+            }
+        """
+    )
 }
diff --git "a/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = false\135.txt" "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = false\135.txt"
index 42bf590..f23cfaa 100644
--- "a/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = false\135.txt"
+++ "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = false\135.txt"
@@ -60,7 +60,7 @@
     val s = <block>{
       %composer.startReplaceableGroup(<>)
       sourceInformation(%composer, "CC(remember):Test.kt#9igjgp")
-      val tmp0_group = %composer.cache(%dirty and 0b1110 == 0b0100 or %dirty and 0b01110000 == 0b00100000 or %dirty and 0b001110000000 == 0b000100000000) {
+      val tmp0_group = %composer.cache(%dirty and 0b1110 == 0b0100 or %dirty and 0b01110000 == 0b00100000 or %dirty and 0b001110000000 xor 0b000110000000 > 256 && %composer.changed(c) || %dirty and 0b000110000000 == 0b000100000000) {
         Any()
       }
       %composer.endReplaceableGroup()
diff --git "a/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = true\135.txt" "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = true\135.txt"
index 42bf590..f23cfaa 100644
--- "a/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = true\135.txt"
+++ "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTests/testRememberAfterNonStaticDefaultParameters\133useFir = true\135.txt"
@@ -60,7 +60,7 @@
     val s = <block>{
       %composer.startReplaceableGroup(<>)
       sourceInformation(%composer, "CC(remember):Test.kt#9igjgp")
-      val tmp0_group = %composer.cache(%dirty and 0b1110 == 0b0100 or %dirty and 0b01110000 == 0b00100000 or %dirty and 0b001110000000 == 0b000100000000) {
+      val tmp0_group = %composer.cache(%dirty and 0b1110 == 0b0100 or %dirty and 0b01110000 == 0b00100000 or %dirty and 0b001110000000 xor 0b000110000000 > 256 && %composer.changed(c) || %dirty and 0b000110000000 == 0b000100000000) {
         Any()
       }
       %composer.endReplaceableGroup()
diff --git "a/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTestsStrongSkipping/testRememberWithDefaultParams\133useFir = false\135.txt" "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTestsStrongSkipping/testRememberWithDefaultParams\133useFir = false\135.txt"
new file mode 100644
index 0000000..760d0e4
--- /dev/null
+++ "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTestsStrongSkipping/testRememberWithDefaultParams\133useFir = false\135.txt"
@@ -0,0 +1,65 @@
+//
+// Source
+// ------------------------------------------
+
+import androidx.compose.runtime.*
+
+@Composable fun Icon(
+    param: Int,
+    defaultParam: Int = LocalColor.current
+) {
+    val remembered = remember(param, defaultParam) { TODO() }
+}
+
+//
+// Transformed IR
+// ------------------------------------------
+
+@Composable
+fun Icon(param: Int, defaultParam: Int, %composer: Composer?, %changed: Int, %default: Int) {
+  %composer = %composer.startRestartGroup(<>)
+  sourceInformation(%composer, "C(Icon)P(1)<curren...>,<rememb...>:Test.kt")
+  val %dirty = %changed
+  if (%default and 0b0001 != 0) {
+    %dirty = %dirty or 0b0110
+  } else if (%changed and 0b0110 == 0) {
+    %dirty = %dirty or if (%composer.changed(param)) 0b0100 else 0b0010
+  }
+  if (%changed and 0b00110000 == 0) {
+    %dirty = %dirty or if (%default and 0b0010 == 0 && %composer.changed(defaultParam)) 0b00100000 else 0b00010000
+  }
+  if (%dirty and 0b00010011 != 0b00010010 || !%composer.skipping) {
+    %composer.startDefaults()
+    if (%changed and 0b0001 == 0 || %composer.defaultsInvalid) {
+      if (%default and 0b0010 != 0) {
+        defaultParam = LocalColor.<get-current>(%composer, 0b0110)
+        %dirty = %dirty and 0b01110000.inv()
+      }
+    } else {
+      %composer.skipToGroupEnd()
+      if (%default and 0b0010 != 0) {
+        %dirty = %dirty and 0b01110000.inv()
+      }
+    }
+    %composer.endDefaults()
+    if (isTraceInProgress()) {
+      traceEventStart(<>, %dirty, -1, <>)
+    }
+    val remembered = <block>{
+      %composer.startReplaceableGroup(<>)
+      sourceInformation(%composer, "CC(remember):Test.kt#9igjgp")
+      %composer.cache(%dirty and 0b1110 == 0b0100 or %dirty and 0b01110000 xor 0b00110000 > 32 && %composer.changed(defaultParam) || %dirty and 0b00110000 == 0b00100000) {
+        TODO()
+      }
+      %composer.endReplaceableGroup()
+    }
+    if (isTraceInProgress()) {
+      traceEventEnd()
+    }
+  } else {
+    %composer.skipToGroupEnd()
+  }
+  %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+    Icon(param, defaultParam, %composer, updateChangedFlags(%changed or 0b0001), %default)
+  }
+}
diff --git "a/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTestsStrongSkipping/testRememberWithDefaultParams\133useFir = true\135.txt" "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTestsStrongSkipping/testRememberWithDefaultParams\133useFir = true\135.txt"
new file mode 100644
index 0000000..760d0e4
--- /dev/null
+++ "b/compose/compiler/compiler-hosted/integration-tests/src/test/resources/golden/androidx.compose.compiler.plugins.kotlin.RememberIntrinsicTransformTestsStrongSkipping/testRememberWithDefaultParams\133useFir = true\135.txt"
@@ -0,0 +1,65 @@
+//
+// Source
+// ------------------------------------------
+
+import androidx.compose.runtime.*
+
+@Composable fun Icon(
+    param: Int,
+    defaultParam: Int = LocalColor.current
+) {
+    val remembered = remember(param, defaultParam) { TODO() }
+}
+
+//
+// Transformed IR
+// ------------------------------------------
+
+@Composable
+fun Icon(param: Int, defaultParam: Int, %composer: Composer?, %changed: Int, %default: Int) {
+  %composer = %composer.startRestartGroup(<>)
+  sourceInformation(%composer, "C(Icon)P(1)<curren...>,<rememb...>:Test.kt")
+  val %dirty = %changed
+  if (%default and 0b0001 != 0) {
+    %dirty = %dirty or 0b0110
+  } else if (%changed and 0b0110 == 0) {
+    %dirty = %dirty or if (%composer.changed(param)) 0b0100 else 0b0010
+  }
+  if (%changed and 0b00110000 == 0) {
+    %dirty = %dirty or if (%default and 0b0010 == 0 && %composer.changed(defaultParam)) 0b00100000 else 0b00010000
+  }
+  if (%dirty and 0b00010011 != 0b00010010 || !%composer.skipping) {
+    %composer.startDefaults()
+    if (%changed and 0b0001 == 0 || %composer.defaultsInvalid) {
+      if (%default and 0b0010 != 0) {
+        defaultParam = LocalColor.<get-current>(%composer, 0b0110)
+        %dirty = %dirty and 0b01110000.inv()
+      }
+    } else {
+      %composer.skipToGroupEnd()
+      if (%default and 0b0010 != 0) {
+        %dirty = %dirty and 0b01110000.inv()
+      }
+    }
+    %composer.endDefaults()
+    if (isTraceInProgress()) {
+      traceEventStart(<>, %dirty, -1, <>)
+    }
+    val remembered = <block>{
+      %composer.startReplaceableGroup(<>)
+      sourceInformation(%composer, "CC(remember):Test.kt#9igjgp")
+      %composer.cache(%dirty and 0b1110 == 0b0100 or %dirty and 0b01110000 xor 0b00110000 > 32 && %composer.changed(defaultParam) || %dirty and 0b00110000 == 0b00100000) {
+        TODO()
+      }
+      %composer.endReplaceableGroup()
+    }
+    if (isTraceInProgress()) {
+      traceEventEnd()
+    }
+  } else {
+    %composer.skipToGroupEnd()
+  }
+  %composer.endRestartGroup()?.updateScope { %composer: Composer?, %force: Int ->
+    Icon(param, defaultParam, %composer, updateChangedFlags(%changed or 0b0001), %default)
+  }
+}
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index c846f55..a8ae26e 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -993,7 +993,7 @@
                     }
                 }
             }
-            irIntrinsicRememberInvalid(isMemoizedLambda, args, metas, ::irInferredChanged)
+            irIntrinsicRememberInvalid(isMemoizedLambda, args, metas, ::irIntrinsicChanged)
         }
 
         if (canSkipExecution) {
@@ -1159,7 +1159,7 @@
                     }
                 }
             }
-            irIntrinsicRememberInvalid(isMemoizedLambda, args, metas, ::irInferredChanged)
+            irIntrinsicRememberInvalid(isMemoizedLambda, args, metas, ::irIntrinsicChanged)
         }
 
         val transformedBody = if (canSkipExecution) {
@@ -2659,6 +2659,7 @@
         var isCertain: Boolean = false,
         var maskSlot: Int = -1,
         var maskParam: IrChangedBitMaskValue? = null,
+        var hasNonStaticDefault: Boolean = false
     )
 
     private fun paramMetaOf(arg: IrExpression, isProvided: Boolean): ParamMeta {
@@ -3049,7 +3050,7 @@
             if (usesDirty || !metaMaskConsistent) {
                 { _, arg, _ -> irChanged(arg, compareInstanceForUnstableValues = isMemoizedLambda) }
             } else {
-                ::irInferredChanged
+                ::irIntrinsicChanged
             }
 
         // Hoist execution of input params outside of the remember group, similar to how it is
@@ -3149,7 +3150,7 @@
             .reduceOrNull { acc, changed -> irBooleanOr(acc, changed) }
             ?: irConst(false)
 
-    private fun irInferredChanged(
+    private fun irIntrinsicChanged(
         isMemoizedLambda: Boolean,
         arg: IrExpression,
         meta: ParamMeta
@@ -3159,9 +3160,11 @@
             meta.isStatic -> null
             meta.isCertain &&
                 meta.stability.knownStable() &&
-                param is IrChangedBitMaskVariable -> {
-                // if it's a dirty flag, and the parameter is _guaranteed_ to be stable, then we
-                // know that the value is now CERTAIN, thus we can avoid calling changed completely
+                param is IrChangedBitMaskVariable &&
+                !meta.hasNonStaticDefault -> {
+                // if it's a dirty flag, and the parameter doesn't have a default value and is _known_
+                // to be stable, then we know that the value is now CERTAIN, thus we can avoid
+                // calling changed completely
                 //
                 // invalid = invalid or (mask == different)
                 irEqual(
@@ -3171,10 +3174,11 @@
             }
             meta.isCertain &&
                 !meta.stability.knownUnstable() &&
-                param is IrChangedBitMaskVariable -> {
-                // if it's a dirty flag, and the parameter might be stable, then we only check
-                // changed if the value is unstable, otherwise we can just check to see if the mask
-                // is different
+                param is IrChangedBitMaskVariable &&
+                !meta.hasNonStaticDefault -> {
+                // if it's a dirty flag, and the parameter doesn't have a default value and it might
+                // be stable, then we only check changed if the value is unstable, otherwise we can
+                // just check to see if the mask is different
                 //
                 // invalid = invalid or (stable && mask == different || unstable && changed)
 
@@ -3195,10 +3199,11 @@
             meta.isCertain &&
                 !meta.stability.knownUnstable() &&
                 param != null -> {
-                // if it's a changed flag then uncertain is a possible value. If it is uncertain
-                // OR unstable, then we need to call changed. If it is uncertain or unstable here
-                // it will _always_ be uncertain or unstable here, so this is safe. If it is not
-                // uncertain or unstable, we can just check to see if its different
+                // if it's a changed flag or parameter with a default expression then uncertain is a
+                // possible value. If  it is uncertain OR unstable, then we need to call changed.
+                // If it is uncertain or unstable here it will _always_ be uncertain or unstable
+                // here, so this is safe. If it is not uncertain or unstable, we can just check to
+                // see if its different
 
                 //     unstableOrUncertain = mask xor 011 > 010
                 //     invalid = invalid or ((unstableOrUncertain && changed()) || mask == different)
@@ -3318,6 +3323,12 @@
                             if (slotIndex != -1) {
                                 meta.isCertain = true
                                 meta.maskParam = scope.dirty
+                                meta.hasNonStaticDefault = if (param is IrValueParameter) {
+                                    param.defaultValue?.expression?.isStatic() == false
+                                } else {
+                                    // No default for this parameter
+                                    false
+                                }
                                 meta.maskSlot = slotIndex
                             }
                         }
diff --git a/compose/compiler/compiler/build.gradle b/compose/compiler/compiler/build.gradle
index d47fc00..0bd5e23 100644
--- a/compose/compiler/compiler/build.gradle
+++ b/compose/compiler/compiler/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
 
diff --git a/compose/compiler/compiler/integration-tests/build.gradle b/compose/compiler/compiler/integration-tests/build.gradle
index 1e465c3..8c81a67 100644
--- a/compose/compiler/compiler/integration-tests/build.gradle
+++ b/compose/compiler/compiler/integration-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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.SdkResourceGenerator
 import static androidx.build.AndroidXPlugin.isPlayground
 
diff --git a/compose/desktop/desktop/build.gradle b/compose/desktop/desktop/build.gradle
index ce2909cb..8f1e03b 100644
--- a/compose/desktop/desktop/build.gradle
+++ b/compose/desktop/desktop/build.gradle
@@ -14,6 +14,13 @@
  * 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.AndroidXConfig
 import androidx.build.BuildOnServerKt
 import androidx.build.LibraryType
diff --git a/compose/desktop/desktop/samples/build.gradle b/compose/desktop/desktop/samples/build.gradle
index b4a9f69..7ac99ba 100644
--- a/compose/desktop/desktop/samples/build.gradle
+++ b/compose/desktop/desktop/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.AndroidXConfig
 import androidx.build.BuildOnServerKt
 
diff --git a/compose/foundation/foundation-layout/build.gradle b/compose/foundation/foundation-layout/build.gradle
index 80a4976..40eb325 100644
--- a/compose/foundation/foundation-layout/build.gradle
+++ b/compose/foundation/foundation-layout/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/foundation/foundation-layout/samples/build.gradle b/compose/foundation/foundation-layout/samples/build.gradle
index 3e07527..8718492 100644
--- a/compose/foundation/foundation-layout/samples/build.gradle
+++ b/compose/foundation/foundation-layout/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/foundation/foundation-lint/build.gradle b/compose/foundation/foundation-lint/build.gradle
index be4b941..e82ecd9 100644
--- a/compose/foundation/foundation-lint/build.gradle
+++ b/compose/foundation/foundation-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/foundation/foundation/api/current.ignore b/compose/foundation/foundation/api/current.ignore
index cd093b7..7f85f5f 100644
--- a/compose/foundation/foundation/api/current.ignore
+++ b/compose/foundation/foundation/api/current.ignore
@@ -1,4 +1,8 @@
 // Baseline format: 1.0
+AddedAbstractMethod: androidx.compose.foundation.pager.PageInfo#getKey():
+    Added method androidx.compose.foundation.pager.PageInfo.getKey()
+
+
 RemovedClass: androidx.compose.foundation.text2.input.AllCapsTransformationKt:
     Removed class androidx.compose.foundation.text2.input.AllCapsTransformationKt
 RemovedClass: androidx.compose.foundation.text2.input.MaxLengthTransformationKt:
diff --git a/compose/foundation/foundation/api/current.txt b/compose/foundation/foundation/api/current.txt
index 2a5d1c3..3bc4d47 100644
--- a/compose/foundation/foundation/api/current.txt
+++ b/compose/foundation/foundation/api/current.txt
@@ -1156,10 +1156,12 @@
 
 package androidx.compose.foundation.pager {
 
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface PageInfo {
+  public sealed interface PageInfo {
     method public int getIndex();
+    method public Object getKey();
     method public int getOffset();
     property public abstract int index;
+    property public abstract Object key;
     property public abstract int offset;
   }
 
@@ -1219,7 +1221,7 @@
     property public abstract java.util.List<androidx.compose.foundation.pager.PageInfo> visiblePagesInfo;
   }
 
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface PagerScope {
+  public sealed interface PagerScope {
   }
 
   @androidx.compose.runtime.Stable public interface PagerSnapDistance {
diff --git a/compose/foundation/foundation/api/restricted_current.ignore b/compose/foundation/foundation/api/restricted_current.ignore
index cd093b7..7f85f5f 100644
--- a/compose/foundation/foundation/api/restricted_current.ignore
+++ b/compose/foundation/foundation/api/restricted_current.ignore
@@ -1,4 +1,8 @@
 // Baseline format: 1.0
+AddedAbstractMethod: androidx.compose.foundation.pager.PageInfo#getKey():
+    Added method androidx.compose.foundation.pager.PageInfo.getKey()
+
+
 RemovedClass: androidx.compose.foundation.text2.input.AllCapsTransformationKt:
     Removed class androidx.compose.foundation.text2.input.AllCapsTransformationKt
 RemovedClass: androidx.compose.foundation.text2.input.MaxLengthTransformationKt:
diff --git a/compose/foundation/foundation/api/restricted_current.txt b/compose/foundation/foundation/api/restricted_current.txt
index 6173895..2feeea9 100644
--- a/compose/foundation/foundation/api/restricted_current.txt
+++ b/compose/foundation/foundation/api/restricted_current.txt
@@ -1158,10 +1158,12 @@
 
 package androidx.compose.foundation.pager {
 
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface PageInfo {
+  public sealed interface PageInfo {
     method public int getIndex();
+    method public Object getKey();
     method public int getOffset();
     property public abstract int index;
+    property public abstract Object key;
     property public abstract int offset;
   }
 
@@ -1221,7 +1223,7 @@
     property public abstract java.util.List<androidx.compose.foundation.pager.PageInfo> visiblePagesInfo;
   }
 
-  @SuppressCompatibility @androidx.compose.foundation.ExperimentalFoundationApi public sealed interface PagerScope {
+  public sealed interface PagerScope {
   }
 
   @androidx.compose.runtime.Stable public interface PagerSnapDistance {
diff --git a/compose/foundation/foundation/benchmark/build.gradle b/compose/foundation/foundation/benchmark/build.gradle
index 5eb1d5b..b24198f 100644
--- a/compose/foundation/foundation/benchmark/build.gradle
+++ b/compose/foundation/foundation/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/foundation/foundation/build.gradle b/compose/foundation/foundation/build.gradle
index d1acfc6..58190c2 100644
--- a/compose/foundation/foundation/build.gradle
+++ b/compose/foundation/foundation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
@@ -63,7 +70,7 @@
             dependencies {
                 api("androidx.annotation:annotation:1.1.0")
                 implementation("androidx.emoji2:emoji2:1.3.0")
-                implementation("androidx.core:core:1.11.0")
+                implementation("androidx.core:core:1.12.0")
             }
         }
 
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/InteropTextFieldDemo.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/InteropTextFieldDemo.kt
new file mode 100644
index 0000000..f236c62
--- /dev/null
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/InteropTextFieldDemo.kt
@@ -0,0 +1,67 @@
+/*
+ * 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.demos.text
+
+import android.widget.EditText
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.Text
+import androidx.compose.material.TextField
+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.Modifier
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.viewinterop.AndroidView
+
+@Composable
+fun InteropTextFieldDemo() {
+    var firstTextField by remember { mutableStateOf("") }
+    var secondTextField by remember { mutableStateOf("") }
+    Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
+        Text("First TextField")
+        TextField(
+            value = firstTextField,
+            onValueChange = { firstTextField = it },
+            Modifier.fillMaxWidth(),
+            keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next)
+        )
+
+        Text("First EditText")
+        AndroidView(factory = {
+            EditText(it)
+        }, Modifier.fillMaxWidth())
+
+        Text("Second TextField")
+        TextField(
+            value = secondTextField,
+            onValueChange = { secondTextField = it },
+            Modifier.fillMaxWidth(),
+            keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next)
+        )
+
+        Text("Second EditText")
+        AndroidView(factory = {
+            EditText(it)
+        }, Modifier.fillMaxWidth())
+    }
+}
diff --git a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
index 4a8c640..bbd3ef6 100644
--- a/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
+++ b/compose/foundation/foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/text/TextDemos.kt
@@ -142,6 +142,7 @@
                 ComposableDemo("Tail Following Text Field") { TailFollowingTextFieldDemo() },
                 ComposableDemo("Secondary input system") { PlatformTextInputAdapterDemo() },
                 ComposableDemo("Read-only field") { ReadOnlyTextFieldDemo() },
+                ComposableDemo("Interop") { InteropTextFieldDemo() }
             )
         ),
         DemoCategory(
diff --git a/compose/foundation/foundation/samples/build.gradle b/compose/foundation/foundation/samples/build.gradle
index 359ec89..22a9666 100644
--- a/compose/foundation/foundation/samples/build.gradle
+++ b/compose/foundation/foundation/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/CoreTextFieldFocusTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/CoreTextFieldFocusTest.kt
index 3ae4966..933c14d 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/CoreTextFieldFocusTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/CoreTextFieldFocusTest.kt
@@ -16,27 +16,99 @@
 
 package androidx.compose.foundation.text
 
+import androidx.compose.foundation.focusable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.size
 import androidx.compose.runtime.RecomposeScope
 import androidx.compose.runtime.currentRecomposeScope
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusManager
+import androidx.compose.ui.platform.LocalFocusManager
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.assertIsFocused
 import androidx.compose.ui.test.junit4.createComposeRule
 import androidx.compose.ui.test.onNodeWithTag
 import androidx.compose.ui.test.performClick
+import androidx.compose.ui.test.requestFocus
 import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.unit.dp
 import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.SmallTest
+import androidx.test.filters.MediumTest
+import kotlin.test.assertTrue
+import org.junit.Assert
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 
-@SmallTest
+@MediumTest
 @RunWith(AndroidJUnit4::class)
 class CoreTextFieldFocusTest {
     @get:Rule
     val rule = createComposeRule()
 
+    val keyboardHelper = KeyboardHelper(rule)
+
+    @Test
+    fun hideKeyboardWhenDisposed() {
+        val value = TextFieldValue("initial text")
+        var toggle by mutableStateOf(true)
+        rule.setContent {
+            keyboardHelper.initialize()
+
+            if (toggle) {
+                CoreTextField(
+                    value = value,
+                    onValueChange = {},
+                    modifier = Modifier.testTag("TextField")
+                )
+            }
+        }
+
+        rule.onNodeWithTag("TextField").requestFocus()
+        keyboardHelper.waitForKeyboardVisibility(true)
+        assertTrue(keyboardHelper.isSoftwareKeyboardShown())
+
+        toggle = false
+        rule.waitForIdle()
+
+        keyboardHelper.waitForKeyboardVisibility(false)
+        Assert.assertFalse(keyboardHelper.isSoftwareKeyboardShown())
+    }
+
+    @Test
+    fun hideKeyboardWhenFocusCleared() {
+        val value = TextFieldValue("initial text")
+        lateinit var focusManager: FocusManager
+        rule.setContent {
+            keyboardHelper.initialize()
+            focusManager = LocalFocusManager.current
+            Row {
+                // Extra focusable that takes initial focus when focus is cleared.
+                Box(Modifier.size(10.dp).focusable())
+                CoreTextField(
+                    value = value,
+                    onValueChange = {},
+                    modifier = Modifier.testTag("TextField")
+                )
+            }
+        }
+
+        rule.onNodeWithTag("TextField").requestFocus()
+        keyboardHelper.waitForKeyboardVisibility(true)
+        assertTrue(keyboardHelper.isSoftwareKeyboardShown())
+
+        rule.runOnIdle {
+            focusManager.clearFocus()
+        }
+
+        keyboardHelper.waitForKeyboardVisibility(false)
+        Assert.assertFalse(keyboardHelper.isSoftwareKeyboardShown())
+    }
+
     @Test
     fun tapToFocus() {
         // Arrange.
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/TextFieldSelectionGesturesTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/TextFieldSelectionGesturesTest.kt
index 4403d90..dfd3fd0 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/TextFieldSelectionGesturesTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text/selection/gestures/TextFieldSelectionGesturesTest.kt
@@ -64,19 +64,23 @@
         rule.waitForIdle()
         rule.onNodeWithTag(pointerAreaTag).performTouchInput { click(characterPosition(0)) }
         rule.waitForIdle()
+        asserter.applyAndAssert {
+            cursorHandleShown = true
+        }
+        asserter.cursorHandleShown = false
+        // most tests first action will start a selection, so leave cursor handle as false
     }
 
     @Test
     fun whenTouch_withLongPressOutOfBounds_nothingHappens() {
-        asserter.applyAndAssert {
-            cursorHandleShown = true
-        }
-
         performTouchGesture {
             longPress(topStart.nudge(yDirection = UP))
         }
 
-        asserter.assert()
+        asserter.applyAndAssert {
+            cursorHandleShown = true
+        }
+
         touchDragTo(topEnd.nudge(yDirection = UP))
         asserter.assert()
     }
@@ -86,12 +90,17 @@
         textFieldValue.value = TextFieldValue()
         rule.waitForIdle()
 
+        rule.onNodeWithTag(pointerAreaTag).performTouchInput { click() }
+
+        asserter.applyAndAssert {
+            textContent = ""
+        }
+
         performTouchGesture {
             longClick(center)
         }
 
         asserter.applyAndAssert {
-            textContent = ""
             textToolbarShown = true // paste will show up if clipboard is not empty
             hapticsCount++
         }
@@ -102,12 +111,17 @@
         textFieldValue.value = TextFieldValue()
         rule.waitForIdle()
 
+        rule.onNodeWithTag(pointerAreaTag).performTouchInput { click() }
+
+        asserter.applyAndAssert {
+            textContent = ""
+        }
+
         performTouchGesture {
             longPress(center)
         }
 
         asserter.applyAndAssert {
-            textContent = ""
             hapticsCount++
         }
 
@@ -131,6 +145,12 @@
         textFieldValue.value = TextFieldValue()
         rule.waitForIdle()
 
+        rule.onNodeWithTag(pointerAreaTag).performTouchInput { click() }
+
+        asserter.applyAndAssert {
+            textContent = ""
+        }
+
         performTouchGesture {
             longPress(center)
         }
@@ -525,14 +545,19 @@
         textFieldValue.value = TextFieldValue(content)
         rule.waitForIdle()
 
+        rule.onNodeWithTag(pointerAreaTag).performTouchInput { click(characterPosition(0)) }
+
+        asserter.applyAndAssert {
+            textContent = content
+            cursorHandleShown = true
+        }
+
         performTouchGesture {
             longPress(centerEnd)
         }
 
         asserter.applyAndAssert {
-            textContent = content
             selection = 6.collapsed
-            cursorHandleShown = true
             hapticsCount++
         }
 
@@ -679,14 +704,19 @@
         textFieldValue.value = TextFieldValue(content)
         rule.waitForIdle()
 
+        rule.onNodeWithTag(pointerAreaTag).performTouchInput { click(characterPosition(0)) }
+
+        asserter.applyAndAssert {
+            textContent = content
+            cursorHandleShown = true
+        }
+
         performTouchGesture {
             longPress(bottomEnd)
         }
 
         asserter.applyAndAssert {
-            textContent = content
             selection = 7.collapsed
-            cursorHandleShown = true
             hapticsCount++
         }
 
@@ -1101,14 +1131,21 @@
         textFieldValue.value = TextFieldValue(content)
         rule.waitForIdle()
 
+        rule.onNodeWithTag(pointerAreaTag).performTouchInput { click(characterPosition(0)) }
+
+        asserter.applyAndAssert {
+            textContent = content
+            cursorHandleShown = true
+        }
+
         performTouchGesture {
             longPress(characterPosition(content.lastIndex))
         }
 
         asserter.applyAndAssert {
-            textContent = content
             selection = 0 to content.length
             selectionHandlesShown = true
+            cursorHandleShown = false
             magnifierShown = true
             hapticsCount++
         }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
index 8533054d..4cba9a59 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/BasicTextField2Test.kt
@@ -21,10 +21,14 @@
 import android.view.inputmethod.InputConnection
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.ScrollState
+import androidx.compose.foundation.focusable
 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.height
 import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.text.KeyboardHelper
 import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.foundation.text.TEST_FONT_FAMILY
 import androidx.compose.foundation.text.selection.fetchTextLayoutResult
@@ -44,6 +48,7 @@
 import androidx.compose.runtime.setValue
 import androidx.compose.runtime.snapshotFlow
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusManager
 import androidx.compose.ui.focus.FocusRequester
 import androidx.compose.ui.focus.focusRequester
 import androidx.compose.ui.graphics.Color
@@ -51,6 +56,7 @@
 import androidx.compose.ui.platform.ClipboardManager
 import androidx.compose.ui.platform.LocalClipboardManager
 import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.LocalFocusManager
 import androidx.compose.ui.platform.LocalSoftwareKeyboardController
 import androidx.compose.ui.platform.LocalWindowInfo
 import androidx.compose.ui.platform.WindowInfo
@@ -92,7 +98,8 @@
 import androidx.test.filters.SdkSuppress
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.flow.drop
-import org.junit.Ignore
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -408,6 +415,63 @@
     }
 
     @Test
+    fun hideKeyboardWhenDisposed() {
+        val keyboardHelper = KeyboardHelper(rule)
+        val state = TextFieldState("initial text")
+        var toggle by mutableStateOf(true)
+        rule.setContent {
+            keyboardHelper.initialize()
+
+            if (toggle) {
+                BasicTextField2(
+                    state = state,
+                    modifier = Modifier.testTag("TextField")
+                )
+            }
+        }
+
+        rule.onNodeWithTag("TextField").requestFocus()
+        keyboardHelper.waitForKeyboardVisibility(true)
+        assertTrue(keyboardHelper.isSoftwareKeyboardShown())
+
+        toggle = false
+        rule.waitForIdle()
+
+        keyboardHelper.waitForKeyboardVisibility(false)
+        assertFalse(keyboardHelper.isSoftwareKeyboardShown())
+    }
+
+    @Test
+    fun hideKeyboardWhenFocusCleared() {
+        val keyboardHelper = KeyboardHelper(rule)
+        val state = TextFieldState("initial text")
+        lateinit var focusManager: FocusManager
+        rule.setContent {
+            keyboardHelper.initialize()
+            focusManager = LocalFocusManager.current
+            Row {
+                // Extra focusable that takes initial focus when focus is cleared.
+                Box(Modifier.size(10.dp).focusable())
+                BasicTextField2(
+                    state = state,
+                    modifier = Modifier.testTag("TextField")
+                )
+            }
+        }
+
+        rule.onNodeWithTag("TextField").requestFocus()
+        keyboardHelper.waitForKeyboardVisibility(true)
+        assertTrue(keyboardHelper.isSoftwareKeyboardShown())
+
+        rule.runOnIdle {
+            focusManager.clearFocus()
+        }
+
+        keyboardHelper.waitForKeyboardVisibility(false)
+        assertFalse(keyboardHelper.isSoftwareKeyboardShown())
+    }
+
+    @Test
     fun textField_whenStateObjectChanges_newTextIsRendered() {
         val state1 = TextFieldState("Hello")
         val state2 = TextFieldState("World")
@@ -981,28 +1045,24 @@
         rule.onNodeWithTag(Tag).assertIsNotFocused()
     }
 
-    @Ignore("b/297680209")
     @Test
     fun swipingTextFieldInScrollableContainer_doesNotGainFocus() {
         val scrollState = ScrollState(0)
         inputMethodInterceptor.setTextFieldTestContent {
             Column(
                 Modifier
-                    .size(100.dp)
+                    .height(100.dp)
                     .verticalScroll(scrollState)
             ) {
                 BasicTextField2(
                     state = rememberTextFieldState(),
                     modifier = Modifier.testTag(Tag)
                 )
-                Box(Modifier.size(200.dp))
+                Box(Modifier.height(200.dp))
             }
         }
 
-        rule.onNodeWithTag(Tag).performTouchInput {
-            // swipe through
-            swipeUp(durationMillis = 1000)
-        }
+        rule.onNodeWithTag(Tag).performTouchInput { swipeUp() }
         rule.onNodeWithTag(Tag).assertIsNotFocused()
         assertThat(scrollState.value).isNotEqualTo(0)
     }
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
index de323bc..d9139e4 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/TextFieldCursorTest.kt
@@ -194,7 +194,7 @@
             .assertCursor(cursorTopCenterInLtr)
     }
 
-    @Ignore("b/305799612")
+    @FlakyTest(bugId = 305799612)
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
     fun textFieldFocused_cursorRendered_rtlLayout() {
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/undo/BasicTextField2UndoTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/undo/BasicTextField2UndoTest.kt
index 8fcf05d..b20e406 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/undo/BasicTextField2UndoTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/text2/input/internal/undo/BasicTextField2UndoTest.kt
@@ -38,10 +38,8 @@
 import androidx.compose.ui.test.requestFocus
 import androidx.compose.ui.text.TextRange
 import androidx.test.ext.junit.runners.AndroidJUnit4
-import androidx.test.filters.FlakyTest
 import androidx.test.filters.LargeTest
 import com.google.common.truth.Truth.assertThat
-import org.junit.Ignore
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -62,10 +60,10 @@
         }
 
         rule.onNode(hasSetTextAction()).performTextInput(", World")
-        assertThat(state.text.toString()).isEqualTo("Hello, World")
+        state.assertText("Hello, World")
 
         state.undoState.undo()
-        assertThat(state.text.toString()).isEqualTo("Hello")
+        state.assertText("Hello")
         rule.onNode(hasSetTextAction()).assertTextEquals("Hello")
     }
 
@@ -95,10 +93,10 @@
         }
 
         rule.onNode(hasSetTextAction()).typeText(", World")
-        assertThat(state.text.toString()).isEqualTo("Hello, World")
+        state.assertText("Hello, World")
 
         state.undoState.undo()
-        assertThat(state.text.toString()).isEqualTo("Hello")
+        state.assertText("Hello")
         rule.onNode(hasSetTextAction()).assertTextEquals("Hello")
     }
 
@@ -115,14 +113,14 @@
             performTextInputSelection(TextRange(5))
             performTextInput(" Compose")
         }
-        assertThat(state.text.toString()).isEqualTo("Hello Compose, World")
+        state.assertText("Hello Compose, World")
 
         state.undoState.undo()
-        assertThat(state.text.toString()).isEqualTo("Hello, World")
+        state.assertText("Hello, World")
         rule.onNode(hasSetTextAction()).assertTextEquals("Hello, World")
 
         state.undoState.undo()
-        assertThat(state.text.toString()).isEqualTo("Hello")
+        state.assertText("Hello")
         rule.onNode(hasSetTextAction()).assertTextEquals("Hello")
     }
 
@@ -189,11 +187,10 @@
             performTextInputSelection(TextRange(0, 5))
             performTextInput("a")
         }
-        assertThat(state.text.toString()).isEqualTo("a")
+        state.assertTextAndSelection("a", TextRange(1))
 
         state.undoState.undo()
-        assertThat(state.text.toString()).isEqualTo("Hello")
-        assertThat(state.text.selectionInChars).isEqualTo(TextRange(0, 5))
+        state.assertTextAndSelection("Hello", TextRange(0, 5))
     }
 
     @Test
@@ -208,14 +205,18 @@
             performTextInputSelection(TextRange(2))
             performTextInput(" abc ")
         }
-        assertThat(state.text.selectionInChars).isEqualTo(TextRange(7))
+
+        state.assertTextAndSelection("He abc llo", TextRange(7))
 
         state.undoState.undo()
 
-        assertThat(state.text.selectionInChars).isNotEqualTo(TextRange(7))
+        rule.runOnIdle {
+            assertThat(state.text.selectionInChars).isNotEqualTo(TextRange(7))
+        }
 
         state.undoState.redo()
-        assertThat(state.text.selectionInChars).isEqualTo(TextRange(7))
+
+        state.assertTextAndSelection("He abc llo", TextRange(7))
     }
 
     @Test
@@ -248,7 +249,6 @@
         assertThat(state.undoState.canUndo).isFalse()
     }
 
-    @FlakyTest(bugId = 305090138)
     @Test
     fun clearHistory_removesAllUndoAndRedo() {
         val state = TextFieldState()
@@ -265,20 +265,26 @@
             typeText("ghi")
             performTextClearance()
         }
+        rule.waitForIdle()
         state.undoState.undo()
+        rule.waitForIdle()
         state.undoState.undo()
+        rule.waitForIdle()
         state.undoState.undo()
 
-        assertThat(state.undoState.canUndo).isTrue()
-        assertThat(state.undoState.canRedo).isTrue()
+        rule.runOnIdle {
+            assertThat(state.undoState.canUndo).isTrue()
+            assertThat(state.undoState.canRedo).isTrue()
+        }
 
         state.undoState.clearHistory()
 
-        assertThat(state.undoState.canUndo).isFalse()
-        assertThat(state.undoState.canRedo).isFalse()
+        rule.runOnIdle {
+            assertThat(state.undoState.canUndo).isFalse()
+            assertThat(state.undoState.canRedo).isFalse()
+        }
     }
 
-    @Ignore("b/308623690")
     @Test
     fun paste_neverMerges() {
         val state = TextFieldState()
@@ -350,6 +356,12 @@
         text.forEach { performTextInput(it.toString()) }
     }
 
+    private fun TextFieldState.assertText(text: String) {
+        rule.runOnIdle {
+            assertThat(this.text.toString()).isEqualTo(text)
+        }
+    }
+
     private fun TextFieldState.assertTextAndSelection(text: String, selection: TextRange) {
         rule.runOnIdle {
             assertThat(this.text.toString()).isEqualTo(text)
diff --git a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldCursorTest.kt b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldCursorTest.kt
index d4bacdf..27b2f23 100644
--- a/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldCursorTest.kt
+++ b/compose/foundation/foundation/src/androidInstrumentedTest/kotlin/androidx/compose/foundation/textfield/TextFieldCursorTest.kt
@@ -111,7 +111,7 @@
     // default onTextLayout to capture cursor boundaries.
     private val onTextLayout: (TextLayoutResult) -> Unit = { cursorRect = it.getCursorRect(0) }
 
-    @Ignore("b/305799612")
+    @FlakyTest(bugId = 305799612)
     @Test
     @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
     fun textFieldFocused_cursorRendered() = with(rule.density) {
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/MeasuredPage.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/MeasuredPage.kt
index 6586433..6339232 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/MeasuredPage.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/MeasuredPage.kt
@@ -16,7 +16,6 @@
 
 package androidx.compose.foundation.pager
 
-import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.layout.Placeable
@@ -25,13 +24,12 @@
 import androidx.compose.ui.util.fastForEach
 import androidx.compose.ui.util.fastForEachIndexed
 
-@OptIn(ExperimentalFoundationApi::class)
 internal class MeasuredPage(
     override val index: Int,
     val size: Int,
     private val placeables: List<Placeable>,
     private val visualOffset: IntOffset,
-    val key: Any,
+    override val key: Any,
     orientation: Orientation,
     private val horizontalAlignment: Alignment.Horizontal?,
     private val verticalAlignment: Alignment.Vertical?,
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PageInfo.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PageInfo.kt
index 0e2f4b1..83a95be 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PageInfo.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PageInfo.kt
@@ -16,12 +16,9 @@
 
 package androidx.compose.foundation.pager
 
-import androidx.compose.foundation.ExperimentalFoundationApi
-
 /**
  * This represents a single measured page in a [Pager] layout.
  */
-@ExperimentalFoundationApi
 sealed interface PageInfo {
 
     /**
@@ -30,6 +27,11 @@
     val index: Int
 
     /**
+     * The key of the page which was passed to the [HorizontalPager] or [VerticalPager] composables.
+     */
+    val key: Any
+
+    /**
      * The main axis offset of the item in pixels. It is relative to the start of the [Pager]
      * container.
      */
diff --git a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerScope.kt b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerScope.kt
index 9790ff5..3470def 100644
--- a/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerScope.kt
+++ b/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/pager/PagerScope.kt
@@ -16,13 +16,10 @@
 
 package androidx.compose.foundation.pager
 
-import androidx.compose.foundation.ExperimentalFoundationApi
-
 /**
  * Receiver scope for [Pager].
+ * Note: This is empty now, but we may add new members in the future if needed.
  */
-@ExperimentalFoundationApi
 sealed interface PagerScope
 
-@OptIn(ExperimentalFoundationApi::class)
 internal object PagerScopeImpl : PagerScope
diff --git a/compose/integration-tests/demos/build.gradle b/compose/integration-tests/demos/build.gradle
index 6a64000..1bfb611 100644
--- a/compose/integration-tests/demos/build.gradle
+++ b/compose/integration-tests/demos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("AndroidXComposePlugin")
diff --git a/compose/integration-tests/docs-snippets/build.gradle b/compose/integration-tests/docs-snippets/build.gradle
index 20bc90f..f57bfff 100644
--- a/compose/integration-tests/docs-snippets/build.gradle
+++ b/compose/integration-tests/docs-snippets/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/integration-tests/hero/benchmark/build.gradle b/compose/integration-tests/hero/benchmark/build.gradle
index a3853ba..86e2872 100644
--- a/compose/integration-tests/hero/benchmark/build.gradle
+++ b/compose/integration-tests/hero/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/integration-tests/macrobenchmark-target/build.gradle b/compose/integration-tests/macrobenchmark-target/build.gradle
index f521117..f3bc589 100644
--- a/compose/integration-tests/macrobenchmark-target/build.gradle
+++ b/compose/integration-tests/macrobenchmark-target/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("AndroidXComposePlugin")
diff --git a/compose/integration-tests/material-catalog/build.gradle b/compose/integration-tests/material-catalog/build.gradle
index c7bf51b..06103e5 100644
--- a/compose/integration-tests/material-catalog/build.gradle
+++ b/compose/integration-tests/material-catalog/build.gradle
@@ -14,6 +14,13 @@
  * 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.ApkCopyHelperKt
 import androidx.build.Publish
 
diff --git a/compose/lint/common-test/build.gradle b/compose/lint/common-test/build.gradle
index 2c9bdb3..baf4218 100644
--- a/compose/lint/common-test/build.gradle
+++ b/compose/lint/common-test/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/lint/common/build.gradle b/compose/lint/common/build.gradle
index 446ff4c..844c29b 100644
--- a/compose/lint/common/build.gradle
+++ b/compose/lint/common/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/lint/internal-lint-checks/build.gradle b/compose/lint/internal-lint-checks/build.gradle
index f2132be..d1078c6 100644
--- a/compose/lint/internal-lint-checks/build.gradle
+++ b/compose/lint/internal-lint-checks/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material/material-icons-core/build.gradle b/compose/material/material-icons-core/build.gradle
index cf81e9d..900421c 100644
--- a/compose/material/material-icons-core/build.gradle
+++ b/compose/material/material-icons-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 import androidx.compose.material.icons.generator.tasks.IconGenerationTask
diff --git a/compose/material/material-icons-core/samples/build.gradle b/compose/material/material-icons-core/samples/build.gradle
index 0977215..2d7f7f1 100644
--- a/compose/material/material-icons-core/samples/build.gradle
+++ b/compose/material/material-icons-core/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material/material-icons-extended/build.gradle b/compose/material/material-icons-extended/build.gradle
index d3101fe..f2e7c39 100644
--- a/compose/material/material-icons-extended/build.gradle
+++ b/compose/material/material-icons-extended/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 import androidx.build.RunApiTasks
diff --git a/compose/material/material-lint/build.gradle b/compose/material/material-lint/build.gradle
index df5b0368..4c8e995 100644
--- a/compose/material/material-lint/build.gradle
+++ b/compose/material/material-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/material/material-ripple/benchmark/build.gradle b/compose/material/material-ripple/benchmark/build.gradle
index 9d66e6f..6cc659b 100644
--- a/compose/material/material-ripple/benchmark/build.gradle
+++ b/compose/material/material-ripple/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material/material-ripple/build.gradle b/compose/material/material-ripple/build.gradle
index da5ee4a..e40a2e1 100644
--- a/compose/material/material-ripple/build.gradle
+++ b/compose/material/material-ripple/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/material/material/benchmark/build.gradle b/compose/material/material/benchmark/build.gradle
index 1e36d67..8b39308 100644
--- a/compose/material/material/benchmark/build.gradle
+++ b/compose/material/material/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material/material/build.gradle b/compose/material/material/build.gradle
index 055564d..3ea9012 100644
--- a/compose/material/material/build.gradle
+++ b/compose/material/material/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/material/material/icons/generator/build.gradle b/compose/material/material/icons/generator/build.gradle
index 79a1c28..c7aa06a 100644
--- a/compose/material/material/icons/generator/build.gradle
+++ b/compose/material/material/icons/generator/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/compose/material/material/integration-tests/material-catalog/build.gradle b/compose/material/material/integration-tests/material-catalog/build.gradle
index 49c18e2..26c868d 100644
--- a/compose/material/material/integration-tests/material-catalog/build.gradle
+++ b/compose/material/material/integration-tests/material-catalog/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/compose/material/material/integration-tests/material-demos/build.gradle b/compose/material/material/integration-tests/material-demos/build.gradle
index af6d579..da885ff 100644
--- a/compose/material/material/integration-tests/material-demos/build.gradle
+++ b/compose/material/material/integration-tests/material-demos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/compose/material/material/samples/build.gradle b/compose/material/material/samples/build.gradle
index 79ed5c6..649d091 100644
--- a/compose/material/material/samples/build.gradle
+++ b/compose/material/material/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material3/material3-adaptive-navigation-suite/build.gradle b/compose/material3/material3-adaptive-navigation-suite/build.gradle
index 67b8c3b..785cab4 100644
--- a/compose/material3/material3-adaptive-navigation-suite/build.gradle
+++ b/compose/material3/material3-adaptive-navigation-suite/build.gradle
@@ -14,6 +14,13 @@
  * 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.AndroidXComposePlugin
 import androidx.build.KmpPlatformsKt
 import androidx.build.LibraryType
diff --git a/compose/material3/material3-adaptive-navigation-suite/samples/build.gradle b/compose/material3/material3-adaptive-navigation-suite/samples/build.gradle
index f31873f..b0a3ae7 100644
--- a/compose/material3/material3-adaptive-navigation-suite/samples/build.gradle
+++ b/compose/material3/material3-adaptive-navigation-suite/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material3/material3-adaptive/build.gradle b/compose/material3/material3-adaptive/build.gradle
index 476b13f..dd5ed5d 100644
--- a/compose/material3/material3-adaptive/build.gradle
+++ b/compose/material3/material3-adaptive/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
diff --git a/compose/material3/material3-adaptive/samples/build.gradle b/compose/material3/material3-adaptive/samples/build.gradle
index 0084085..0be99cd 100644
--- a/compose/material3/material3-adaptive/samples/build.gradle
+++ b/compose/material3/material3-adaptive/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
index e7833fe..f142449 100644
--- a/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
+++ b/compose/material3/material3-adaptive/src/androidInstrumentedTest/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffoldTest.kt
@@ -25,6 +25,9 @@
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Surface
 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.platform.testTag
 import androidx.compose.ui.test.junit4.createComposeRule
@@ -106,6 +109,66 @@
         rule.onNodeWithTag("SecondaryPane").assertExists()
         rule.onNodeWithTag("TertiaryPane").assertExists()
     }
+
+    @Test
+    fun threePaneScaffold_scaffoldValueChangeWithSinglePane_expandedPanesAreChanged() {
+        var testScaffoldValue by mutableStateOf(
+            ThreePaneScaffoldValue(
+                PaneAdaptedValue.Expanded,
+                PaneAdaptedValue.Hidden,
+                PaneAdaptedValue.Hidden
+            )
+        )
+        rule.setContent {
+            SampleThreePaneScaffold(scaffoldValue = testScaffoldValue)
+        }
+
+        rule.onNodeWithTag("PrimaryPane").assertExists()
+        rule.onNodeWithTag("SecondaryPane").assertDoesNotExist()
+        rule.onNodeWithTag("TertiaryPane").assertDoesNotExist()
+
+        testScaffoldValue = ThreePaneScaffoldValue(
+            PaneAdaptedValue.Hidden,
+            PaneAdaptedValue.Expanded,
+            PaneAdaptedValue.Hidden
+        )
+
+        rule.waitForIdle()
+
+        rule.onNodeWithTag("PrimaryPane").assertDoesNotExist()
+        rule.onNodeWithTag("SecondaryPane").assertExists()
+        rule.onNodeWithTag("TertiaryPane").assertDoesNotExist()
+    }
+
+    @Test
+    fun threePaneScaffold_scaffoldValueChangeWithDualPane_expandedPanesAreChanged() {
+        var testScaffoldValue by mutableStateOf(
+            ThreePaneScaffoldValue(
+                PaneAdaptedValue.Expanded,
+                PaneAdaptedValue.Hidden,
+                PaneAdaptedValue.Expanded
+            )
+        )
+        rule.setContent {
+            SampleThreePaneScaffold(scaffoldValue = testScaffoldValue)
+        }
+
+        rule.onNodeWithTag("PrimaryPane").assertExists()
+        rule.onNodeWithTag("SecondaryPane").assertDoesNotExist()
+        rule.onNodeWithTag("TertiaryPane").assertExists()
+
+        testScaffoldValue = ThreePaneScaffoldValue(
+            PaneAdaptedValue.Expanded,
+            PaneAdaptedValue.Expanded,
+            PaneAdaptedValue.Hidden
+        )
+
+        rule.waitForIdle()
+
+        rule.onNodeWithTag("PrimaryPane").assertExists()
+        rule.onNodeWithTag("SecondaryPane").assertExists()
+        rule.onNodeWithTag("TertiaryPane").assertDoesNotExist()
+    }
 }
 
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
diff --git a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
index 4c927dd..61ad91e 100644
--- a/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
+++ b/compose/material3/material3-adaptive/src/androidMain/kotlin/androidx/compose/material3/adaptive/AndroidPosture.android.kt
@@ -17,7 +17,6 @@
 package androidx.compose.material3.adaptive
 
 import androidx.compose.ui.graphics.toComposeRect
-import androidx.compose.ui.util.fastForEach
 import androidx.window.layout.FoldingFeature
 
 /**
@@ -28,7 +27,8 @@
 fun calculatePosture(foldingFeatures: List<FoldingFeature>): Posture {
     var isTableTop = false
     val hingeList = mutableListOf<HingeInfo>()
-    foldingFeatures.fastForEach {
+    @Suppress("ListIterator")
+    foldingFeatures.forEach {
         if (it.orientation == FoldingFeature.Orientation.HORIZONTAL &&
             it.state == FoldingFeature.State.HALF_OPENED) {
             isTableTop = true
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/Posture.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/Posture.kt
index 71d734c..6455c51 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/Posture.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/Posture.kt
@@ -18,8 +18,6 @@
 
 import androidx.compose.runtime.Immutable
 import androidx.compose.ui.geometry.Rect
-import androidx.compose.ui.util.fastJoinToString
-import androidx.compose.ui.util.fastMapNotNull
 
 /**
  * Posture info that can help make layout adaptation decisions. For example when
@@ -59,8 +57,9 @@
     }
 
     override fun toString(): String {
+        @Suppress("ListIterator")
         return "Posture(isTabletop=$isTabletop, " +
-            "hinges=[${hingeList.fastJoinToString(", ")}])"
+            "hinges=[${hingeList.joinToString(", ")}])"
     }
 }
 
@@ -149,4 +148,5 @@
 
 @ExperimentalMaterial3AdaptiveApi
 private inline fun List<HingeInfo>.getBounds(predicate: HingeInfo.() -> Boolean): List<Rect> =
-    fastMapNotNull { if (it.predicate()) it.bounds else null }
+    @Suppress("ListIterator")
+    mapNotNull { if (it.predicate()) it.bounds else null }
diff --git a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
index f9df15c..ba79ab9a8 100644
--- a/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
+++ b/compose/material3/material3-adaptive/src/commonMain/kotlin/androidx/compose/material3/adaptive/ThreePaneScaffold.kt
@@ -421,7 +421,8 @@
                 val actualTop = layoutBounds.top + topContentPadding
                 val actualBottom = layoutBounds.bottom - bottomContentPadding
                 // Assume hinge bounds are sorted from left to right, non-overlapped.
-                scaffoldDirective.excludedBounds.fastForEach { hingeBound ->
+                @Suppress("ListIterator")
+                scaffoldDirective.excludedBounds.forEach { hingeBound ->
                     if (hingeBound.left <= actualLeft) {
                         // The hinge is at the left of the layout, adjust the left edge of
                         // the current partition to the actual displayable bounds.
@@ -431,7 +432,7 @@
                         // room for more partitions, adjust the right edge of the current
                         // partition to the actual displayable bounds.
                         actualRight = min(hingeBound.left, actualRight)
-                        return@fastForEach
+                        return@forEach
                     } else {
                         // The hinge is inside the layout, add the current partition to the list
                         // and move the left edge of the next partition to the right of the
@@ -789,11 +790,11 @@
 
 @OptIn(ExperimentalMaterial3AdaptiveApi::class)
 private class ThreePaneScaffoldScopeImpl : ThreePaneScaffoldScope, PaneScaffoldScopeImpl() {
-    override var paneAdaptedValue: PaneAdaptedValue = PaneAdaptedValue.Hidden
-    override var positionAnimationSpec: FiniteAnimationSpec<IntOffset>? = null
-    override var enterTransition: EnterTransition = EnterTransition.None
-    override var exitTransition: ExitTransition = ExitTransition.None
-    override var animationToolingLabel: String = ""
+    override var paneAdaptedValue by mutableStateOf(PaneAdaptedValue.Hidden)
+    override var positionAnimationSpec: FiniteAnimationSpec<IntOffset>? by mutableStateOf(null)
+    override var enterTransition by mutableStateOf(EnterTransition.None)
+    override var exitTransition by mutableStateOf(ExitTransition.None)
+    override var animationToolingLabel by mutableStateOf("")
 }
 
 /**
diff --git a/compose/material3/material3-common/build.gradle b/compose/material3/material3-common/build.gradle
index 38e31c6..09fa42b 100644
--- a/compose/material3/material3-common/build.gradle
+++ b/compose/material3/material3-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
diff --git a/compose/material3/material3-lint/build.gradle b/compose/material3/material3-lint/build.gradle
index 112aa3e..233c1ae 100644
--- a/compose/material3/material3-lint/build.gradle
+++ b/compose/material3/material3-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/material3/material3-window-size-class/build.gradle b/compose/material3/material3-window-size-class/build.gradle
index 2acef038..c2cc14e 100644
--- a/compose/material3/material3-window-size-class/build.gradle
+++ b/compose/material3/material3-window-size-class/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/material3/material3-window-size-class/samples/build.gradle b/compose/material3/material3-window-size-class/samples/build.gradle
index 71ffc63d1..9315c48 100644
--- a/compose/material3/material3-window-size-class/samples/build.gradle
+++ b/compose/material3/material3-window-size-class/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/material3/material3/build.gradle b/compose/material3/material3/build.gradle
index d84585d..f59007c 100644
--- a/compose/material3/material3/build.gradle
+++ b/compose/material3/material3/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/material3/material3/integration-tests/material3-catalog/build.gradle b/compose/material3/material3/integration-tests/material3-catalog/build.gradle
index 4d02722..c3d256e1 100644
--- a/compose/material3/material3/integration-tests/material3-catalog/build.gradle
+++ b/compose/material3/material3/integration-tests/material3-catalog/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/material3/material3/integration-tests/material3-demos/build.gradle b/compose/material3/material3/integration-tests/material3-demos/build.gradle
index 76ba389..cca0272 100644
--- a/compose/material3/material3/integration-tests/material3-demos/build.gradle
+++ b/compose/material3/material3/integration-tests/material3-demos/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/compose/material3/material3/samples/build.gradle b/compose/material3/material3/samples/build.gradle
index a8a3a83..17f67aa 100644
--- a/compose/material3/material3/samples/build.gradle
+++ b/compose/material3/material3/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/runtime/runtime-lint/build.gradle b/compose/runtime/runtime-lint/build.gradle
index ac9b31a..f01441a 100644
--- a/compose/runtime/runtime-lint/build.gradle
+++ b/compose/runtime/runtime-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/runtime/runtime-livedata/build.gradle b/compose/runtime/runtime-livedata/build.gradle
index d5183d9..58fc8ee 100644
--- a/compose/runtime/runtime-livedata/build.gradle
+++ b/compose/runtime/runtime-livedata/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/runtime/runtime-livedata/samples/build.gradle b/compose/runtime/runtime-livedata/samples/build.gradle
index b5aa353..4f5ab4b 100644
--- a/compose/runtime/runtime-livedata/samples/build.gradle
+++ b/compose/runtime/runtime-livedata/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/runtime/runtime-rxjava2/build.gradle b/compose/runtime/runtime-rxjava2/build.gradle
index 035c1f5..b0df134e 100644
--- a/compose/runtime/runtime-rxjava2/build.gradle
+++ b/compose/runtime/runtime-rxjava2/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/runtime/runtime-rxjava2/samples/build.gradle b/compose/runtime/runtime-rxjava2/samples/build.gradle
index 9b4bc69..af352ad 100644
--- a/compose/runtime/runtime-rxjava2/samples/build.gradle
+++ b/compose/runtime/runtime-rxjava2/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/runtime/runtime-rxjava3/build.gradle b/compose/runtime/runtime-rxjava3/build.gradle
index 3336eea..73a9189 100644
--- a/compose/runtime/runtime-rxjava3/build.gradle
+++ b/compose/runtime/runtime-rxjava3/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/runtime/runtime-rxjava3/samples/build.gradle b/compose/runtime/runtime-rxjava3/samples/build.gradle
index 79e1c1c..b0e37bc 100644
--- a/compose/runtime/runtime-rxjava3/samples/build.gradle
+++ b/compose/runtime/runtime-rxjava3/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/runtime/runtime-saveable-lint/build.gradle b/compose/runtime/runtime-saveable-lint/build.gradle
index 6bdc70a..5e09a4c 100644
--- a/compose/runtime/runtime-saveable-lint/build.gradle
+++ b/compose/runtime/runtime-saveable-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/runtime/runtime-saveable/build.gradle b/compose/runtime/runtime-saveable/build.gradle
index 8f828c1..155e1d1 100644
--- a/compose/runtime/runtime-saveable/build.gradle
+++ b/compose/runtime/runtime-saveable/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/runtime/runtime-saveable/samples/build.gradle b/compose/runtime/runtime-saveable/samples/build.gradle
index a790a9e..d994399 100644
--- a/compose/runtime/runtime-saveable/samples/build.gradle
+++ b/compose/runtime/runtime-saveable/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/runtime/runtime-tracing/build.gradle b/compose/runtime/runtime-tracing/build.gradle
index 00b177b..4f60cda 100644
--- a/compose/runtime/runtime-tracing/build.gradle
+++ b/compose/runtime/runtime-tracing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/compose/runtime/runtime/build.gradle b/compose/runtime/runtime/build.gradle
index 1278413..bd9fafc 100644
--- a/compose/runtime/runtime/build.gradle
+++ b/compose/runtime/runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/runtime/runtime/integration-tests/build.gradle b/compose/runtime/runtime/integration-tests/build.gradle
index 161b672..7d76885 100644
--- a/compose/runtime/runtime/integration-tests/build.gradle
+++ b/compose/runtime/runtime/integration-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
diff --git a/compose/runtime/runtime/samples/build.gradle b/compose/runtime/runtime/samples/build.gradle
index 2e8ada7..1fab6a6 100644
--- a/compose/runtime/runtime/samples/build.gradle
+++ b/compose/runtime/runtime/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
index efbebc3..f8ca05a 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/CompositionTests.kt
@@ -4073,6 +4073,28 @@
         }
     }
 
+    private val LocalNumber = compositionLocalOf { 0 }
+    @Composable fun Test(number: Int = LocalNumber.current) {
+        val remembered = remember(number) { number + 1 }
+        assertEquals(remembered, number + 1)
+    }
+
+    @Test
+    fun remember_defaultParamInRestartableFunction() = compositionTest {
+        var state by mutableIntStateOf(0)
+        compose {
+            CompositionLocalProvider(LocalNumber provides state) {
+                Test()
+            }
+        }
+
+        validate {}
+
+        state++
+        advance()
+        revalidate()
+    }
+
     private inline fun CoroutineScope.withGlobalSnapshotManager(block: CoroutineScope.() -> Unit) {
         val channel = Channel<Unit>(Channel.CONFLATED)
         val job = launch {
diff --git a/compose/test-utils/build.gradle b/compose/test-utils/build.gradle
index 230c55d..5b85a53 100644
--- a/compose/test-utils/build.gradle
+++ b/compose/test-utils/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/compose/ui/ui-android-stubs/build.gradle b/compose/ui/ui-android-stubs/build.gradle
index e84b550..b40a943 100644
--- a/compose/ui/ui-android-stubs/build.gradle
+++ b/compose/ui/ui-android-stubs/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui-geometry/build.gradle b/compose/ui/ui-geometry/build.gradle
index 6c06a85..1d9fa6a 100644
--- a/compose/ui/ui-geometry/build.gradle
+++ b/compose/ui/ui-geometry/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-graphics-lint/build.gradle b/compose/ui/ui-graphics-lint/build.gradle
index 836b521..8583313 100644
--- a/compose/ui/ui-graphics-lint/build.gradle
+++ b/compose/ui/ui-graphics-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/ui/ui-graphics/build.gradle b/compose/ui/ui-graphics/build.gradle
index 784adda..ee6bf60 100644
--- a/compose/ui/ui-graphics/build.gradle
+++ b/compose/ui/ui-graphics/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-graphics/samples/build.gradle b/compose/ui/ui-graphics/samples/build.gradle
index 15643a9..2540cfd 100644
--- a/compose/ui/ui-graphics/samples/build.gradle
+++ b/compose/ui/ui-graphics/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui-inspection/build.gradle b/compose/ui/ui-inspection/build.gradle
index 6c8a650..e409f2db 100644
--- a/compose/ui/ui-inspection/build.gradle
+++ b/compose/ui/ui-inspection/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/ui/ui-lint/build.gradle b/compose/ui/ui-lint/build.gradle
index 01be668..debfd8e 100644
--- a/compose/ui/ui-lint/build.gradle
+++ b/compose/ui/ui-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/compose/ui/ui-test-junit4/build.gradle b/compose/ui/ui-test-junit4/build.gradle
index f185596..c41faf1 100644
--- a/compose/ui/ui-test-junit4/build.gradle
+++ b/compose/ui/ui-test-junit4/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-test-manifest-lint/build.gradle b/compose/ui/ui-test-manifest-lint/build.gradle
index 2a3ed70..65fbd6b5 100644
--- a/compose/ui/ui-test-manifest-lint/build.gradle
+++ b/compose/ui/ui-test-manifest-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui-test-manifest/build.gradle b/compose/ui/ui-test-manifest/build.gradle
index 4dec60a..edec4a5 100644
--- a/compose/ui/ui-test-manifest/build.gradle
+++ b/compose/ui/ui-test-manifest/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/ui/ui-test/build.gradle b/compose/ui/ui-test/build.gradle
index 3e0c6df..373f9e7 100644
--- a/compose/ui/ui-test/build.gradle
+++ b/compose/ui/ui-test/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-test/samples/build.gradle b/compose/ui/ui-test/samples/build.gradle
index 0845c78..eda15f1 100644
--- a/compose/ui/ui-test/samples/build.gradle
+++ b/compose/ui/ui-test/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui-test/src/androidInstrumentedTest/kotlin/androidx/compose/ui/test/BitmapCapturingTest.kt b/compose/ui/ui-test/src/androidInstrumentedTest/kotlin/androidx/compose/ui/test/BitmapCapturingTest.kt
index df7537a..0b5c06c 100644
--- a/compose/ui/ui-test/src/androidInstrumentedTest/kotlin/androidx/compose/ui/test/BitmapCapturingTest.kt
+++ b/compose/ui/ui-test/src/androidInstrumentedTest/kotlin/androidx/compose/ui/test/BitmapCapturingTest.kt
@@ -17,7 +17,6 @@
 package androidx.compose.ui.test
 
 import android.os.Build
-import android.view.View
 import androidx.activity.ComponentActivity
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Box
@@ -33,7 +32,6 @@
 import androidx.compose.testutils.assertPixels
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.ViewRootForTest
 import androidx.compose.ui.platform.testTag
 import androidx.compose.ui.test.junit4.createAndroidComposeRule
 import androidx.compose.ui.unit.Density
@@ -295,17 +293,4 @@
             else -> rule.setContent(content)
         }
     }
-
-    private fun fetchNodeRootView(nodeTag: String): View {
-        return fetchNodeInteraction(nodeTag).fetchRootView()
-    }
-
-    private fun fetchNodeInteraction(nodeTag: String): SemanticsNodeInteraction {
-        return rule.onNodeWithTag(nodeTag)
-    }
-}
-
-private fun SemanticsNodeInteraction.fetchRootView(): View {
-    val node = fetchSemanticsNode()
-    return (node.root as ViewRootForTest).view
 }
diff --git a/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/android/WindowCapture.android.kt b/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/android/WindowCapture.android.kt
index 3de4273..524d18f 100644
--- a/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/android/WindowCapture.android.kt
+++ b/compose/ui/ui-test/src/androidMain/kotlin/androidx/compose/ui/test/android/WindowCapture.android.kt
@@ -27,6 +27,7 @@
 import android.view.Window
 import androidx.annotation.DoNotInline
 import androidx.annotation.RequiresApi
+import androidx.annotation.VisibleForTesting
 import androidx.compose.ui.graphics.ImageBitmap
 import androidx.compose.ui.graphics.asImageBitmap
 import androidx.compose.ui.test.ComposeTimeoutException
@@ -42,12 +43,42 @@
     testContext: TestContext,
     boundsInWindow: Rect,
 ): ImageBitmap {
-    // Turn on hardware rendering, if necessary
-    return withDrawingEnabled {
-        // First force drawing to happen
-        decorView.forceRedraw(testContext)
-        // Then we generate the bitmap
-        generateBitmap(boundsInWindow).asImageBitmap()
+    lateinit var imageBitmap: ImageBitmap
+    runWithRetryWhenNoData {
+        // Turn on hardware rendering, if necessary
+        imageBitmap = withDrawingEnabled {
+            // First force drawing to happen
+            decorView.forceRedraw(testContext)
+            // Then we generate the bitmap
+            generateBitmap(boundsInWindow).asImageBitmap()
+        }
+    }
+    return imageBitmap
+}
+
+@VisibleForTesting
+internal fun runWithRetryWhenNoData(retryBlock: () -> Unit) {
+    var retryAttempts = 0
+    var shouldRetry = true
+    while (shouldRetry) {
+        try {
+            shouldRetry = false
+            retryBlock()
+        } catch (e: PixelCopyException) {
+            // retry up to 3 times only if the resulting error is "source no data"
+            if (e.copyResultStatus == PixelCopy.ERROR_SOURCE_NO_DATA && retryAttempts >= 2) {
+                throw PixelCopyException(
+                    e.copyResultStatus,
+                    "PixelCopy failed with result ERROR_SOURCE_NO_DATA after 3 retry attempts!"
+                )
+            } else if (e.copyResultStatus == PixelCopy.ERROR_SOURCE_NO_DATA) {
+                shouldRetry = true
+            } else {
+                throw e
+            }
+        } finally {
+            retryAttempts++
+        }
     }
 }
 
@@ -125,10 +156,17 @@
         throw AssertionError("Failed waiting for PixelCopy!")
     }
     if (copyResult != PixelCopy.SUCCESS) {
-        throw AssertionError("PixelCopy failed with result $copyResult!")
+        throw PixelCopyException(copyResultStatus = copyResult)
     }
 }
 
+internal class PixelCopyException(
+    val copyResultStatus: Int,
+    message: String? = null
+) : RuntimeException(
+    message ?: "PixelCopy failed with result $copyResultStatus!"
+)
+
 // Unfortunately this is a copy paste from AndroidComposeTestRule. At this moment it is a bit
 // tricky to share this method. We can expose it on TestOwner in theory.
 private fun MainTestClock.waitUntil(timeoutMillis: Long, condition: () -> Boolean) {
diff --git a/compose/ui/ui-test/src/androidUnitTest/kotlin/androidx/compose/ui/test/util/BitmapCapturingRetryLogicTest.kt b/compose/ui/ui-test/src/androidUnitTest/kotlin/androidx/compose/ui/test/util/BitmapCapturingRetryLogicTest.kt
new file mode 100644
index 0000000..3a6a1b3
--- /dev/null
+++ b/compose/ui/ui-test/src/androidUnitTest/kotlin/androidx/compose/ui/test/util/BitmapCapturingRetryLogicTest.kt
@@ -0,0 +1,116 @@
+/*
+ * 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.ui.test.util
+
+import android.view.PixelCopy
+import androidx.compose.testutils.expectError
+import androidx.compose.ui.test.android.PixelCopyException
+import androidx.compose.ui.test.android.runWithRetryWhenNoData
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class BitmapCapturingRetryLogicTest {
+
+    @get:Rule
+    val rule = createComposeRule()
+
+    @Test
+    fun pixelCopyRequest_succeeded_noRetries() {
+        var attempt = 0
+
+        expectError<PixelCopyException>(false) {
+            runWithRetryWhenNoData {
+                try {
+                    // success
+                } finally {
+                    attempt++
+                }
+            }
+        }
+
+        assertThat(attempt).isEqualTo(1)
+    }
+
+    @Test
+    fun pixelCopyRequest_succeeded_afterRetry_whenNoData() {
+        var attempt = 0
+
+        expectError<PixelCopyException>(false) {
+            runWithRetryWhenNoData {
+                try {
+                    if (attempt == 0) {
+                        throw PixelCopyException(PixelCopy.ERROR_SOURCE_NO_DATA)
+                    } else {
+                        // success
+                    }
+                } finally {
+                    attempt++
+                }
+            }
+        }
+    }
+
+    @Test
+    fun pixelCopyRequest_retry_whenNoData() {
+        var attempt = 0
+
+        expectError<PixelCopyException> {
+            runWithRetryWhenNoData {
+                try {
+                    throw PixelCopyException(PixelCopy.ERROR_SOURCE_NO_DATA)
+                } finally {
+                    attempt++
+                }
+            }
+        }
+        assertThat(attempt).isEqualTo(3)
+    }
+
+    @Test
+    fun pixelCopyRequest_error_rethrow() {
+        expectError<PixelCopyException> {
+            runWithRetryWhenNoData {
+                throw PixelCopyException(PixelCopy.ERROR_UNKNOWN)
+            }
+        }
+    }
+
+    @Test
+    fun pixelCopyRequest_error_rethrow_afterRetry() {
+        var attempt = 0
+
+        expectError<PixelCopyException> {
+            runWithRetryWhenNoData {
+                try {
+                    if (attempt == 0) {
+                        throw PixelCopyException(PixelCopy.ERROR_SOURCE_NO_DATA)
+                    } else {
+                        throw PixelCopyException(PixelCopy.ERROR_UNKNOWN)
+                    }
+                } finally {
+                    attempt++
+                }
+            }
+        }
+        assertThat(attempt).isEqualTo(2)
+    }
+}
diff --git a/compose/ui/ui-text-google-fonts/build.gradle b/compose/ui/ui-text-google-fonts/build.gradle
index 5d2ee3a..ce24693 100644
--- a/compose/ui/ui-text-google-fonts/build.gradle
+++ b/compose/ui/ui-text-google-fonts/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/ui/ui-text/build.gradle b/compose/ui/ui-text/build.gradle
index 0472ed1..693ab90 100644
--- a/compose/ui/ui-text/build.gradle
+++ b/compose/ui/ui-text/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/compose/ui/ui-text/samples/build.gradle b/compose/ui/ui-text/samples/build.gradle
index a6d5aa4..ea2947f 100644
--- a/compose/ui/ui-text/samples/build.gradle
+++ b/compose/ui/ui-text/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/ActualParagraph.android.kt.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/ActualParagraph.android.kt
similarity index 100%
rename from compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/ActualParagraph.android.kt.kt
rename to compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/ActualParagraph.android.kt
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.android.kt
index cd2f0b4..f3f75a6 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.android.kt
@@ -18,6 +18,7 @@
 
 import android.graphics.Paint
 import android.graphics.Typeface
+import android.view.View
 import androidx.compose.runtime.State
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.EmojiSupportMatch
@@ -41,7 +42,6 @@
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.unit.Density
 import androidx.core.text.TextUtilsCompat
-import androidx.core.view.ViewCompat
 import java.util.Locale
 
 @OptIn(InternalPlatformTextApi::class, ExperimentalTextApi::class)
@@ -164,8 +164,8 @@
                 (it[0].platformLocale as AndroidLocale).javaLocale
             } ?: Locale.getDefault()
             when (TextUtilsCompat.getLayoutDirectionFromLocale(currentLocale)) {
-                ViewCompat.LAYOUT_DIRECTION_LTR -> LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
-                ViewCompat.LAYOUT_DIRECTION_RTL -> LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
+                View.LAYOUT_DIRECTION_LTR -> LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
+                View.LAYOUT_DIRECTION_RTL -> LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
                 else -> LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
             }
         }
diff --git a/compose/ui/ui-tooling-data/build.gradle b/compose/ui/ui-tooling-data/build.gradle
index 55b0d4e..1a6fcb7 100644
--- a/compose/ui/ui-tooling-data/build.gradle
+++ b/compose/ui/ui-tooling-data/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-tooling-preview/build.gradle b/compose/ui/ui-tooling-preview/build.gradle
index 3a4d298..0b81b0c 100644
--- a/compose/ui/ui-tooling-preview/build.gradle
+++ b/compose/ui/ui-tooling-preview/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-tooling/build.gradle b/compose/ui/ui-tooling/build.gradle
index ae7ffa9..682722e 100644
--- a/compose/ui/ui-tooling/build.gradle
+++ b/compose/ui/ui-tooling/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-unit/build.gradle b/compose/ui/ui-unit/build.gradle
index 11f119e..5d03e7c 100644
--- a/compose/ui/ui-unit/build.gradle
+++ b/compose/ui/ui-unit/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui-unit/samples/build.gradle b/compose/ui/ui-unit/samples/build.gradle
index 45bec6c..ae1cb6e 100644
--- a/compose/ui/ui-unit/samples/build.gradle
+++ b/compose/ui/ui-unit/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui-util/build.gradle b/compose/ui/ui-util/build.gradle
index 7992369..3d2125e 100644
--- a/compose/ui/ui-util/build.gradle
+++ b/compose/ui/ui-util/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/compose/ui/ui-viewbinding/build.gradle b/compose/ui/ui-viewbinding/build.gradle
index 84f9d82..1d07dab 100644
--- a/compose/ui/ui-viewbinding/build.gradle
+++ b/compose/ui/ui-viewbinding/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/compose/ui/ui-viewbinding/samples/build.gradle b/compose/ui/ui-viewbinding/samples/build.gradle
index 88219c6..c2e2d2c 100644
--- a/compose/ui/ui-viewbinding/samples/build.gradle
+++ b/compose/ui/ui-viewbinding/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui/benchmark/build.gradle b/compose/ui/ui/benchmark/build.gradle
index 0aa9498..8e0821a 100644
--- a/compose/ui/ui/benchmark/build.gradle
+++ b/compose/ui/ui/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui/build.gradle b/compose/ui/ui/build.gradle
index c051864..7480380e 100644
--- a/compose/ui/ui/build.gradle
+++ b/compose/ui/ui/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/compose/ui/ui/integration-tests/ui-demos/build.gradle b/compose/ui/ui/integration-tests/ui-demos/build.gradle
index f9ab406..cd57812 100644
--- a/compose/ui/ui/integration-tests/ui-demos/build.gradle
+++ b/compose/ui/ui/integration-tests/ui-demos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.library")
diff --git a/compose/ui/ui/samples/build.gradle b/compose/ui/ui/samples/build.gradle
index a6ce338..ffe2ad7 100644
--- a/compose/ui/ui/samples/build.gradle
+++ b/compose/ui/ui/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
index c23dd06..9ddbace 100644
--- a/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
+++ b/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest.kt
@@ -3621,7 +3621,7 @@
             assertThat(colAccessibilityNode.childCount).isEqualTo(2)
             assertThat(colSemanticsNode.replacedChildren.size).isEqualTo(2)
             assertThat(buttonHolder.importantForAccessibility)
-                .isEqualTo(ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES)
+                .isEqualTo(View.IMPORTANT_FOR_ACCESSIBILITY_YES)
             assertThat((buttonHolder.getChildAt(0) as Button).text)
                 .isEqualTo(buttonText)
         }
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 7a8a72d..d9a5105 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
@@ -912,10 +912,7 @@
         androidViewsHandler.layoutNodeToHolder[layoutNode] = view
         // Fetching AccessibilityNodeInfo from a View which is not set to
         // IMPORTANT_FOR_ACCESSIBILITY_YES will return null.
-        ViewCompat.setImportantForAccessibility(
-            view,
-            ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES
-        )
+        view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES)
         val thisView = this
         ViewCompat.setAccessibilityDelegate(
             view,
@@ -992,10 +989,7 @@
             androidViewsHandler.layoutNodeToHolder.remove(
                 androidViewsHandler.holderToLayoutNode.remove(view)
             )
-            ViewCompat.setImportantForAccessibility(
-                view,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO
-            )
+            view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO)
         }
     }
 
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
index 8d4840e..7225ea3 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat.android.kt
@@ -98,7 +98,6 @@
 import androidx.compose.ui.util.fastRoundToInt
 import androidx.core.util.keyIterator
 import androidx.core.view.AccessibilityDelegateCompat
-import androidx.core.view.ViewCompat
 import androidx.core.view.ViewCompat.ACCESSIBILITY_LIVE_REGION_ASSERTIVE
 import androidx.core.view.ViewCompat.ACCESSIBILITY_LIVE_REGION_POLITE
 import androidx.core.view.accessibility.AccessibilityEventCompat
@@ -495,7 +494,7 @@
         val semanticsNodeWithAdjustedBounds = currentSemanticsNodes[virtualViewId] ?: return null
         val semanticsNode: SemanticsNode = semanticsNodeWithAdjustedBounds.semanticsNode
         if (virtualViewId == AccessibilityNodeProviderCompat.HOST_VIEW_ID) {
-            info.setParent(ViewCompat.getParentForAccessibility(view) as? View)
+            info.setParent(view.getParentForAccessibility() as? View)
         } else {
             var parentId = checkNotNull(semanticsNode.parent?.id) {
                 "semanticsNode $virtualViewId has null parent"
@@ -1318,7 +1317,7 @@
                     // Unfortunately, talkback has a bug of using "checked", so we set state
                     // description here
                     if (role == Role.Switch && stateDescription == null) {
-                        stateDescription = view.context.resources.getString(R.string.on)
+                        stateDescription = view.context.resources.getString(R.string.state_on)
                     }
                 }
 
@@ -1326,7 +1325,7 @@
                     // Unfortunately, talkback has a bug of using "not checked", so we set state
                     // description here
                     if (role == Role.Switch && stateDescription == null) {
-                        stateDescription = view.context.resources.getString(R.string.off)
+                        stateDescription = view.context.resources.getString(R.string.state_off)
                     }
                 }
 
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.android.kt
index 936ecb7..b3ac11e 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.android.kt
@@ -267,19 +267,6 @@
     }
 
     private fun processInputCommands() {
-        // When focus changes to a non-Compose view, the system will take care of managing the
-        // keyboard (via ImeFocusController) so we don't need to do anything. This can happen
-        // when a Compose text field is focused, then the user taps on an EditText view.
-        // And any commands that come in while we're not focused should also just be ignored,
-        // since no unfocused view should be messing with the keyboard.
-        // TODO(b/215761849) When focus moves to a different ComposeView than this one, this
-        //  logic doesn't work and the keyboard is not hidden.
-        if (!view.isFocused) {
-            // All queued commands should be ignored.
-            textInputCommandQueue.clear()
-            return
-        }
-
         // Multiple commands may have been queued up in the channel while this function was
         // waiting to be resumed. We don't execute the commands as they come in because making a
         // bunch of calls to change the actual IME quickly can result in flickers. Instead, we
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt
index 8379852..5e60f37 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/window/AndroidPopup.android.kt
@@ -31,6 +31,9 @@
 import android.view.ViewGroup
 import android.view.ViewOutlineProvider
 import android.view.WindowManager
+import android.window.OnBackInvokedCallback
+import android.window.OnBackInvokedDispatcher
+import androidx.annotation.DoNotInline
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
 import androidx.compose.runtime.Composable
@@ -429,6 +432,8 @@
         }
     })
 
+    private var backCallback: Any? = null
+
     init {
         id = android.R.id.content
         setViewTreeLifecycleOwner(composeView.findViewTreeLifecycleOwner())
@@ -480,12 +485,14 @@
     override fun onAttachedToWindow() {
         super.onAttachedToWindow()
         snapshotStateObserver.start()
+        maybeRegisterBackCallback()
     }
 
     override fun onDetachedFromWindow() {
         super.onDetachedFromWindow()
         snapshotStateObserver.stop()
         snapshotStateObserver.clear()
+        maybeUnregisterBackCallback()
     }
 
     override fun internalOnMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
@@ -549,6 +556,23 @@
         return super.dispatchKeyEvent(event)
     }
 
+    private fun maybeRegisterBackCallback() {
+        if (!properties.dismissOnBackPress || Build.VERSION.SDK_INT < 33) {
+            return
+        }
+        if (backCallback == null) {
+            backCallback = Api33Impl.createBackCallback(onDismissRequest)
+        }
+        Api33Impl.maybeRegisterBackCallback(this, backCallback)
+    }
+
+    private fun maybeUnregisterBackCallback() {
+        if (Build.VERSION.SDK_INT >= 33) {
+            Api33Impl.maybeUnregisterBackCallback(this, backCallback)
+        }
+        backCallback = null
+    }
+
     /**
      * Set whether the popup can grab a focus and support dismissal.
      */
@@ -791,6 +815,33 @@
     }
 }
 
+@RequiresApi(33)
+private object Api33Impl {
+    @JvmStatic
+    @DoNotInline
+    fun createBackCallback(onDismissRequest: (() -> Unit)?) =
+        OnBackInvokedCallback { onDismissRequest?.invoke() }
+
+    @JvmStatic
+    @DoNotInline
+    fun maybeRegisterBackCallback(view: View, backCallback: Any?) {
+        if (backCallback is OnBackInvokedCallback) {
+            view.findOnBackInvokedDispatcher()?.registerOnBackInvokedCallback(
+                OnBackInvokedDispatcher.PRIORITY_OVERLAY,
+                backCallback
+            )
+        }
+    }
+
+    @JvmStatic
+    @DoNotInline
+    fun maybeUnregisterBackCallback(view: View, backCallback: Any?) {
+        if (backCallback is OnBackInvokedCallback) {
+            view.findOnBackInvokedDispatcher()?.unregisterOnBackInvokedCallback(backCallback)
+        }
+    }
+}
+
 /**
  * Collection of methods delegated to platform methods to support APIs only available on newer
  * platforms and testing.
diff --git a/compose/ui/ui/src/androidMain/res/values-af/strings.xml b/compose/ui/ui/src/androidMain/res/values-af/strings.xml
index 0f09788..eb4e3db 100644
--- a/compose/ui/ui/src/androidMain/res/values-af/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-af/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Gedeeltelik gemerk"</string>
-    <string name="on" msgid="8655164131929253426">"Aan"</string>
-    <string name="off" msgid="875452955155264703">"Af"</string>
+    <string name="state_on" msgid="8655164131929253426">"Aan"</string>
+    <string name="state_off" msgid="875452955155264703">"Af"</string>
     <string name="switch_role" msgid="2561197295334830845">"Skakel oor"</string>
     <string name="selected" msgid="6043586758067023">"Gekies"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nie gekies nie"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-am/strings.xml b/compose/ui/ui/src/androidMain/res/values-am/strings.xml
index 538380e..5bc9f5a 100644
--- a/compose/ui/ui/src/androidMain/res/values-am/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-am/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"በከፊል የተፈተሸ"</string>
-    <string name="on" msgid="8655164131929253426">"በርቷል"</string>
-    <string name="off" msgid="875452955155264703">"ጠፍቷል"</string>
+    <string name="state_on" msgid="8655164131929253426">"በርቷል"</string>
+    <string name="state_off" msgid="875452955155264703">"ጠፍቷል"</string>
     <string name="switch_role" msgid="2561197295334830845">"ማብሪያ/ማጥፊያ"</string>
     <string name="selected" msgid="6043586758067023">"ተመርጧል"</string>
     <string name="not_selected" msgid="6610465462668679431">"ያልተመረጡ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ar/strings.xml b/compose/ui/ui/src/androidMain/res/values-ar/strings.xml
index 0ae4b62..6534a73 100644
--- a/compose/ui/ui/src/androidMain/res/values-ar/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ar/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"تم وضع علامة في المربّع بشكل جزئي"</string>
-    <string name="on" msgid="8655164131929253426">"مفعّل"</string>
-    <string name="off" msgid="875452955155264703">"غير مفعّل"</string>
+    <string name="state_on" msgid="8655164131929253426">"مفعّل"</string>
+    <string name="state_off" msgid="875452955155264703">"غير مفعّل"</string>
     <string name="switch_role" msgid="2561197295334830845">"تبديل"</string>
     <string name="selected" msgid="6043586758067023">"محدّد"</string>
     <string name="not_selected" msgid="6610465462668679431">"غير محدّد"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-as/strings.xml b/compose/ui/ui/src/androidMain/res/values-as/strings.xml
index 50b42ca..2bfb082 100644
--- a/compose/ui/ui/src/androidMain/res/values-as/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-as/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"আংশিকভাৱে পৰীক্ষা কৰা হৈছে"</string>
-    <string name="on" msgid="8655164131929253426">"অন কৰা আছে"</string>
-    <string name="off" msgid="875452955155264703">"অফ আছে"</string>
+    <string name="state_on" msgid="8655164131929253426">"অন কৰা আছে"</string>
+    <string name="state_off" msgid="875452955155264703">"অফ আছে"</string>
     <string name="switch_role" msgid="2561197295334830845">"ছুইচ"</string>
     <string name="selected" msgid="6043586758067023">"বাছনি কৰা হৈছে"</string>
     <string name="not_selected" msgid="6610465462668679431">"বাছনি কৰা হোৱা নাই"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-az/strings.xml b/compose/ui/ui/src/androidMain/res/values-az/strings.xml
index 2aeb117..b40ae60 100644
--- a/compose/ui/ui/src/androidMain/res/values-az/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-az/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Qismən yoxlanıb"</string>
-    <string name="on" msgid="8655164131929253426">"Aktiv"</string>
-    <string name="off" msgid="875452955155264703">"Deaktiv"</string>
+    <string name="state_on" msgid="8655164131929253426">"Aktiv"</string>
+    <string name="state_off" msgid="875452955155264703">"Deaktiv"</string>
     <string name="switch_role" msgid="2561197295334830845">"Dəyişdirin"</string>
     <string name="selected" msgid="6043586758067023">"Seçilib"</string>
     <string name="not_selected" msgid="6610465462668679431">"Seçilməyib"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml b/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml
index 6b0adbe..9b1d96d 100644
--- a/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-b+sr+Latn/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Delimično označeno"</string>
-    <string name="on" msgid="8655164131929253426">"Uključeno"</string>
-    <string name="off" msgid="875452955155264703">"Isključeno"</string>
+    <string name="state_on" msgid="8655164131929253426">"Uključeno"</string>
+    <string name="state_off" msgid="875452955155264703">"Isključeno"</string>
     <string name="switch_role" msgid="2561197295334830845">"Prekidač"</string>
     <string name="selected" msgid="6043586758067023">"Izabrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nije izabrano"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-be/strings.xml b/compose/ui/ui/src/androidMain/res/values-be/strings.xml
index 8eb5433..f05bf33 100644
--- a/compose/ui/ui/src/androidMain/res/values-be/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-be/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Выбрана часткова"</string>
-    <string name="on" msgid="8655164131929253426">"Уключана"</string>
-    <string name="off" msgid="875452955155264703">"Выключана"</string>
+    <string name="state_on" msgid="8655164131929253426">"Уключана"</string>
+    <string name="state_off" msgid="875452955155264703">"Выключана"</string>
     <string name="switch_role" msgid="2561197295334830845">"Пераключальнік"</string>
     <string name="selected" msgid="6043586758067023">"Выбрана"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не выбрана"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-bg/strings.xml b/compose/ui/ui/src/androidMain/res/values-bg/strings.xml
index 049ec87..09dc095 100644
--- a/compose/ui/ui/src/androidMain/res/values-bg/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-bg/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Частично отметнато"</string>
-    <string name="on" msgid="8655164131929253426">"Вкл."</string>
-    <string name="off" msgid="875452955155264703">"Изкл."</string>
+    <string name="state_on" msgid="8655164131929253426">"Вкл."</string>
+    <string name="state_off" msgid="875452955155264703">"Изкл."</string>
     <string name="switch_role" msgid="2561197295334830845">"Превключване"</string>
     <string name="selected" msgid="6043586758067023">"Избрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не е избрано"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-bn/strings.xml b/compose/ui/ui/src/androidMain/res/values-bn/strings.xml
index 698a059..8d8786f 100644
--- a/compose/ui/ui/src/androidMain/res/values-bn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-bn/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"কয়েকটি বিকল্প বেছে নেওয়া হয়েছে"</string>
-    <string name="on" msgid="8655164131929253426">"চালু আছে"</string>
-    <string name="off" msgid="875452955155264703">"বন্ধ আছে"</string>
+    <string name="state_on" msgid="8655164131929253426">"চালু আছে"</string>
+    <string name="state_off" msgid="875452955155264703">"বন্ধ আছে"</string>
     <string name="switch_role" msgid="2561197295334830845">"সুইচ"</string>
     <string name="selected" msgid="6043586758067023">"বেছে নেওয়া হয়েছে"</string>
     <string name="not_selected" msgid="6610465462668679431">"বেছে নেওয়া হয়নি"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-bs/strings.xml b/compose/ui/ui/src/androidMain/res/values-bs/strings.xml
index 69bab68f..b37dcc9 100644
--- a/compose/ui/ui/src/androidMain/res/values-bs/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-bs/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Djelimično označeno"</string>
-    <string name="on" msgid="8655164131929253426">"Uključeno"</string>
-    <string name="off" msgid="875452955155264703">"Isključeno"</string>
+    <string name="state_on" msgid="8655164131929253426">"Uključeno"</string>
+    <string name="state_off" msgid="875452955155264703">"Isključeno"</string>
     <string name="switch_role" msgid="2561197295334830845">"Promijeni"</string>
     <string name="selected" msgid="6043586758067023">"Odabrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nije odabrano"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ca/strings.xml b/compose/ui/ui/src/androidMain/res/values-ca/strings.xml
index 93de37a..c238c2e 100644
--- a/compose/ui/ui/src/androidMain/res/values-ca/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ca/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Marcat parcialment"</string>
-    <string name="on" msgid="8655164131929253426">"Activat"</string>
-    <string name="off" msgid="875452955155264703">"Desactivat"</string>
+    <string name="state_on" msgid="8655164131929253426">"Activat"</string>
+    <string name="state_off" msgid="875452955155264703">"Desactivat"</string>
     <string name="switch_role" msgid="2561197295334830845">"Interruptor"</string>
     <string name="selected" msgid="6043586758067023">"Seleccionat"</string>
     <string name="not_selected" msgid="6610465462668679431">"No seleccionat"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-cs/strings.xml b/compose/ui/ui/src/androidMain/res/values-cs/strings.xml
index 80daf64..9fbcbf4 100644
--- a/compose/ui/ui/src/androidMain/res/values-cs/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-cs/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Částečně zaškrtnuto"</string>
-    <string name="on" msgid="8655164131929253426">"Zapnuto"</string>
-    <string name="off" msgid="875452955155264703">"Vypnuto"</string>
+    <string name="state_on" msgid="8655164131929253426">"Zapnuto"</string>
+    <string name="state_off" msgid="875452955155264703">"Vypnuto"</string>
     <string name="switch_role" msgid="2561197295334830845">"Přepnout"</string>
     <string name="selected" msgid="6043586758067023">"Vybráno"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nevybráno"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-da/strings.xml b/compose/ui/ui/src/androidMain/res/values-da/strings.xml
index 99eb486..a93c927 100644
--- a/compose/ui/ui/src/androidMain/res/values-da/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-da/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Delvist markeret"</string>
-    <string name="on" msgid="8655164131929253426">"Til"</string>
-    <string name="off" msgid="875452955155264703">"Fra"</string>
+    <string name="state_on" msgid="8655164131929253426">"Til"</string>
+    <string name="state_off" msgid="875452955155264703">"Fra"</string>
     <string name="switch_role" msgid="2561197295334830845">"Kontakt"</string>
     <string name="selected" msgid="6043586758067023">"Valgt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ikke valgt"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-de/strings.xml b/compose/ui/ui/src/androidMain/res/values-de/strings.xml
index 9eb5c3b..efdcf31 100644
--- a/compose/ui/ui/src/androidMain/res/values-de/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-de/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Teilweise aktiviert"</string>
-    <string name="on" msgid="8655164131929253426">"An"</string>
-    <string name="off" msgid="875452955155264703">"Aus"</string>
+    <string name="state_on" msgid="8655164131929253426">"An"</string>
+    <string name="state_off" msgid="875452955155264703">"Aus"</string>
     <string name="switch_role" msgid="2561197295334830845">"Wechseln"</string>
     <string name="selected" msgid="6043586758067023">"Ausgewählt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nicht ausgewählt"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-el/strings.xml b/compose/ui/ui/src/androidMain/res/values-el/strings.xml
index 1da628f..6c2c7d8 100644
--- a/compose/ui/ui/src/androidMain/res/values-el/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-el/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Έγινε μερικός έλεγχος"</string>
-    <string name="on" msgid="8655164131929253426">"Ενεργό"</string>
-    <string name="off" msgid="875452955155264703">"Ανενεργό"</string>
+    <string name="state_on" msgid="8655164131929253426">"Ενεργό"</string>
+    <string name="state_off" msgid="875452955155264703">"Ανενεργό"</string>
     <string name="switch_role" msgid="2561197295334830845">"Εναλλαγή"</string>
     <string name="selected" msgid="6043586758067023">"Επιλεγμένο"</string>
     <string name="not_selected" msgid="6610465462668679431">"Δεν έχει επιλεχθεί"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml
index dbf19c5..bb93cc7 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rAU/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Partially ticked"</string>
-    <string name="on" msgid="8655164131929253426">"On"</string>
-    <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="state_on" msgid="8655164131929253426">"On"</string>
+    <string name="state_off" msgid="875452955155264703">"Off"</string>
     <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml
index 9df0af4..e31eb6f 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rCA/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Partially checked"</string>
-    <string name="on" msgid="8655164131929253426">"On"</string>
-    <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="state_on" msgid="8655164131929253426">"On"</string>
+    <string name="state_off" msgid="875452955155264703">"Off"</string>
     <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml
index dbf19c5..bb93cc7 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rGB/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Partially ticked"</string>
-    <string name="on" msgid="8655164131929253426">"On"</string>
-    <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="state_on" msgid="8655164131929253426">"On"</string>
+    <string name="state_off" msgid="875452955155264703">"Off"</string>
     <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml
index dbf19c5..bb93cc7 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rIN/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Partially ticked"</string>
-    <string name="on" msgid="8655164131929253426">"On"</string>
-    <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="state_on" msgid="8655164131929253426">"On"</string>
+    <string name="state_off" msgid="875452955155264703">"Off"</string>
     <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"Selected"</string>
     <string name="not_selected" msgid="6610465462668679431">"Not selected"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml b/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml
index ddd1168..efec474 100644
--- a/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-en-rXC/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎Partially checked‎‏‎‎‏‎"</string>
-    <string name="on" msgid="8655164131929253426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎On‎‏‎‎‏‎"</string>
-    <string name="off" msgid="875452955155264703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎Off‎‏‎‎‏‎"</string>
+    <string name="state_on" msgid="8655164131929253426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‎On‎‏‎‎‏‎"</string>
+    <string name="state_off" msgid="875452955155264703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎Off‎‏‎‎‏‎"</string>
     <string name="switch_role" msgid="2561197295334830845">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‏‎Switch‎‏‎‎‏‎"</string>
     <string name="selected" msgid="6043586758067023">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‎Selected‎‏‎‎‏‎"</string>
     <string name="not_selected" msgid="6610465462668679431">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‏‎Not selected‎‏‎‎‏‎"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml b/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml
index 810018a..78571f1 100644
--- a/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-es-rUS/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Verificado parcialmente"</string>
-    <string name="on" msgid="8655164131929253426">"Sí"</string>
-    <string name="off" msgid="875452955155264703">"No"</string>
+    <string name="state_on" msgid="8655164131929253426">"Sí"</string>
+    <string name="state_off" msgid="875452955155264703">"No"</string>
     <string name="switch_role" msgid="2561197295334830845">"Cambiar"</string>
     <string name="selected" msgid="6043586758067023">"Seleccionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Sin seleccionar"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-es/strings.xml b/compose/ui/ui/src/androidMain/res/values-es/strings.xml
index f5ff864..10518f6 100644
--- a/compose/ui/ui/src/androidMain/res/values-es/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-es/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Marcado parcialmente"</string>
-    <string name="on" msgid="8655164131929253426">"Activado"</string>
-    <string name="off" msgid="875452955155264703">"Desactivado"</string>
+    <string name="state_on" msgid="8655164131929253426">"Activado"</string>
+    <string name="state_off" msgid="875452955155264703">"Desactivado"</string>
     <string name="switch_role" msgid="2561197295334830845">"Interruptor"</string>
     <string name="selected" msgid="6043586758067023">"Seleccionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"No seleccionado"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-et/strings.xml b/compose/ui/ui/src/androidMain/res/values-et/strings.xml
index 071f163..9e41ee7 100644
--- a/compose/ui/ui/src/androidMain/res/values-et/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-et/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Osaliselt märgitud"</string>
-    <string name="on" msgid="8655164131929253426">"Sees"</string>
-    <string name="off" msgid="875452955155264703">"Väljas"</string>
+    <string name="state_on" msgid="8655164131929253426">"Sees"</string>
+    <string name="state_off" msgid="875452955155264703">"Väljas"</string>
     <string name="switch_role" msgid="2561197295334830845">"Lüliti"</string>
     <string name="selected" msgid="6043586758067023">"Valitud"</string>
     <string name="not_selected" msgid="6610465462668679431">"Pole valitud"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-eu/strings.xml b/compose/ui/ui/src/androidMain/res/values-eu/strings.xml
index 4b2479a..675f56f 100644
--- a/compose/ui/ui/src/androidMain/res/values-eu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-eu/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Erdi-markatuta"</string>
-    <string name="on" msgid="8655164131929253426">"Aktibatuta"</string>
-    <string name="off" msgid="875452955155264703">"Desaktibatuta"</string>
+    <string name="state_on" msgid="8655164131929253426">"Aktibatuta"</string>
+    <string name="state_off" msgid="875452955155264703">"Desaktibatuta"</string>
     <string name="switch_role" msgid="2561197295334830845">"Aldatu"</string>
     <string name="selected" msgid="6043586758067023">"Hautatuta"</string>
     <string name="not_selected" msgid="6610465462668679431">"Hautatu gabe"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fa/strings.xml b/compose/ui/ui/src/androidMain/res/values-fa/strings.xml
index cef1316..cdadb5f 100644
--- a/compose/ui/ui/src/androidMain/res/values-fa/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fa/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"برخی موارد علامت‌گذاری شده است"</string>
-    <string name="on" msgid="8655164131929253426">"روشن"</string>
-    <string name="off" msgid="875452955155264703">"خاموش"</string>
+    <string name="state_on" msgid="8655164131929253426">"روشن"</string>
+    <string name="state_off" msgid="875452955155264703">"خاموش"</string>
     <string name="switch_role" msgid="2561197295334830845">"کلید"</string>
     <string name="selected" msgid="6043586758067023">"انتخاب شد"</string>
     <string name="not_selected" msgid="6610465462668679431">"انتخاب‌نشده"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fi/strings.xml b/compose/ui/ui/src/androidMain/res/values-fi/strings.xml
index d689e5e..91de0ce 100644
--- a/compose/ui/ui/src/androidMain/res/values-fi/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fi/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Osittain tarkistettu"</string>
-    <string name="on" msgid="8655164131929253426">"Päällä"</string>
-    <string name="off" msgid="875452955155264703">"Pois"</string>
+    <string name="state_on" msgid="8655164131929253426">"Päällä"</string>
+    <string name="state_off" msgid="875452955155264703">"Pois"</string>
     <string name="switch_role" msgid="2561197295334830845">"Vaihda"</string>
     <string name="selected" msgid="6043586758067023">"Valittu"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ei valittu"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml b/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml
index 8134827..fe5a9ee 100644
--- a/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fr-rCA/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Partiellement vérifié"</string>
-    <string name="on" msgid="8655164131929253426">"Activé"</string>
-    <string name="off" msgid="875452955155264703">"Désactivé"</string>
+    <string name="state_on" msgid="8655164131929253426">"Activé"</string>
+    <string name="state_off" msgid="875452955155264703">"Désactivé"</string>
     <string name="switch_role" msgid="2561197295334830845">"Basculer"</string>
     <string name="selected" msgid="6043586758067023">"Sélectionné"</string>
     <string name="not_selected" msgid="6610465462668679431">"Non sélectionné"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-fr/strings.xml b/compose/ui/ui/src/androidMain/res/values-fr/strings.xml
index c919d89..6a2bb6e 100644
--- a/compose/ui/ui/src/androidMain/res/values-fr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-fr/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Partiellement coché"</string>
-    <string name="on" msgid="8655164131929253426">"Activé"</string>
-    <string name="off" msgid="875452955155264703">"Désactivé"</string>
+    <string name="state_on" msgid="8655164131929253426">"Activé"</string>
+    <string name="state_off" msgid="875452955155264703">"Désactivé"</string>
     <string name="switch_role" msgid="2561197295334830845">"Changer"</string>
     <string name="selected" msgid="6043586758067023">"Sélectionné"</string>
     <string name="not_selected" msgid="6610465462668679431">"Non sélectionné"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-gl/strings.xml b/compose/ui/ui/src/androidMain/res/values-gl/strings.xml
index 5b62280..f0d5293 100644
--- a/compose/ui/ui/src/androidMain/res/values-gl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-gl/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Marcada parcialmente"</string>
-    <string name="on" msgid="8655164131929253426">"Activado"</string>
-    <string name="off" msgid="875452955155264703">"Desactivado"</string>
+    <string name="state_on" msgid="8655164131929253426">"Activado"</string>
+    <string name="state_off" msgid="875452955155264703">"Desactivado"</string>
     <string name="switch_role" msgid="2561197295334830845">"Interruptor"</string>
     <string name="selected" msgid="6043586758067023">"Seleccionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Non seleccionado"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-gu/strings.xml b/compose/ui/ui/src/androidMain/res/values-gu/strings.xml
index 0c42b5b..20b3cc5 100644
--- a/compose/ui/ui/src/androidMain/res/values-gu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-gu/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"આંશિક રીતે ચેક કરેલા વિકલ્પો"</string>
-    <string name="on" msgid="8655164131929253426">"ચાલુ છે"</string>
-    <string name="off" msgid="875452955155264703">"બંધ છે"</string>
+    <string name="state_on" msgid="8655164131929253426">"ચાલુ છે"</string>
+    <string name="state_off" msgid="875452955155264703">"બંધ છે"</string>
     <string name="switch_role" msgid="2561197295334830845">"સ્વિચ"</string>
     <string name="selected" msgid="6043586758067023">"પસંદગી કરી"</string>
     <string name="not_selected" msgid="6610465462668679431">"પસંદગી કરી નથી"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hi/strings.xml b/compose/ui/ui/src/androidMain/res/values-hi/strings.xml
index 8f80fdc..f9db678 100644
--- a/compose/ui/ui/src/androidMain/res/values-hi/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hi/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"कुछ विकल्पों को चुना गया"</string>
-    <string name="on" msgid="8655164131929253426">"चालू है"</string>
-    <string name="off" msgid="875452955155264703">"बंद है"</string>
+    <string name="state_on" msgid="8655164131929253426">"चालू है"</string>
+    <string name="state_off" msgid="875452955155264703">"बंद है"</string>
     <string name="switch_role" msgid="2561197295334830845">"स्विच करें"</string>
     <string name="selected" msgid="6043586758067023">"चुना गया"</string>
     <string name="not_selected" msgid="6610465462668679431">"नहीं चुना गया"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hr/strings.xml b/compose/ui/ui/src/androidMain/res/values-hr/strings.xml
index ad31ee7..adf23b2 100644
--- a/compose/ui/ui/src/androidMain/res/values-hr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hr/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Djelomično potvrđeno"</string>
-    <string name="on" msgid="8655164131929253426">"Uključeno"</string>
-    <string name="off" msgid="875452955155264703">"Isključeno"</string>
+    <string name="state_on" msgid="8655164131929253426">"Uključeno"</string>
+    <string name="state_off" msgid="875452955155264703">"Isključeno"</string>
     <string name="switch_role" msgid="2561197295334830845">"Prekidač"</string>
     <string name="selected" msgid="6043586758067023">"Odabrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nije odabrano"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hu/strings.xml b/compose/ui/ui/src/androidMain/res/values-hu/strings.xml
index 884b0f5..7f5cead 100644
--- a/compose/ui/ui/src/androidMain/res/values-hu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hu/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Részlegesen ellenőrizve"</string>
-    <string name="on" msgid="8655164131929253426">"Be"</string>
-    <string name="off" msgid="875452955155264703">"Ki"</string>
+    <string name="state_on" msgid="8655164131929253426">"Be"</string>
+    <string name="state_off" msgid="875452955155264703">"Ki"</string>
     <string name="switch_role" msgid="2561197295334830845">"Kapcsoló"</string>
     <string name="selected" msgid="6043586758067023">"Kijelölve"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nincs kijelölve"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-hy/strings.xml b/compose/ui/ui/src/androidMain/res/values-hy/strings.xml
index 0e21d53..71f5641 100644
--- a/compose/ui/ui/src/androidMain/res/values-hy/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-hy/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Մասնակի նշված"</string>
-    <string name="on" msgid="8655164131929253426">"Միացված է"</string>
-    <string name="off" msgid="875452955155264703">"Անջատված է"</string>
+    <string name="state_on" msgid="8655164131929253426">"Միացված է"</string>
+    <string name="state_off" msgid="875452955155264703">"Անջատված է"</string>
     <string name="switch_role" msgid="2561197295334830845">"Փոխանջատիչ"</string>
     <string name="selected" msgid="6043586758067023">"Ընտրված է"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ընտրված չէ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-in/strings.xml b/compose/ui/ui/src/androidMain/res/values-in/strings.xml
index 92abab8..1552525 100644
--- a/compose/ui/ui/src/androidMain/res/values-in/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-in/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Diperiksa sebagian"</string>
-    <string name="on" msgid="8655164131929253426">"Aktif"</string>
-    <string name="off" msgid="875452955155264703">"Nonaktif"</string>
+    <string name="state_on" msgid="8655164131929253426">"Aktif"</string>
+    <string name="state_off" msgid="875452955155264703">"Nonaktif"</string>
     <string name="switch_role" msgid="2561197295334830845">"Alihkan"</string>
     <string name="selected" msgid="6043586758067023">"Dipilih"</string>
     <string name="not_selected" msgid="6610465462668679431">"Tidak dipilih"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-is/strings.xml b/compose/ui/ui/src/androidMain/res/values-is/strings.xml
index 1bca170..1554557 100644
--- a/compose/ui/ui/src/androidMain/res/values-is/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-is/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Hakað við að hluta til"</string>
-    <string name="on" msgid="8655164131929253426">"Kveikt"</string>
-    <string name="off" msgid="875452955155264703">"Slökkt"</string>
+    <string name="state_on" msgid="8655164131929253426">"Kveikt"</string>
+    <string name="state_off" msgid="875452955155264703">"Slökkt"</string>
     <string name="switch_role" msgid="2561197295334830845">"Skipta"</string>
     <string name="selected" msgid="6043586758067023">"Valið"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ekki valið"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-it/strings.xml b/compose/ui/ui/src/androidMain/res/values-it/strings.xml
index 0b2a31a..a4c2800 100644
--- a/compose/ui/ui/src/androidMain/res/values-it/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-it/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Elemento parzialmente selezionato"</string>
-    <string name="on" msgid="8655164131929253426">"On"</string>
-    <string name="off" msgid="875452955155264703">"Off"</string>
+    <string name="state_on" msgid="8655164131929253426">"On"</string>
+    <string name="state_off" msgid="875452955155264703">"Off"</string>
     <string name="switch_role" msgid="2561197295334830845">"Opzione"</string>
     <string name="selected" msgid="6043586758067023">"Elemento selezionato"</string>
     <string name="not_selected" msgid="6610465462668679431">"Opzione non selezionata"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-iw/strings.xml b/compose/ui/ui/src/androidMain/res/values-iw/strings.xml
index 7a66039..9197c9e 100644
--- a/compose/ui/ui/src/androidMain/res/values-iw/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-iw/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"מסומנת חלקית"</string>
-    <string name="on" msgid="8655164131929253426">"פועל"</string>
-    <string name="off" msgid="875452955155264703">"כבוי"</string>
+    <string name="state_on" msgid="8655164131929253426">"פועל"</string>
+    <string name="state_off" msgid="875452955155264703">"כבוי"</string>
     <string name="switch_role" msgid="2561197295334830845">"מתג"</string>
     <string name="selected" msgid="6043586758067023">"נבחר"</string>
     <string name="not_selected" msgid="6610465462668679431">"לא נבחר"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ja/strings.xml b/compose/ui/ui/src/androidMain/res/values-ja/strings.xml
index 37317bb..fe948a3 100644
--- a/compose/ui/ui/src/androidMain/res/values-ja/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ja/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"一部 ON"</string>
-    <string name="on" msgid="8655164131929253426">"オン"</string>
-    <string name="off" msgid="875452955155264703">"オフ"</string>
+    <string name="state_on" msgid="8655164131929253426">"オン"</string>
+    <string name="state_off" msgid="875452955155264703">"オフ"</string>
     <string name="switch_role" msgid="2561197295334830845">"切り替える"</string>
     <string name="selected" msgid="6043586758067023">"選択済み"</string>
     <string name="not_selected" msgid="6610465462668679431">"未選択"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ka/strings.xml b/compose/ui/ui/src/androidMain/res/values-ka/strings.xml
index e1b2414..dccb67e 100644
--- a/compose/ui/ui/src/androidMain/res/values-ka/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ka/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"ნაწილობრივ შემოწმებულია"</string>
-    <string name="on" msgid="8655164131929253426">"ჩართული"</string>
-    <string name="off" msgid="875452955155264703">"გამორთული"</string>
+    <string name="state_on" msgid="8655164131929253426">"ჩართული"</string>
+    <string name="state_off" msgid="875452955155264703">"გამორთული"</string>
     <string name="switch_role" msgid="2561197295334830845">"გადართვა"</string>
     <string name="selected" msgid="6043586758067023">"არჩეული"</string>
     <string name="not_selected" msgid="6610465462668679431">"არ არის არჩეული"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-kk/strings.xml b/compose/ui/ui/src/androidMain/res/values-kk/strings.xml
index 9b1bb70..a370b0f 100644
--- a/compose/ui/ui/src/androidMain/res/values-kk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-kk/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Жартылай белгіленді."</string>
-    <string name="on" msgid="8655164131929253426">"Қосулы"</string>
-    <string name="off" msgid="875452955155264703">"Өшірулі"</string>
+    <string name="state_on" msgid="8655164131929253426">"Қосулы"</string>
+    <string name="state_off" msgid="875452955155264703">"Өшірулі"</string>
     <string name="switch_role" msgid="2561197295334830845">"Ауысу"</string>
     <string name="selected" msgid="6043586758067023">"Таңдалды"</string>
     <string name="not_selected" msgid="6610465462668679431">"Таңдалмады"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-km/strings.xml b/compose/ui/ui/src/androidMain/res/values-km/strings.xml
index f89ea75..947e4ca 100644
--- a/compose/ui/ui/src/androidMain/res/values-km/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-km/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"បានធីកខ្លះ"</string>
-    <string name="on" msgid="8655164131929253426">"បើក"</string>
-    <string name="off" msgid="875452955155264703">"បិទ"</string>
+    <string name="state_on" msgid="8655164131929253426">"បើក"</string>
+    <string name="state_off" msgid="875452955155264703">"បិទ"</string>
     <string name="switch_role" msgid="2561197295334830845">"ប៊ូតុង​បិទបើក"</string>
     <string name="selected" msgid="6043586758067023">"បានជ្រើសរើស"</string>
     <string name="not_selected" msgid="6610465462668679431">"មិនបាន​ជ្រើសរើស"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-kn/strings.xml b/compose/ui/ui/src/androidMain/res/values-kn/strings.xml
index 42244c8..ce94cd5 100644
--- a/compose/ui/ui/src/androidMain/res/values-kn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-kn/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"ಭಾಗಶಃ ಪರೀಕ್ಷಿಸಲಾಗಿದೆ"</string>
-    <string name="on" msgid="8655164131929253426">"ಆನ್ ಆಗಿದೆ"</string>
-    <string name="off" msgid="875452955155264703">"ಆಫ್ ಆಗಿದೆ"</string>
+    <string name="state_on" msgid="8655164131929253426">"ಆನ್ ಆಗಿದೆ"</string>
+    <string name="state_off" msgid="875452955155264703">"ಆಫ್ ಆಗಿದೆ"</string>
     <string name="switch_role" msgid="2561197295334830845">"ಬದಲಿಸಿ"</string>
     <string name="selected" msgid="6043586758067023">"ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ಆಯ್ಕೆ ಮಾಡಿಲ್ಲ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ko/strings.xml b/compose/ui/ui/src/androidMain/res/values-ko/strings.xml
index 3d4979c..ad51a86 100644
--- a/compose/ui/ui/src/androidMain/res/values-ko/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ko/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"일부 선택됨"</string>
-    <string name="on" msgid="8655164131929253426">"켜짐"</string>
-    <string name="off" msgid="875452955155264703">"꺼짐"</string>
+    <string name="state_on" msgid="8655164131929253426">"켜짐"</string>
+    <string name="state_off" msgid="875452955155264703">"꺼짐"</string>
     <string name="switch_role" msgid="2561197295334830845">"스위치"</string>
     <string name="selected" msgid="6043586758067023">"선택됨"</string>
     <string name="not_selected" msgid="6610465462668679431">"선택되지 않음"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ky/strings.xml b/compose/ui/ui/src/androidMain/res/values-ky/strings.xml
index 3ea8609..f43271de 100644
--- a/compose/ui/ui/src/androidMain/res/values-ky/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ky/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Жарым-жартылай текшерилди"</string>
-    <string name="on" msgid="8655164131929253426">"Күйүк"</string>
-    <string name="off" msgid="875452955155264703">"Өчүк"</string>
+    <string name="state_on" msgid="8655164131929253426">"Күйүк"</string>
+    <string name="state_off" msgid="875452955155264703">"Өчүк"</string>
     <string name="switch_role" msgid="2561197295334830845">"Которгуч"</string>
     <string name="selected" msgid="6043586758067023">"Тандалды"</string>
     <string name="not_selected" msgid="6610465462668679431">"Тандалган жок"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-lo/strings.xml b/compose/ui/ui/src/androidMain/res/values-lo/strings.xml
index 2675043..09c65dc 100644
--- a/compose/ui/ui/src/androidMain/res/values-lo/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-lo/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"ກວດສອບບາງສ່ວນແລ້ວ"</string>
-    <string name="on" msgid="8655164131929253426">"ເປີດ"</string>
-    <string name="off" msgid="875452955155264703">"ປິດ"</string>
+    <string name="state_on" msgid="8655164131929253426">"ເປີດ"</string>
+    <string name="state_off" msgid="875452955155264703">"ປິດ"</string>
     <string name="switch_role" msgid="2561197295334830845">"ປຸ່ມກົດ"</string>
     <string name="selected" msgid="6043586758067023">"ເລືອກແລ້ວ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ບໍ່ໄດ້ເລືອກ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-lt/strings.xml b/compose/ui/ui/src/androidMain/res/values-lt/strings.xml
index 18f07c9..91af052 100644
--- a/compose/ui/ui/src/androidMain/res/values-lt/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-lt/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Iš dalies pažymėta"</string>
-    <string name="on" msgid="8655164131929253426">"Įjungta"</string>
-    <string name="off" msgid="875452955155264703">"Išjungta"</string>
+    <string name="state_on" msgid="8655164131929253426">"Įjungta"</string>
+    <string name="state_off" msgid="875452955155264703">"Išjungta"</string>
     <string name="switch_role" msgid="2561197295334830845">"Jungiklis"</string>
     <string name="selected" msgid="6043586758067023">"Pasirinkta"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nepasirinkta"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-lv/strings.xml b/compose/ui/ui/src/androidMain/res/values-lv/strings.xml
index 43d9c33..bf9b84f 100644
--- a/compose/ui/ui/src/androidMain/res/values-lv/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-lv/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Daļēji atzīmēta"</string>
-    <string name="on" msgid="8655164131929253426">"Ieslēgts"</string>
-    <string name="off" msgid="875452955155264703">"Izslēgts"</string>
+    <string name="state_on" msgid="8655164131929253426">"Ieslēgts"</string>
+    <string name="state_off" msgid="875452955155264703">"Izslēgts"</string>
     <string name="switch_role" msgid="2561197295334830845">"Slēdzis"</string>
     <string name="selected" msgid="6043586758067023">"Atlasīts"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nav atlasīts"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-mk/strings.xml b/compose/ui/ui/src/androidMain/res/values-mk/strings.xml
index bb92da8..ab40ec5 100644
--- a/compose/ui/ui/src/androidMain/res/values-mk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-mk/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Делумно проверено"</string>
-    <string name="on" msgid="8655164131929253426">"Вклучено"</string>
-    <string name="off" msgid="875452955155264703">"Исклучено"</string>
+    <string name="state_on" msgid="8655164131929253426">"Вклучено"</string>
+    <string name="state_off" msgid="875452955155264703">"Исклучено"</string>
     <string name="switch_role" msgid="2561197295334830845">"Прекинувач"</string>
     <string name="selected" msgid="6043586758067023">"Избрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не е избрано"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ml/strings.xml b/compose/ui/ui/src/androidMain/res/values-ml/strings.xml
index c67e83e..3710d32 100644
--- a/compose/ui/ui/src/androidMain/res/values-ml/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ml/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"ഭാഗികമായി ചെക്ക് മാർക്കിട്ടു"</string>
-    <string name="on" msgid="8655164131929253426">"ഓണാണ്"</string>
-    <string name="off" msgid="875452955155264703">"ഓഫാണ്"</string>
+    <string name="state_on" msgid="8655164131929253426">"ഓണാണ്"</string>
+    <string name="state_off" msgid="875452955155264703">"ഓഫാണ്"</string>
     <string name="switch_role" msgid="2561197295334830845">"മാറുക"</string>
     <string name="selected" msgid="6043586758067023">"തിരഞ്ഞെടുത്തു"</string>
     <string name="not_selected" msgid="6610465462668679431">"തിരഞ്ഞെടുത്തില്ല"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-mn/strings.xml b/compose/ui/ui/src/androidMain/res/values-mn/strings.xml
index 1d98eea..1e21df7 100644
--- a/compose/ui/ui/src/androidMain/res/values-mn/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-mn/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Хэсэгчлэн тэмдэглэсэн"</string>
-    <string name="on" msgid="8655164131929253426">"Асаалттай"</string>
-    <string name="off" msgid="875452955155264703">"Унтраалттай"</string>
+    <string name="state_on" msgid="8655164131929253426">"Асаалттай"</string>
+    <string name="state_off" msgid="875452955155264703">"Унтраалттай"</string>
     <string name="switch_role" msgid="2561197295334830845">"Сэлгэх"</string>
     <string name="selected" msgid="6043586758067023">"Сонгосон"</string>
     <string name="not_selected" msgid="6610465462668679431">"Сонгоогүй"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-mr/strings.xml b/compose/ui/ui/src/androidMain/res/values-mr/strings.xml
index db02d08..71126d4 100644
--- a/compose/ui/ui/src/androidMain/res/values-mr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-mr/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"अंशतः तपासले"</string>
-    <string name="on" msgid="8655164131929253426">"सुरू आहे"</string>
-    <string name="off" msgid="875452955155264703">"बंद आहे"</string>
+    <string name="state_on" msgid="8655164131929253426">"सुरू आहे"</string>
+    <string name="state_off" msgid="875452955155264703">"बंद आहे"</string>
     <string name="switch_role" msgid="2561197295334830845">"स्विच"</string>
     <string name="selected" msgid="6043586758067023">"निवडला"</string>
     <string name="not_selected" msgid="6610465462668679431">"निवडला नाही"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ms/strings.xml b/compose/ui/ui/src/androidMain/res/values-ms/strings.xml
index cca8e32..417c100 100644
--- a/compose/ui/ui/src/androidMain/res/values-ms/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ms/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Sebahagiannya ditandai"</string>
-    <string name="on" msgid="8655164131929253426">"Hidup"</string>
-    <string name="off" msgid="875452955155264703">"Mati"</string>
+    <string name="state_on" msgid="8655164131929253426">"Hidup"</string>
+    <string name="state_off" msgid="875452955155264703">"Mati"</string>
     <string name="switch_role" msgid="2561197295334830845">"Tukar"</string>
     <string name="selected" msgid="6043586758067023">"Dipilih"</string>
     <string name="not_selected" msgid="6610465462668679431">"Tidak dipilih"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-my/strings.xml b/compose/ui/ui/src/androidMain/res/values-my/strings.xml
index 465ef08..79b34b0 100644
--- a/compose/ui/ui/src/androidMain/res/values-my/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-my/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"တစ်ဝက်တစ်ပျက် စစ်ဆေးထားသည်"</string>
-    <string name="on" msgid="8655164131929253426">"ဖွင့်"</string>
-    <string name="off" msgid="875452955155264703">"ပိတ်"</string>
+    <string name="state_on" msgid="8655164131929253426">"ဖွင့်"</string>
+    <string name="state_off" msgid="875452955155264703">"ပိတ်"</string>
     <string name="switch_role" msgid="2561197295334830845">"ပြောင်းရန်"</string>
     <string name="selected" msgid="6043586758067023">"ရွေးထားသည်"</string>
     <string name="not_selected" msgid="6610465462668679431">"ရွေးမထားပါ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-nb/strings.xml b/compose/ui/ui/src/androidMain/res/values-nb/strings.xml
index 6ac8d13..7de85e7 100644
--- a/compose/ui/ui/src/androidMain/res/values-nb/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-nb/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Delvis avmerket"</string>
-    <string name="on" msgid="8655164131929253426">"På"</string>
-    <string name="off" msgid="875452955155264703">"Av"</string>
+    <string name="state_on" msgid="8655164131929253426">"På"</string>
+    <string name="state_off" msgid="875452955155264703">"Av"</string>
     <string name="switch_role" msgid="2561197295334830845">"Bryter"</string>
     <string name="selected" msgid="6043586758067023">"Valgt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ikke valgt"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ne/strings.xml b/compose/ui/ui/src/androidMain/res/values-ne/strings.xml
index 7e15748..61c2920 100644
--- a/compose/ui/ui/src/androidMain/res/values-ne/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ne/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"आंशिक रूपमा जाँच गरिएको"</string>
-    <string name="on" msgid="8655164131929253426">"अन छ"</string>
-    <string name="off" msgid="875452955155264703">"अफ छ"</string>
+    <string name="state_on" msgid="8655164131929253426">"अन छ"</string>
+    <string name="state_off" msgid="875452955155264703">"अफ छ"</string>
     <string name="switch_role" msgid="2561197295334830845">"बदल्नुहोस्"</string>
     <string name="selected" msgid="6043586758067023">"चयन गरिएको छ"</string>
     <string name="not_selected" msgid="6610465462668679431">"चयन गरिएको छैन"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-nl/strings.xml b/compose/ui/ui/src/androidMain/res/values-nl/strings.xml
index df57d19..ead225b 100644
--- a/compose/ui/ui/src/androidMain/res/values-nl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-nl/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Gedeeltelijk aangevinkt"</string>
-    <string name="on" msgid="8655164131929253426">"Aan"</string>
-    <string name="off" msgid="875452955155264703">"Uit"</string>
+    <string name="state_on" msgid="8655164131929253426">"Aan"</string>
+    <string name="state_off" msgid="875452955155264703">"Uit"</string>
     <string name="switch_role" msgid="2561197295334830845">"Overschakelen"</string>
     <string name="selected" msgid="6043586758067023">"Geselecteerd"</string>
     <string name="not_selected" msgid="6610465462668679431">"Niet geselecteerd"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-or/strings.xml b/compose/ui/ui/src/androidMain/res/values-or/strings.xml
index 36b8189..37ed3bf 100644
--- a/compose/ui/ui/src/androidMain/res/values-or/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-or/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"ଆଶିଂକ ଭାବେ ଯାଞ୍ଚ କରାଯାଇଛି"</string>
-    <string name="on" msgid="8655164131929253426">"ଚାଲୁ ଅଛି"</string>
-    <string name="off" msgid="875452955155264703">"ବନ୍ଦ ଅଛି"</string>
+    <string name="state_on" msgid="8655164131929253426">"ଚାଲୁ ଅଛି"</string>
+    <string name="state_off" msgid="875452955155264703">"ବନ୍ଦ ଅଛି"</string>
     <string name="switch_role" msgid="2561197295334830845">"ସ୍ୱିଚ କରନ୍ତୁ"</string>
     <string name="selected" msgid="6043586758067023">"ଚୟନିତ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ଚୟନ କରାଯାଇନାହିଁ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pa/strings.xml b/compose/ui/ui/src/androidMain/res/values-pa/strings.xml
index 269fe3f..6c96b2f 100644
--- a/compose/ui/ui/src/androidMain/res/values-pa/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pa/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"ਅੰਸ਼ਕ ਤੌਰ ਤੇ ਜਾਂਚ ਕੀਤੀ ਗਈ"</string>
-    <string name="on" msgid="8655164131929253426">"ਚਾਲੂ ਹੈ"</string>
-    <string name="off" msgid="875452955155264703">"ਬੰਦ ਹੈ"</string>
+    <string name="state_on" msgid="8655164131929253426">"ਚਾਲੂ ਹੈ"</string>
+    <string name="state_off" msgid="875452955155264703">"ਬੰਦ ਹੈ"</string>
     <string name="switch_role" msgid="2561197295334830845">"ਸਵਿੱਚ ਕਰੋ"</string>
     <string name="selected" msgid="6043586758067023">"ਚੁਣੀ ਗਈ"</string>
     <string name="not_selected" msgid="6610465462668679431">"ਚੁਣੀ ਨਹੀਂ ਗਈ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pl/strings.xml b/compose/ui/ui/src/androidMain/res/values-pl/strings.xml
index bbc7dd9..1ff0b56 100644
--- a/compose/ui/ui/src/androidMain/res/values-pl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pl/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Częściowo zaznaczone"</string>
-    <string name="on" msgid="8655164131929253426">"Włączono"</string>
-    <string name="off" msgid="875452955155264703">"Wyłączono"</string>
+    <string name="state_on" msgid="8655164131929253426">"Włączono"</string>
+    <string name="state_off" msgid="875452955155264703">"Wyłączono"</string>
     <string name="switch_role" msgid="2561197295334830845">"Przełącznik"</string>
     <string name="selected" msgid="6043586758067023">"Wybrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nie wybrano"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml b/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml
index e602a9f..572cbee 100644
--- a/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pt-rBR/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Parcialmente selecionada"</string>
-    <string name="on" msgid="8655164131929253426">"Ativado"</string>
-    <string name="off" msgid="875452955155264703">"Desativado"</string>
+    <string name="state_on" msgid="8655164131929253426">"Ativado"</string>
+    <string name="state_off" msgid="875452955155264703">"Desativado"</string>
     <string name="switch_role" msgid="2561197295334830845">"Chave"</string>
     <string name="selected" msgid="6043586758067023">"Selecionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Não selecionado"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml b/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml
index 92b8419..0024ff8 100644
--- a/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pt-rPT/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Parcialmente selecionada"</string>
-    <string name="on" msgid="8655164131929253426">"Ativado"</string>
-    <string name="off" msgid="875452955155264703">"Desativado"</string>
+    <string name="state_on" msgid="8655164131929253426">"Ativado"</string>
+    <string name="state_off" msgid="875452955155264703">"Desativado"</string>
     <string name="switch_role" msgid="2561197295334830845">"Mudar"</string>
     <string name="selected" msgid="6043586758067023">"Selecionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Não selecionado"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-pt/strings.xml b/compose/ui/ui/src/androidMain/res/values-pt/strings.xml
index e602a9f..572cbee 100644
--- a/compose/ui/ui/src/androidMain/res/values-pt/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-pt/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Parcialmente selecionada"</string>
-    <string name="on" msgid="8655164131929253426">"Ativado"</string>
-    <string name="off" msgid="875452955155264703">"Desativado"</string>
+    <string name="state_on" msgid="8655164131929253426">"Ativado"</string>
+    <string name="state_off" msgid="875452955155264703">"Desativado"</string>
     <string name="switch_role" msgid="2561197295334830845">"Chave"</string>
     <string name="selected" msgid="6043586758067023">"Selecionado"</string>
     <string name="not_selected" msgid="6610465462668679431">"Não selecionado"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ro/strings.xml b/compose/ui/ui/src/androidMain/res/values-ro/strings.xml
index 6123619..027697e 100644
--- a/compose/ui/ui/src/androidMain/res/values-ro/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ro/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Bifată parțial"</string>
-    <string name="on" msgid="8655164131929253426">"Activat"</string>
-    <string name="off" msgid="875452955155264703">"Dezactivat"</string>
+    <string name="state_on" msgid="8655164131929253426">"Activat"</string>
+    <string name="state_off" msgid="875452955155264703">"Dezactivat"</string>
     <string name="switch_role" msgid="2561197295334830845">"Comută"</string>
     <string name="selected" msgid="6043586758067023">"Selectat"</string>
     <string name="not_selected" msgid="6610465462668679431">"Neselectat"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ru/strings.xml b/compose/ui/ui/src/androidMain/res/values-ru/strings.xml
index 39817d1..295cb11 100644
--- a/compose/ui/ui/src/androidMain/res/values-ru/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ru/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Отмечено частично"</string>
-    <string name="on" msgid="8655164131929253426">"Включено"</string>
-    <string name="off" msgid="875452955155264703">"Отключено"</string>
+    <string name="state_on" msgid="8655164131929253426">"Включено"</string>
+    <string name="state_off" msgid="875452955155264703">"Отключено"</string>
     <string name="switch_role" msgid="2561197295334830845">"Переключатель"</string>
     <string name="selected" msgid="6043586758067023">"Выбрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не выбрано"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-si/strings.xml b/compose/ui/ui/src/androidMain/res/values-si/strings.xml
index 3610c5d..3fb091b 100644
--- a/compose/ui/ui/src/androidMain/res/values-si/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-si/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"අඩ වශයෙන් ලකුණු කළ"</string>
-    <string name="on" msgid="8655164131929253426">"ක්‍රියාත්මකයි"</string>
-    <string name="off" msgid="875452955155264703">"ක්‍රියාවිරහිතයි"</string>
+    <string name="state_on" msgid="8655164131929253426">"ක්‍රියාත්මකයි"</string>
+    <string name="state_off" msgid="875452955155264703">"ක්‍රියාවිරහිතයි"</string>
     <string name="switch_role" msgid="2561197295334830845">"මාරු කරන්න"</string>
     <string name="selected" msgid="6043586758067023">"තෝරන ලදි"</string>
     <string name="not_selected" msgid="6610465462668679431">"තෝරා නැත"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sk/strings.xml b/compose/ui/ui/src/androidMain/res/values-sk/strings.xml
index 1ef5d97..9e11bd95 100644
--- a/compose/ui/ui/src/androidMain/res/values-sk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sk/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Čiastočne začiarknuté"</string>
-    <string name="on" msgid="8655164131929253426">"Zapnuté"</string>
-    <string name="off" msgid="875452955155264703">"Vypnuté"</string>
+    <string name="state_on" msgid="8655164131929253426">"Zapnuté"</string>
+    <string name="state_off" msgid="875452955155264703">"Vypnuté"</string>
     <string name="switch_role" msgid="2561197295334830845">"Prepnúť"</string>
     <string name="selected" msgid="6043586758067023">"Vybrané"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nevybrané"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sl/strings.xml b/compose/ui/ui/src/androidMain/res/values-sl/strings.xml
index 121a772..2ce13d7 100644
--- a/compose/ui/ui/src/androidMain/res/values-sl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sl/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Delno potrjeno"</string>
-    <string name="on" msgid="8655164131929253426">"Vklopljeno"</string>
-    <string name="off" msgid="875452955155264703">"Izklopljeno"</string>
+    <string name="state_on" msgid="8655164131929253426">"Vklopljeno"</string>
+    <string name="state_off" msgid="875452955155264703">"Izklopljeno"</string>
     <string name="switch_role" msgid="2561197295334830845">"Stikalo"</string>
     <string name="selected" msgid="6043586758067023">"Izbrano"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ni izbrano"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sq/strings.xml b/compose/ui/ui/src/androidMain/res/values-sq/strings.xml
index 7f8ce7b..3dc62af 100644
--- a/compose/ui/ui/src/androidMain/res/values-sq/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sq/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Pjesërisht e shënuar"</string>
-    <string name="on" msgid="8655164131929253426">"Aktiv"</string>
-    <string name="off" msgid="875452955155264703">"Joaktiv"</string>
+    <string name="state_on" msgid="8655164131929253426">"Aktiv"</string>
+    <string name="state_off" msgid="875452955155264703">"Joaktiv"</string>
     <string name="switch_role" msgid="2561197295334830845">"Ndërro"</string>
     <string name="selected" msgid="6043586758067023">"Zgjedhur"</string>
     <string name="not_selected" msgid="6610465462668679431">"Nuk është zgjedhur"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sr/strings.xml b/compose/ui/ui/src/androidMain/res/values-sr/strings.xml
index 466b1b6..564dac6 100644
--- a/compose/ui/ui/src/androidMain/res/values-sr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sr/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Делимично означено"</string>
-    <string name="on" msgid="8655164131929253426">"Укључено"</string>
-    <string name="off" msgid="875452955155264703">"Искључено"</string>
+    <string name="state_on" msgid="8655164131929253426">"Укључено"</string>
+    <string name="state_off" msgid="875452955155264703">"Искључено"</string>
     <string name="switch_role" msgid="2561197295334830845">"Прекидач"</string>
     <string name="selected" msgid="6043586758067023">"Изабрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Није изабрано"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sv/strings.xml b/compose/ui/ui/src/androidMain/res/values-sv/strings.xml
index 185737c..3dbaf6b 100644
--- a/compose/ui/ui/src/androidMain/res/values-sv/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sv/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Delvis markerad"</string>
-    <string name="on" msgid="8655164131929253426">"På"</string>
-    <string name="off" msgid="875452955155264703">"Av"</string>
+    <string name="state_on" msgid="8655164131929253426">"På"</string>
+    <string name="state_off" msgid="875452955155264703">"Av"</string>
     <string name="switch_role" msgid="2561197295334830845">"Reglage"</string>
     <string name="selected" msgid="6043586758067023">"Valt"</string>
     <string name="not_selected" msgid="6610465462668679431">"Inte vald"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-sw/strings.xml b/compose/ui/ui/src/androidMain/res/values-sw/strings.xml
index 00e3d61..09b9640 100644
--- a/compose/ui/ui/src/androidMain/res/values-sw/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-sw/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Imekaguliwa kwa kiasi fulani"</string>
-    <string name="on" msgid="8655164131929253426">"Imewashwa"</string>
-    <string name="off" msgid="875452955155264703">"Imezimwa"</string>
+    <string name="state_on" msgid="8655164131929253426">"Imewashwa"</string>
+    <string name="state_off" msgid="875452955155264703">"Imezimwa"</string>
     <string name="switch_role" msgid="2561197295334830845">"Swichi"</string>
     <string name="selected" msgid="6043586758067023">"Umechagua"</string>
     <string name="not_selected" msgid="6610465462668679431">"Hujachagua"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ta/strings.xml b/compose/ui/ui/src/androidMain/res/values-ta/strings.xml
index de9bb21..81407fa 100644
--- a/compose/ui/ui/src/androidMain/res/values-ta/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ta/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"சில மட்டுமே தேர்ந்தெடுக்கப்பட்டுள்ளன"</string>
-    <string name="on" msgid="8655164131929253426">"இயக்கப்பட்டுள்ளது"</string>
-    <string name="off" msgid="875452955155264703">"முடக்கப்பட்டுள்ளது"</string>
+    <string name="state_on" msgid="8655164131929253426">"இயக்கப்பட்டுள்ளது"</string>
+    <string name="state_off" msgid="875452955155264703">"முடக்கப்பட்டுள்ளது"</string>
     <string name="switch_role" msgid="2561197295334830845">"மாற்றுதல்"</string>
     <string name="selected" msgid="6043586758067023">"தேர்ந்தெடுக்கப்பட்டுள்ளது"</string>
     <string name="not_selected" msgid="6610465462668679431">"தேர்ந்தெடுக்கப்படவில்லை"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-te/strings.xml b/compose/ui/ui/src/androidMain/res/values-te/strings.xml
index 598e8c5..2b3c28a 100644
--- a/compose/ui/ui/src/androidMain/res/values-te/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-te/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"పాక్షికంగా ఎంచుకోబడింది"</string>
-    <string name="on" msgid="8655164131929253426">"ఆన్‌లో ఉంది"</string>
-    <string name="off" msgid="875452955155264703">"ఆఫ్‌లో ఉంది"</string>
+    <string name="state_on" msgid="8655164131929253426">"ఆన్‌లో ఉంది"</string>
+    <string name="state_off" msgid="875452955155264703">"ఆఫ్‌లో ఉంది"</string>
     <string name="switch_role" msgid="2561197295334830845">"Switch"</string>
     <string name="selected" msgid="6043586758067023">"ఎంచుకోబడింది"</string>
     <string name="not_selected" msgid="6610465462668679431">"ఎంచుకోబడలేదు"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-th/strings.xml b/compose/ui/ui/src/androidMain/res/values-th/strings.xml
index f0a1576..cf658f4 100644
--- a/compose/ui/ui/src/androidMain/res/values-th/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-th/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"เลือกบางส่วน"</string>
-    <string name="on" msgid="8655164131929253426">"เปิด"</string>
-    <string name="off" msgid="875452955155264703">"ปิด"</string>
+    <string name="state_on" msgid="8655164131929253426">"เปิด"</string>
+    <string name="state_off" msgid="875452955155264703">"ปิด"</string>
     <string name="switch_role" msgid="2561197295334830845">"เปลี่ยน"</string>
     <string name="selected" msgid="6043586758067023">"เลือกไว้"</string>
     <string name="not_selected" msgid="6610465462668679431">"ไม่ได้เลือก"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-tl/strings.xml b/compose/ui/ui/src/androidMain/res/values-tl/strings.xml
index cbebde9..7551c981 100644
--- a/compose/ui/ui/src/androidMain/res/values-tl/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-tl/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Bahagyang may check"</string>
-    <string name="on" msgid="8655164131929253426">"Naka-on"</string>
-    <string name="off" msgid="875452955155264703">"Naka-off"</string>
+    <string name="state_on" msgid="8655164131929253426">"Naka-on"</string>
+    <string name="state_off" msgid="875452955155264703">"Naka-off"</string>
     <string name="switch_role" msgid="2561197295334830845">"Lumipat"</string>
     <string name="selected" msgid="6043586758067023">"Napili"</string>
     <string name="not_selected" msgid="6610465462668679431">"Hindi napili"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-tr/strings.xml b/compose/ui/ui/src/androidMain/res/values-tr/strings.xml
index 7be7793..29e403f 100644
--- a/compose/ui/ui/src/androidMain/res/values-tr/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-tr/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Kısmi olarak kontrol edildi"</string>
-    <string name="on" msgid="8655164131929253426">"Açık"</string>
-    <string name="off" msgid="875452955155264703">"Kapalı"</string>
+    <string name="state_on" msgid="8655164131929253426">"Açık"</string>
+    <string name="state_off" msgid="875452955155264703">"Kapalı"</string>
     <string name="switch_role" msgid="2561197295334830845">"Anahtar"</string>
     <string name="selected" msgid="6043586758067023">"Seçili"</string>
     <string name="not_selected" msgid="6610465462668679431">"Seçili değil"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-uk/strings.xml b/compose/ui/ui/src/androidMain/res/values-uk/strings.xml
index a16e78a..ce2f540 100644
--- a/compose/ui/ui/src/androidMain/res/values-uk/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-uk/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Частково вибрано"</string>
-    <string name="on" msgid="8655164131929253426">"Увімкнено"</string>
-    <string name="off" msgid="875452955155264703">"Вимкнено"</string>
+    <string name="state_on" msgid="8655164131929253426">"Увімкнено"</string>
+    <string name="state_off" msgid="875452955155264703">"Вимкнено"</string>
     <string name="switch_role" msgid="2561197295334830845">"Перемикач"</string>
     <string name="selected" msgid="6043586758067023">"Вибрано"</string>
     <string name="not_selected" msgid="6610465462668679431">"Не вибрано"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-ur/strings.xml b/compose/ui/ui/src/androidMain/res/values-ur/strings.xml
index d2cfa69..db2e2a8 100644
--- a/compose/ui/ui/src/androidMain/res/values-ur/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-ur/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"جزوی طور پر چیک کردہ"</string>
-    <string name="on" msgid="8655164131929253426">"آن ہے"</string>
-    <string name="off" msgid="875452955155264703">"آف ہے"</string>
+    <string name="state_on" msgid="8655164131929253426">"آن ہے"</string>
+    <string name="state_off" msgid="875452955155264703">"آف ہے"</string>
     <string name="switch_role" msgid="2561197295334830845">"سوئچ"</string>
     <string name="selected" msgid="6043586758067023">"منتخب کردہ"</string>
     <string name="not_selected" msgid="6610465462668679431">"غیر منتخب کردہ"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-uz/strings.xml b/compose/ui/ui/src/androidMain/res/values-uz/strings.xml
index 2fca41c..6459eee 100644
--- a/compose/ui/ui/src/androidMain/res/values-uz/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-uz/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Qisman belgilandi"</string>
-    <string name="on" msgid="8655164131929253426">"Yoniq"</string>
-    <string name="off" msgid="875452955155264703">"Oʻchiq"</string>
+    <string name="state_on" msgid="8655164131929253426">"Yoniq"</string>
+    <string name="state_off" msgid="875452955155264703">"Oʻchiq"</string>
     <string name="switch_role" msgid="2561197295334830845">"Almashtirish"</string>
     <string name="selected" msgid="6043586758067023">"Tanlangan"</string>
     <string name="not_selected" msgid="6610465462668679431">"Tanlanmagan"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-vi/strings.xml b/compose/ui/ui/src/androidMain/res/values-vi/strings.xml
index c083d08..0da2126 100644
--- a/compose/ui/ui/src/androidMain/res/values-vi/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-vi/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Đã kiểm tra một phần"</string>
-    <string name="on" msgid="8655164131929253426">"Đang bật"</string>
-    <string name="off" msgid="875452955155264703">"Đang tắt"</string>
+    <string name="state_on" msgid="8655164131929253426">"Đang bật"</string>
+    <string name="state_off" msgid="875452955155264703">"Đang tắt"</string>
     <string name="switch_role" msgid="2561197295334830845">"Chuyển"</string>
     <string name="selected" msgid="6043586758067023">"Đã chọn"</string>
     <string name="not_selected" msgid="6610465462668679431">"Chưa chọn"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml b/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml
index 4277175..de0a846 100644
--- a/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zh-rCN/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"部分选中"</string>
-    <string name="on" msgid="8655164131929253426">"已开启"</string>
-    <string name="off" msgid="875452955155264703">"已关闭"</string>
+    <string name="state_on" msgid="8655164131929253426">"已开启"</string>
+    <string name="state_off" msgid="875452955155264703">"已关闭"</string>
     <string name="switch_role" msgid="2561197295334830845">"开关"</string>
     <string name="selected" msgid="6043586758067023">"已选择"</string>
     <string name="not_selected" msgid="6610465462668679431">"未选择"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml b/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml
index b746a8b..f7ef924 100644
--- a/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zh-rHK/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"部分剔咗"</string>
-    <string name="on" msgid="8655164131929253426">"開"</string>
-    <string name="off" msgid="875452955155264703">"閂"</string>
+    <string name="state_on" msgid="8655164131929253426">"開"</string>
+    <string name="state_off" msgid="875452955155264703">"閂"</string>
     <string name="switch_role" msgid="2561197295334830845">"按鈕裝置"</string>
     <string name="selected" msgid="6043586758067023">"揀咗"</string>
     <string name="not_selected" msgid="6610465462668679431">"未揀"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml b/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml
index b833b6b..aa35359 100644
--- a/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zh-rTW/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"部分檢查"</string>
-    <string name="on" msgid="8655164131929253426">"已開啟"</string>
-    <string name="off" msgid="875452955155264703">"已關閉"</string>
+    <string name="state_on" msgid="8655164131929253426">"已開啟"</string>
+    <string name="state_off" msgid="875452955155264703">"已關閉"</string>
     <string name="switch_role" msgid="2561197295334830845">"切換鈕"</string>
     <string name="selected" msgid="6043586758067023">"已選取"</string>
     <string name="not_selected" msgid="6610465462668679431">"未選取"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values-zu/strings.xml b/compose/ui/ui/src/androidMain/res/values-zu/strings.xml
index d1f80e4..281cf87 100644
--- a/compose/ui/ui/src/androidMain/res/values-zu/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values-zu/strings.xml
@@ -18,8 +18,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="indeterminate" msgid="7933458017204019916">"Kuhlolwe kancane"</string>
-    <string name="on" msgid="8655164131929253426">"Vuliwe"</string>
-    <string name="off" msgid="875452955155264703">"Valiwe"</string>
+    <string name="state_on" msgid="8655164131929253426">"Vuliwe"</string>
+    <string name="state_off" msgid="875452955155264703">"Valiwe"</string>
     <string name="switch_role" msgid="2561197295334830845">"Shintsha"</string>
     <string name="selected" msgid="6043586758067023">"Okukhethiwe"</string>
     <string name="not_selected" msgid="6610465462668679431">"Ayikhethiwe"</string>
diff --git a/compose/ui/ui/src/androidMain/res/values/strings.xml b/compose/ui/ui/src/androidMain/res/values/strings.xml
index 8524e9e..5d955a7 100644
--- a/compose/ui/ui/src/androidMain/res/values/strings.xml
+++ b/compose/ui/ui/src/androidMain/res/values/strings.xml
@@ -19,9 +19,9 @@
     <!-- Spoken description of indeterminate state of a tri-state checkbox -->
     <string name="indeterminate">Partially checked</string>
     <!-- Spoken description of on state of a switch -->
-    <string name="on">On</string>
+    <string name="state_on">On</string>
     <!-- Spoken description of off state of a switch -->
-    <string name="off">Off</string>
+    <string name="state_off">Off</string>
     <!-- Spoken description naming a Switch Material UI widget -->
     <string name="switch_role">Switch</string>
     <!-- Spoken description of selected state of a selectable item -->
diff --git a/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroidCommandDebouncingTest.kt b/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroidCommandDebouncingTest.kt
index f8b8270..19ff239 100644
--- a/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroidCommandDebouncingTest.kt
+++ b/compose/ui/ui/src/androidUnitTest/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroidCommandDebouncingTest.kt
@@ -237,7 +237,7 @@
     }
 
     @Test
-    fun commandsAreIgnored_ifFocusLostBeforeProcessing() {
+    fun commandsAreNotIgnored_ifFocusLostBeforeProcessing() {
         // Send command while view still has focus.
         service.showSoftwareKeyboard()
         // Blur the view.
@@ -245,7 +245,7 @@
         // Process the queued commands.
         scope.advanceUntilIdle()
 
-        assertThat(inputMethodManager.showSoftInputCalls).isEqualTo(0)
+        assertThat(inputMethodManager.showSoftInputCalls).isEqualTo(1)
     }
 
     @Test
diff --git a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
index 0b0e358..e235912 100644
--- a/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
+++ b/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
@@ -821,7 +821,7 @@
 var SemanticsPropertyReceiver.stateDescription by SemanticsProperties.StateDescription
 
 /**
- * The semantics is represents a range of possible values with a current value.
+ * The semantics represents a range of possible values with a current value.
  * For example, when used on a slider control, this will allow screen readers to communicate
  * the slider's state.
  */
diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/WindowPlacement.desktop.kt.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/WindowPlacement.desktop.kt
similarity index 100%
rename from compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/WindowPlacement.desktop.kt.kt
rename to compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/window/WindowPlacement.desktop.kt
diff --git a/concurrent/concurrent-futures-ktx/build.gradle b/concurrent/concurrent-futures-ktx/build.gradle
index 59fadfa..15e8be0 100644
--- a/concurrent/concurrent-futures-ktx/build.gradle
+++ b/concurrent/concurrent-futures-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/concurrent/concurrent-futures/build.gradle b/concurrent/concurrent-futures/build.gradle
index 3c047f9..a731715 100644
--- a/concurrent/concurrent-futures/build.gradle
+++ b/concurrent/concurrent-futures/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/constraintlayout/constraintlayout-compose-lint/build.gradle b/constraintlayout/constraintlayout-compose-lint/build.gradle
index 947de0d..84322c5 100644
--- a/constraintlayout/constraintlayout-compose-lint/build.gradle
+++ b/constraintlayout/constraintlayout-compose-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/constraintlayout/constraintlayout-compose/build.gradle b/constraintlayout/constraintlayout-compose/build.gradle
index c005e38..070ebb48 100644
--- a/constraintlayout/constraintlayout-compose/build.gradle
+++ b/constraintlayout/constraintlayout-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/constraintlayout/constraintlayout-core/build.gradle b/constraintlayout/constraintlayout-core/build.gradle
index cfbaebc..717357f 100644
--- a/constraintlayout/constraintlayout-core/build.gradle
+++ b/constraintlayout/constraintlayout-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/constraintlayout/constraintlayout/build.gradle b/constraintlayout/constraintlayout/build.gradle
index 9a4f6cc..7bafbac 100644
--- a/constraintlayout/constraintlayout/build.gradle
+++ b/constraintlayout/constraintlayout/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java b/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java
index 559636af..d9acf2e 100644
--- a/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java
+++ b/constraintlayout/constraintlayout/src/main/java/androidx/constraintlayout/widget/ConstraintLayout.java
@@ -2514,7 +2514,7 @@
         // public int endMargin = UNSET;
 
         // boolean isRtl = false;
-        // int layoutDirection = ViewCompat.LAYOUT_DIRECTION_LTR;
+        // int layoutDirection = View.LAYOUT_DIRECTION_LTR;
 
         boolean mWidthSet = true; // need to be set to false when we reactivate this in 3.0
         boolean mHeightSet = true; // need to be set to false when we reactivate this in 3.0
diff --git a/contentpager/contentpager/build.gradle b/contentpager/contentpager/build.gradle
index 98784a0..b4cb66e 100644
--- a/contentpager/contentpager/build.gradle
+++ b/contentpager/contentpager/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/coordinatorlayout/coordinatorlayout/build.gradle b/coordinatorlayout/coordinatorlayout/build.gradle
index 32f025f..2b8abe0 100644
--- a/coordinatorlayout/coordinatorlayout/build.gradle
+++ b/coordinatorlayout/coordinatorlayout/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/coordinatorlayout/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTest.java b/coordinatorlayout/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTest.java
index a6f0f11..06a5443 100644
--- a/coordinatorlayout/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTest.java
+++ b/coordinatorlayout/coordinatorlayout/src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTest.java
@@ -584,7 +584,7 @@
         // And assert that it has not been laid out
         assertFalse(imageView.getMeasuredWidth() > 0);
         assertFalse(imageView.getMeasuredHeight() > 0);
-        assertFalse(ViewCompat.isLaidOut(imageView));
+        assertFalse(imageView.isLaidOut());
 
         // Now set the view to INVISIBLE
         mActivityTestRule.runOnUiThread(new Runnable() {
@@ -599,7 +599,7 @@
         // And assert that it has been laid out
         assertTrue(imageView.getMeasuredWidth() > 0);
         assertTrue(imageView.getMeasuredHeight() > 0);
-        assertTrue(ViewCompat.isLaidOut(imageView));
+        assertTrue(imageView.isLaidOut());
     }
 
     @Test
diff --git a/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java b/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
index 70782d1..36c53be 100644
--- a/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
+++ b/coordinatorlayout/coordinatorlayout/src/main/java/androidx/coordinatorlayout/widget/CoordinatorLayout.java
@@ -254,10 +254,9 @@
         setupForInsets();
         super.setOnHierarchyChangeListener(new HierarchyChangeListener());
 
-        if (ViewCompat.getImportantForAccessibility(this)
-                == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-            ViewCompat.setImportantForAccessibility(this,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+        if (this.getImportantForAccessibility()
+                == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+            setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
     }
 
@@ -316,11 +315,11 @@
                     mStatusBarBackground.setState(getDrawableState());
                 }
                 DrawableCompat.setLayoutDirection(mStatusBarBackground,
-                        ViewCompat.getLayoutDirection(this));
+                        getLayoutDirection());
                 mStatusBarBackground.setVisible(getVisibility() == VISIBLE, false);
                 mStatusBarBackground.setCallback(this);
             }
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
@@ -816,8 +815,8 @@
         final int paddingTop = getPaddingTop();
         final int paddingRight = getPaddingRight();
         final int paddingBottom = getPaddingBottom();
-        final int layoutDirection = ViewCompat.getLayoutDirection(this);
-        final boolean isRtl = layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL;
+        final int layoutDirection = getLayoutDirection();
+        final boolean isRtl = layoutDirection == View.LAYOUT_DIRECTION_RTL;
         final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
         final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
         final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
@@ -948,7 +947,7 @@
     @Override
     @SuppressWarnings("unchecked")
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        final int layoutDirection = ViewCompat.getLayoutDirection(this);
+        final int layoutDirection = getLayoutDirection();
         final int childCount = mDependencySortedChildren.size();
         for (int i = 0; i < childCount; i++) {
             final View child = mDependencySortedChildren.get(i);
@@ -1183,7 +1182,7 @@
         final int childWidth = child.getMeasuredWidth();
         final int childHeight = child.getMeasuredHeight();
 
-        if (layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL) {
+        if (layoutDirection == View.LAYOUT_DIRECTION_RTL) {
             keyline = width - keyline;
         }
 
@@ -1349,7 +1348,7 @@
      */
     @SuppressWarnings("unchecked")
     final void onChildViewsChanged(@DispatchChangeEvent final int type) {
-        final int layoutDirection = ViewCompat.getLayoutDirection(this);
+        final int layoutDirection = getLayoutDirection();
         final int childCount = mDependencySortedChildren.size();
         final Rect inset = acquireTempRect();
         final Rect drawRect = acquireTempRect();
@@ -1455,7 +1454,7 @@
 
     @SuppressWarnings("unchecked")
     private void offsetChildByInset(final View child, final Rect inset, final int layoutDirection) {
-        if (!ViewCompat.isLaidOut(child)) {
+        if (!child.isLaidOut()) {
             // The view has not been laid out yet, so we can't obtain its bounds.
             return;
         }
@@ -3304,7 +3303,7 @@
         @SuppressWarnings("unchecked")
         boolean dependsOn(CoordinatorLayout parent, View child, View dependency) {
             return dependency == mAnchorDirectChild
-                    || shouldDodge(dependency, ViewCompat.getLayoutDirection(parent))
+                    || shouldDodge(dependency, parent.getLayoutDirection())
                     || (mBehavior != null && mBehavior.layoutDependsOn(parent, child, dependency));
         }
 
diff --git a/core/core-animation-testing/build.gradle b/core/core-animation-testing/build.gradle
index 7caadd3..1165d54 100644
--- a/core/core-animation-testing/build.gradle
+++ b/core/core-animation-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/core/core-animation/build.gradle b/core/core-animation/build.gradle
index 0bd7a99..55c948d 100644
--- a/core/core-animation/build.gradle
+++ b/core/core-animation/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/core/core-appdigest/build.gradle b/core/core-appdigest/build.gradle
index 03230df..2b441d8 100644
--- a/core/core-appdigest/build.gradle
+++ b/core/core-appdigest/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/core/core-i18n/build.gradle b/core/core-i18n/build.gradle
index df268b5..7705edf 100644
--- a/core/core-i18n/build.gradle
+++ b/core/core-i18n/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-ktx/build.gradle b/core/core-ktx/build.gradle
index 862d27c..24a1d25 100644
--- a/core/core-ktx/build.gradle
+++ b/core/core-ktx/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/core/core-location-altitude-proto/build.gradle b/core/core-location-altitude-proto/build.gradle
index 02afaf0..6f109c5 100644
--- a/core/core-location-altitude-proto/build.gradle
+++ b/core/core-location-altitude-proto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/core/core-location-altitude/build.gradle b/core/core-location-altitude/build.gradle
index ddd54e2..1530ba8 100644
--- a/core/core-location-altitude/build.gradle
+++ b/core/core-location-altitude/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/core/core-performance-play-services/build.gradle b/core/core-performance-play-services/build.gradle
index 2398ed1..d302469 100644
--- a/core/core-performance-play-services/build.gradle
+++ b/core/core-performance-play-services/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-performance-testing/build.gradle b/core/core-performance-testing/build.gradle
index 002681c..ff2b4d6 100644
--- a/core/core-performance-testing/build.gradle
+++ b/core/core-performance-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-performance/build.gradle b/core/core-performance/build.gradle
index f4aac3b..23d7a9a 100644
--- a/core/core-performance/build.gradle
+++ b/core/core-performance/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-performance/samples/build.gradle b/core/core-performance/samples/build.gradle
index ef28e3c..522219d 100644
--- a/core/core-performance/samples/build.gradle
+++ b/core/core-performance/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-remoteviews/build.gradle b/core/core-remoteviews/build.gradle
index 8e1fa76..3452498 100644
--- a/core/core-remoteviews/build.gradle
+++ b/core/core-remoteviews/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-role/build.gradle b/core/core-role/build.gradle
index 4b6e60e..d61093a 100644
--- a/core/core-role/build.gradle
+++ b/core/core-role/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/core/core-splashscreen/build.gradle b/core/core-splashscreen/build.gradle
index 2a98181..c3d875b 100644
--- a/core/core-splashscreen/build.gradle
+++ b/core/core-splashscreen/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-splashscreen/samples/build.gradle b/core/core-splashscreen/samples/build.gradle
index bdde361..b2a88c8 100644
--- a/core/core-splashscreen/samples/build.gradle
+++ b/core/core-splashscreen/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/core/core-telecom/build.gradle b/core/core-telecom/build.gradle
index 03f6329..4c8fbd1 100644
--- a/core/core-telecom/build.gradle
+++ b/core/core-telecom/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core-testing/build.gradle b/core/core-testing/build.gradle
index 883c7b4..b28f926 100644
--- a/core/core-testing/build.gradle
+++ b/core/core-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index c23fc66..d7001c1 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -3135,10 +3135,10 @@
     field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
     field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
     field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
-    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
-    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
-    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
-    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+    field @Deprecated public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+    field @Deprecated public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+    field @Deprecated public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+    field @Deprecated public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
     field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
     field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
     field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
@@ -4141,9 +4141,9 @@
     method public void scrollTargetBy(int, int);
   }
 
-  public final class ListViewCompat {
-    method public static boolean canScrollList(android.widget.ListView, int);
-    method public static void scrollListBy(android.widget.ListView, int);
+  @Deprecated public final class ListViewCompat {
+    method @Deprecated public static boolean canScrollList(android.widget.ListView, int);
+    method @Deprecated public static void scrollListBy(android.widget.ListView, int);
   }
 
   public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index de4c9db..b75e2bb 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -3588,10 +3588,10 @@
     field @Deprecated public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
     field @Deprecated public static final int LAYER_TYPE_NONE = 0; // 0x0
     field @Deprecated public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
-    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
-    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
-    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
-    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+    field @Deprecated public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+    field @Deprecated public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+    field @Deprecated public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+    field @Deprecated public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
     field @Deprecated public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
     field @Deprecated public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
     field @Deprecated public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
@@ -4643,9 +4643,9 @@
     method public void scrollTargetBy(int, int);
   }
 
-  public final class ListViewCompat {
-    method public static boolean canScrollList(android.widget.ListView, int);
-    method public static void scrollListBy(android.widget.ListView, int);
+  @Deprecated public final class ListViewCompat {
+    method @Deprecated public static boolean canScrollList(android.widget.ListView, int);
+    method @Deprecated public static void scrollListBy(android.widget.ListView, int);
   }
 
   public class NestedScrollView extends android.widget.FrameLayout implements androidx.core.view.NestedScrollingChild3 androidx.core.view.NestedScrollingParent3 androidx.core.view.ScrollingView {
diff --git a/core/core/build.gradle b/core/core/build.gradle
index 61df2f0..17d3ad1 100644
--- a/core/core/build.gradle
+++ b/core/core/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/core/core/integration-tests/publishing/build.gradle b/core/core/integration-tests/publishing/build.gradle
index 6d9b83e..138ed40 100644
--- a/core/core/integration-tests/publishing/build.gradle
+++ b/core/core/integration-tests/publishing/build.gradle
@@ -14,6 +14,13 @@
  * 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.SdkResourceGenerator
 
 plugins {
diff --git a/core/core/src/androidTest/java/androidx/core/util/TypedValueCompatTest.kt b/core/core/src/androidTest/java/androidx/core/util/TypedValueCompatTest.kt
index 9ac42ad..f77e242 100644
--- a/core/core/src/androidTest/java/androidx/core/util/TypedValueCompatTest.kt
+++ b/core/core/src/androidTest/java/androidx/core/util/TypedValueCompatTest.kt
@@ -27,6 +27,7 @@
 import org.junit.runner.RunWith
 import org.mockito.Mockito.mock
 
+@Suppress("DEPRECATION") // for DisplayMetrics.scaledDensity
 @RunWith(AndroidJUnit4::class)
 @SmallTest
 class TypedValueCompatTest {
diff --git a/core/core/src/androidTest/java/androidx/core/view/AccessibilityDelegateCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/AccessibilityDelegateCompatTest.java
index 67209d2..7dd5bc8 100644
--- a/core/core/src/androidTest/java/androidx/core/view/AccessibilityDelegateCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/AccessibilityDelegateCompatTest.java
@@ -96,7 +96,7 @@
             // Use a group, so it has a child
             mView = (ViewGroup) activity.findViewById(androidx.core.test.R.id.view).getParent();
             // On KitKat, some delegate methods aren't called for non-important views
-            ViewCompat.setImportantForAccessibility(mView, View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+            mView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         });
     }
 
@@ -173,8 +173,7 @@
         final AccessibilityDelegateCompat mockDelegate = mock(
                 AccessibilityDelegateCompat.class);
         mActivityTestRule.runOnUiThread(() -> {
-            ViewCompat.setAccessibilityLiveRegion(mView,
-                    ViewCompat.ACCESSIBILITY_LIVE_REGION_POLITE);
+            mView.setAccessibilityLiveRegion(View.ACCESSIBILITY_LIVE_REGION_POLITE);
 
             ViewCompat.setAccessibilityPaneTitle(mView, "Sample title");
 
@@ -243,8 +242,7 @@
         mActivityTestRule.runOnUiThread(() -> {
             mChildView = activity.findViewById(androidx.core.test.R.id.view);
             // On KitKat, some delegate methods aren't called for non-important views
-            ViewCompat.setImportantForAccessibility(mChildView,
-                    View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+            mChildView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         });
         final CharSequence title = "Sample title";
         ViewCompat.setAccessibilityPaneTitle(mChildView, title);
@@ -301,15 +299,14 @@
         mActivityTestRule.runOnUiThread(() -> {
             mChildView = activity.findViewById(androidx.core.test.R.id.view);
             // On KitKat, some delegate methods aren't called for non-important views
-            ViewCompat.setImportantForAccessibility(mChildView,
-                    View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+            mChildView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         });
         final CharSequence title = "Sample title";
         ViewCompat.setAccessibilityPaneTitle(mChildView, title);
 
         // Validity check
-        assertEquals(ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES,
-                ViewCompat.getImportantForAccessibility(mChildView));
+        assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_YES,
+                mChildView.getImportantForAccessibility());
         assertEquals(mChildView.getVisibility(), View.VISIBLE);
 
         sUiAutomation.executeAndWaitForEvent(
@@ -351,8 +348,8 @@
         ViewCompat.setAccessibilityPaneTitle(mView, title);
 
         // Validity check
-        assertEquals(ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES,
-                ViewCompat.getImportantForAccessibility(mView));
+        assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_YES,
+                mView.getImportantForAccessibility());
 
         final Activity activity = mActivityTestRule.getActivity();
         sUiAutomation.executeAndWaitForEvent(
@@ -426,7 +423,7 @@
         int actionId = integerArgumentCaptor.getValue();
 
         //The service would end up calling the same thing ViewCompat calls
-        ViewCompat.performAccessibilityAction(mView, actionId, args);
+        mView.performAccessibilityAction(actionId, args);
         verify(span2).onClick(mView);
     }
 
@@ -475,7 +472,7 @@
     public void testAccessibilityActionPerformIsCalled() {
         final AccessibilityViewCommand action = mock(AccessibilityViewCommand.class);
         final int id = ViewCompat.addAccessibilityAction(mView, "Asad's action", action);
-        ViewCompat.performAccessibilityAction(mView, id, null);
+        mView.performAccessibilityAction(id, null);
         verify(action).perform(mView, null);
     }
 
@@ -487,7 +484,7 @@
             AccessibilityViewCommand action = mock(AccessibilityViewCommand.class);
             final int id = ViewCompat.addAccessibilityAction(mView,
                     "Test" + Integer.valueOf(i).toString(), action);
-            ViewCompat.performAccessibilityAction(mView, id, null);
+            mView.performAccessibilityAction(id, null);
             verify(action).perform(mView, null);
             actionIdToBeRemoved = id;
         }
@@ -495,7 +492,7 @@
 
         AccessibilityViewCommand action = mock(AccessibilityViewCommand.class);
         final int id = ViewCompat.addAccessibilityAction(mView, "Last test", action);
-        ViewCompat.performAccessibilityAction(mView, id, null);
+        mView.performAccessibilityAction(id, null);
         verify(action).perform(mView, null);
     }
 
@@ -507,8 +504,7 @@
         ViewCompat.replaceAccessibilityAction(mView, AccessibilityActionCompat.ACTION_FOCUS,
                 "Focus title", action);
 
-        ViewCompat.performAccessibilityAction(mView,
-                AccessibilityNodeInfoCompat.ACTION_FOCUS, null);
+        mView.performAccessibilityAction(AccessibilityNodeInfoCompat.ACTION_FOCUS, null);
         verify(action).perform(mView, null);
     }
 
@@ -525,8 +521,7 @@
         ViewCompat.replaceAccessibilityAction(mView, AccessibilityActionCompat.ACTION_FOCUS,
                 expectedLabel, action2);
 
-        ViewCompat.performAccessibilityAction(mView,
-                AccessibilityNodeInfoCompat.ACTION_FOCUS, null);
+        mView.performAccessibilityAction(AccessibilityNodeInfoCompat.ACTION_FOCUS, null);
         verify(action2).perform(mView, null);
         verify(action, never()).perform(mView, null);
     }
@@ -561,7 +556,7 @@
         final boolean extendSelection = true;
         bundle.putBoolean(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN,
                 extendSelection);
-        ViewCompat.performAccessibilityAction(mView,
+        mView.performAccessibilityAction(
                 AccessibilityNodeInfoCompat.ACTION_NEXT_AT_MOVEMENT_GRANULARITY, bundle);
         AccessibilityViewCommand.MoveAtGranularityArguments args =
                 new AccessibilityViewCommand.MoveAtGranularityArguments();
@@ -577,23 +572,23 @@
     @Test
     @SdkSuppress(minSdkVersion = 21)
     public void testSetAccessibilityDelegate_viewAutoImportant_makesViewImportant() {
-        ViewCompat.setImportantForAccessibility(mView, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+        mView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
         assertThat(mView.getImportantForAccessibility()).isEqualTo(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
+                View.IMPORTANT_FOR_ACCESSIBILITY_AUTO);
         ViewCompat.setAccessibilityDelegate(mView, new AccessibilityDelegateCompat());
         assertThat(mView.getImportantForAccessibility()).isEqualTo(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+                View.IMPORTANT_FOR_ACCESSIBILITY_YES);
     }
 
     @SdkSuppress(minSdkVersion = 21)
     @Test
     public void testSetAccessibilityDelegate_viewUnimportant_doesNotMakeViewImportant() {
-        ViewCompat.setImportantForAccessibility(mView, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
+        mView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
         Truth.assertThat(mView.getImportantForAccessibility()).isEqualTo(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO);
         ViewCompat.setAccessibilityDelegate(mView, new AccessibilityDelegateCompat());
         Truth.assertThat(mView.getImportantForAccessibility()).isEqualTo(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO);
     }
 
     @Test
diff --git a/core/core/src/androidTest/java/androidx/core/view/GravityCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/GravityCompatTest.java
index a3adf6a..e202a19 100644
--- a/core/core/src/androidTest/java/androidx/core/view/GravityCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/GravityCompatTest.java
@@ -21,6 +21,7 @@
 import android.os.Build;
 import android.support.v4.testutils.TestUtils;
 import android.view.Gravity;
+import android.view.View;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
@@ -42,46 +43,46 @@
     @Test
     public void testGetAbsoluteGravity() {
         assertEquals("Left under LTR",
-                GravityCompat.getAbsoluteGravity(Gravity.LEFT, ViewCompat.LAYOUT_DIRECTION_LTR),
+                GravityCompat.getAbsoluteGravity(Gravity.LEFT, View.LAYOUT_DIRECTION_LTR),
                 Gravity.LEFT);
         assertEquals("Right under LTR",
-                GravityCompat.getAbsoluteGravity(Gravity.RIGHT, ViewCompat.LAYOUT_DIRECTION_LTR),
+                GravityCompat.getAbsoluteGravity(Gravity.RIGHT, View.LAYOUT_DIRECTION_LTR),
                 Gravity.RIGHT);
         assertEquals("Left under RTL",
-                GravityCompat.getAbsoluteGravity(Gravity.LEFT, ViewCompat.LAYOUT_DIRECTION_RTL),
+                GravityCompat.getAbsoluteGravity(Gravity.LEFT, View.LAYOUT_DIRECTION_RTL),
                 Gravity.LEFT);
         assertEquals("Right under RTL",
-                GravityCompat.getAbsoluteGravity(Gravity.RIGHT, ViewCompat.LAYOUT_DIRECTION_RTL),
+                GravityCompat.getAbsoluteGravity(Gravity.RIGHT, View.LAYOUT_DIRECTION_RTL),
                 Gravity.RIGHT);
 
         assertEquals("Start under LTR",
                 GravityCompat.getAbsoluteGravity(GravityCompat.START,
-                        ViewCompat.LAYOUT_DIRECTION_LTR),
+                        View.LAYOUT_DIRECTION_LTR),
                 Gravity.LEFT);
         assertEquals("End under LTR",
                 GravityCompat.getAbsoluteGravity(GravityCompat.END,
-                        ViewCompat.LAYOUT_DIRECTION_LTR),
+                        View.LAYOUT_DIRECTION_LTR),
                 Gravity.RIGHT);
 
         if (Build.VERSION.SDK_INT >= 17) {
             // The following tests are only expected to pass on v17+ devices
             assertEquals("Start under RTL",
                     GravityCompat.getAbsoluteGravity(GravityCompat.START,
-                            ViewCompat.LAYOUT_DIRECTION_RTL),
+                            View.LAYOUT_DIRECTION_RTL),
                     Gravity.RIGHT);
             assertEquals("End under RTL",
                     GravityCompat.getAbsoluteGravity(GravityCompat.END,
-                            ViewCompat.LAYOUT_DIRECTION_RTL),
+                            View.LAYOUT_DIRECTION_RTL),
                     Gravity.LEFT);
         } else {
             // And on older devices START is always LEFT, END is always RIGHT
             assertEquals("Start under RTL",
                     GravityCompat.getAbsoluteGravity(GravityCompat.START,
-                            ViewCompat.LAYOUT_DIRECTION_RTL),
+                            View.LAYOUT_DIRECTION_RTL),
                     Gravity.LEFT);
             assertEquals("End under RTL",
                     GravityCompat.getAbsoluteGravity(GravityCompat.END,
-                            ViewCompat.LAYOUT_DIRECTION_RTL),
+                            View.LAYOUT_DIRECTION_RTL),
                     Gravity.RIGHT);
         }
     }
@@ -92,55 +93,55 @@
 
         // Left / top aligned under LTR direction
         GravityCompat.apply(Gravity.LEFT | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Left / top aligned under LTR: ",
                 outRect, 0, 0, 100, 50);
 
         // Center / top aligned under LTR direction
         GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Center / top aligned under LTR: ",
                 outRect, 50, 0, 150, 50);
 
         // Right / top aligned under LTR direction
         GravityCompat.apply(Gravity.RIGHT | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Right / top aligned under LTR: ",
                 outRect, 100, 0, 200, 50);
 
         // Left / center aligned under LTR direction
         GravityCompat.apply(Gravity.LEFT | Gravity.CENTER_VERTICAL, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Left / center aligned under LTR: ",
                 outRect, 0, 25, 100, 75);
 
         // Center / center aligned under LTR direction
         GravityCompat.apply(Gravity.CENTER, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Center / center aligned under LTR: ",
                 outRect, 50, 25, 150, 75);
 
         // Right / center aligned under LTR direction
         GravityCompat.apply(Gravity.RIGHT | Gravity.CENTER_VERTICAL, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Right / center aligned under LTR: ",
                 outRect, 100, 25, 200, 75);
 
         // Left / bottom aligned under LTR direction
         GravityCompat.apply(Gravity.LEFT | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Left / bottom aligned under LTR: ",
                 outRect, 0, 50, 100, 100);
 
         // Center / bottom aligned under LTR direction
         GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Center / bottom aligned under LTR: ",
                 outRect, 50, 50, 150, 100);
 
         // Right / bottom aligned under LTR direction
         GravityCompat.apply(Gravity.RIGHT | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Right / bottom aligned under LTR: ",
                 outRect, 100, 50, 200, 100);
 
@@ -149,37 +150,37 @@
 
         // Start / top aligned under LTR direction
         GravityCompat.apply(GravityCompat.START | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Start / top aligned under LTR: ",
                 outRect, 0, 0, 100, 50);
 
         // End / top aligned under LTR direction
         GravityCompat.apply(GravityCompat.END | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("End / top aligned under LTR: ",
                 outRect, 100, 0, 200, 50);
 
         // Start / center aligned under LTR direction
         GravityCompat.apply(GravityCompat.START | Gravity.CENTER_VERTICAL, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Start / center aligned under LTR: ",
                 outRect, 0, 25, 100, 75);
 
         // End / center aligned under LTR direction
         GravityCompat.apply(GravityCompat.END | Gravity.CENTER_VERTICAL, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("End / center aligned under LTR: ",
                 outRect, 100, 25, 200, 75);
 
         // Start / bottom aligned under LTR direction
         GravityCompat.apply(GravityCompat.START | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("Start / bottom aligned under LTR: ",
                 outRect, 0, 50, 100, 100);
 
         // End / bottom aligned under LTR direction
         GravityCompat.apply(GravityCompat.END | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_LTR);
         TestUtils.assertRectangleBounds("End / bottom aligned under LTR: ",
                 outRect, 100, 50, 200, 100);
     }
@@ -193,55 +194,55 @@
 
         // Left / top aligned under RTL direction
         GravityCompat.apply(Gravity.LEFT | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Left / top aligned under RTL: ",
                 outRect, 0, 0, 100, 50);
 
         // Center / top aligned under RTL direction
         GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Center / top aligned under RTL: ",
                 outRect, 50, 0, 150, 50);
 
         // Right / top aligned under RTL direction
         GravityCompat.apply(Gravity.RIGHT | Gravity.TOP, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Right / top aligned under RTL: ",
                 outRect, 100, 0, 200, 50);
 
         // Left / center aligned under RTL direction
         GravityCompat.apply(Gravity.LEFT | Gravity.CENTER_VERTICAL, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Left / center aligned under RTL: ",
                 outRect, 0, 25, 100, 75);
 
         // Center / center aligned under RTL direction
         GravityCompat.apply(Gravity.CENTER, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Center / center aligned under RTL: ",
                 outRect, 50, 25, 150, 75);
 
         // Right / center aligned under RTL direction
         GravityCompat.apply(Gravity.RIGHT | Gravity.CENTER_VERTICAL, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Right / center aligned under RTL: ",
                 outRect, 100, 25, 200, 75);
 
         // Left / bottom aligned under RTL direction
         GravityCompat.apply(Gravity.LEFT | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Left / bottom aligned under RTL: ",
                 outRect, 0, 50, 100, 100);
 
         // Center / bottom aligned under RTL direction
         GravityCompat.apply(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Center / bottom aligned under RTL: ",
                 outRect, 50, 50, 150, 100);
 
         // Right / bottom aligned under RTL direction
         GravityCompat.apply(Gravity.RIGHT | Gravity.BOTTOM, 100, 50,
-                new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
         TestUtils.assertRectangleBounds("Right / bottom aligned under RTL: ",
                 outRect, 100, 50, 200, 100);
 
@@ -252,37 +253,37 @@
 
             // Start / top aligned under RTL direction
             GravityCompat.apply(GravityCompat.START | Gravity.TOP, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("Start / top aligned under RTL: ",
                     outRect, 100, 0, 200, 50);
 
             // End / top aligned under RTL direction
             GravityCompat.apply(GravityCompat.END | Gravity.TOP, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("End / top aligned under RTL: ",
                     outRect, 0, 0, 100, 50);
 
             // Start / center aligned under RTL direction
             GravityCompat.apply(GravityCompat.START | Gravity.CENTER_VERTICAL, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("Start / center aligned under RTL: ",
                     outRect, 100, 25, 200, 75);
 
             // End / center aligned under RTL direction
             GravityCompat.apply(GravityCompat.END | Gravity.CENTER_VERTICAL, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("End / center aligned under RTL: ",
                     outRect, 0, 25, 100, 75);
 
             // Start / bottom aligned under RTL direction
             GravityCompat.apply(GravityCompat.START | Gravity.BOTTOM, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("Start / bottom aligned under RTL: ",
                     outRect, 100, 50, 200, 100);
 
             // End / bottom aligned under RTL direction
             GravityCompat.apply(GravityCompat.END | Gravity.BOTTOM, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("End / bottom aligned under RTL: ",
                     outRect, 0, 50, 100, 100);
         } else {
@@ -290,37 +291,37 @@
 
             // Start / top aligned under RTL direction
             GravityCompat.apply(GravityCompat.START | Gravity.TOP, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("Start / top aligned under RTL: ",
                     outRect, 0, 0, 100, 50);
 
             // End / top aligned under RTL direction
             GravityCompat.apply(GravityCompat.END | Gravity.TOP, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("End / top aligned under RTL: ",
                     outRect, 100, 0, 200, 50);
 
             // Start / center aligned under RTL direction
             GravityCompat.apply(GravityCompat.START | Gravity.CENTER_VERTICAL, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("Start / center aligned under RTL: ",
                     outRect, 0, 25, 100, 75);
 
             // End / center aligned under RTL direction
             GravityCompat.apply(GravityCompat.END | Gravity.CENTER_VERTICAL, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("End / center aligned under RTL: ",
                     outRect, 100, 25, 200, 75);
 
             // Start / bottom aligned under RTL direction
             GravityCompat.apply(GravityCompat.START | Gravity.BOTTOM, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("Start / bottom aligned under RTL: ",
                     outRect, 0, 50, 100, 100);
 
             // End / bottom aligned under RTL direction
             GravityCompat.apply(GravityCompat.END | Gravity.BOTTOM, 100, 50,
-                    new Rect(0, 0, 200, 100), outRect, ViewCompat.LAYOUT_DIRECTION_RTL);
+                    new Rect(0, 0, 200, 100), outRect, View.LAYOUT_DIRECTION_RTL);
             TestUtils.assertRectangleBounds("End / bottom aligned under RTL: ",
                     outRect, 100, 50, 200, 100);
         }
diff --git a/core/core/src/androidTest/java/androidx/core/view/MarginLayoutParamsCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/MarginLayoutParamsCompatTest.java
index 7289810..22971c9 100644
--- a/core/core/src/androidTest/java/androidx/core/view/MarginLayoutParamsCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/MarginLayoutParamsCompatTest.java
@@ -18,6 +18,7 @@
 import static org.junit.Assert.assertEquals;
 
 import android.os.Build;
+import android.view.View;
 import android.view.ViewGroup;
 
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -33,15 +34,15 @@
     public void testLayoutDirection() {
         ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
 
-        assertEquals("Default LTR layout direction", ViewCompat.LAYOUT_DIRECTION_LTR,
+        assertEquals("Default LTR layout direction", View.LAYOUT_DIRECTION_LTR,
                 MarginLayoutParamsCompat.getLayoutDirection(mlp));
 
-        MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
-        assertEquals("RTL layout direction", ViewCompat.LAYOUT_DIRECTION_RTL,
+        MarginLayoutParamsCompat.setLayoutDirection(mlp, View.LAYOUT_DIRECTION_RTL);
+        assertEquals("RTL layout direction", View.LAYOUT_DIRECTION_RTL,
                 MarginLayoutParamsCompat.getLayoutDirection(mlp));
 
-        MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_LTR);
-        assertEquals("Back to LTR layout direction", ViewCompat.LAYOUT_DIRECTION_LTR,
+        MarginLayoutParamsCompat.setLayoutDirection(mlp, View.LAYOUT_DIRECTION_LTR);
+        assertEquals("Back to LTR layout direction", View.LAYOUT_DIRECTION_LTR,
                 MarginLayoutParamsCompat.getLayoutDirection(mlp));
     }
 
@@ -65,7 +66,7 @@
         mlp.leftMargin = 50;
         mlp.rightMargin = 80;
 
-        MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
+        MarginLayoutParamsCompat.setLayoutDirection(mlp, View.LAYOUT_DIRECTION_RTL);
 
         if (Build.VERSION.SDK_INT >= 17) {
             assertEquals("Mapping right to start under RTL", 80,
@@ -107,7 +108,7 @@
         // to do platform-specific checks, the checks in this test are platform-agnostic,
         // relying on the relevant MarginLayoutParamsCompat to do the right mapping internally.
 
-        MarginLayoutParamsCompat.setLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
+        MarginLayoutParamsCompat.setLayoutDirection(mlp, View.LAYOUT_DIRECTION_RTL);
         MarginLayoutParamsCompat.setMarginStart(mlp, 50);
 
         assertEquals("Resolved start margin under RTL", 50,
@@ -129,7 +130,7 @@
         ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
 
         MarginLayoutParamsCompat.setMarginStart(mlp, 50);
-        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_LTR);
+        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, View.LAYOUT_DIRECTION_LTR);
 
         // While there's no guarantee that left/right margin fields have been set / resolved
         // prior to the resolveLayoutDirection call, they should be now
@@ -137,7 +138,7 @@
         assertEquals("Default right margin field under LTR", 0, mlp.rightMargin);
 
         MarginLayoutParamsCompat.setMarginEnd(mlp, 80);
-        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_LTR);
+        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, View.LAYOUT_DIRECTION_LTR);
 
         assertEquals("Resolved right margin field under LTR", 80, mlp.rightMargin);
         assertEquals("Keeping left margin field under LTR", 50, mlp.leftMargin);
@@ -148,7 +149,7 @@
         ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(0, 0);
 
         MarginLayoutParamsCompat.setMarginStart(mlp, 50);
-        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
+        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, View.LAYOUT_DIRECTION_RTL);
 
         // While there's no guarantee that left/right margin fields have been set / resolved
         // prior to the resolveLayoutDirection call, they should be now
@@ -163,7 +164,7 @@
         }
 
         MarginLayoutParamsCompat.setMarginEnd(mlp, 80);
-        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, ViewCompat.LAYOUT_DIRECTION_RTL);
+        MarginLayoutParamsCompat.resolveLayoutDirection(mlp, View.LAYOUT_DIRECTION_RTL);
 
         if (Build.VERSION.SDK_INT >= 17) {
             assertEquals("Resolved left margin field under RTL", 80, mlp.leftMargin);
diff --git a/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java
index a27a4e2..540d286 100644
--- a/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/ViewCompatTest.java
@@ -108,8 +108,8 @@
     public void testConstants() {
         // Compat constants must match core constants since they can be used interchangeably
         // in various support lib calls.
-        assertEquals("LTR constants", View.LAYOUT_DIRECTION_LTR, ViewCompat.LAYOUT_DIRECTION_LTR);
-        assertEquals("RTL constants", View.LAYOUT_DIRECTION_RTL, ViewCompat.LAYOUT_DIRECTION_RTL);
+        assertEquals("LTR constants", View.LAYOUT_DIRECTION_LTR, View.LAYOUT_DIRECTION_LTR);
+        assertEquals("RTL constants", View.LAYOUT_DIRECTION_RTL, View.LAYOUT_DIRECTION_RTL);
     }
 
     @Test
@@ -252,7 +252,7 @@
 
         Set<Integer> generatedIds = new HashSet<>();
         for (int i = 0; i < requestCount; i++) {
-            int generatedId = ViewCompat.generateViewId();
+            int generatedId = View.generateViewId();
             assertTrue(isViewIdGenerated(generatedId));
             generatedIds.add(generatedId);
         }
@@ -329,7 +329,7 @@
         Bundle bundle = new Bundle();
         bundle.putInt(ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT, 100);
 
-        ViewCompat.performAccessibilityAction(view, actionCompat.getId(), bundle);
+        view.performAccessibilityAction(actionCompat.getId(), bundle);
 
         ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
         verify(view).performAccessibilityAction(eq(actionCompat.getId()), bundleCaptor.capture());
diff --git a/core/core/src/androidTest/java/androidx/core/view/ViewGroupCompatTest.java b/core/core/src/androidTest/java/androidx/core/view/ViewGroupCompatTest.java
index a0054a2..7503c47 100644
--- a/core/core/src/androidTest/java/androidx/core/view/ViewGroupCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/view/ViewGroupCompatTest.java
@@ -57,7 +57,7 @@
         InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                ViewCompat.setBackground(mViewGroup, new ColorDrawable(Color.GRAY));
+                mViewGroup.setBackground(new ColorDrawable(Color.GRAY));
             }
         });
         assertTrue(ViewGroupCompat.isTransitionGroup(mViewGroup));
diff --git a/core/core/src/androidTest/java/androidx/core/widget/ListViewCompatTest.java b/core/core/src/androidTest/java/androidx/core/widget/ListViewCompatTest.java
index 313f431..0d4afc2 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/ListViewCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/ListViewCompatTest.java
@@ -42,6 +42,7 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+@SuppressWarnings("deprecation")
 @MediumTest
 public class ListViewCompatTest extends BaseInstrumentationTestCase<ListViewTestActivity> {
     private ListView mListView;
diff --git a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingA11yScrollTest.java b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingA11yScrollTest.java
index 3009db1..27ca404 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingA11yScrollTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/NestedScrollViewNestedScrollingA11yScrollTest.java
@@ -186,7 +186,7 @@
                             }
                         });
 
-                ViewCompat.performAccessibilityAction(mNestedScrollView, action, null);
+                mNestedScrollView.performAccessibilityAction(action, null);
             }
         });
         assertThat(countDownLatch.await(2, TimeUnit.SECONDS), is(true));
diff --git a/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java b/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
index d0edce2..b175c96 100644
--- a/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/widget/TextViewCompatTest.java
@@ -62,7 +62,6 @@
 import androidx.appcompat.view.menu.MenuBuilder;
 import androidx.core.test.R;
 import androidx.core.text.PrecomputedTextCompat;
-import androidx.core.view.ViewCompat;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
@@ -205,7 +204,7 @@
 
     @Test
     public void testCompoundDrawablesRelativeRtl() throws Throwable {
-        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+        onView(withId(R.id.text_view)).perform(setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
         final Drawable drawableStart = new ColorDrawable(0xFFFF0000);
         drawableStart.setBounds(0, 0, 20, 20);
@@ -219,7 +218,7 @@
                 drawableTop, drawableEnd, null));
 
         // Check to see whether our text view is under RTL mode
-        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
+        if (mTextView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) {
             // This will happen on v17- devices
             return;
         }
@@ -284,7 +283,7 @@
 
     @Test
     public void testCompoundDrawablesRelativeWithIntrinsicBoundsRtl() throws Throwable {
-        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+        onView(withId(R.id.text_view)).perform(setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
         final Drawable drawableStart = new TestDrawable(0xFFFF0000, 30, 20);
         final Drawable drawableEnd = new TestDrawable(0xFF0000FF, 25, 45);
@@ -295,7 +294,7 @@
                 drawableStart, null, drawableEnd, drawableBottom));
 
         // Check to see whether our text view is under RTL mode
-        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
+        if (mTextView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) {
             // This will happen on v17- devices
             return;
         }
@@ -370,7 +369,7 @@
 
     @Test
     public void testCompoundDrawablesRelativeWithIntrinsicBoundsByIdRtl() throws Throwable {
-        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+        onView(withId(R.id.text_view)).perform(setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
         onView(withId(R.id.text_view)).perform(setText(R.string.test_text_long));
         onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelativeWithIntrinsicBounds(
@@ -378,7 +377,7 @@
                 R.drawable.test_drawable_green, R.drawable.test_drawable_blue));
 
         // Check to see whether our text view is under RTL mode
-        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
+        if (mTextView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) {
             // This will happen on v17- devices
             return;
         }
@@ -426,12 +425,12 @@
         final Drawable drawableEnd = new TestDrawable(0xFF0000FF, 20, 20);
         final Drawable drawableBottom = new TestDrawable(0xFF00FF00, 20, 20);
 
-        onView(withId(R.id.text_view)).perform(setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+        onView(withId(R.id.text_view)).perform(setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
         onView(withId(R.id.text_view)).perform(setCompoundDrawablesRelative(drawableStart,
                 drawableTop, drawableEnd, drawableBottom));
 
         // Check to see whether our text view is under RTL mode
-        if (ViewCompat.getLayoutDirection(mTextView) != ViewCompat.LAYOUT_DIRECTION_RTL) {
+        if (mTextView.getLayoutDirection() != View.LAYOUT_DIRECTION_RTL) {
             // This will happen on v17- devices
             return;
         }
diff --git a/core/core/src/main/java/androidx/core/app/ActivityCompat.java b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
index 6ac4335..d89856a 100644
--- a/core/core/src/main/java/androidx/core/app/ActivityCompat.java
+++ b/core/core/src/main/java/androidx/core/app/ActivityCompat.java
@@ -466,7 +466,7 @@
      * </p>
      * <p>
      * Calling this API for permissions already granted to your app would show UI
-     * to the user to decided whether the app can still hold these permissions. This
+     * to the user to decide whether the app can still hold these permissions. This
      * can be useful if the way your app uses the data guarded by the permissions
      * changes significantly.
      * </p>
diff --git a/core/core/src/main/java/androidx/core/graphics/drawable/DrawableCompat.java b/core/core/src/main/java/androidx/core/graphics/drawable/DrawableCompat.java
index a4d6ea9..8dfcf26 100644
--- a/core/core/src/main/java/androidx/core/graphics/drawable/DrawableCompat.java
+++ b/core/core/src/main/java/androidx/core/graphics/drawable/DrawableCompat.java
@@ -26,6 +26,7 @@
 import android.os.Build;
 import android.util.AttributeSet;
 import android.util.Log;
+import android.view.View;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.DoNotInline;
@@ -416,9 +417,9 @@
                     sGetLayoutDirectionMethod = null;
                 }
             }
-            return ViewCompat.LAYOUT_DIRECTION_LTR;
+            return View.LAYOUT_DIRECTION_LTR;
         } else {
-            return ViewCompat.LAYOUT_DIRECTION_LTR;
+            return View.LAYOUT_DIRECTION_LTR;
         }
     }
 
diff --git a/core/core/src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawableFactory.java b/core/core/src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawableFactory.java
index 7bd0157..c9c3cd3 100644
--- a/core/core/src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawableFactory.java
+++ b/core/core/src/main/java/androidx/core/graphics/drawable/RoundedBitmapDrawableFactory.java
@@ -22,12 +22,12 @@
 import android.graphics.Rect;
 import android.os.Build;
 import android.util.Log;
+import android.view.View;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.graphics.BitmapCompat;
 import androidx.core.view.GravityCompat;
-import androidx.core.view.ViewCompat;
 
 import java.io.InputStream;
 
@@ -60,7 +60,7 @@
         void gravityCompatApply(int gravity, int bitmapWidth, int bitmapHeight,
                 Rect bounds, Rect outRect) {
             GravityCompat.apply(gravity, bitmapWidth, bitmapHeight,
-                    bounds, outRect, ViewCompat.LAYOUT_DIRECTION_LTR);
+                    bounds, outRect, View.LAYOUT_DIRECTION_LTR);
         }
     }
 
diff --git a/core/core/src/main/java/androidx/core/text/BidiFormatter.java b/core/core/src/main/java/androidx/core/text/BidiFormatter.java
index 7f9b89e..baf10f1 100644
--- a/core/core/src/main/java/androidx/core/text/BidiFormatter.java
+++ b/core/core/src/main/java/androidx/core/text/BidiFormatter.java
@@ -19,8 +19,7 @@
 import static androidx.core.text.TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR;
 
 import android.text.SpannableStringBuilder;
-
-import androidx.core.view.ViewCompat;
+import android.view.View;
 
 import java.util.Locale;
 
@@ -514,7 +513,7 @@
      * @return true if the {@code locale} directionality is RTL. False otherwise.
      */
     static boolean isRtlLocale(Locale locale) {
-        return (TextUtilsCompat.getLayoutDirectionFromLocale(locale) == ViewCompat.LAYOUT_DIRECTION_RTL);
+        return (TextUtilsCompat.getLayoutDirectionFromLocale(locale) == View.LAYOUT_DIRECTION_RTL);
     }
 
     /**
diff --git a/core/core/src/main/java/androidx/core/text/TextDirectionHeuristicsCompat.java b/core/core/src/main/java/androidx/core/text/TextDirectionHeuristicsCompat.java
index 5f6fe93..565f6be 100644
--- a/core/core/src/main/java/androidx/core/text/TextDirectionHeuristicsCompat.java
+++ b/core/core/src/main/java/androidx/core/text/TextDirectionHeuristicsCompat.java
@@ -17,7 +17,7 @@
 package androidx.core.text;
 
 
-import androidx.core.view.ViewCompat;
+import android.view.View;
 
 import java.nio.CharBuffer;
 
@@ -247,7 +247,7 @@
         @Override
         protected boolean defaultIsRtl() {
             final int dir = TextUtilsCompat.getLayoutDirectionFromLocale(java.util.Locale.getDefault());
-            return (dir == ViewCompat.LAYOUT_DIRECTION_RTL);
+            return (dir == View.LAYOUT_DIRECTION_RTL);
         }
 
         static final TextDirectionHeuristicLocale INSTANCE =
diff --git a/core/core/src/main/java/androidx/core/view/MarginLayoutParamsCompat.java b/core/core/src/main/java/androidx/core/view/MarginLayoutParamsCompat.java
index 8039d09..1671bdb 100644
--- a/core/core/src/main/java/androidx/core/view/MarginLayoutParamsCompat.java
+++ b/core/core/src/main/java/androidx/core/view/MarginLayoutParamsCompat.java
@@ -107,11 +107,11 @@
         int result;
         result = lp.getLayoutDirection();
 
-        if ((result != ViewCompat.LAYOUT_DIRECTION_LTR)
-                && (result != ViewCompat.LAYOUT_DIRECTION_RTL)) {
+        if ((result != View.LAYOUT_DIRECTION_LTR)
+                && (result != View.LAYOUT_DIRECTION_RTL)) {
             // This can happen on older platform releases where the default (unset) layout direction
             // is -1
-            result = ViewCompat.LAYOUT_DIRECTION_LTR;
+            result = View.LAYOUT_DIRECTION_LTR;
         }
         return result;
     }
diff --git a/core/core/src/main/java/androidx/core/view/ViewCompat.java b/core/core/src/main/java/androidx/core/view/ViewCompat.java
index 07a7885..0345c75 100644
--- a/core/core/src/main/java/androidx/core/view/ViewCompat.java
+++ b/core/core/src/main/java/androidx/core/view/ViewCompat.java
@@ -356,24 +356,36 @@
 
     /**
      * Horizontal layout direction of this view is from Left to Right.
+     *
+     * @deprecated Use {@link View#LAYOUT_DIRECTION_LTR} directly.
      */
+    @Deprecated
     public static final int LAYOUT_DIRECTION_LTR = 0;
 
     /**
      * Horizontal layout direction of this view is from Right to Left.
+     *
+     * @deprecated Use {@link View#LAYOUT_DIRECTION_RTL} directly.
      */
+    @Deprecated
     public static final int LAYOUT_DIRECTION_RTL = 1;
 
     /**
      * Horizontal layout direction of this view is inherited from its parent.
      * Use with {@link #setLayoutDirection}.
+     *
+     * @deprecated Use {@link View#LAYOUT_DIRECTION_INHERIT} directly.
      */
+    @Deprecated
     public static final int LAYOUT_DIRECTION_INHERIT = 2;
 
     /**
      * Horizontal layout direction of this view is from deduced from the default language
      * script for the locale. Use with {@link #setLayoutDirection}.
+     *
+     * @deprecated Use {@link View#LAYOUT_DIRECTION_LOCALE} directly.
      */
+    @Deprecated
     public static final int LAYOUT_DIRECTION_LOCALE = 3;
 
     /**
diff --git a/core/core/src/main/java/androidx/core/view/WindowInsetsCompat.java b/core/core/src/main/java/androidx/core/view/WindowInsetsCompat.java
index 8f1c28b..96c37bc 100644
--- a/core/core/src/main/java/androidx/core/view/WindowInsetsCompat.java
+++ b/core/core/src/main/java/androidx/core/view/WindowInsetsCompat.java
@@ -166,7 +166,7 @@
     public static WindowInsetsCompat toWindowInsetsCompat(@NonNull WindowInsets insets,
             @Nullable View view) {
         WindowInsetsCompat wic = new WindowInsetsCompat(Preconditions.checkNotNull(insets));
-        if (view != null && ViewCompat.isAttachedToWindow(view)) {
+        if (view != null && view.isAttachedToWindow()) {
             // Pass the root window insets, which is useful if the Activity is adjustResize
             wic.setRootWindowInsets(ViewCompat.getRootWindowInsets(view));
             // Pass in the root view which allows the WIC to make of a copy of it's visible bounds
diff --git a/core/core/src/main/java/androidx/core/widget/ListViewAutoScrollHelper.java b/core/core/src/main/java/androidx/core/widget/ListViewAutoScrollHelper.java
index 3bbb83a..c4bc6b6 100644
--- a/core/core/src/main/java/androidx/core/widget/ListViewAutoScrollHelper.java
+++ b/core/core/src/main/java/androidx/core/widget/ListViewAutoScrollHelper.java
@@ -37,7 +37,7 @@
 
     @Override
     public void scrollTargetBy(int deltaX, int deltaY) {
-        ListViewCompat.scrollListBy(mTarget, deltaY);
+        mTarget.scrollListBy(deltaY);
     }
 
     @Override
diff --git a/core/core/src/main/java/androidx/core/widget/ListViewCompat.java b/core/core/src/main/java/androidx/core/widget/ListViewCompat.java
index 590224d..894c7cb 100644
--- a/core/core/src/main/java/androidx/core/widget/ListViewCompat.java
+++ b/core/core/src/main/java/androidx/core/widget/ListViewCompat.java
@@ -21,8 +21,11 @@
 import androidx.annotation.NonNull;
 
 /**
- * Helper for accessing features in {@link ListView}
+ * Helper for accessing features in {@link ListView}.
+ *
+ * @deprecated Use {@link ListView} directly.
  */
+@Deprecated
 public final class ListViewCompat {
 
     /**
@@ -30,7 +33,9 @@
      *
      * @param listView the list to scroll
      * @param y the amount of pixels to scroll by vertically
+     * @deprecated Use {@link ListView#scrollListBy(int)} directly.
      */
+    @Deprecated
     public static void scrollListBy(@NonNull ListView listView, int y) {
         // Call the framework version directly
         listView.scrollListBy(y);
@@ -45,7 +50,9 @@
      * @return true if the list can be scrolled in the specified direction,
      *         false otherwise.
      * @see #scrollListBy(ListView, int)
+     * @deprecated Use {@link ListView#canScrollList(int)} directly.
      */
+    @Deprecated
     public static boolean canScrollList(@NonNull ListView listView, int direction) {
         // Call the framework version directly
         return listView.canScrollList(direction);
diff --git a/core/core/src/main/java/androidx/core/widget/NestedScrollView.java b/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
index e6240b5..8eebc91 100644
--- a/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
+++ b/core/core/src/main/java/androidx/core/widget/NestedScrollView.java
@@ -885,7 +885,7 @@
                 mActivePointerId = INVALID_POINTER;
                 recycleVelocityTracker();
                 if (mScroller.springBack(getScrollX(), getScrollY(), 0, 0, 0, getScrollRange())) {
-                    ViewCompat.postInvalidateOnAnimation(this);
+                    postInvalidateOnAnimation();
                 }
                 stopNestedScroll(ViewCompat.TYPE_TOUCH);
                 break;
@@ -993,7 +993,7 @@
                     }
                 } else if (mScroller.springBack(getScrollX(), getScrollY(), 0, 0, 0,
                         getScrollRange())) {
-                    ViewCompat.postInvalidateOnAnimation(this);
+                    postInvalidateOnAnimation();
                 }
                 endTouchDrag();
                 break;
@@ -1003,7 +1003,7 @@
                 if (mIsBeingDragged && getChildCount() > 0) {
                     if (mScroller.springBack(getScrollX(), getScrollY(), 0, 0, 0,
                             getScrollRange())) {
-                        ViewCompat.postInvalidateOnAnimation(this);
+                        postInvalidateOnAnimation();
                     }
                 }
                 endTouchDrag();
@@ -1171,7 +1171,7 @@
         }
 
         if (!mEdgeGlowTop.isFinished() || !mEdgeGlowBottom.isFinished()) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
             hitScrollBarrier = false;
         }
 
@@ -1994,7 +1994,7 @@
         }
 
         if (!mScroller.isFinished()) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         } else {
             stopNestedScroll(ViewCompat.TYPE_NON_TOUCH);
         }
@@ -2041,7 +2041,7 @@
             stopNestedScroll(ViewCompat.TYPE_NON_TOUCH);
         }
         mLastScrollerY = getScrollY();
-        ViewCompat.postInvalidateOnAnimation(this);
+        postInvalidateOnAnimation();
     }
 
     private void abortAnimatedScroll() {
@@ -2366,7 +2366,7 @@
             canvas.translate(xTranslation, yTranslation);
             mEdgeGlowTop.setSize(width, height);
             if (mEdgeGlowTop.draw(canvas)) {
-                ViewCompat.postInvalidateOnAnimation(this);
+                postInvalidateOnAnimation();
             }
             canvas.restoreToCount(restoreCount);
         }
@@ -2390,7 +2390,7 @@
             canvas.rotate(180, width, 0);
             mEdgeGlowBottom.setSize(width, height);
             if (mEdgeGlowBottom.draw(canvas)) {
-                ViewCompat.postInvalidateOnAnimation(this);
+                postInvalidateOnAnimation();
             }
             canvas.restoreToCount(restoreCount);
         }
diff --git a/core/haptics/haptics/build.gradle b/core/haptics/haptics/build.gradle
index fdee3b5..aaaa2c4 100644
--- a/core/haptics/haptics/build.gradle
+++ b/core/haptics/haptics/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/uwb/uwb-rxjava3/build.gradle b/core/uwb/uwb-rxjava3/build.gradle
index 671910d..6ff1306 100644
--- a/core/uwb/uwb-rxjava3/build.gradle
+++ b/core/uwb/uwb-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/core/uwb/uwb/build.gradle b/core/uwb/uwb/build.gradle
index 7c8cf11..58e816b 100644
--- a/core/uwb/uwb/build.gradle
+++ b/core/uwb/uwb/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/credentials/credentials-fido/build.gradle b/credentials/credentials-fido/build.gradle
index aab49bf..f2ac41e 100644
--- a/credentials/credentials-fido/build.gradle
+++ b/credentials/credentials-fido/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/credentials/credentials-play-services-auth/build.gradle b/credentials/credentials-play-services-auth/build.gradle
index 3b5972d..1199346 100644
--- a/credentials/credentials-play-services-auth/build.gradle
+++ b/credentials/credentials-play-services-auth/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/credentials/credentials-provider/build.gradle b/credentials/credentials-provider/build.gradle
index a2d506c..9f79fc5 100644
--- a/credentials/credentials-provider/build.gradle
+++ b/credentials/credentials-provider/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/credentials/credentials/build.gradle b/credentials/credentials/build.gradle
index e869105..af89acb 100644
--- a/credentials/credentials/build.gradle
+++ b/credentials/credentials/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/credentials/credentials/samples/build.gradle b/credentials/credentials/samples/build.gradle
index 885df849..7f1665e 100644
--- a/credentials/credentials/samples/build.gradle
+++ b/credentials/credentials/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/cursoradapter/cursoradapter/build.gradle b/cursoradapter/cursoradapter/build.gradle
index cff7d37..6f45661 100644
--- a/cursoradapter/cursoradapter/build.gradle
+++ b/cursoradapter/cursoradapter/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/customview/customview-poolingcontainer/build.gradle b/customview/customview-poolingcontainer/build.gradle
index d0bbaa2..babd09f 100644
--- a/customview/customview-poolingcontainer/build.gradle
+++ b/customview/customview-poolingcontainer/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/customview/customview/build.gradle b/customview/customview/build.gradle
index b9b8b46..83658ba 100644
--- a/customview/customview/build.gradle
+++ b/customview/customview/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/customview/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java b/customview/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java
index 51e136d..c746d38 100644
--- a/customview/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java
+++ b/customview/customview/src/main/java/androidx/customview/widget/ExploreByTouchHelper.java
@@ -145,10 +145,8 @@
         // Host view must be focusable so that we can delegate to virtual
         // views.
         host.setFocusable(true);
-        if (ViewCompat.getImportantForAccessibility(host)
-                == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-            ViewCompat.setImportantForAccessibility(
-                    host, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+        if (host.getImportantForAccessibility() == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+            host.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
     }
 
@@ -381,7 +379,7 @@
             case View.FOCUS_FORWARD:
             case View.FOCUS_BACKWARD:
                 final boolean isLayoutRtl =
-                        ViewCompat.getLayoutDirection(mHost) == ViewCompat.LAYOUT_DIRECTION_RTL;
+                        mHost.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
                 nextFocusedNode = FocusStrategy.findNextFocusInRelativeDirection(allNodes,
                         SPARSE_VALUES_ADAPTER, NODE_ADAPTER, focusedNode, direction, isLayoutRtl,
                         false);
@@ -873,7 +871,7 @@
     }
 
     private boolean performActionForHost(int action, Bundle arguments) {
-        return ViewCompat.performAccessibilityAction(mHost, action, arguments);
+        return mHost.performAccessibilityAction(action, arguments);
     }
 
     private boolean performActionForChild(int virtualViewId, int action, Bundle arguments) {
diff --git a/datastore/datastore-benchmark/build.gradle b/datastore/datastore-benchmark/build.gradle
index 97ed619..3a06fc9 100644
--- a/datastore/datastore-benchmark/build.gradle
+++ b/datastore/datastore-benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/datastore/datastore-compose-samples/build.gradle b/datastore/datastore-compose-samples/build.gradle
index dcb75af..698b179 100644
--- a/datastore/datastore-compose-samples/build.gradle
+++ b/datastore/datastore-compose-samples/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
diff --git a/datastore/datastore-core-okio/build.gradle b/datastore/datastore-core-okio/build.gradle
index 75c82c7..1c3b505 100644
--- a/datastore/datastore-core-okio/build.gradle
+++ b/datastore/datastore-core-okio/build.gradle
@@ -14,7 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/datastore/datastore-core/build.gradle b/datastore/datastore-core/build.gradle
index 2416171..16e0319 100644
--- a/datastore/datastore-core/build.gradle
+++ b/datastore/datastore-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/datastore/datastore-preferences-core/build.gradle b/datastore/datastore-preferences-core/build.gradle
index ce4f663..712741f 100644
--- a/datastore/datastore-preferences-core/build.gradle
+++ b/datastore/datastore-preferences-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.KmpPlatformsKt
 import androidx.build.LibraryType
diff --git a/datastore/datastore-preferences-proto/build.gradle b/datastore/datastore-preferences-proto/build.gradle
index 0d18af0c..d5b5bb1 100644
--- a/datastore/datastore-preferences-proto/build.gradle
+++ b/datastore/datastore-preferences-proto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/datastore/datastore-preferences-rxjava2/build.gradle b/datastore/datastore-preferences-rxjava2/build.gradle
index 409ee90..31c980d 100644
--- a/datastore/datastore-preferences-rxjava2/build.gradle
+++ b/datastore/datastore-preferences-rxjava2/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/datastore/datastore-preferences-rxjava3/build.gradle b/datastore/datastore-preferences-rxjava3/build.gradle
index 1585714..758d348 100644
--- a/datastore/datastore-preferences-rxjava3/build.gradle
+++ b/datastore/datastore-preferences-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/datastore/datastore-preferences/build.gradle b/datastore/datastore-preferences/build.gradle
index e0295f2c..f4ce242 100644
--- a/datastore/datastore-preferences/build.gradle
+++ b/datastore/datastore-preferences/build.gradle
@@ -14,7 +14,13 @@
  * 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.PlatformIdentifier
 import androidx.build.Publish
 
diff --git a/datastore/datastore-proto/build.gradle b/datastore/datastore-proto/build.gradle
index a9cd4cb1..6dce7f3 100644
--- a/datastore/datastore-proto/build.gradle
+++ b/datastore/datastore-proto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/datastore/datastore-rxjava2/build.gradle b/datastore/datastore-rxjava2/build.gradle
index b5f73de..87f304f 100644
--- a/datastore/datastore-rxjava2/build.gradle
+++ b/datastore/datastore-rxjava2/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/datastore/datastore-rxjava3/build.gradle b/datastore/datastore-rxjava3/build.gradle
index 4c93912..7c50719 100644
--- a/datastore/datastore-rxjava3/build.gradle
+++ b/datastore/datastore-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/datastore/datastore-sampleapp/build.gradle b/datastore/datastore-sampleapp/build.gradle
index 4fd7663..9a94612 100644
--- a/datastore/datastore-sampleapp/build.gradle
+++ b/datastore/datastore-sampleapp/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
diff --git a/datastore/datastore/build.gradle b/datastore/datastore/build.gradle
index 1170050..8189c7a 100644
--- a/datastore/datastore/build.gradle
+++ b/datastore/datastore/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index 2589ace..256f54e 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -523,50 +523,6 @@
 public abstract java\.util\.List<androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameEntity> jvmQuery\(\);
 public abstract androidx\.room\.integration\.kotlintestapp\.test\.JvmNameInDaoTest\.JvmNameDao jvmDao\(\);
 \^
-ViewCompat\.setBackground\(view, new ColorDrawable\(color\)\);
-\$SUPPORT/transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest\.java:[0-9]+: warning: \[deprecation\] getClipBounds\(View\) in ViewCompat has been deprecated
-assertNull\(ViewCompat\.getClipBounds\(redSquare\)\);
-\$SUPPORT/transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest\.java:[0-9]+: warning: \[deprecation\] setClipBounds\(View,Rect\) in ViewCompat has been deprecated
-ViewCompat\.setClipBounds\(redSquare, newClip\);
-final Rect endRect = ViewCompat\.getClipBounds\(redSquare\);
-ViewCompat\.setClipBounds\(redSquare, null\);
-ViewCompat\.setHasTransientState\(view, true\);
-ViewCompat\.setHasTransientState\(view, false\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ChangeBounds\.java:[0-9]+: warning: \[deprecation\] isLaidOut\(View\) in ViewCompat has been deprecated
-if \(ViewCompat\.isLaidOut\(view\) \|\| view\.getWidth\(\) != [0-9]+ \|\| view\.getHeight\(\) != [0-9]+\) \{
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ChangeBounds\.java:[0-9]+: warning: \[deprecation\] getClipBounds\(View\) in ViewCompat has been deprecated
-values\.values\.put\(PROPNAME_CLIP, ViewCompat\.getClipBounds\(view\)\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ChangeBounds\.java:[0-9]+: warning: \[deprecation\] setClipBounds\(View,Rect\) in ViewCompat has been deprecated
-ViewCompat\.setClipBounds\(view, startClip\);
-ViewCompat\.setClipBounds\(mView, clip\);
-Rect pauseClip = ViewCompat\.getClipBounds\(mView\);
-ViewCompat\.setClipBounds\(mView, pauseClip\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ChangeClipBounds\.java:[0-9]+: warning: \[deprecation\] getClipBounds\(View\) in ViewCompat has been deprecated
-clip = ViewCompat\.getClipBounds\(view\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ChangeClipBounds\.java:[0-9]+: warning: \[deprecation\] setClipBounds\(View,Rect\) in ViewCompat has been deprecated
-ViewCompat\.setClipBounds\(endValues\.view, start\);
-Rect clipBounds = ViewCompat\.getClipBounds\(mView\);
-ViewCompat\.setClipBounds\(mView, mEnd\);
-ViewCompat\.setClipBounds\(mView, clipBounds\);
-ViewCompat\.setClipBounds\(mView, mStart\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/GhostViewPort\.java:[0-9]+: warning: \[deprecation\] postInvalidateOnAnimation\(View\) in ViewCompat has been deprecated
-ViewCompat\.postInvalidateOnAnimation\(GhostViewPort\.this\);
-ViewCompat\.postInvalidateOnAnimation\(mStartParent\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/SidePropagation\.java:[0-9]+: warning: \[deprecation\] getLayoutDirection\(View\) in ViewCompat has been deprecated
-final boolean isRtl = ViewCompat\.getLayoutDirection\(sceneRoot\)
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/Slide\.java:[0-9]+: warning: \[deprecation\] getLayoutDirection\(View\) in ViewCompat has been deprecated
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/TransitionManager\.java:[0-9]+: warning: \[deprecation\] isLaidOut\(View\) in ViewCompat has been deprecated
-if \(!ViewCompat\.isLaidOut\(sceneRoot\)
-if \(!sPendingTransitions\.contains\(sceneRoot\) \&\& ViewCompat\.isLaidOut\(sceneRoot\)\) \{
-if \(sPendingTransitions\.contains\(sceneRoot\) \|\| !ViewCompat\.isLaidOut\(sceneRoot\)
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ViewOverlayApi[0-9]+\.java:[0-9]+: warning: \[deprecation\] isAttachedToWindow\(View\) in ViewCompat has been deprecated
-\&\& ViewCompat\.isAttachedToWindow\(parent\)\) \{
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ViewUtils\.java:[0-9]+: warning: \[deprecation\] getClipBounds\(View\) in ViewCompat has been deprecated
-return ViewCompat\.getClipBounds\(view\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/ViewUtils\.java:[0-9]+: warning: \[deprecation\] setClipBounds\(View,Rect\) in ViewCompat has been deprecated
-ViewCompat\.setClipBounds\(view, clipBounds\);
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/Fade\.java:[0-9]+: warning: \[deprecation\] hasOverlappingRendering\(View\) in ViewCompat has been deprecated
-if \(ViewCompat\.hasOverlappingRendering\(mView\)
 \$SUPPORT/slice/slice\-benchmark/src/androidTest/java/androidx/slice/SliceViewMetrics\.java:[0-9]+: warning: \[deprecation\] SliceView in androidx\.slice\.widget has been deprecated
 import androidx\.slice\.widget\.SliceView;
 # b/296419682
@@ -638,37 +594,3 @@
 docs-public:docs completing
 docs-tip-of-tree:docs starting
 docs-tip-of-tree:docs completing
-# > Task :transition:transition:compileReleaseJavaWithJavac
-\$SUPPORT/transition/transition/src/main/java/androidx/transition/Transition\.java:[0-9]+: warning: \[deprecation\] setHasTransientState\(View,boolean\) in ViewCompat has been deprecated
-ViewCompat\.setHasTransientState\(alreadyMatched, false\);
-# > Task :transition:transition:compileDebugAndroidTestJavaWithJavac
-\$SUPPORT/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest\.java:[0-9]+: warning: \[deprecation\] setBackground\(View,Drawable\) in ViewCompat has been deprecated
-ViewCompat\.setBackground\(rule\.getActivity\(\)\.getRoot\(\), new ColorDrawable\(Color\.WHITE\)\);
-# > Task :viewpager2:integration-tests:testapp:compileDebugAndroidTestKotlin
-w: file://\$SUPPORT/viewpager[0-9]+/integration\-tests/testapp/src/androidTest/java/androidx/viewpager[0-9]+/integration/testapp/test/util/ViewPagerActions\.kt:[0-9]+:[0-9]+ 'getLayoutDirection\(View\): Int' is deprecated\. Deprecated in Java
-# > Task :fragment:fragment:compileReleaseKotlin
-w: file://\$SUPPORT/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController\.kt:[0-9]+:[0-9]+ 'isLaidOut\(View\): Boolean' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController\.kt:[0-9]+:[0-9]+ 'isAttachedToWindow\(View\): Boolean' is deprecated\. Deprecated in Java
-# > Task :slidingpanelayout:slidingpanelayout:compileReleaseKotlin
-w: file://\$SUPPORT/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout\.kt:[0-9]+:[0-9]+ 'setImportantForAccessibility\(View, Int\): Unit' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout\.kt:[0-9]+:[0-9]+ 'IMPORTANT_FOR_ACCESSIBILITY_YES: Int' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout\.kt:[0-9]+:[0-9]+ 'getParentForAccessibility\(View\): ViewParent\?' is deprecated\. Deprecated in Java
-# > Task :compose:ui:ui:compileReleaseKotlinAndroid
-w: file://\$SUPPORT/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView\.android\.kt:[0-9]+:[0-9]+ 'setImportantForAccessibility\(View, Int\): Unit' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView\.android\.kt:[0-9]+:[0-9]+ 'IMPORTANT_FOR_ACCESSIBILITY_YES: Int' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeView\.android\.kt:[0-9]+:[0-9]+ 'IMPORTANT_FOR_ACCESSIBILITY_AUTO: Int' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat\.android\.kt:[0-9]+:[0-9]+ 'getParentForAccessibility\(View\): ViewParent\?' is deprecated\. Deprecated in Java
-# > Task :fragment:fragment:compileDebugAndroidTestKotlin
-w: file://\$SUPPORT/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest\.kt:[0-9]+:[0-9]+ 'isAttachedToWindow\(View\): Boolean' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest\.kt:[0-9]+:[0-9]+ 'isAttachedToWindow\(View\): Boolean' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest\.kt:[0-9]+:[0-9]+ 'isAttachedToWindow\(View\): Boolean' is deprecated\. Deprecated in Java
-# > Task :preference:preference:compileDebugAndroidTestKotlin
-w: file://\$SUPPORT/preference/preference/src/androidTest/java/androidx/preference/tests/SelectableTest\.kt:[0-9]+:[0-9]+ 'setBackground\(View, Drawable\?\): Unit' is deprecated\. Deprecated in Java
-# > Task :viewpager2:viewpager2:compileDebugAndroidTestKotlin
-w: file://\$SUPPORT/viewpager[0-9]+/viewpager[0-9]+/src/androidTest/java/androidx/viewpager[0-9]+/widget/AccessibilityTest\.kt:[0-9]+:[0-9]+ 'performAccessibilityAction\(View, Int, Bundle\?\): Boolean' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/viewpager[0-9]+/viewpager[0-9]+/src/androidTest/java/androidx/viewpager[0-9]+/widget/AccessibilityTest\.kt:[0-9]+:[0-9]+ 'onInitializeAccessibilityNodeInfo\(View, AccessibilityNodeInfoCompat\): Unit' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/viewpager[0-9]+/viewpager[0-9]+/src/androidTest/java/androidx/viewpager[0-9]+/widget/BaseTest\.kt:[0-9]+:[0-9]+ 'getLayoutDirection\(View\): Int' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/viewpager[0-9]+/viewpager[0-9]+/src/androidTest/java/androidx/viewpager[0-9]+/widget/FakeDragTest\.kt:[0-9]+:[0-9]+ 'performAccessibilityAction\(View, Int, Bundle\?\): Boolean' is deprecated\. Deprecated in Java
-w: file://\$SUPPORT/viewpager[0-9]+/viewpager[0-9]+/src/androidTest/java/androidx/viewpager[0-9]+/widget/HostFragmentBackStackTest\.kt:[0-9]+:[0-9]+ 'generateViewId\(\): Int' is deprecated\. Deprecated in Java
-# > Task :compose:ui:ui:compileDebugAndroidTestKotlinAndroid
-w: file://\$SUPPORT/compose/ui/ui/src/androidInstrumentedTest/kotlin/androidx/compose/ui/AndroidAccessibilityTest\.kt:[0-9]+:[0-9]+ 'IMPORTANT_FOR_ACCESSIBILITY_YES: Int' is deprecated\. Deprecated in Java
diff --git a/development/project-creator/compose-template/groupId/artifactId/build.gradle b/development/project-creator/compose-template/groupId/artifactId/build.gradle
index e381824..ce8f88d 100644
--- a/development/project-creator/compose-template/groupId/artifactId/build.gradle
+++ b/development/project-creator/compose-template/groupId/artifactId/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/development/project-creator/java-template/groupId/artifactId/build.gradle b/development/project-creator/java-template/groupId/artifactId/build.gradle
index e1af3b3..8ea8a3a 100644
--- a/development/project-creator/java-template/groupId/artifactId/build.gradle
+++ b/development/project-creator/java-template/groupId/artifactId/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/development/project-creator/kotlin-template/groupId/artifactId/build.gradle b/development/project-creator/kotlin-template/groupId/artifactId/build.gradle
index 33feb6d..2b85968 100644
--- a/development/project-creator/kotlin-template/groupId/artifactId/build.gradle
+++ b/development/project-creator/kotlin-template/groupId/artifactId/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/development/project-creator/native-template/groupId/artifactId/build.gradle b/development/project-creator/native-template/groupId/artifactId/build.gradle
index ca86ac6d..69b0a95 100644
--- a/development/project-creator/native-template/groupId/artifactId/build.gradle
+++ b/development/project-creator/native-template/groupId/artifactId/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index bb4b195..6cdb2b3 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
 id("com.android.library")
     id("AndroidXDocsPlugin")
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index 9a22b16..2aa2e0b 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("com.android.library")
     id("AndroidXDocsPlugin")
diff --git a/documentfile/documentfile/build.gradle b/documentfile/documentfile/build.gradle
index b0698e5..4ed5624 100644
--- a/documentfile/documentfile/build.gradle
+++ b/documentfile/documentfile/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/draganddrop/draganddrop/build.gradle b/draganddrop/draganddrop/build.gradle
index 03f1d44..746f3d5 100644
--- a/draganddrop/draganddrop/build.gradle
+++ b/draganddrop/draganddrop/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/drawerlayout/drawerlayout/build.gradle b/drawerlayout/drawerlayout/build.gradle
index 37999ce..296b10f 100644
--- a/drawerlayout/drawerlayout/build.gradle
+++ b/drawerlayout/drawerlayout/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java b/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
index 0ffddb8..1ee2af5 100644
--- a/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
+++ b/drawerlayout/drawerlayout/src/main/java/androidx/drawerlayout/widget/DrawerLayout.java
@@ -360,8 +360,7 @@
         // So that we can catch the back button
         setFocusableInTouchMode(true);
 
-        ViewCompat.setImportantForAccessibility(this,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+        setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
 
         ViewCompat.setAccessibilityDelegate(this, new AccessibilityDelegate());
         setMotionEventSplittingEnabled(false);
@@ -604,7 +603,7 @@
      */
     public void setDrawerLockMode(@LockMode int lockMode, @EdgeGravity int edgeGravity) {
         final int absGravity = GravityCompat.getAbsoluteGravity(edgeGravity,
-                ViewCompat.getLayoutDirection(this));
+                getLayoutDirection());
 
         switch (edgeGravity) {
             case Gravity.LEFT:
@@ -679,14 +678,14 @@
      */
     @LockMode
     public int getDrawerLockMode(@EdgeGravity int edgeGravity) {
-        int layoutDirection = ViewCompat.getLayoutDirection(this);
+        int layoutDirection = getLayoutDirection();
 
         switch (edgeGravity) {
             case Gravity.LEFT:
                 if (mLockModeLeft != LOCK_MODE_UNDEFINED) {
                     return mLockModeLeft;
                 }
-                int leftLockMode = (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR)
+                int leftLockMode = (layoutDirection == View.LAYOUT_DIRECTION_LTR)
                         ? mLockModeStart : mLockModeEnd;
                 if (leftLockMode != LOCK_MODE_UNDEFINED) {
                     return leftLockMode;
@@ -696,7 +695,7 @@
                 if (mLockModeRight != LOCK_MODE_UNDEFINED) {
                     return mLockModeRight;
                 }
-                int rightLockMode = (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR)
+                int rightLockMode = (layoutDirection == View.LAYOUT_DIRECTION_LTR)
                         ? mLockModeEnd : mLockModeStart;
                 if (rightLockMode != LOCK_MODE_UNDEFINED) {
                     return rightLockMode;
@@ -706,7 +705,7 @@
                 if (mLockModeStart != LOCK_MODE_UNDEFINED) {
                     return mLockModeStart;
                 }
-                int startLockMode = (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR)
+                int startLockMode = (layoutDirection == View.LAYOUT_DIRECTION_LTR)
                         ? mLockModeLeft : mLockModeRight;
                 if (startLockMode != LOCK_MODE_UNDEFINED) {
                     return startLockMode;
@@ -716,7 +715,7 @@
                 if (mLockModeEnd != LOCK_MODE_UNDEFINED) {
                     return mLockModeEnd;
                 }
-                int endLockMode = (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR)
+                int endLockMode = (layoutDirection == View.LAYOUT_DIRECTION_LTR)
                         ? mLockModeRight : mLockModeLeft;
                 if (endLockMode != LOCK_MODE_UNDEFINED) {
                     return endLockMode;
@@ -755,7 +754,7 @@
      */
     public void setDrawerTitle(@EdgeGravity int edgeGravity, @Nullable CharSequence title) {
         final int absGravity = GravityCompat.getAbsoluteGravity(
-                edgeGravity, ViewCompat.getLayoutDirection(this));
+                edgeGravity, getLayoutDirection());
         if (absGravity == Gravity.LEFT) {
             mTitleLeft = title;
         } else if (absGravity == Gravity.RIGHT) {
@@ -774,7 +773,7 @@
     @Nullable
     public CharSequence getDrawerTitle(@EdgeGravity int edgeGravity) {
         final int absGravity = GravityCompat.getAbsoluteGravity(
-                edgeGravity, ViewCompat.getLayoutDirection(this));
+                edgeGravity, getLayoutDirection());
         if (absGravity == Gravity.LEFT) {
             return mTitleLeft;
         } else if (absGravity == Gravity.RIGHT) {
@@ -937,11 +936,10 @@
             if ((!isDrawerOpen && !isDrawerView(child)) || (isDrawerOpen && child == drawerView)) {
                 // Drawer is closed and this is a content view or this is an
                 // open drawer view, so it should be visible.
-                ViewCompat.setImportantForAccessibility(child,
-                        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+                child.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
             } else {
-                ViewCompat.setImportantForAccessibility(child,
-                        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+                child.setImportantForAccessibility(
+                        View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
             }
         }
     }
@@ -984,7 +982,7 @@
      */
     int getDrawerViewAbsoluteGravity(View drawerView) {
         final int gravity = ((LayoutParams) drawerView.getLayoutParams()).gravity;
-        return GravityCompat.getAbsoluteGravity(gravity, ViewCompat.getLayoutDirection(this));
+        return GravityCompat.getAbsoluteGravity(gravity, getLayoutDirection());
     }
 
     boolean checkDrawerViewAbsoluteGravity(View drawerView, int checkFor) {
@@ -1024,7 +1022,7 @@
      */
     View findDrawerWithGravity(int gravity) {
         final int absHorizGravity = GravityCompat.getAbsoluteGravity(
-                gravity, ViewCompat.getLayoutDirection(this)) & Gravity.HORIZONTAL_GRAVITY_MASK;
+                gravity, getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK;
         final int childCount = getChildCount();
         for (int i = 0; i < childCount; i++) {
             final View child = getChildAt(i);
@@ -1099,7 +1097,7 @@
         setMeasuredDimension(widthSize, heightSize);
 
         final boolean applyInsets = mLastInsets != null && ViewCompat.getFitsSystemWindows(this);
-        final int layoutDirection = ViewCompat.getLayoutDirection(this);
+        final int layoutDirection = getLayoutDirection();
 
         // Only one drawer is permitted along each vertical edge (left / right). These two booleans
         // are tracking the presence of the edge drawers.
@@ -1204,9 +1202,9 @@
     }
 
     private Drawable resolveLeftShadow() {
-        int layoutDirection = ViewCompat.getLayoutDirection(this);
+        int layoutDirection = getLayoutDirection();
         // Prefer shadows defined with start/end gravity over left and right.
-        if (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
+        if (layoutDirection == View.LAYOUT_DIRECTION_LTR) {
             if (mShadowStart != null) {
                 // Correct drawable layout direction, if needed.
                 mirror(mShadowStart, layoutDirection);
@@ -1223,8 +1221,8 @@
     }
 
     private Drawable resolveRightShadow() {
-        int layoutDirection = ViewCompat.getLayoutDirection(this);
-        if (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
+        int layoutDirection = getLayoutDirection();
+        if (layoutDirection == View.LAYOUT_DIRECTION_LTR) {
             if (mShadowEnd != null) {
                 // Correct drawable layout direction, if needed.
                 mirror(mShadowEnd, layoutDirection);
@@ -1370,7 +1368,7 @@
         boolean leftDraggerSettling = mLeftDragger.continueSettling(true);
         boolean rightDraggerSettling = mRightDragger.continueSettling(true);
         if (leftDraggerSettling || rightDraggerSettling) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
@@ -1519,7 +1517,7 @@
     boolean isDrawerView(View child) {
         final int gravity = ((LayoutParams) child.getLayoutParams()).gravity;
         final int absGravity = GravityCompat.getAbsoluteGravity(gravity,
-                ViewCompat.getLayoutDirection(child));
+                child.getLayoutDirection());
         if ((absGravity & Gravity.LEFT) != 0) {
             // This child is a left-edge drawer
             return true;
@@ -2056,7 +2054,7 @@
             boolean shouldBeRegistered = visibleDrawer != null
                     && currentDispatcher != null
                     && getDrawerLockMode(visibleDrawer) == LOCK_MODE_UNLOCKED
-                    && ViewCompat.isAttachedToWindow(this);
+                    && this.isAttachedToWindow();
 
             if (shouldBeRegistered && mBackInvokedDispatcher == null) {
                 if (mBackInvokedCallback == null) {
@@ -2168,13 +2166,12 @@
         if (openDrawer != null || isDrawerView(child)) {
             // A drawer is already open or the new view is a drawer, so the
             // new view should start out hidden.
-            ViewCompat.setImportantForAccessibility(child,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+            child.setImportantForAccessibility(
+                    View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
         } else {
             // Otherwise this is a content view and no drawer is open, so the
             // new view should start out visible.
-            ViewCompat.setImportantForAccessibility(child,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+            child.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
 
     }
@@ -2185,10 +2182,10 @@
         // IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDATS is not
         // supported on older platforms but we want to hide the entire
         // content and not opened drawers if a drawer is opened.
-        return ViewCompat.getImportantForAccessibility(child)
-                != ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
-                    && ViewCompat.getImportantForAccessibility(child)
-                != ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO;
+        return child.getImportantForAccessibility()
+                != View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
+                    && child.getImportantForAccessibility()
+                != View.IMPORTANT_FOR_ACCESSIBILITY_NO;
     }
 
     /**
diff --git a/dynamicanimation/dynamicanimation-ktx/build.gradle b/dynamicanimation/dynamicanimation-ktx/build.gradle
index 47311f5..8fde43d 100644
--- a/dynamicanimation/dynamicanimation-ktx/build.gradle
+++ b/dynamicanimation/dynamicanimation-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/dynamicanimation/dynamicanimation/build.gradle b/dynamicanimation/dynamicanimation/build.gradle
index 28dc9a3..218ec79 100644
--- a/dynamicanimation/dynamicanimation/build.gradle
+++ b/dynamicanimation/dynamicanimation/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/emoji/emoji-appcompat/build.gradle b/emoji/emoji-appcompat/build.gradle
index e4dcd44..2260797 100644
--- a/emoji/emoji-appcompat/build.gradle
+++ b/emoji/emoji-appcompat/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/emoji/emoji-bundled/build.gradle b/emoji/emoji-bundled/build.gradle
index d040960a..b6fa457c 100644
--- a/emoji/emoji-bundled/build.gradle
+++ b/emoji/emoji-bundled/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/emoji/emoji/build.gradle b/emoji/emoji/build.gradle
index e57794a..86a9825 100644
--- a/emoji/emoji/build.gradle
+++ b/emoji/emoji/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.BundleInsideHelper
 import androidx.build.Publish
 
diff --git a/emoji2/emoji2-benchmark/build.gradle b/emoji2/emoji2-benchmark/build.gradle
index 63be59e..a7db4fa 100644
--- a/emoji2/emoji2-benchmark/build.gradle
+++ b/emoji2/emoji2-benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/emoji2/emoji2-bundled/build.gradle b/emoji2/emoji2-bundled/build.gradle
index 8d7759f..ebd10e7 100644
--- a/emoji2/emoji2-bundled/build.gradle
+++ b/emoji2/emoji2-bundled/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/emoji2/emoji2-emojipicker/build.gradle b/emoji2/emoji2-emojipicker/build.gradle
index b0be4a0..f160015 100644
--- a/emoji2/emoji2-emojipicker/build.gradle
+++ b/emoji2/emoji2-emojipicker/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/emoji2/emoji2-views-helper/build.gradle b/emoji2/emoji2-views-helper/build.gradle
index 5e5a39a..99a3bfb 100644
--- a/emoji2/emoji2-views-helper/build.gradle
+++ b/emoji2/emoji2-views-helper/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/emoji2/emoji2-views/build.gradle b/emoji2/emoji2-views/build.gradle
index 572be41..6295ab4 100644
--- a/emoji2/emoji2-views/build.gradle
+++ b/emoji2/emoji2-views/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/emoji2/emoji2/build.gradle b/emoji2/emoji2/build.gradle
index 4323a36..732dc1c 100644
--- a/emoji2/emoji2/build.gradle
+++ b/emoji2/emoji2/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.BundleInsideHelper
 import androidx.build.Publish
 
diff --git a/enterprise/enterprise-feedback-testing/build.gradle b/enterprise/enterprise-feedback-testing/build.gradle
index 4fcdcd9..7f2a7b0 100644
--- a/enterprise/enterprise-feedback-testing/build.gradle
+++ b/enterprise/enterprise-feedback-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/enterprise/enterprise-feedback/build.gradle b/enterprise/enterprise-feedback/build.gradle
index b776679..6e907ba 100644
--- a/enterprise/enterprise-feedback/build.gradle
+++ b/enterprise/enterprise-feedback/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/exifinterface/exifinterface/build.gradle b/exifinterface/exifinterface/build.gradle
index 8ab8192..b1f2065 100644
--- a/exifinterface/exifinterface/build.gradle
+++ b/exifinterface/exifinterface/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/external/libyuv/build.gradle b/external/libyuv/build.gradle
index 7b8f935..6bf1dae 100644
--- a/external/libyuv/build.gradle
+++ b/external/libyuv/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/external/paparazzi/paparazzi-agent/build.gradle b/external/paparazzi/paparazzi-agent/build.gradle
index dbe1124..802d417 100644
--- a/external/paparazzi/paparazzi-agent/build.gradle
+++ b/external/paparazzi/paparazzi-agent/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 
 plugins {
diff --git a/external/paparazzi/paparazzi/build.gradle b/external/paparazzi/paparazzi/build.gradle
index 8e87582..bc018ac 100644
--- a/external/paparazzi/paparazzi/build.gradle
+++ b/external/paparazzi/paparazzi/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 import org.gradle.api.artifacts.transform.TransformParameters.None
 import java.util.zip.ZipInputStream
diff --git a/fragment/fragment-ktx/build.gradle b/fragment/fragment-ktx/build.gradle
index c614be4..83d6c56 100644
--- a/fragment/fragment-ktx/build.gradle
+++ b/fragment/fragment-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/fragment/fragment-lint/build.gradle b/fragment/fragment-lint/build.gradle
index b4f8162..1a48d86 100644
--- a/fragment/fragment-lint/build.gradle
+++ b/fragment/fragment-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/fragment/fragment-testing-lint/build.gradle b/fragment/fragment-testing-lint/build.gradle
index a9641c7..b91fa08 100644
--- a/fragment/fragment-testing-lint/build.gradle
+++ b/fragment/fragment-testing-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/fragment/fragment-testing-manifest-lint/build.gradle b/fragment/fragment-testing-manifest-lint/build.gradle
index 9b4b9f4..e82f5a8 100644
--- a/fragment/fragment-testing-manifest-lint/build.gradle
+++ b/fragment/fragment-testing-manifest-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/fragment/fragment-testing-manifest/build.gradle b/fragment/fragment-testing-manifest/build.gradle
index e45be5e..4f29962 100644
--- a/fragment/fragment-testing-manifest/build.gradle
+++ b/fragment/fragment-testing-manifest/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/fragment/fragment-testing/build.gradle b/fragment/fragment-testing/build.gradle
index c9ab626..32c0c97 100644
--- a/fragment/fragment-testing/build.gradle
+++ b/fragment/fragment-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/fragment/fragment-truth/build.gradle b/fragment/fragment-truth/build.gradle
index e4a0733..6bdf72d 100644
--- a/fragment/fragment-truth/build.gradle
+++ b/fragment/fragment-truth/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/fragment/fragment/build.gradle b/fragment/fragment/build.gradle
index c6af267..352bb4c 100644
--- a/fragment/fragment/build.gradle
+++ b/fragment/fragment/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
index e139fc6..e50a9d2 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimationTest.kt
@@ -31,7 +31,6 @@
 import androidx.activity.BackEventCompat
 import androidx.annotation.AnimRes
 import androidx.annotation.LayoutRes
-import androidx.core.view.ViewCompat
 import androidx.fragment.app.test.FragmentTestActivity
 import androidx.fragment.test.R
 import androidx.lifecycle.Lifecycle
@@ -404,7 +403,7 @@
         assertThat(fragment1.view).isNotNull()
         assertThat(fragment1.requireView().visibility).isEqualTo(View.VISIBLE)
         assertThat(fragment1.requireView().alpha).isWithin(0f).of(1f)
-        assertThat(ViewCompat.isAttachedToWindow(fragment1.requireView())).isTrue()
+        assertThat(fragment1.requireView().isAttachedToWindow()).isTrue()
 
         fragment2.startPostponedEnterTransition()
         activityRule.waitForExecution()
@@ -446,7 +445,7 @@
         assertThat(fragment1.view).isNotNull()
         assertThat(fragment1.requireView().visibility).isEqualTo(View.VISIBLE)
         assertThat(fragment1.requireView().alpha).isWithin(0f).of(1f)
-        assertThat(ViewCompat.isAttachedToWindow(fragment1.requireView())).isTrue()
+        assertThat(fragment1.requireView().isAttachedToWindow()).isTrue()
         assertThat(fragment1.isAdded).isTrue()
 
         assertThat(fragment2.view).isNull()
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.kt
index a098d19..e7df44c 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentAnimatorTest.kt
@@ -28,7 +28,6 @@
 import androidx.activity.BackEventCompat
 import androidx.annotation.AnimatorRes
 import androidx.annotation.LayoutRes
-import androidx.core.view.ViewCompat
 import androidx.fragment.app.test.FragmentTestActivity
 import androidx.fragment.test.R
 import androidx.lifecycle.Lifecycle
@@ -460,7 +459,7 @@
         assertThat(fragment1.requireView()).isNotNull()
         assertThat(fragment1.requireView().visibility).isEqualTo(View.VISIBLE)
         assertThat(fragment1.requireView().alpha).isWithin(0f).of(1f)
-        assertThat(ViewCompat.isAttachedToWindow(fragment1.requireView())).isTrue()
+        assertThat(fragment1.requireView().isAttachedToWindow()).isTrue()
 
         fragment2.startPostponedEnterTransition()
         activityRule.waitForExecution()
@@ -500,7 +499,7 @@
 
         assertThat(fragment1.view).isNotNull()
         assertThat(fragment1.requireView().alpha).isWithin(0f).of(1f)
-        assertThat(ViewCompat.isAttachedToWindow(fragment1.requireView())).isTrue()
+        assertThat(fragment1.requireView().isAttachedToWindow()).isTrue()
         assertThat(fragment1.isAdded).isTrue()
 
         assertThat(fragment2.view).isNull()
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt
index aedeb6a..6c80ee7 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt
@@ -24,7 +24,6 @@
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
-import androidx.core.view.ViewCompat
 import androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
 import androidx.fragment.app.test.EmptyFragmentTestActivity
 import androidx.fragment.app.test.FragmentTestActivity
@@ -201,7 +200,7 @@
         val view = f1.requireView()
         assertWithMessage("fragment 1 returned null from getView").that(view).isNotNull()
         assertWithMessage("fragment 1's view is not attached to a window")
-            .that(ViewCompat.isAttachedToWindow(view)).isTrue()
+            .that(view.isAttachedToWindow()).isTrue()
 
         fm.beginTransaction().remove(f1).commit()
         executePendingTransactions(fm)
@@ -210,7 +209,7 @@
         assertWithMessage("fragment 1 returned non-null from getView after removal")
             .that(f1.view).isNull()
         assertWithMessage("fragment 1's previous view is still attached to a window")
-            .that(ViewCompat.isAttachedToWindow(view)).isFalse()
+            .that(view.isAttachedToWindow()).isFalse()
     }
 
     @Test
@@ -229,7 +228,7 @@
         val origView1 = f1.requireView()
         assertWithMessage("fragment 1 returned null view").that(origView1).isNotNull()
         assertWithMessage("fragment 1's view not attached")
-            .that(ViewCompat.isAttachedToWindow(origView1)).isTrue()
+            .that(origView1.isAttachedToWindow()).isTrue()
 
         fm.beginTransaction().replace(android.R.id.content, f2).addToBackStack("stack1").commit()
         executePendingTransactions(fm)
@@ -238,11 +237,11 @@
         assertWithMessage("fragment 2 is added").that(f2.isAdded).isTrue()
         assertWithMessage("fragment 1 returned non-null view").that(f1.view).isNull()
         assertWithMessage("fragment 1's old view still attached")
-            .that(ViewCompat.isAttachedToWindow(origView1)).isFalse()
+            .that(origView1.isAttachedToWindow()).isFalse()
         val origView2 = f2.requireView()
         assertWithMessage("fragment 2 returned null view").that(origView2).isNotNull()
         assertWithMessage("fragment 2's view not attached")
-            .that(ViewCompat.isAttachedToWindow(origView2)).isTrue()
+            .that(origView2.isAttachedToWindow()).isTrue()
 
         fm.popBackStack()
         executePendingTransactions(fm)
@@ -251,12 +250,12 @@
         assertWithMessage("fragment 2 is added").that(f2.isAdded).isFalse()
         assertWithMessage("fragment 2 returned non-null view").that(f2.view).isNull()
         assertWithMessage("fragment 2's view still attached")
-            .that(ViewCompat.isAttachedToWindow(origView2)).isFalse()
+            .that(origView2.isAttachedToWindow()).isFalse()
         val newView1 = f1.requireView()
         assertWithMessage("fragment 1 had same view from last attachment")
             .that(newView1).isNotSameInstanceAs(origView1)
         assertWithMessage("fragment 1's view not attached")
-            .that(ViewCompat.isAttachedToWindow(newView1)).isTrue()
+            .that(newView1.isAttachedToWindow()).isTrue()
     }
 
     @Test
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
index 7aab715..77c93de 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/DefaultSpecialEffectsController.kt
@@ -726,7 +726,7 @@
         override fun onStart(container: ViewGroup) {
             // If the container has never been laid out, transitions will not start so
             // so lets instantly complete them.
-            if (!ViewCompat.isLaidOut(container)) {
+            if (!container.isLaidOut()) {
                 transitionInfos.forEach { transitionInfo: TransitionInfo ->
                     val operation: Operation = transitionInfo.operation
                     if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
@@ -801,7 +801,7 @@
         override fun onCommit(container: ViewGroup) {
             // If the container has never been laid out, transitions will not start so
             // so lets instantly complete them.
-            if (!ViewCompat.isLaidOut(container)) {
+            if (!container.isLaidOut()) {
                 transitionInfos.forEach { transitionInfo: TransitionInfo ->
                     val operation: Operation = transitionInfo.operation
                     if (FragmentManager.isLoggingEnabled(Log.VERBOSE)) {
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
index fa5874e..7e09f69 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -1627,7 +1627,7 @@
      * </p>
      * <p>
      * Calling this API for permissions already granted to your app would show UI
-     * to the user to decided whether the app can still hold these permissions. This
+     * to the user to decide whether the app can still hold these permissions. This
      * can be useful if the way your app uses the data guarded by the permissions
      * changes significantly.
      * </p>
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
index b029457..32d40bc 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
@@ -580,7 +580,7 @@
                 mFragment.mView.setVisibility(View.GONE);
             }
             // How I wish we could use doOnAttach
-            if (ViewCompat.isAttachedToWindow(mFragment.mView)) {
+            if (mFragment.mView.isAttachedToWindow()) {
                 ViewCompat.requestApplyInsets(mFragment.mView);
             } else {
                 final View fragmentView = mFragment.mView;
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
index ac5a7e9..ce3439d 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentTransitionImpl.java
@@ -78,7 +78,7 @@
      * containing the bounds relative to the screen that the view is in.
      */
     protected void getBoundsOnScreen(View view, Rect epicenter) {
-        if (!ViewCompat.isAttachedToWindow(view)) {
+        if (!view.isAttachedToWindow()) {
             return;
         }
 
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
index 5e0601cf..e8a96ca 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/SpecialEffectsController.kt
@@ -20,7 +20,6 @@
 import android.view.ViewGroup
 import androidx.activity.BackEventCompat
 import androidx.annotation.CallSuper
-import androidx.core.view.ViewCompat
 import androidx.fragment.R
 import androidx.fragment.app.SpecialEffectsController.Operation.State.Companion.asOperationState
 
@@ -203,7 +202,7 @@
         }
         // If the container is not attached to the window, ignore the special effect
         // since none of the special effect systems will run them anyway.
-        if (!ViewCompat.isAttachedToWindow(container)) {
+        if (!container.isAttachedToWindow()) {
             forceCompleteAllOperations()
             operationDirectionIsPop = false
             return
@@ -314,7 +313,7 @@
                 "SpecialEffectsController: Forcing all operations to complete"
             )
         }
-        val attachedToWindow = ViewCompat.isAttachedToWindow(container)
+        val attachedToWindow = container.isAttachedToWindow()
         synchronized(pendingOperations) {
             updateFinalState()
             processStart(pendingOperations)
diff --git a/glance/glance-appwidget-preview/build.gradle b/glance/glance-appwidget-preview/build.gradle
index f7d91d6..5075396 100644
--- a/glance/glance-appwidget-preview/build.gradle
+++ b/glance/glance-appwidget-preview/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-appwidget-proto/build.gradle b/glance/glance-appwidget-proto/build.gradle
index 0829f6a..2458964 100644
--- a/glance/glance-appwidget-proto/build.gradle
+++ b/glance/glance-appwidget-proto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/glance/glance-appwidget-testing/build.gradle b/glance/glance-appwidget-testing/build.gradle
index 8d5db0b..97bf0fc 100644
--- a/glance/glance-appwidget-testing/build.gradle
+++ b/glance/glance-appwidget-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-appwidget-testing/samples/build.gradle b/glance/glance-appwidget-testing/samples/build.gradle
index a5da7fa1..23365ef 100644
--- a/glance/glance-appwidget-testing/samples/build.gradle
+++ b/glance/glance-appwidget-testing/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-appwidget/build.gradle b/glance/glance-appwidget/build.gradle
index 57f3a0e..ca03f23 100644
--- a/glance/glance-appwidget/build.gradle
+++ b/glance/glance-appwidget/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 import androidx.glance.appwidget.layoutgenerator.gradle.LayoutGeneratorTask
diff --git a/glance/glance-appwidget/glance-layout-generator/build.gradle b/glance/glance-appwidget/glance-layout-generator/build.gradle
index 59f58d8..28eb120 100644
--- a/glance/glance-appwidget/glance-layout-generator/build.gradle
+++ b/glance/glance-appwidget/glance-layout-generator/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/glance/glance-appwidget/samples/build.gradle b/glance/glance-appwidget/samples/build.gradle
index 559a527..01f1cd7 100644
--- a/glance/glance-appwidget/samples/build.gradle
+++ b/glance/glance-appwidget/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/glance/glance-material/build.gradle b/glance/glance-material/build.gradle
index 84e3be0..21fc469 100644
--- a/glance/glance-material/build.gradle
+++ b/glance/glance-material/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-material3/build.gradle b/glance/glance-material3/build.gradle
index 594ebec..a065893 100644
--- a/glance/glance-material3/build.gradle
+++ b/glance/glance-material3/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-preview/build.gradle b/glance/glance-preview/build.gradle
index 4961b80..ac6f17c 100644
--- a/glance/glance-preview/build.gradle
+++ b/glance/glance-preview/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-template/build.gradle b/glance/glance-template/build.gradle
index ea1c11e..dec7cd8 100644
--- a/glance/glance-template/build.gradle
+++ b/glance/glance-template/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import androidx.build.AndroidXComposePlugin
diff --git a/glance/glance-testing/build.gradle b/glance/glance-testing/build.gradle
index 992d35f..80a720d 100644
--- a/glance/glance-testing/build.gradle
+++ b/glance/glance-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-wear-tiles-preview/build.gradle b/glance/glance-wear-tiles-preview/build.gradle
index 13c4d10..7dec30a 100644
--- a/glance/glance-wear-tiles-preview/build.gradle
+++ b/glance/glance-wear-tiles-preview/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/glance/glance-wear-tiles/build.gradle b/glance/glance-wear-tiles/build.gradle
index e158ee6..9d6ce410 100644
--- a/glance/glance-wear-tiles/build.gradle
+++ b/glance/glance-wear-tiles/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/glance/glance/build.gradle b/glance/glance/build.gradle
index cab4273..43f0cde 100644
--- a/glance/glance/build.gradle
+++ b/glance/glance/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/graphics/filters/filters/build.gradle b/graphics/filters/filters/build.gradle
index cec833c..d6406c1 100644
--- a/graphics/filters/filters/build.gradle
+++ b/graphics/filters/filters/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/graphics/graphics-core/build.gradle b/graphics/graphics-core/build.gradle
index 131cc35..5841931 100644
--- a/graphics/graphics-core/build.gradle
+++ b/graphics/graphics-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/graphics/graphics-path/build.gradle b/graphics/graphics-path/build.gradle
index 7eed6d8..091c671 100644
--- a/graphics/graphics-path/build.gradle
+++ b/graphics/graphics-path/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/graphics/graphics-shapes/build.gradle b/graphics/graphics-shapes/build.gradle
index d7c1342..bc98beb 100644
--- a/graphics/graphics-shapes/build.gradle
+++ b/graphics/graphics-shapes/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/graphics/integration-tests/testapp-compose/build.gradle b/graphics/integration-tests/testapp-compose/build.gradle
index 18c6689..d41a1e4 100644
--- a/graphics/integration-tests/testapp-compose/build.gradle
+++ b/graphics/integration-tests/testapp-compose/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 /*
diff --git a/graphics/integration-tests/testapp/build.gradle b/graphics/integration-tests/testapp/build.gradle
index b536543..e191d19 100644
--- a/graphics/integration-tests/testapp/build.gradle
+++ b/graphics/integration-tests/testapp/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/gridlayout/gridlayout/build.gradle b/gridlayout/gridlayout/build.gradle
index f15724a..7de737b 100644
--- a/gridlayout/gridlayout/build.gradle
+++ b/gridlayout/gridlayout/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java b/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java
index 3936f41..671a7c8 100644
--- a/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java
+++ b/gridlayout/gridlayout/src/main/java/androidx/gridlayout/widget/GridLayout.java
@@ -659,7 +659,7 @@
     }
 
     private boolean isLayoutRtlCompat() {
-        return ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL;
+        return getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
     }
 
     private int getMargin(View view, boolean horizontal, boolean leading) {
@@ -2746,15 +2746,13 @@
         return new Alignment() {
             @Override
             int getGravityOffset(View view, int cellDelta) {
-                boolean isLayoutRtl = ViewCompat.getLayoutDirection(view) ==
-                        ViewCompat.LAYOUT_DIRECTION_RTL;
+                boolean isLayoutRtl = view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
                 return (!isLayoutRtl ? ltr : rtl).getGravityOffset(view, cellDelta);
             }
 
             @Override
             public int getAlignmentValue(View view, int viewSize, int mode) {
-                boolean isLayoutRtl = ViewCompat.getLayoutDirection(view) ==
-                        ViewCompat.LAYOUT_DIRECTION_RTL;
+                boolean isLayoutRtl = view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
                 return (!isLayoutRtl ? ltr : rtl).getAlignmentValue(view, viewSize, mode);
             }
 
diff --git a/health/connect/connect-client-proto/build.gradle b/health/connect/connect-client-proto/build.gradle
index 3b8ef21..82d73a0 100644
--- a/health/connect/connect-client-proto/build.gradle
+++ b/health/connect/connect-client-proto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/health/connect/connect-client/build.gradle b/health/connect/connect-client/build.gradle
index 106ef0d..d72c003 100644
--- a/health/connect/connect-client/build.gradle
+++ b/health/connect/connect-client/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/health/connect/connect-client/samples/build.gradle b/health/connect/connect-client/samples/build.gradle
index 5635618..08b7839 100644
--- a/health/connect/connect-client/samples/build.gradle
+++ b/health/connect/connect-client/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 import androidx.build.LibraryType
 
diff --git a/health/health-services-client/build.gradle b/health/health-services-client/build.gradle
index 4942dab..50379f8 100644
--- a/health/health-services-client/build.gradle
+++ b/health/health-services-client/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/health/health-services-client/src/main/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClient.kt b/health/health-services-client/src/main/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClient.kt
index c70f09f..606b00e 100644
--- a/health/health-services-client/src/main/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClient.kt
+++ b/health/health-services-client/src/main/java/androidx/health/services/client/impl/ServiceBackedPassiveMonitoringClient.kt
@@ -66,23 +66,24 @@
         service: Class<out PassiveListenerService>,
         config: PassiveListenerConfig
     ): ListenableFuture<Void> {
+        if (!config.isValidPassiveGoal()) {
+            return Futures.immediateFailedFuture(
+                HealthServicesException(
+                    "Service registration failed: DataType for the requested " +
+                    "passive goal must be tracked"
+                )
+            )
+        }
         return executeWithVersionCheck(
             { remoteService, resultFuture ->
-                if (config.isValidPassiveGoal()) {
-                    remoteService.registerPassiveListenerService(
-                        PassiveListenerServiceRegistrationRequest(
-                            packageName,
-                            service.name,
-                            config
-                        ),
-                        StatusCallback(resultFuture)
-                    )
-                } else {
-                    resultFuture.setException(HealthServicesException(
-                            "Service registration failed: DataType for the requested " +
-                            "passive goal must be tracked"
-                        ))
-                }
+                remoteService.registerPassiveListenerService(
+                    PassiveListenerServiceRegistrationRequest(
+                        packageName,
+                        service.name,
+                        config
+                    ),
+                    StatusCallback(resultFuture)
+                )
             },
             /* minApiVersion= */ 4
         )
@@ -104,24 +105,24 @@
         executor: Executor,
         callback: PassiveListenerCallback
     ) {
+        if (!config.isValidPassiveGoal()) {
+            callback.onRegistrationFailed(
+                HealthServicesException(
+                    "Callback registration failed: DataType for the " +
+                    "requested passive goal must be tracked"
+                )
+            )
+            return
+        }
         val callbackStub =
             PassiveListenerCallbackCache.INSTANCE.getOrCreate(packageName, executor, callback)
         val future =
             registerListener(callbackStub.listenerKey) { service, result: SettableFuture<Void?> ->
-                if (config.isValidPassiveGoal()) {
-                    service.registerPassiveListenerCallback(
-                        PassiveListenerCallbackRegistrationRequest(packageName, config),
-                        callbackStub,
-                        StatusCallback(result)
-                    )
-                } else {
-                    result.setException(
-                        HealthServicesException(
-                            "Callback registration failed: DataType for the requested " +
-                            "passive goal must be tracked"
-                        )
-                    )
-                }
+                service.registerPassiveListenerCallback(
+                    PassiveListenerCallbackRegistrationRequest(packageName, config),
+                    callbackStub,
+                    StatusCallback(result)
+                )
             }
         Futures.addCallback(
             future,
diff --git a/heifwriter/heifwriter/build.gradle b/heifwriter/heifwriter/build.gradle
index 701ab8d..5470bcd 100644
--- a/heifwriter/heifwriter/build.gradle
+++ b/heifwriter/heifwriter/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/hilt/hilt-common/build.gradle b/hilt/hilt-common/build.gradle
index 51f0f2b..732fa4b 100644
--- a/hilt/hilt-common/build.gradle
+++ b/hilt/hilt-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/hilt/hilt-compiler/build.gradle b/hilt/hilt-compiler/build.gradle
index 0ec234f..7980e5f 100644
--- a/hilt/hilt-compiler/build.gradle
+++ b/hilt/hilt-compiler/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.SdkHelperKt
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/hilt/hilt-navigation-compose/build.gradle b/hilt/hilt-navigation-compose/build.gradle
index a6239a3..7f7b4a3 100644
--- a/hilt/hilt-navigation-compose/build.gradle
+++ b/hilt/hilt-navigation-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/hilt/hilt-navigation-compose/samples/build.gradle b/hilt/hilt-navigation-compose/samples/build.gradle
index 625d18b..07de759 100644
--- a/hilt/hilt-navigation-compose/samples/build.gradle
+++ b/hilt/hilt-navigation-compose/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/hilt/hilt-navigation-fragment/build.gradle b/hilt/hilt-navigation-fragment/build.gradle
index 8039592..91175ad 100644
--- a/hilt/hilt-navigation-fragment/build.gradle
+++ b/hilt/hilt-navigation-fragment/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/hilt/hilt-navigation/build.gradle b/hilt/hilt-navigation/build.gradle
index ed6157a..4fe350f 100644
--- a/hilt/hilt-navigation/build.gradle
+++ b/hilt/hilt-navigation/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/hilt/hilt-work/build.gradle b/hilt/hilt-work/build.gradle
index a690f78..cde673d 100644
--- a/hilt/hilt-work/build.gradle
+++ b/hilt/hilt-work/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/input/input-motionprediction/build.gradle b/input/input-motionprediction/build.gradle
index 2eb82b9..cb3871b 100644
--- a/input/input-motionprediction/build.gradle
+++ b/input/input-motionprediction/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/inspection/inspection-gradle-plugin/build.gradle b/inspection/inspection-gradle-plugin/build.gradle
index f058543..fbb8824 100644
--- a/inspection/inspection-gradle-plugin/build.gradle
+++ b/inspection/inspection-gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import androidx.build.SdkResourceGenerator
diff --git a/inspection/inspection-testing/build.gradle b/inspection/inspection-testing/build.gradle
index f7b000e..56c6f36 100644
--- a/inspection/inspection-testing/build.gradle
+++ b/inspection/inspection-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/inspection/inspection/build.gradle b/inspection/inspection/build.gradle
index 89bdd45..8027038 100644
--- a/inspection/inspection/build.gradle
+++ b/inspection/inspection/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/interpolator/interpolator/build.gradle b/interpolator/interpolator/build.gradle
index 05b4ccd..7aad74f 100644
--- a/interpolator/interpolator/build.gradle
+++ b/interpolator/interpolator/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/javascriptengine/javascriptengine/build.gradle b/javascriptengine/javascriptengine/build.gradle
index b6684a5..9efbcfc 100644
--- a/javascriptengine/javascriptengine/build.gradle
+++ b/javascriptengine/javascriptengine/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/kruth/kruth/build.gradle b/kruth/kruth/build.gradle
index a383bb8..3a2ad51 100644
--- a/kruth/kruth/build.gradle
+++ b/kruth/kruth/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/kruth/kruth/src/jvmMain/kotlin/androidx/kruth/PlatformStringSubject.kt b/kruth/kruth/src/jvmMain/kotlin/androidx/kruth/PlatformStringSubject.jvm.kt
similarity index 100%
rename from kruth/kruth/src/jvmMain/kotlin/androidx/kruth/PlatformStringSubject.kt
rename to kruth/kruth/src/jvmMain/kotlin/androidx/kruth/PlatformStringSubject.jvm.kt
diff --git a/leanback/leanback-grid/build.gradle b/leanback/leanback-grid/build.gradle
index 3183352..07a5aaf 100644
--- a/leanback/leanback-grid/build.gradle
+++ b/leanback/leanback-grid/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java b/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java
index 8d1f863..2feb9f3 100644
--- a/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java
+++ b/leanback/leanback-grid/src/main/java/androidx/leanback/widget/GridLayoutManager.java
@@ -2844,7 +2844,7 @@
         }
         int soundEffect;
         if (mOrientation == HORIZONTAL) {
-            boolean rtl = getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+            boolean rtl = getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
             if (rtl) {
                 soundEffect = forward ? AudioManager.FX_FOCUS_NAVIGATION_LEFT :
                         AudioManager.FX_FOCUS_NAVIGATION_RIGHT;
@@ -3273,7 +3273,7 @@
                 result = ff.findNextFocus(mBaseGridView, focused, absDir);
             }
             if (canScrollHorizontally()) {
-                boolean rtl = getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+                boolean rtl = getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
                 final int absDir = (direction == View.FOCUS_FORWARD) ^ rtl
                         ? View.FOCUS_RIGHT : View.FOCUS_LEFT;
                 result = ff.findNextFocus(mBaseGridView, focused, absDir);
diff --git a/leanback/leanback-paging/build.gradle b/leanback/leanback-paging/build.gradle
index 0bcaf3b..0191bc0 100644
--- a/leanback/leanback-paging/build.gradle
+++ b/leanback/leanback-paging/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/leanback/leanback-preference/build.gradle b/leanback/leanback-preference/build.gradle
index 9ec6a3f..18813bc 100644
--- a/leanback/leanback-preference/build.gradle
+++ b/leanback/leanback-preference/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/leanback/leanback-tab/build.gradle b/leanback/leanback-tab/build.gradle
index be1ace5..f764bc5 100644
--- a/leanback/leanback-tab/build.gradle
+++ b/leanback/leanback-tab/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/leanback/leanback/build.gradle b/leanback/leanback/build.gradle
index 7e42bc0..9e9891d 100644
--- a/leanback/leanback/build.gradle
+++ b/leanback/leanback/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/leanback/leanback/src/main/java/androidx/leanback/app/BrowseFragment.java b/leanback/leanback/src/main/java/androidx/leanback/app/BrowseFragment.java
index 66303bc..6901095 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/app/BrowseFragment.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/app/BrowseFragment.java
@@ -1122,8 +1122,8 @@
                         ? mHeadersFragment.getVerticalGridView() : mMainFragment.getView();
             }
 
-            boolean isRtl = ViewCompat.getLayoutDirection(focused)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
+            boolean isRtl = focused.getLayoutDirection()
+                    == View.LAYOUT_DIRECTION_RTL;
             int towardStart = isRtl ? View.FOCUS_RIGHT : View.FOCUS_LEFT;
             int towardEnd = isRtl ? View.FOCUS_LEFT : View.FOCUS_RIGHT;
             if (mCanShowHeaders && direction == towardStart) {
diff --git a/leanback/leanback/src/main/java/androidx/leanback/app/BrowseSupportFragment.java b/leanback/leanback/src/main/java/androidx/leanback/app/BrowseSupportFragment.java
index d37752d..3753ec5 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/app/BrowseSupportFragment.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/app/BrowseSupportFragment.java
@@ -30,7 +30,6 @@
 import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.view.ViewCompat;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
@@ -1099,8 +1098,7 @@
                         ? mHeadersSupportFragment.getVerticalGridView() : mMainFragment.getView();
             }
 
-            boolean isRtl = ViewCompat.getLayoutDirection(focused)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
+            boolean isRtl = focused.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
             int towardStart = isRtl ? View.FOCUS_RIGHT : View.FOCUS_LEFT;
             int towardEnd = isRtl ? View.FOCUS_LEFT : View.FOCUS_RIGHT;
             if (mCanShowHeaders && direction == towardStart) {
diff --git a/leanback/leanback/src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java b/leanback/leanback/src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java
index c4a0b56..bb123b4 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/widget/AbstractMediaItemPresenter.java
@@ -28,7 +28,6 @@
 import android.widget.ViewFlipper;
 
 import androidx.annotation.NonNull;
-import androidx.core.view.ViewCompat;
 import androidx.leanback.R;
 
 import java.util.ArrayList;
@@ -593,7 +592,7 @@
                 .getInteger(android.R.integer.config_shortAnimTime);
         DecelerateInterpolator interpolator = new DecelerateInterpolator();
 
-        int layoutDirection = ViewCompat.getLayoutDirection(selectorView);
+        int layoutDirection = selectorView.getLayoutDirection();
         if (!focusChangedView.hasFocus()) {
             // if neither of the details or action views are in focus (ie. another row is in focus),
             // animate the selector out.
diff --git a/leanback/leanback/src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java b/leanback/leanback/src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java
index 111709a..be60309 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/widget/HorizontalHoverCardSwitcher.java
@@ -19,8 +19,6 @@
 import android.view.ViewGroup;
 import android.view.ViewGroup.MarginLayoutParams;
 
-import androidx.core.view.ViewCompat;
-
 /**
  * A helper class for showing a hover card view below a {@link HorizontalGridView}.  The hover card
  * is aligned to the starting edge of the selected child view.  If there is no space when scrolling
@@ -48,7 +46,7 @@
         // end edge with row view's end edge, otherwise align start edges.
         view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
         MarginLayoutParams params = (MarginLayoutParams) view.getLayoutParams();
-        boolean isRtl = ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_RTL;
+        boolean isRtl = view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
         if (!isRtl && mCardLeft + view.getMeasuredWidth() > rightLimit) {
             params.leftMargin = rightLimit  - view.getMeasuredWidth();
         } else if (isRtl && mCardLeft < leftLimit) {
diff --git a/leanback/leanback/src/main/java/androidx/leanback/widget/TitleHelper.java b/leanback/leanback/src/main/java/androidx/leanback/widget/TitleHelper.java
index 23c163cc..fbb3196 100644
--- a/leanback/leanback/src/main/java/androidx/leanback/widget/TitleHelper.java
+++ b/leanback/leanback/src/main/java/androidx/leanback/widget/TitleHelper.java
@@ -19,7 +19,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.core.view.ViewCompat;
 import androidx.leanback.transition.LeanbackTransitionHelper;
 import androidx.leanback.transition.TransitionHelper;
 
@@ -46,8 +45,7 @@
             if (focused != mTitleView && direction == View.FOCUS_UP) {
                 return mTitleView;
             }
-            final boolean isRtl = ViewCompat.getLayoutDirection(focused)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
+            final boolean isRtl = focused.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
             final int forward = isRtl ? View.FOCUS_LEFT : View.FOCUS_RIGHT;
             if (mTitleView.hasFocus() && (direction == View.FOCUS_DOWN || direction == forward)) {
                 return mSceneRoot;
diff --git a/libraryversions.toml b/libraryversions.toml
index 5365b3e..7cfeba5 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -94,7 +94,7 @@
 LEANBACK_TAB = "1.1.0-beta01"
 LEGACY = "1.1.0-alpha01"
 LIBYUV = "0.1.0-dev01"
-LIFECYCLE = "2.7.0-rc01"
+LIFECYCLE = "2.8.0-alpha01"
 LIFECYCLE_EXTENSIONS = "2.2.0"
 LOADER = "1.2.0-alpha01"
 MEDIA = "1.7.0-rc01"
@@ -161,7 +161,7 @@
 WEAR_ONGOING = "1.1.0-alpha02"
 WEAR_PHONE_INTERACTIONS = "1.1.0-alpha04"
 WEAR_PROTOLAYOUT = "1.1.0-beta01"
-WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha01"
+WEAR_REMOTE_INTERACTIONS = "1.1.0-alpha02"
 WEAR_TILES = "1.3.0-beta01"
 WEAR_TOOLING_PREVIEW = "1.0.0-rc01"
 WEAR_WATCHFACE = "1.3.0-alpha01"
diff --git a/lifecycle/integration-tests/incrementality/build.gradle b/lifecycle/integration-tests/incrementality/build.gradle
index 21dcdf0..3b547a5 100644
--- a/lifecycle/integration-tests/incrementality/build.gradle
+++ b/lifecycle/integration-tests/incrementality/build.gradle
@@ -14,6 +14,13 @@
  * 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.SdkResourceGenerator
 
 plugins {
diff --git a/lifecycle/lifecycle-common-java8/build.gradle b/lifecycle/lifecycle-common-java8/build.gradle
index 4de506b..6572b50 100644
--- a/lifecycle/lifecycle-common-java8/build.gradle
+++ b/lifecycle/lifecycle-common-java8/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-common/build.gradle b/lifecycle/lifecycle-common/build.gradle
index 1ce18f6..bc25ff6 100644
--- a/lifecycle/lifecycle-common/build.gradle
+++ b/lifecycle/lifecycle-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lifecycle/lifecycle-compiler/build.gradle b/lifecycle/lifecycle-compiler/build.gradle
index 5a4e902..95ce2cf 100644
--- a/lifecycle/lifecycle-compiler/build.gradle
+++ b/lifecycle/lifecycle-compiler/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/lifecycle/lifecycle-extensions/build.gradle b/lifecycle/lifecycle-extensions/build.gradle
index 7915a16..23b5dbc 100644
--- a/lifecycle/lifecycle-extensions/build.gradle
+++ b/lifecycle/lifecycle-extensions/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle b/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle
index 59c894a..9699395 100644
--- a/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle
+++ b/lifecycle/lifecycle-livedata-core-ktx-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/lifecycle/lifecycle-livedata-core-ktx/build.gradle b/lifecycle/lifecycle-livedata-core-ktx/build.gradle
index cc989bd..bd13060 100644
--- a/lifecycle/lifecycle-livedata-core-ktx/build.gradle
+++ b/lifecycle/lifecycle-livedata-core-ktx/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lifecycle/lifecycle-livedata-core-truth/build.gradle b/lifecycle/lifecycle-livedata-core-truth/build.gradle
index 910f657..e743bd6 100644
--- a/lifecycle/lifecycle-livedata-core-truth/build.gradle
+++ b/lifecycle/lifecycle-livedata-core-truth/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-livedata-core/build.gradle b/lifecycle/lifecycle-livedata-core/build.gradle
index 878e9a5..772ba3f 100644
--- a/lifecycle/lifecycle-livedata-core/build.gradle
+++ b/lifecycle/lifecycle-livedata-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-livedata-ktx/build.gradle b/lifecycle/lifecycle-livedata-ktx/build.gradle
index e4597ea..b54fd32 100644
--- a/lifecycle/lifecycle-livedata-ktx/build.gradle
+++ b/lifecycle/lifecycle-livedata-ktx/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lifecycle/lifecycle-livedata/build.gradle b/lifecycle/lifecycle-livedata/build.gradle
index 8a935bc..e1c78537 100644
--- a/lifecycle/lifecycle-livedata/build.gradle
+++ b/lifecycle/lifecycle-livedata/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-process/build.gradle b/lifecycle/lifecycle-process/build.gradle
index df3dcb0..d54ff4c 100644
--- a/lifecycle/lifecycle-process/build.gradle
+++ b/lifecycle/lifecycle-process/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-reactivestreams-ktx/build.gradle b/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
index e8e3111..3bf9a40 100644
--- a/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
+++ b/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lifecycle/lifecycle-reactivestreams/build.gradle b/lifecycle/lifecycle-reactivestreams/build.gradle
index 52367ed..7badea4 100644
--- a/lifecycle/lifecycle-reactivestreams/build.gradle
+++ b/lifecycle/lifecycle-reactivestreams/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-runtime-compose/build.gradle b/lifecycle/lifecycle-runtime-compose/build.gradle
index a37cadc..24b4513 100644
--- a/lifecycle/lifecycle-runtime-compose/build.gradle
+++ b/lifecycle/lifecycle-runtime-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/lifecycle/lifecycle-runtime-compose/integration-tests/lifecycle-runtime-compose-demos/build.gradle b/lifecycle/lifecycle-runtime-compose/integration-tests/lifecycle-runtime-compose-demos/build.gradle
index 122cf219..e03ae24 100644
--- a/lifecycle/lifecycle-runtime-compose/integration-tests/lifecycle-runtime-compose-demos/build.gradle
+++ b/lifecycle/lifecycle-runtime-compose/integration-tests/lifecycle-runtime-compose-demos/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-runtime-compose/samples/build.gradle b/lifecycle/lifecycle-runtime-compose/samples/build.gradle
index 741eaf86..020a892 100644
--- a/lifecycle/lifecycle-runtime-compose/samples/build.gradle
+++ b/lifecycle/lifecycle-runtime-compose/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lifecycle/lifecycle-runtime-ktx-lint/build.gradle b/lifecycle/lifecycle-runtime-ktx-lint/build.gradle
index e10aea4..2fd2e56 100644
--- a/lifecycle/lifecycle-runtime-ktx-lint/build.gradle
+++ b/lifecycle/lifecycle-runtime-ktx-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/lifecycle/lifecycle-runtime-ktx/build.gradle b/lifecycle/lifecycle-runtime-ktx/build.gradle
index 1c2d829..1f60592 100644
--- a/lifecycle/lifecycle-runtime-ktx/build.gradle
+++ b/lifecycle/lifecycle-runtime-ktx/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lifecycle/lifecycle-runtime-testing-lint/build.gradle b/lifecycle/lifecycle-runtime-testing-lint/build.gradle
index d2bd9e9..9a253fb 100644
--- a/lifecycle/lifecycle-runtime-testing-lint/build.gradle
+++ b/lifecycle/lifecycle-runtime-testing-lint/build.gradle
@@ -14,7 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/lifecycle/lifecycle-runtime-testing/build.gradle b/lifecycle/lifecycle-runtime-testing/build.gradle
index 6da60ce..de2c5bf 100644
--- a/lifecycle/lifecycle-runtime-testing/build.gradle
+++ b/lifecycle/lifecycle-runtime-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-runtime/build.gradle b/lifecycle/lifecycle-runtime/build.gradle
index 0a94474..057d90e 100644
--- a/lifecycle/lifecycle-runtime/build.gradle
+++ b/lifecycle/lifecycle-runtime/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-service/build.gradle b/lifecycle/lifecycle-service/build.gradle
index a39577a..c674df1 100644
--- a/lifecycle/lifecycle-service/build.gradle
+++ b/lifecycle/lifecycle-service/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-viewmodel-compose/build.gradle b/lifecycle/lifecycle-viewmodel-compose/build.gradle
index 1b5d261..4b06506 100644
--- a/lifecycle/lifecycle-viewmodel-compose/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/lifecycle/lifecycle-viewmodel-compose/integration-tests/lifecycle-viewmodel-demos/build.gradle b/lifecycle/lifecycle-viewmodel-compose/integration-tests/lifecycle-viewmodel-demos/build.gradle
index daaf090..f7022a8 100644
--- a/lifecycle/lifecycle-viewmodel-compose/integration-tests/lifecycle-viewmodel-demos/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-compose/integration-tests/lifecycle-viewmodel-demos/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle b/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
index cb9c0ac..cd2f40e 100644
--- a/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lifecycle/lifecycle-viewmodel-ktx/build.gradle b/lifecycle/lifecycle-viewmodel-ktx/build.gradle
index 7dcd857..407b2e1 100644
--- a/lifecycle/lifecycle-viewmodel-ktx/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-ktx/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/build.gradle b/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
index d995d63..3a3706a 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.kt
index 7ae26bed..1fec523 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/AbstractSavedStateViewModelFactory.kt
@@ -17,6 +17,7 @@
 
 import android.os.Bundle
 import androidx.annotation.RestrictTo
+import androidx.lifecycle.LegacySavedStateHandleController.TAG_SAVED_STATE_HANDLE_CONTROLLER
 import androidx.lifecycle.LegacySavedStateHandleController.attachHandleIfNeeded
 import androidx.lifecycle.viewmodel.CreationExtras
 import androidx.savedstate.SavedStateRegistry
@@ -40,8 +41,7 @@
      * Constructs this factory.
      *
      * When a factory is constructed this way, a component for which [SavedStateHandle] is
-     * scoped must have called
-     * [SavedStateHandleSupport.enableSavedStateHandles].
+     * scoped must have called [enableSavedStateHandles].
      * See [CreationExtras.createSavedStateHandle] docs for more
      * details.
      */
@@ -148,9 +148,4 @@
             attachHandleIfNeeded(viewModel, savedStateRegistry!!, lifecycle!!)
         }
     }
-
-    internal companion object {
-        internal const val TAG_SAVED_STATE_HANDLE_CONTROLLER =
-            "androidx.lifecycle.savedstate.vm.tag"
-    }
 }
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.kt
index 42e40ec..d9794ef 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/main/java/androidx/lifecycle/SavedStateViewModelFactory.kt
@@ -182,7 +182,7 @@
             newInstance(modelClass, constructor, controller.handle)
         }
         viewModel.setTagIfAbsent(
-            AbstractSavedStateViewModelFactory.TAG_SAVED_STATE_HANDLE_CONTROLLER, controller
+            LegacySavedStateHandleController.TAG_SAVED_STATE_HANDLE_CONTROLLER, controller
         )
         return viewModel
     }
diff --git a/lifecycle/lifecycle-viewmodel/build.gradle b/lifecycle/lifecycle-viewmodel/build.gradle
index e7f157c..eea273e 100644
--- a/lifecycle/lifecycle-viewmodel/build.gradle
+++ b/lifecycle/lifecycle-viewmodel/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/lint-checks/build.gradle b/lint-checks/build.gradle
index 3fccf78..7d6fa107 100644
--- a/lint-checks/build.gradle
+++ b/lint-checks/build.gradle
@@ -14,6 +14,13 @@
  * 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.ExportAtomicLibraryGroupsToTextTask
 import androidx.build.LibraryType
 
diff --git a/lint-checks/integration-tests/build.gradle b/lint-checks/integration-tests/build.gradle
index daf7310..130e500 100644
--- a/lint-checks/integration-tests/build.gradle
+++ b/lint-checks/integration-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
diff --git a/loader/loader-ktx/build.gradle b/loader/loader-ktx/build.gradle
index 325b363..6472e3a 100644
--- a/loader/loader-ktx/build.gradle
+++ b/loader/loader-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/loader/loader/build.gradle b/loader/loader/build.gradle
index 331c8a6..a9287e0 100644
--- a/loader/loader/build.gradle
+++ b/loader/loader/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/media/media/build.gradle b/media/media/build.gradle
index 7e7457b..aa5ea22 100644
--- a/media/media/build.gradle
+++ b/media/media/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/media2/media2-common/build.gradle b/media2/media2-common/build.gradle
index 27f8bef..29efd41 100644
--- a/media2/media2-common/build.gradle
+++ b/media2/media2-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/media2/media2-exoplayer/build.gradle b/media2/media2-exoplayer/build.gradle
index 9348052..1defb33 100644
--- a/media2/media2-exoplayer/build.gradle
+++ b/media2/media2-exoplayer/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/media2/media2-player/build.gradle b/media2/media2-player/build.gradle
index 70a7c6f..3f9d5f7 100644
--- a/media2/media2-player/build.gradle
+++ b/media2/media2-player/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/media2/media2-session/build.gradle b/media2/media2-session/build.gradle
index dbb6e4d..c2a30ee 100644
--- a/media2/media2-session/build.gradle
+++ b/media2/media2-session/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/media2/media2-widget/build.gradle b/media2/media2-widget/build.gradle
index 8089619..b4a53a2 100644
--- a/media2/media2-widget/build.gradle
+++ b/media2/media2-widget/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/media2/media2-widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java b/media2/media2-widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
index fcf4b40..675beea 100644
--- a/media2/media2-widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
+++ b/media2/media2-widget/src/androidTest/java/androidx/media2/widget/MediaWidgetTestBase.java
@@ -28,7 +28,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.content.ContextCompat;
-import androidx.core.view.ViewCompat;
 import androidx.media2.widget.test.R;
 import androidx.test.core.app.ApplicationProvider;
 
@@ -74,7 +73,7 @@
     }
 
     static void checkAttachedToWindow(View view) throws Exception {
-        if (!ViewCompat.isAttachedToWindow(view)) {
+        if (!view.isAttachedToWindow()) {
             final CountDownLatch latch = new CountDownLatch(1);
             View.OnAttachStateChangeListener listener = new View.OnAttachStateChangeListener() {
                 @Override
diff --git a/media2/media2-widget/src/main/java/androidx/media2/widget/ClosedCaptionWidget.java b/media2/media2-widget/src/main/java/androidx/media2/widget/ClosedCaptionWidget.java
index 32f9c3a..c6435af 100644
--- a/media2/media2-widget/src/main/java/androidx/media2/widget/ClosedCaptionWidget.java
+++ b/media2/media2-widget/src/main/java/androidx/media2/widget/ClosedCaptionWidget.java
@@ -23,8 +23,6 @@
 import android.view.accessibility.CaptioningManager;
 import android.view.accessibility.CaptioningManager.CaptioningChangeListener;
 
-import androidx.core.view.ViewCompat;
-
 /**
  * Abstract widget class to render a closed caption track.
  */
@@ -147,7 +145,7 @@
      */
     private void manageChangeListener() {
         final boolean needsListener =
-                ViewCompat.isAttachedToWindow(this) && getVisibility() == View.VISIBLE;
+                this.isAttachedToWindow() && getVisibility() == View.VISIBLE;
         if (mHasChangeListener != needsListener) {
             mHasChangeListener = needsListener;
 
diff --git a/media2/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java b/media2/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
index 6ef9ac9..2cf20b4 100644
--- a/media2/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
+++ b/media2/media2-widget/src/main/java/androidx/media2/widget/MediaControlView.java
@@ -51,7 +51,6 @@
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.core.content.ContextCompat;
-import androidx.core.view.ViewCompat;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -359,7 +358,7 @@
         }
         mPlayer = new PlayerWrapper(controller, ContextCompat.getMainExecutor(getContext()),
                 new PlayerCallback());
-        if (ViewCompat.isAttachedToWindow(this)) {
+        if (this.isAttachedToWindow()) {
             mPlayer.attachCallback();
         }
     }
@@ -396,7 +395,7 @@
         }
         mPlayer = new PlayerWrapper(player, ContextCompat.getMainExecutor(getContext()),
                 new PlayerCallback());
-        if (ViewCompat.isAttachedToWindow(this)) {
+        if (this.isAttachedToWindow()) {
             mPlayer.attachCallback();
         }
     }
diff --git a/media2/media2-widget/src/main/java/androidx/media2/widget/SubtitleAnchorView.java b/media2/media2-widget/src/main/java/androidx/media2/widget/SubtitleAnchorView.java
index 36679e7..33c6be7 100644
--- a/media2/media2-widget/src/main/java/androidx/media2/widget/SubtitleAnchorView.java
+++ b/media2/media2-widget/src/main/java/androidx/media2/widget/SubtitleAnchorView.java
@@ -24,7 +24,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.view.ViewCompat;
 import androidx.media2.widget.SubtitleController.Anchor;
 import androidx.media2.widget.SubtitleTrack.RenderingWidget;
 
@@ -52,7 +51,7 @@
             return;
         }
 
-        final boolean attachedToWindow = ViewCompat.isAttachedToWindow(this);
+        final boolean attachedToWindow = this.isAttachedToWindow();
         if (mSubtitleWidget != null) {
             if (attachedToWindow) {
                 mSubtitleWidget.onDetachedFromWindow();
diff --git a/media2/media2-widget/src/main/java/androidx/media2/widget/VideoView.java b/media2/media2-widget/src/main/java/androidx/media2/widget/VideoView.java
index 20d4008..7027695 100644
--- a/media2/media2-widget/src/main/java/androidx/media2/widget/VideoView.java
+++ b/media2/media2-widget/src/main/java/androidx/media2/widget/VideoView.java
@@ -30,7 +30,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.content.ContextCompat;
-import androidx.core.view.ViewCompat;
 import androidx.palette.graphics.Palette;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -398,7 +397,7 @@
         }
         mPlayer = new PlayerWrapper(controller, ContextCompat.getMainExecutor(getContext()),
                 new PlayerCallback());
-        if (ViewCompat.isAttachedToWindow(this)) {
+        if (this.isAttachedToWindow()) {
             mPlayer.attachCallback();
         }
         if (this.isAggregatedVisible()) {
@@ -435,7 +434,7 @@
         }
         mPlayer = new PlayerWrapper(player, ContextCompat.getMainExecutor(getContext()),
                 new PlayerCallback());
-        if (ViewCompat.isAttachedToWindow(this)) {
+        if (this.isAttachedToWindow()) {
             mPlayer.attachCallback();
         }
         if (this.isAggregatedVisible()) {
diff --git a/mediarouter/mediarouter-testing/build.gradle b/mediarouter/mediarouter-testing/build.gradle
index fd973e9..9712d7e 100644
--- a/mediarouter/mediarouter-testing/build.gradle
+++ b/mediarouter/mediarouter-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/mediarouter/mediarouter/build.gradle b/mediarouter/mediarouter/build.gradle
index 6d4a769..f408c28 100644
--- a/mediarouter/mediarouter/build.gradle
+++ b/mediarouter/mediarouter/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/metrics/metrics-performance/build.gradle b/metrics/metrics-performance/build.gradle
index 9eef67b..a8c8b9a 100644
--- a/metrics/metrics-performance/build.gradle
+++ b/metrics/metrics-performance/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/navigation/navigation-benchmark/build.gradle b/navigation/navigation-benchmark/build.gradle
index 53cfa31..ef9ee24 100644
--- a/navigation/navigation-benchmark/build.gradle
+++ b/navigation/navigation-benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-common-ktx/build.gradle b/navigation/navigation-common-ktx/build.gradle
index dcdb1ae..b78112e 100644
--- a/navigation/navigation-common-ktx/build.gradle
+++ b/navigation/navigation-common-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode
 
diff --git a/navigation/navigation-common-lint/build.gradle b/navigation/navigation-common-lint/build.gradle
index 2bdc5ef..b099b59 100644
--- a/navigation/navigation-common-lint/build.gradle
+++ b/navigation/navigation-common-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/navigation/navigation-common/build.gradle b/navigation/navigation-common/build.gradle
index 7102eda..77c8ed9 100644
--- a/navigation/navigation-common/build.gradle
+++ b/navigation/navigation-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-compose-lint/build.gradle b/navigation/navigation-compose-lint/build.gradle
index aa54393..74f87b8 100644
--- a/navigation/navigation-compose-lint/build.gradle
+++ b/navigation/navigation-compose-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/navigation/navigation-compose/build.gradle b/navigation/navigation-compose/build.gradle
index fd8e5357..f06ef99 100644
--- a/navigation/navigation-compose/build.gradle
+++ b/navigation/navigation-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/navigation/navigation-compose/integration-tests/navigation-demos/build.gradle b/navigation/navigation-compose/integration-tests/navigation-demos/build.gradle
index b3c1ff9..140b0aa 100644
--- a/navigation/navigation-compose/integration-tests/navigation-demos/build.gradle
+++ b/navigation/navigation-compose/integration-tests/navigation-demos/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-compose/samples/build.gradle b/navigation/navigation-compose/samples/build.gradle
index 5c93b17..8b287c0 100644
--- a/navigation/navigation-compose/samples/build.gradle
+++ b/navigation/navigation-compose/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/navigation/navigation-dynamic-features-fragment/build.gradle b/navigation/navigation-dynamic-features-fragment/build.gradle
index b1689fe..b32355a 100644
--- a/navigation/navigation-dynamic-features-fragment/build.gradle
+++ b/navigation/navigation-dynamic-features-fragment/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/navigation/navigation-dynamic-features-runtime/build.gradle b/navigation/navigation-dynamic-features-runtime/build.gradle
index 973bfa8..d39b0be 100644
--- a/navigation/navigation-dynamic-features-runtime/build.gradle
+++ b/navigation/navigation-dynamic-features-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/navigation/navigation-fragment-ktx/build.gradle b/navigation/navigation-fragment-ktx/build.gradle
index 16a263f5..84b6d20 100644
--- a/navigation/navigation-fragment-ktx/build.gradle
+++ b/navigation/navigation-fragment-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-fragment/build.gradle b/navigation/navigation-fragment/build.gradle
index 6facd3f..9533257 100644
--- a/navigation/navigation-fragment/build.gradle
+++ b/navigation/navigation-fragment/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-runtime-ktx/build.gradle b/navigation/navigation-runtime-ktx/build.gradle
index f08ad9d..93fa350 100644
--- a/navigation/navigation-runtime-ktx/build.gradle
+++ b/navigation/navigation-runtime-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-runtime-lint/build.gradle b/navigation/navigation-runtime-lint/build.gradle
index 3362b92..18ab355 100644
--- a/navigation/navigation-runtime-lint/build.gradle
+++ b/navigation/navigation-runtime-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/navigation/navigation-runtime-truth/build.gradle b/navigation/navigation-runtime-truth/build.gradle
index 4ff4554f..e250034 100644
--- a/navigation/navigation-runtime-truth/build.gradle
+++ b/navigation/navigation-runtime-truth/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-runtime/build.gradle b/navigation/navigation-runtime/build.gradle
index 3da2dff..9976f83 100644
--- a/navigation/navigation-runtime/build.gradle
+++ b/navigation/navigation-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/navigation/navigation-safe-args-generator/build.gradle b/navigation/navigation-safe-args-generator/build.gradle
index 4a019c6..6b926eb 100644
--- a/navigation/navigation-safe-args-generator/build.gradle
+++ b/navigation/navigation-safe-args-generator/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.SdkHelperKt
 
diff --git a/navigation/navigation-safe-args-gradle-plugin/build.gradle b/navigation/navigation-safe-args-gradle-plugin/build.gradle
index 843c716..c680bc3 100644
--- a/navigation/navigation-safe-args-gradle-plugin/build.gradle
+++ b/navigation/navigation-safe-args-gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.SdkResourceGenerator
 
diff --git a/navigation/navigation-testing/build.gradle b/navigation/navigation-testing/build.gradle
index e2ac6f3..133557d 100644
--- a/navigation/navigation-testing/build.gradle
+++ b/navigation/navigation-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-ui-ktx/build.gradle b/navigation/navigation-ui-ktx/build.gradle
index f386457..8b47902 100644
--- a/navigation/navigation-ui-ktx/build.gradle
+++ b/navigation/navigation-ui-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/navigation/navigation-ui/build.gradle b/navigation/navigation-ui/build.gradle
index dcb24410..eab9cd6 100644
--- a/navigation/navigation-ui/build.gradle
+++ b/navigation/navigation-ui/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 import androidx.build.Publish
diff --git a/paging/paging-common-ktx/build.gradle b/paging/paging-common-ktx/build.gradle
index 87e2ccf..b4dfab7 100644
--- a/paging/paging-common-ktx/build.gradle
+++ b/paging/paging-common-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/paging/paging-common/build.gradle b/paging/paging-common/build.gradle
index 4225395..e04b47e 100644
--- a/paging/paging-common/build.gradle
+++ b/paging/paging-common/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
 import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
diff --git a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt
index ffd5abf..b727765 100644
--- a/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt
+++ b/paging/paging-common/src/commonJvmAndroidMain/kotlin/androidx/paging/PagedStorage.jvm.kt
@@ -166,8 +166,8 @@
     /**
      * Walk through the list of pages to find the data at local index
      */
-    override fun getFromStorage(localIndex: Int): T =
-        traversePages(localIndex) { page, pageInternalIndex ->
+    override fun getItem(index: Int): T =
+        traversePages(index) { page, pageInternalIndex ->
             page.data[pageInternalIndex]
         }
 
@@ -199,7 +199,7 @@
             index < 0 || index >= size ->
                 throw IndexOutOfBoundsException("Index: $index, Size: $size")
             localIndex < 0 || localIndex >= dataCount -> null
-            else -> getFromStorage(localIndex)
+            else -> getItem(localIndex)
         }
     }
 
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt
index 755c80d..9bd6f0f 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/MutableCombinedLoadStateCollection.kt
@@ -39,18 +39,20 @@
     private val _stateFlow = MutableStateFlow<CombinedLoadStates?>(null)
     public val stateFlow = _stateFlow.asStateFlow()
 
+    // load states are de-duplicated
     fun set(sourceLoadStates: LoadStates, remoteLoadStates: LoadStates?) =
         dispatchNewState { currState ->
             computeNewState(currState, sourceLoadStates, remoteLoadStates)
         }
 
+    // load states are de-duplicated
     fun set(type: LoadType, remote: Boolean, state: LoadState) =
         dispatchNewState { currState ->
             var source = currState?.source ?: LoadStates.IDLE
-            var mediator = currState?.mediator ?: LoadStates.IDLE
+            var mediator = currState?.mediator
 
             if (remote) {
-                mediator = mediator.modifyState(type, state)
+                mediator = LoadStates.IDLE.modifyState(type, state)
             } else {
                 source = source.modifyState(type, state)
             }
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt
index 0aade5b..f434749 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/NullPaddedList.kt
@@ -26,8 +26,8 @@
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public interface NullPaddedList<T> {
     public val placeholdersBefore: Int
-    public fun getFromStorage(localIndex: Int): T
     public val placeholdersAfter: Int
     public val size: Int
     public val dataCount: Int
+    public fun getItem(index: Int): T
 }
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageStore.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageStore.kt
index 972907a..bc9a9fd 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageStore.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PageStore.kt
@@ -16,7 +16,6 @@
 
 package androidx.paging
 
-import androidx.paging.LoadState.NotLoading
 import androidx.paging.LoadType.APPEND
 import androidx.paging.LoadType.PREPEND
 import androidx.paging.LoadType.REFRESH
@@ -59,7 +58,7 @@
     }
 
     override fun toString(): String {
-        val items = List(dataCount) { getFromStorage(it) }.joinToString()
+        val items = List(dataCount) { getItem(it) }.joinToString()
         return "[($placeholdersBefore placeholders), $items, ($placeholdersAfter placeholders)]"
     }
 
@@ -70,7 +69,7 @@
         if (localIndex < 0 || localIndex >= dataCount) {
             return null
         }
-        return getFromStorage(localIndex)
+        return getItem(localIndex)
     }
 
     fun snapshot(): ItemSnapshotList<T> {
@@ -81,9 +80,9 @@
         )
     }
 
-    override fun getFromStorage(localIndex: Int): T {
+    override fun getItem(index: Int): T {
         var pageIndex = 0
-        var indexInPage = localIndex
+        var indexInPage = index
 
         // Since we don't know if page sizes are regular, we walk to correct page.
         val localPageCount = pages.size
@@ -263,13 +262,6 @@
             if (changeCount > 0) {
                 callback.onChanged(firstItemIndex, changeCount)
             }
-
-            // Dropping from prepend direction implies NotLoading(endOfPaginationReached = false).
-            callback.onStateUpdate(
-                loadType = PREPEND,
-                fromMediator = false,
-                loadState = NotLoading.Incomplete
-            )
         } else {
             val oldPlaceholdersAfter = placeholdersAfter
 
@@ -306,13 +298,6 @@
                     count = changeCount
                 )
             }
-
-            // Dropping from append direction implies NotLoading(endOfPaginationReached = false).
-            callback.onStateUpdate(
-                loadType = APPEND,
-                fromMediator = false,
-                loadState = NotLoading.Incomplete
-            )
         }
     }
 
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataEvent.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataEvent.kt
index a9cc5ec..3ce3bc5 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataEvent.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataEvent.kt
@@ -57,4 +57,18 @@
         val newPlaceholdersAfter: Int,
         val oldPlaceholdersAfter: Int,
     ) : PagingDataEvent<T>()
+
+    /**
+     * A refresh load event
+     *
+     * @param [newList] A [NullPaddedList] that contains the metadata of the new list
+     * that is presented upon this refresh event
+     *
+     * @param [previousList] A [NullPaddedList] that contains the metadata of the list
+     * presented prior to this refresh load event
+     */
+    public class Refresh<T : Any> @RestrictTo(LIBRARY_GROUP) constructor(
+        val newList: NullPaddedList<T>,
+        val previousList: NullPaddedList<T>,
+    ) : PagingDataEvent<T>()
 }
diff --git a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataPresenter.kt b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataPresenter.kt
index 8b4becd..a173a9e 100644
--- a/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataPresenter.kt
+++ b/paging/paging-common/src/commonMain/kotlin/androidx/paging/PagingDataPresenter.kt
@@ -25,7 +25,6 @@
 import androidx.paging.PageEvent.Insert
 import androidx.paging.PageEvent.StaticList
 import androidx.paging.PageStore.ProcessPageEventCallback
-import androidx.paging.internal.BUGANIZER_URL
 import androidx.paging.internal.CopyOnWriteArrayList
 import androidx.paging.internal.appendMediatorStatesIfNotNull
 import kotlin.coroutines.CoroutineContext
@@ -90,7 +89,7 @@
 
         // for state updates from LoadStateUpdate events
         override fun onStateUpdate(source: LoadStates, mediator: LoadStates?) {
-            dispatchLoadStates(source, mediator)
+            combinedLoadStatesCollection.set(source, mediator)
         }
 
         // for state updates from Drop events
@@ -104,38 +103,9 @@
         }
     }
 
-    private fun dispatchLoadStates(source: LoadStates, mediator: LoadStates?) {
-        // CombinedLoadStates is de-duplicated within set()
-        combinedLoadStatesCollection.set(
-            sourceLoadStates = source,
-            remoteLoadStates = mediator
-        )
-    }
-
-    /**
-     * @param onListPresentable Call this synchronously right before dispatching updates to signal
-     * that this [PagingDataPresenter] should now consider [newList] as the presented list for
-     * presenter-level APIs such as [snapshot] and [peek]. This should be called before notifying
-     * any callbacks that the user would expect to be synchronous with pageStore updates, such as
-     * `ListUpdateCallback`, in case it's desirable to inspect pageStore state within those
-     * callbacks.
-     *
-     * @return Transformed result of [lastAccessedIndex] as an index of [newList] using the diff
-     * result between [previousList] and [newList]. Null if [newList] or [previousList] lists are
-     * empty, where it does not make sense to transform [lastAccessedIndex].
-     */
-    // TODO("To be removed when all PageEvent types have moved to presentPagingDataEvent")
-    public abstract suspend fun presentNewList(
-        previousList: NullPaddedList<T>,
-        newList: NullPaddedList<T>,
-        lastAccessedIndex: Int,
-        onListPresentable: () -> Unit,
-    )
-
     /**
      * Handler for [PagingDataEvent] emitted by a [PagingData] that was submitted to
      * this [PagingDataPresenter]
-     *
      */
     public abstract suspend fun presentPagingDataEvent(
         event: PagingDataEvent<T>,
@@ -202,9 +172,9 @@
                             presentPagingDataEvent(pageStore.processEvent(event))
 
                             // dispatch load states
-                            dispatchLoadStates(
-                                source = event.sourceLoadStates,
-                                mediator = event.mediatorLoadStates,
+                            combinedLoadStatesCollection.set(
+                                sourceLoadStates = event.sourceLoadStates,
+                                remoteLoadStates = event.mediatorLoadStates,
                             )
 
                             // If index points to a placeholder after transformations, resend it unless
@@ -254,17 +224,24 @@
                                 yield()
                             }
 
-                            // Process DROP to be shown to the UI
+                            // Process DROP and send to presenter
                             pageStore.processEvent(event, processPageEventCallback)
 
+                            // dispatch load states
+                            combinedLoadStatesCollection.set(
+                                type = event.loadType,
+                                remote = false,
+                                state = LoadState.NotLoading.Incomplete
+                            )
+
                             // Reset lastAccessedIndexUnfulfilled if a page is dropped, to avoid
                             // infinite loops when maxSize is insufficiently large.
                             lastAccessedIndexUnfulfilled = false
                         }
                         event is PageEvent.LoadStateUpdate ->
-                            processPageEventCallback.onStateUpdate(
-                                source = event.source,
-                                mediator = event.mediator,
+                            combinedLoadStatesCollection.set(
+                                sourceLoadStates = event.source,
+                                remoteLoadStates = event.mediator,
                             )
                     }
                     // Notify page updates after pageStore processes them.
@@ -478,23 +455,29 @@
 
         lastAccessedIndexUnfulfilled = false
 
-        val newPresenter = PageStore(
+        val newPageStore = PageStore(
             pages = pages,
             placeholdersBefore = placeholdersBefore,
             placeholdersAfter = placeholdersAfter,
         )
-        var onListPresentableCalled = false
-        presentNewList(
-            previousList = pageStore,
-            newList = newPresenter,
-            lastAccessedIndex = lastAccessedIndex,
-            onListPresentable = {
-                pageStore = newPresenter
-                onListPresentableCalled = true
-                hintReceiver = newHintReceiver
-                log(DEBUG) {
-                    appendMediatorStatesIfNotNull(mediatorLoadStates) {
-                        """Presenting data:
+        // must capture previousList states here before we update pageStore
+        val previousList = pageStore as NullPaddedList<T>
+
+        // update the store here before event is sent to ensure that snapshot() returned in
+        // UI update callbacks (onChanged, onInsert etc) reflects the new list
+        pageStore = newPageStore
+        hintReceiver = newHintReceiver
+
+        // send event to UI
+        presentPagingDataEvent(
+            PagingDataEvent.Refresh(
+                newList = newPageStore as NullPaddedList<T>,
+                previousList = previousList,
+            )
+        )
+        log(DEBUG) {
+            appendMediatorStatesIfNotNull(mediatorLoadStates) {
+                """Presenting data:
                             |   first item: ${pages.firstOrNull()?.data?.firstOrNull()}
                             |   last item: ${pages.lastOrNull()?.data?.lastOrNull()}
                             |   placeholdersBefore: $placeholdersBefore
@@ -502,31 +485,21 @@
                             |   hintReceiver: $newHintReceiver
                             |   sourceLoadStates: $sourceLoadStates
                         """
-                    }
-                }
             }
-        )
-        check(onListPresentableCalled) {
-            """Missing call to onListPresentable after new list was presented. If you are seeing
-                | this exception, it is generally an indication of an issue with Paging.
-                | Please file a bug so we can fix it at:
-                | $BUGANIZER_URL""".trimMargin()
         }
-
         // We may want to skip dispatching load states if triggered by a static list which wants to
         // preserve the previous state.
         if (dispatchLoadStates) {
             // Dispatch LoadState updates as soon as we are done diffing, but after
             // setting new pageStore.
-            dispatchLoadStates(sourceLoadStates!!, mediatorLoadStates)
+            combinedLoadStatesCollection.set(sourceLoadStates!!, mediatorLoadStates)
         }
-
-        if (newPresenter.size == 0) {
+        if (newPageStore.size == 0) {
             // Send an initialize hint in case the new list is empty (no items or placeholders),
             // which would prevent a ViewportHint.Access from ever getting sent since there are
             // no items to bind from initial load. Without this hint, paging would stall on
             // an empty list because prepend/append would be not triggered.
-            hintReceiver?.accessHint(newPresenter.initializeHint())
+            hintReceiver?.accessHint(newPageStore.initializeHint())
         }
     }
 }
diff --git a/paging/paging-common/src/commonTest/kotlin/androidx/paging/PageStoreTest.kt b/paging/paging-common/src/commonTest/kotlin/androidx/paging/PageStoreTest.kt
index e19d32e..5b37246 100644
--- a/paging/paging-common/src/commonTest/kotlin/androidx/paging/PageStoreTest.kt
+++ b/paging/paging-common/src/commonTest/kotlin/androidx/paging/PageStoreTest.kt
@@ -17,7 +17,6 @@
 package androidx.paging
 
 import androidx.kruth.assertThat
-import androidx.paging.LoadState.NotLoading
 import androidx.paging.LoadType.APPEND
 import androidx.paging.LoadType.PREPEND
 import androidx.paging.PageStore.ProcessPageEventCallback
@@ -244,9 +243,7 @@
             callback = callback
         )
 
-        assertThat(callback.getAllAndClear()).isEqualTo(
-            events + listOf(StateEvent(APPEND, false, NotLoading.Incomplete))
-        )
+        assertThat(callback.getAllAndClear()).isEqualTo(events)
 
         // assert final list state
         val finalData = initialPages.subList(0, initialPages.size - pagesToDrop).flatten()
@@ -285,9 +282,7 @@
             callback = callback
         )
 
-        assertThat(callback.getAllAndClear()).isEqualTo(
-            events + listOf(StateEvent(PREPEND, false, NotLoading.Incomplete))
-        )
+        assertThat(callback.getAllAndClear()).isEqualTo(events)
 
         // assert final list state
         val finalData = initialPages.take(initialPages.size - pagesToDrop).reversed().flatten()
diff --git a/paging/paging-common/src/commonTest/kotlin/androidx/paging/PagingDataPresenterTest.kt b/paging/paging-common/src/commonTest/kotlin/androidx/paging/PagingDataPresenterTest.kt
index 5d92823..dd61ec5 100644
--- a/paging/paging-common/src/commonTest/kotlin/androidx/paging/PagingDataPresenterTest.kt
+++ b/paging/paging-common/src/commonTest/kotlin/androidx/paging/PagingDataPresenterTest.kt
@@ -1584,6 +1584,58 @@
     }
 
     @Test
+    fun appendDrop_loadStates() = appendDrop_loadStates(false)
+
+    @Test
+    fun appendDrop_loadStates_collectWithCachedIn() = appendDrop_loadStates(true)
+
+    private fun appendDrop_loadStates(collectWithCachedIn: Boolean) =
+        runTest(
+            collectWithCachedIn,
+            initialKey = 96,
+            config = PagingConfig(
+                pageSize = 1,
+                maxSize = 4,
+                enablePlaceholders = false
+            )
+        ) { presenter, _, _, _ ->
+        val collectLoadStates = launch { presenter.collectLoadStates() }
+
+        // initial REFRESH
+        advanceUntilIdle()
+
+        assertThat(presenter.snapshot()).containsExactlyElementsIn(96 until 99)
+        assertThat(presenter.newCombinedLoadStates()).containsExactly(
+            localLoadStatesOf(refreshLocal = Loading),
+            // ensure append has reached end of pagination
+            localLoadStatesOf(),
+        )
+
+        // trigger append to reach max page size
+        presenter[2]
+        advanceUntilIdle()
+
+        assertThat(presenter.snapshot()).containsExactlyElementsIn(96 until 100)
+        assertThat(presenter.newCombinedLoadStates()).containsExactly(
+            localLoadStatesOf(appendLocal = Loading),
+            localLoadStatesOf(appendLocal = NotLoading.Complete),
+        )
+
+        // trigger prepend and drop from append direction
+        presenter[0]
+        advanceUntilIdle()
+
+        assertThat(presenter.snapshot()).containsExactlyElementsIn(95 until 99)
+        assertThat(presenter.newCombinedLoadStates()).containsExactly(
+            localLoadStatesOf(prependLocal = Loading, appendLocal = NotLoading.Complete),
+            // page from the end is dropped so now appendLocal should be NotLoading.Incomplete
+            localLoadStatesOf(prependLocal = Loading),
+            localLoadStatesOf(),
+        )
+        collectLoadStates.cancel()
+    }
+
+    @Test
     fun prependInvalid_loadStates() = prependInvalid_loadStates(false)
 
     @Test
@@ -1644,6 +1696,59 @@
     }
 
     @Test
+    fun prependDrop_loadStates() = prependDrop_loadStates(false)
+
+    @Test
+    fun prependDrop_loadStates_collectWithCachedIn() = prependDrop_loadStates(true)
+
+    private fun prependDrop_loadStates(collectWithCachedIn: Boolean) =
+        runTest(
+            collectWithCachedIn,
+            initialKey = 1,
+            config = PagingConfig(
+                pageSize = 1,
+                maxSize = 4,
+                enablePlaceholders = false
+            )
+        ) { presenter, _, _, _ ->
+            val collectLoadStates = launch { presenter.collectLoadStates() }
+
+            // initial REFRESH
+            advanceUntilIdle()
+
+            assertThat(presenter.snapshot()).containsExactlyElementsIn(1 until 4)
+            assertThat(presenter.newCombinedLoadStates()).containsExactly(
+                localLoadStatesOf(refreshLocal = Loading),
+                // ensure append has reached end of pagination
+                localLoadStatesOf(),
+            )
+
+            // trigger prepend to reach max page size
+            presenter[0]
+            advanceUntilIdle()
+
+            assertThat(presenter.snapshot()).containsExactlyElementsIn(0 until 4)
+            assertThat(presenter.newCombinedLoadStates()).containsExactly(
+                localLoadStatesOf(prependLocal = Loading),
+                localLoadStatesOf(prependLocal = NotLoading.Complete),
+            )
+
+            // trigger append and drop from prepend direction
+            presenter[3]
+            advanceUntilIdle()
+
+            assertThat(presenter.snapshot()).containsExactlyElementsIn(1 until 5)
+            assertThat(presenter.newCombinedLoadStates()).containsExactly(
+                localLoadStatesOf(prependLocal = NotLoading.Complete, appendLocal = Loading),
+                // first page is dropped so now prependLocal should be NotLoading.Incomplete
+                localLoadStatesOf(appendLocal = Loading),
+                localLoadStatesOf(),
+            )
+
+            collectLoadStates.cancel()
+        }
+
+    @Test
     fun refreshInvalid_loadStates() = refreshInvalid_loadStates(false)
 
     @Test
@@ -2211,6 +2316,7 @@
     private fun runTest(
         collectWithCachedIn: Boolean,
         initialKey: Int? = null,
+        config: PagingConfig = PagingConfig(pageSize = 3, enablePlaceholders = false),
         block: TestScope.(
             presenter: SimplePresenter,
             pagingSources: List<TestPagingSource>,
@@ -2220,7 +2326,7 @@
     ) = testScope.runTest {
         val pagingSources = mutableListOf<TestPagingSource>()
         val pager = Pager(
-            config = PagingConfig(pageSize = 3, enablePlaceholders = false),
+            config = config,
             initialKey = initialKey,
             pagingSourceFactory = {
                 TestPagingSource(
@@ -2367,15 +2473,6 @@
     mainContext = EmptyCoroutineContext,
     cachedPagingData = cachedPagingData
 ) {
-    override suspend fun presentNewList(
-        previousList: NullPaddedList<Int>,
-        newList: NullPaddedList<Int>,
-        lastAccessedIndex: Int,
-        onListPresentable: () -> Unit
-    ) {
-        onListPresentable()
-    }
-
     private val _localLoadStates = mutableListOf<CombinedLoadStates>()
 
     val nonNullLoadStateFlow = loadStateFlow.filterNotNull()
diff --git a/paging/paging-compose/build.gradle b/paging/paging-compose/build.gradle
index 138ae2c..3502bf0 100644
--- a/paging/paging-compose/build.gradle
+++ b/paging/paging-compose/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/paging/paging-compose/integration-tests/paging-demos/build.gradle b/paging/paging-compose/integration-tests/paging-demos/build.gradle
index 586f17d..e9cb7bb 100644
--- a/paging/paging-compose/integration-tests/paging-demos/build.gradle
+++ b/paging/paging-compose/integration-tests/paging-demos/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/paging/paging-compose/samples/build.gradle b/paging/paging-compose/samples/build.gradle
index ced7866..1df0616 100644
--- a/paging/paging-compose/samples/build.gradle
+++ b/paging/paging-compose/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/paging/paging-compose/src/commonMain/kotlin/androidx/paging/compose/LazyPagingItems.kt b/paging/paging-compose/src/commonMain/kotlin/androidx/paging/compose/LazyPagingItems.kt
index 0aaee56..464d6cd 100644
--- a/paging/paging-compose/src/commonMain/kotlin/androidx/paging/compose/LazyPagingItems.kt
+++ b/paging/paging-compose/src/commonMain/kotlin/androidx/paging/compose/LazyPagingItems.kt
@@ -29,7 +29,6 @@
 import androidx.paging.ItemSnapshotList
 import androidx.paging.LoadState
 import androidx.paging.LoadStates
-import androidx.paging.NullPaddedList
 import androidx.paging.PagingData
 import androidx.paging.PagingDataEvent
 import androidx.paging.PagingDataPresenter
@@ -95,16 +94,6 @@
         cachedPagingData =
             if (flow is SharedFlow<PagingData<T>>) flow.replayCache.firstOrNull() else null
     ) {
-        override suspend fun presentNewList(
-            previousList: NullPaddedList<T>,
-            newList: NullPaddedList<T>,
-            lastAccessedIndex: Int,
-            onListPresentable: () -> Unit
-        ) {
-            onListPresentable()
-            updateItemSnapshotList()
-        }
-
         override suspend fun presentPagingDataEvent(
             event: PagingDataEvent<T>,
         ) {
diff --git a/paging/paging-guava/build.gradle b/paging/paging-guava/build.gradle
index 7ce3e9b..b1e4aeb 100644
--- a/paging/paging-guava/build.gradle
+++ b/paging/paging-guava/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/paging/paging-runtime-ktx/build.gradle b/paging/paging-runtime-ktx/build.gradle
index 403b48e..1399fe5 100644
--- a/paging/paging-runtime-ktx/build.gradle
+++ b/paging/paging-runtime-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/paging/paging-runtime/build.gradle b/paging/paging-runtime/build.gradle
index a80973c..3f58721 100644
--- a/paging/paging-runtime/build.gradle
+++ b/paging/paging-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffHelperTest.kt b/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffHelperTest.kt
index 622f4f5..6b27bef 100644
--- a/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffHelperTest.kt
+++ b/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffHelperTest.kt
@@ -39,7 +39,7 @@
         private val data: List<String>,
         override val placeholdersAfter: Int
     ) : NullPaddedList<String> {
-        override fun getFromStorage(localIndex: Int): String = data[localIndex]
+        override fun getItem(index: Int): String = data[index]
         override val size: Int
             get() = placeholdersBefore + data.size + placeholdersAfter
         override val dataCount: Int
diff --git a/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt b/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt
index d6216d5..bc35df8 100644
--- a/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt
+++ b/paging/paging-runtime/src/androidTest/java/androidx/paging/NullPaddedListDiffWithRecyclerViewTest.kt
@@ -419,7 +419,7 @@
             val pre = randomNullPaddedStorage(0)
             val post = randomNullPaddedStorage(
                 startId = if (pre.dataCount > 0) {
-                    pre.getFromStorage(rand.nextInt(pre.dataCount)).id
+                    pre.getItem(rand.nextInt(pre.dataCount)).id
                 } else {
                     0
                 }
@@ -621,7 +621,7 @@
             """.trimIndent()
         }
 
-        override fun getFromStorage(localIndex: Int): NullPaddedListItem = data[localIndex]
+        override fun getItem(index: Int): NullPaddedListItem = data[index]
 
         override val size: Int
             get() = placeholdersBefore + data.size + placeholdersAfter
@@ -822,7 +822,7 @@
     if (index < placeholdersBefore) return null
     val storageIndex = index - placeholdersBefore
     if (storageIndex >= dataCount) return null
-    return getFromStorage(storageIndex)
+    return getItem(storageIndex)
 }
 
 /**
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt b/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
index e3045cb..c92db54 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
@@ -162,35 +162,6 @@
     internal var inGetItem: Boolean = false
 
     internal val presenter = object : PagingDataPresenter<T>(differCallback, mainDispatcher) {
-        // TODO("To be removed when all PageEvent types have moved to presentPagingDataEvent")
-        override suspend fun presentNewList(
-            previousList: NullPaddedList<T>,
-            newList: NullPaddedList<T>,
-            lastAccessedIndex: Int,
-            onListPresentable: () -> Unit,
-        ) {
-            when {
-                // fast path for no items -> some items
-                previousList.size == 0 -> {
-                    onListPresentable()
-                    differCallback.onInserted(0, newList.size)
-                }
-                // fast path for some items -> no items
-                newList.size == 0 -> {
-                    onListPresentable()
-                    differCallback.onRemoved(0, previousList.size)
-                }
-
-                else -> {
-                    val diffResult = withContext(workerDispatcher) {
-                        previousList.computeDiff(newList, diffCallback)
-                    }
-                    onListPresentable()
-                    previousList.dispatchDiff(updateCallback, newList, diffResult)
-                }
-            }
-        }
-
         /**
          * Insert the event's page to the storage, and dispatch associated callbacks for
          * change (placeholder becomes real item) or insert (real item is appended).
@@ -211,6 +182,25 @@
          */
         override suspend fun presentPagingDataEvent(event: PagingDataEvent<T>) {
             when (event) {
+                is PagingDataEvent.Refresh -> event.apply {
+                    when {
+                        // fast path for no items -> some items
+                        previousList.size == 0 -> {
+                            differCallback.onInserted(0, newList.size)
+                        }
+                        // fast path for some items -> no items
+                        newList.size == 0 -> {
+                            differCallback.onRemoved(0, previousList.size)
+                        }
+
+                        else -> {
+                            val diffResult = withContext(workerDispatcher) {
+                                previousList.computeDiff(newList, diffCallback)
+                            }
+                            previousList.dispatchDiff(updateCallback, newList, diffResult)
+                        }
+                    }
+                }
                 is PagingDataEvent.Prepend -> event.apply {
                     val insertSize = inserted.size
 
diff --git a/paging/paging-runtime/src/main/java/androidx/paging/NullPaddedListDiffHelper.kt b/paging/paging-runtime/src/main/java/androidx/paging/NullPaddedListDiffHelper.kt
index 13a3a86..bc332f1 100644
--- a/paging/paging-runtime/src/main/java/androidx/paging/NullPaddedListDiffHelper.kt
+++ b/paging/paging-runtime/src/main/java/androidx/paging/NullPaddedListDiffHelper.kt
@@ -45,8 +45,8 @@
     val diffResult = DiffUtil.calculateDiff(
         object : DiffUtil.Callback() {
             override fun getChangePayload(oldItemPosition: Int, newItemPosition: Int): Any? {
-                val oldItem = getFromStorage(oldItemPosition)
-                val newItem = newList.getFromStorage(newItemPosition)
+                val oldItem = getItem(oldItemPosition)
+                val newItem = newList.getItem(newItemPosition)
 
                 return when {
                     oldItem === newItem -> true
@@ -59,8 +59,8 @@
             override fun getNewListSize() = newSize
 
             override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
-                val oldItem = getFromStorage(oldItemPosition)
-                val newItem = newList.getFromStorage(newItemPosition)
+                val oldItem = getItem(oldItemPosition)
+                val newItem = newList.getItem(newItemPosition)
 
                 return when {
                     oldItem === newItem -> true
@@ -69,8 +69,8 @@
             }
 
             override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
-                val oldItem = getFromStorage(oldItemPosition)
-                val newItem = newList.getFromStorage(newItemPosition)
+                val oldItem = getItem(oldItemPosition)
+                val newItem = newList.getItem(newItemPosition)
 
                 return when {
                     oldItem === newItem -> true
diff --git a/paging/paging-rxjava2-ktx/build.gradle b/paging/paging-rxjava2-ktx/build.gradle
index d6f3244..f41e14e 100644
--- a/paging/paging-rxjava2-ktx/build.gradle
+++ b/paging/paging-rxjava2-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/paging/paging-rxjava2/build.gradle b/paging/paging-rxjava2/build.gradle
index c23998e..3f6f4db 100644
--- a/paging/paging-rxjava2/build.gradle
+++ b/paging/paging-rxjava2/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/paging/paging-rxjava3/build.gradle b/paging/paging-rxjava3/build.gradle
index f193372..3a61c6f 100644
--- a/paging/paging-rxjava3/build.gradle
+++ b/paging/paging-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/paging/paging-testing/build.gradle b/paging/paging-testing/build.gradle
index 2955b5f..dfd3274 100644
--- a/paging/paging-testing/build.gradle
+++ b/paging/paging-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
diff --git a/paging/paging-testing/src/commonMain/kotlin/androidx/paging/testing/PagerFlowSnapshot.kt b/paging/paging-testing/src/commonMain/kotlin/androidx/paging/testing/PagerFlowSnapshot.kt
index f50eae6..c8b1d3f 100644
--- a/paging/paging-testing/src/commonMain/kotlin/androidx/paging/testing/PagerFlowSnapshot.kt
+++ b/paging/paging-testing/src/commonMain/kotlin/androidx/paging/testing/PagerFlowSnapshot.kt
@@ -22,7 +22,6 @@
 import androidx.paging.ItemSnapshotList
 import androidx.paging.LoadState
 import androidx.paging.LoadStates
-import androidx.paging.NullPaddedList
 import androidx.paging.Pager
 import androidx.paging.PagingData
 import androidx.paging.PagingDataEvent
@@ -72,37 +71,31 @@
     val presenter = object : CompletablePagingDataPresenter<Value>(
         callback, coroutineContext
     ) {
-        override suspend fun presentNewList(
-            previousList: NullPaddedList<Value>,
-            newList: NullPaddedList<Value>,
-            lastAccessedIndex: Int,
-            onListPresentable: () -> Unit
-        ) {
-            onListPresentable()
-            /**
-             * On new generation, SnapshotLoader needs the latest [ItemSnapshotList]
-             * state so that it can initialize lastAccessedIndex to prepend/append from onwards.
-             *
-             * This initial lastAccessedIndex is necessary because initial load
-             * key may not be 0, for example when [Pager].initialKey != 0. We don't know which
-             * items are immediately displayed so we can only best-effort estimate that the middle
-             * item has been presented.
-             *
-             * Therefore we calculate the actual index based on
-             * [ItemSnapshotList.placeholdersBefore] + [1/2 initial load size].
-             *
-             * Any subsequent SnapshotLoader loads are based on the index tracked by
-             * [SnapshotLoader] internally.
-             */
-            val lastLoadedIndex = newList.placeholdersBefore + (newList.dataCount / 2)
-            loader.onDataSetChanged(
-                loader.generations.value,
-                LoaderCallback(LoadType.REFRESH, lastLoadedIndex, newList.size),
-                this@coroutineScope
-            )
-        }
-
         override suspend fun presentPagingDataEvent(event: PagingDataEvent<Value>) {
+            if (event is PagingDataEvent.Refresh) {
+                /**
+                 * On new generation, SnapshotLoader needs the latest [ItemSnapshotList]
+                 * state so that it can initialize lastAccessedIndex to prepend/append from onwards.
+                 *
+                 * This initial lastAccessedIndex is necessary because initial load
+                 * key may not be 0, for example when [Pager].initialKey != 0. We don't know which
+                 * items are immediately displayed so we can only best-effort estimate that the middle
+                 * item has been presented.
+                 *
+                 * Therefore we calculate the actual index based on
+                 * [ItemSnapshotList.placeholdersBefore] + [1/2 initial load size].
+                 *
+                 * Any subsequent SnapshotLoader loads are based on the index tracked by
+                 * [SnapshotLoader] internally.
+                 */
+                val lastLoadedIndex = event.newList.placeholdersBefore +
+                    (event.newList.dataCount / 2)
+                loader.onDataSetChanged(
+                    loader.generations.value,
+                    LoaderCallback(LoadType.REFRESH, lastLoadedIndex, event.newList.size),
+                    this@coroutineScope
+                )
+            }
             /**
              * We only care about callbacks for prepend inserts so that we can adjust
              * the lastAccessedIndex. For more detail, refer to docs on method
diff --git a/paging/samples/build.gradle b/paging/samples/build.gradle
index bf42b44..861a0cd 100644
--- a/paging/samples/build.gradle
+++ b/paging/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/palette/palette-ktx/build.gradle b/palette/palette-ktx/build.gradle
index 79052a8..98748c6 100644
--- a/palette/palette-ktx/build.gradle
+++ b/palette/palette-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/palette/palette/build.gradle b/palette/palette/build.gradle
index 9b7a4b1..4630275 100644
--- a/palette/palette/build.gradle
+++ b/palette/palette/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/percentlayout/percentlayout/build.gradle b/percentlayout/percentlayout/build.gradle
index c441747..7f95e6a 100644
--- a/percentlayout/percentlayout/build.gradle
+++ b/percentlayout/percentlayout/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentFrameTest.java b/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentFrameTest.java
index f4bf9ee..f1006c9 100644
--- a/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentFrameTest.java
+++ b/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentFrameTest.java
@@ -21,7 +21,6 @@
 import android.os.Build;
 import android.view.View;
 
-import androidx.core.view.ViewCompat;
 import androidx.percentlayout.test.R;
 import androidx.test.filters.LargeTest;
 
@@ -179,10 +178,10 @@
         if (Build.VERSION.SDK_INT >= 17) {
             // Force our child to inherit parent's layout direction
             onView(withId(R.id.child_margin_start)).perform(
-                    LayoutDirectionActions.setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_INHERIT));
+                    LayoutDirectionActions.setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT));
             // And force the container to RTL mode
             onView(withId(R.id.container)).perform(
-                    LayoutDirectionActions.setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+                    LayoutDirectionActions.setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
             // Force a full measure + layout pass on the container
             mPercentFrameLayout.measure(
@@ -221,10 +220,10 @@
         if (Build.VERSION.SDK_INT >= 17) {
             // Force our child to inherit parent's layout direction
             onView(withId(R.id.child_margin_end)).perform(
-                    LayoutDirectionActions.setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_INHERIT));
+                    LayoutDirectionActions.setLayoutDirection(View.LAYOUT_DIRECTION_INHERIT));
             // And force the container to RTL mode
             onView(withId(R.id.container)).perform(
-                    LayoutDirectionActions.setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+                    LayoutDirectionActions.setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
             // Force a full measure + layout pass on the container
             mPercentFrameLayout.measure(
diff --git a/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentRelativeRtlTest.java b/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentRelativeRtlTest.java
index 68d01a3..6921f94 100644
--- a/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentRelativeRtlTest.java
+++ b/percentlayout/percentlayout/src/androidTest/java/androidx/percentlayout/widget/PercentRelativeRtlTest.java
@@ -21,7 +21,6 @@
 import android.os.Build;
 import android.view.View;
 
-import androidx.core.view.ViewCompat;
 import androidx.percentlayout.test.R;
 import androidx.test.filters.LargeTest;
 
@@ -116,7 +115,7 @@
     private void switchToRtl() {
         // Force the container to RTL mode
         onView(withId(R.id.container)).perform(
-                LayoutDirectionActions.setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
+                LayoutDirectionActions.setLayoutDirection(View.LAYOUT_DIRECTION_RTL));
 
         // Force a full measure + layout pass on the container
         mPercentRelativeLayout.measure(
diff --git a/percentlayout/percentlayout/src/main/java/androidx/percentlayout/widget/PercentLayoutHelper.java b/percentlayout/percentlayout/src/main/java/androidx/percentlayout/widget/PercentLayoutHelper.java
index 4c6d85e..8aec264 100644
--- a/percentlayout/percentlayout/src/main/java/androidx/percentlayout/widget/PercentLayoutHelper.java
+++ b/percentlayout/percentlayout/src/main/java/androidx/percentlayout/widget/PercentLayoutHelper.java
@@ -25,7 +25,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.core.view.MarginLayoutParamsCompat;
-import androidx.core.view.ViewCompat;
 import androidx.percentlayout.R;
 
 /**
@@ -549,7 +548,7 @@
                 // Force the resolve pass so that start / end margins are propagated to the
                 // matching left / right fields
                 MarginLayoutParamsCompat.resolveLayoutDirection(params,
-                        ViewCompat.getLayoutDirection(view));
+                        view.getLayoutDirection());
             }
             if (DEBUG) {
                 Log.d(TAG, "after fillMarginLayoutParams: (" + params.width + ", " + params.height
diff --git a/playground-common/playground-plugin/shared/build.gradle b/playground-common/playground-plugin/shared/build.gradle
index 8571eae7..ceec8ec 100644
--- a/playground-common/playground-plugin/shared/build.gradle
+++ b/playground-common/playground-plugin/shared/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("java-gradle-plugin")
     id("groovy")
diff --git a/preference/preference-ktx/build.gradle b/preference/preference-ktx/build.gradle
index ecc2755..eaca3dc 100644
--- a/preference/preference-ktx/build.gradle
+++ b/preference/preference-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/preference/preference/src/androidTest/java/androidx/preference/tests/SelectableTest.kt b/preference/preference/src/androidTest/java/androidx/preference/tests/SelectableTest.kt
index 83508f4..5421cbe 100644
--- a/preference/preference/src/androidTest/java/androidx/preference/tests/SelectableTest.kt
+++ b/preference/preference/src/androidTest/java/androidx/preference/tests/SelectableTest.kt
@@ -19,7 +19,6 @@
 import android.content.Context
 import android.graphics.drawable.StateListDrawable
 import android.os.Build
-import androidx.core.view.ViewCompat
 import androidx.preference.Preference
 import androidx.preference.PreferenceCategory
 import androidx.preference.PreferenceFragmentCompat
@@ -177,7 +176,7 @@
             super.onBindViewHolder(holder)
             // If there's no background, no ripple effect will play regardless.
             if (holder.itemView.background != null) {
-                ViewCompat.setBackground(holder.itemView, TestDrawable())
+                holder.itemView.setBackground(TestDrawable())
             }
         }
     }
diff --git a/preference/preference/src/main/java/androidx/preference/Preference.java b/preference/preference/src/main/java/androidx/preference/Preference.java
index 3039564..79061cb 100644
--- a/preference/preference/src/main/java/androidx/preference/Preference.java
+++ b/preference/preference/src/main/java/androidx/preference/Preference.java
@@ -47,7 +47,6 @@
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.content.res.AppCompatResources;
 import androidx.core.content.res.TypedArrayUtils;
-import androidx.core.view.ViewCompat;
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
 
 import java.util.ArrayList;
@@ -599,7 +598,7 @@
         // needed as enabling copying requires the view to be `clickable`, but we only care about
         // long clicks, and not normal clicks.
         if (copyingEnabled && !selectable) {
-            ViewCompat.setBackground(itemView, null);
+            itemView.setBackground(null);
         }
     }
 
diff --git a/preference/preference/src/main/java/androidx/preference/PreferenceGroupAdapter.java b/preference/preference/src/main/java/androidx/preference/PreferenceGroupAdapter.java
index 7391982..7cfa2d4 100644
--- a/preference/preference/src/main/java/androidx/preference/PreferenceGroupAdapter.java
+++ b/preference/preference/src/main/java/androidx/preference/PreferenceGroupAdapter.java
@@ -31,7 +31,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.content.res.AppCompatResources;
-import androidx.core.view.ViewCompat;
 import androidx.recyclerview.widget.DiffUtil;
 import androidx.recyclerview.widget.RecyclerView;
 
@@ -399,7 +398,7 @@
 
         final View view = inflater.inflate(descriptor.mLayoutResId, parent, false);
         if (view.getBackground() == null) {
-            ViewCompat.setBackground(view, background);
+            view.setBackground(background);
         }
 
         final ViewGroup widgetFrame = view.findViewById(android.R.id.widget_frame);
diff --git a/preference/preference/src/main/java/androidx/preference/PreferenceViewHolder.java b/preference/preference/src/main/java/androidx/preference/PreferenceViewHolder.java
index e3129a8..b5d6b48 100644
--- a/preference/preference/src/main/java/androidx/preference/PreferenceViewHolder.java
+++ b/preference/preference/src/main/java/androidx/preference/PreferenceViewHolder.java
@@ -27,7 +27,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.annotation.VisibleForTesting;
-import androidx.core.view.ViewCompat;
 import androidx.recyclerview.widget.RecyclerView;
 
 /**
@@ -144,7 +143,7 @@
      */
     void resetState() {
         if (itemView.getBackground() != mBackground) {
-            ViewCompat.setBackground(itemView, mBackground);
+            itemView.setBackground(mBackground);
         }
 
         final TextView titleView = (TextView) findViewById(android.R.id.title);
diff --git a/print/print/build.gradle b/print/print/build.gradle
index 3b3738f..90c825c 100644
--- a/print/print/build.gradle
+++ b/print/print/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/privacysandbox/activity/activity-client/build.gradle b/privacysandbox/activity/activity-client/build.gradle
index f7ec166..3b2876c 100644
--- a/privacysandbox/activity/activity-client/build.gradle
+++ b/privacysandbox/activity/activity-client/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/activity/activity-core/build.gradle b/privacysandbox/activity/activity-core/build.gradle
index b52889a..8a19206 100644
--- a/privacysandbox/activity/activity-core/build.gradle
+++ b/privacysandbox/activity/activity-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/activity/activity-provider/build.gradle b/privacysandbox/activity/activity-provider/build.gradle
index 856130b..d48f82e 100644
--- a/privacysandbox/activity/activity-provider/build.gradle
+++ b/privacysandbox/activity/activity-provider/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/ads/ads-adservices-java/build.gradle b/privacysandbox/ads/ads-adservices-java/build.gradle
index b3a4b71..6cd503f 100644
--- a/privacysandbox/ads/ads-adservices-java/build.gradle
+++ b/privacysandbox/ads/ads-adservices-java/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/ads/ads-adservices/build.gradle b/privacysandbox/ads/ads-adservices/build.gradle
index 1c3fa23..f13566ed 100644
--- a/privacysandbox/ads/ads-adservices/build.gradle
+++ b/privacysandbox/ads/ads-adservices/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import androidx.build.RunApiTasks
diff --git a/privacysandbox/plugins/plugins-privacysandbox-library/build.gradle b/privacysandbox/plugins/plugins-privacysandbox-library/build.gradle
index 90ac0a9..3977a8e 100644
--- a/privacysandbox/plugins/plugins-privacysandbox-library/build.gradle
+++ b/privacysandbox/plugins/plugins-privacysandbox-library/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 import androidx.build.SdkResourceGenerator
 
diff --git a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
index 9cdad69..444737c 100644
--- a/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-client/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import javax.inject.Inject
 
@@ -137,7 +144,7 @@
     }
 
     namespace "androidx.privacysandbox.sdkruntime.client"
-    compileSdkVersion = "android-34-ext8"
+    compileSdkVersion = "android-34-ext10"
 }
 
 androidx {
diff --git a/privacysandbox/sdkruntime/sdkruntime-core/build.gradle b/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
index 0ce8658..73c5876 100644
--- a/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
@@ -48,7 +55,7 @@
     }
 
     namespace "androidx.privacysandbox.sdkruntime.core"
-    compileSdkVersion = "android-34-ext8"
+    compileSdkVersion = "android-34-ext10"
 }
 
 androidx {
diff --git a/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle b/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle
index a71810a..d83e35f 100644
--- a/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle
+++ b/privacysandbox/sdkruntime/sdkruntime-provider/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
@@ -37,7 +44,7 @@
 
 android {
     namespace "androidx.privacysandbox.sdkruntime.provider"
-    compileSdkVersion = "android-34-ext8"
+    compileSdkVersion = "android-34-ext10"
 }
 
 androidx {
diff --git a/privacysandbox/sdkruntime/test-sdks/current/build.gradle b/privacysandbox/sdkruntime/test-sdks/current/build.gradle
index 4aa8042..134c99b 100644
--- a/privacysandbox/sdkruntime/test-sdks/current/build.gradle
+++ b/privacysandbox/sdkruntime/test-sdks/current/build.gradle
@@ -14,6 +14,13 @@
  * 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 com.android.build.api.artifact.SingleArtifact
 
 plugins {
diff --git a/privacysandbox/sdkruntime/test-sdks/v1/build.gradle b/privacysandbox/sdkruntime/test-sdks/v1/build.gradle
index ecd8b9c..c00c814 100644
--- a/privacysandbox/sdkruntime/test-sdks/v1/build.gradle
+++ b/privacysandbox/sdkruntime/test-sdks/v1/build.gradle
@@ -14,6 +14,13 @@
  * 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 com.android.build.api.artifact.SingleArtifact
 
 plugins {
diff --git a/privacysandbox/sdkruntime/test-sdks/v2/build.gradle b/privacysandbox/sdkruntime/test-sdks/v2/build.gradle
index 3c2243a..0678870 100644
--- a/privacysandbox/sdkruntime/test-sdks/v2/build.gradle
+++ b/privacysandbox/sdkruntime/test-sdks/v2/build.gradle
@@ -14,6 +14,13 @@
  * 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 com.android.build.api.artifact.SingleArtifact
 
 plugins {
diff --git a/privacysandbox/sdkruntime/test-sdks/v4/build.gradle b/privacysandbox/sdkruntime/test-sdks/v4/build.gradle
index 901ebd5..510e9f2 100644
--- a/privacysandbox/sdkruntime/test-sdks/v4/build.gradle
+++ b/privacysandbox/sdkruntime/test-sdks/v4/build.gradle
@@ -14,6 +14,13 @@
  * 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 com.android.build.api.artifact.SingleArtifact
 
 plugins {
diff --git a/privacysandbox/tools/tools-apicompiler/build.gradle b/privacysandbox/tools/tools-apicompiler/build.gradle
index 19095f2..19c3cec 100644
--- a/privacysandbox/tools/tools-apicompiler/build.gradle
+++ b/privacysandbox/tools/tools-apicompiler/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.SdkHelperKt
 import androidx.build.AndroidXConfig
diff --git a/privacysandbox/tools/tools-apigenerator/build.gradle b/privacysandbox/tools/tools-apigenerator/build.gradle
index 14930e0..4975dd9 100644
--- a/privacysandbox/tools/tools-apigenerator/build.gradle
+++ b/privacysandbox/tools/tools-apigenerator/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.SdkHelperKt
 import androidx.build.AndroidXConfig
diff --git a/privacysandbox/tools/tools-apipackager/build.gradle b/privacysandbox/tools/tools-apipackager/build.gradle
index 19089d3..62c2b42 100644
--- a/privacysandbox/tools/tools-apipackager/build.gradle
+++ b/privacysandbox/tools/tools-apipackager/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/tools/tools-core/build.gradle b/privacysandbox/tools/tools-core/build.gradle
index 71a4050..633bba0 100644
--- a/privacysandbox/tools/tools-core/build.gradle
+++ b/privacysandbox/tools/tools-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.RunApiTasks
 import androidx.build.SdkHelperKt
diff --git a/privacysandbox/tools/tools-testing/build.gradle b/privacysandbox/tools/tools-testing/build.gradle
index 87354d6..a1fd9f3 100644
--- a/privacysandbox/tools/tools-testing/build.gradle
+++ b/privacysandbox/tools/tools-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/tools/tools/build.gradle b/privacysandbox/tools/tools/build.gradle
index aaf8cd1..50c9f7a 100644
--- a/privacysandbox/tools/tools/build.gradle
+++ b/privacysandbox/tools/tools/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/ui/ui-client/build.gradle b/privacysandbox/ui/ui-client/build.gradle
index d278278..1c30032 100644
--- a/privacysandbox/ui/ui-client/build.gradle
+++ b/privacysandbox/ui/ui-client/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/ui/ui-core/build.gradle b/privacysandbox/ui/ui-core/build.gradle
index 1cbdc13..e00b425 100644
--- a/privacysandbox/ui/ui-core/build.gradle
+++ b/privacysandbox/ui/ui-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/ui/ui-provider/build.gradle b/privacysandbox/ui/ui-provider/build.gradle
index 8f8cb75..bd21c28 100644
--- a/privacysandbox/ui/ui-provider/build.gradle
+++ b/privacysandbox/ui/ui-provider/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/privacysandbox/ui/ui-tests/build.gradle b/privacysandbox/ui/ui-tests/build.gradle
index 76d7dae..7e9b08b 100644
--- a/privacysandbox/ui/ui-tests/build.gradle
+++ b/privacysandbox/ui/ui-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/profileinstaller/integration-tests/profile-verification-sample-no-initializer/build.gradle b/profileinstaller/integration-tests/profile-verification-sample-no-initializer/build.gradle
index 75b2f84..d1e8d26 100644
--- a/profileinstaller/integration-tests/profile-verification-sample-no-initializer/build.gradle
+++ b/profileinstaller/integration-tests/profile-verification-sample-no-initializer/build.gradle
@@ -14,6 +14,13 @@
  * 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 com.android.build.api.artifact.SingleArtifact
 
 plugins {
diff --git a/profileinstaller/integration-tests/profile-verification-sample/build.gradle b/profileinstaller/integration-tests/profile-verification-sample/build.gradle
index 8d9c645..9a8a31d 100644
--- a/profileinstaller/integration-tests/profile-verification-sample/build.gradle
+++ b/profileinstaller/integration-tests/profile-verification-sample/build.gradle
@@ -14,6 +14,13 @@
  * 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 com.android.build.api.artifact.SingleArtifact
 
 plugins {
diff --git a/profileinstaller/integration-tests/profile-verification/build.gradle b/profileinstaller/integration-tests/profile-verification/build.gradle
index ec7556c..54bf77a 100644
--- a/profileinstaller/integration-tests/profile-verification/build.gradle
+++ b/profileinstaller/integration-tests/profile-verification/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 com.google.common.io.Files
 import org.apache.commons.compress.utils.IOUtils
 
diff --git a/profileinstaller/profileinstaller-benchmark/build.gradle b/profileinstaller/profileinstaller-benchmark/build.gradle
index 920f540..8646ff0 100644
--- a/profileinstaller/profileinstaller-benchmark/build.gradle
+++ b/profileinstaller/profileinstaller-benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/profileinstaller/profileinstaller/build.gradle b/profileinstaller/profileinstaller/build.gradle
index c0930d3..724107c1 100644
--- a/profileinstaller/profileinstaller/build.gradle
+++ b/profileinstaller/profileinstaller/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/recommendation/recommendation/build.gradle b/recommendation/recommendation/build.gradle
index 19e7acd..5dc0869 100644
--- a/recommendation/recommendation/build.gradle
+++ b/recommendation/recommendation/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/recyclerview/recyclerview-lint/build.gradle b/recyclerview/recyclerview-lint/build.gradle
index 67c9e63..37064ef 100644
--- a/recyclerview/recyclerview-lint/build.gradle
+++ b/recyclerview/recyclerview-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/recyclerview/recyclerview-selection/build.gradle b/recyclerview/recyclerview-selection/build.gradle
index 46d8fce..2c70ef2 100644
--- a/recyclerview/recyclerview-selection/build.gradle
+++ b/recyclerview/recyclerview-selection/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/recyclerview/recyclerview-selection/src/main/java/androidx/recyclerview/selection/GestureSelectionHelper.java b/recyclerview/recyclerview-selection/src/main/java/androidx/recyclerview/selection/GestureSelectionHelper.java
index e757d5f..b4355f6 100644
--- a/recyclerview/recyclerview-selection/src/main/java/androidx/recyclerview/selection/GestureSelectionHelper.java
+++ b/recyclerview/recyclerview-selection/src/main/java/androidx/recyclerview/selection/GestureSelectionHelper.java
@@ -26,7 +26,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
-import androidx.core.view.ViewCompat;
 import androidx.recyclerview.selection.SelectionTracker.SelectionPredicate;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener;
@@ -270,7 +269,7 @@
             // the currentItemPos
             View lastItem = mRecyclerView.getLayoutManager()
                     .getChildAt(mRecyclerView.getLayoutManager().getChildCount() - 1);
-            int direction = ViewCompat.getLayoutDirection(mRecyclerView);
+            int direction = mRecyclerView.getLayoutDirection();
             final boolean pastLastItem = isPastLastItem(lastItem.getTop(),
                     lastItem.getLeft(),
                     lastItem.getRight(),
diff --git a/recyclerview/recyclerview/build.gradle b/recyclerview/recyclerview/build.gradle
index 6a24783..dab5c07 100644
--- a/recyclerview/recyclerview/build.gradle
+++ b/recyclerview/recyclerview/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java
index 6f2d4fe..fd36e51 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/BaseRecyclerViewInstrumentationTest.java
@@ -42,7 +42,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.view.ViewCompat;
 import androidx.recyclerview.test.R;
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.testutils.ActivityScenarioResetRule;
@@ -128,7 +127,7 @@
             mActivityRule.runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
-                    ViewCompat.setHasTransientState(view, value);
+                    view.setHasTransientState(value);
                 }
             });
         } catch (Throwable throwable) {
@@ -710,7 +709,7 @@
                     addView(view);
                 }
                 measureChildWithMargins(view, 0, 0);
-                if (getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL) {
+                if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
                     layoutDecorated(view, getWidth() - getDecoratedMeasuredWidth(view), top,
                             getWidth(), top + getDecoratedMeasuredHeight(view));
                 } else {
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/FocusSearchNavigationTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/FocusSearchNavigationTest.java
index bd3d853..ef4b5ad 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/FocusSearchNavigationTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/FocusSearchNavigationTest.java
@@ -77,9 +77,9 @@
     @Parameterized.Parameters(name = "orientation:{0},layoutDir:{1}")
     public static List<Object[]> params() {
         return Arrays.asList(
-                new Object[]{VERTICAL, ViewCompat.LAYOUT_DIRECTION_LTR},
-                new Object[]{HORIZONTAL, ViewCompat.LAYOUT_DIRECTION_LTR},
-                new Object[]{HORIZONTAL, ViewCompat.LAYOUT_DIRECTION_RTL}
+                new Object[]{VERTICAL, View.LAYOUT_DIRECTION_LTR},
+                new Object[]{HORIZONTAL, View.LAYOUT_DIRECTION_LTR},
+                new Object[]{HORIZONTAL, View.LAYOUT_DIRECTION_RTL}
         );
     }
 
@@ -118,7 +118,7 @@
         waitForIdleSync();
         assertThat("Assumption check", mRecyclerView.getLayoutManager().getLayoutDirection(),
                 is(mLayoutDir));
-        assertThat("Assumption check", ViewCompat.getLayoutDirection(mRecyclerView),
+        assertThat("Assumption check", mRecyclerView.getLayoutDirection(),
                 is(mLayoutDir));
     }
 
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerTest.java
index 8541a57..685e15d 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerTest.java
@@ -892,8 +892,8 @@
                 .findViewHolderForAdapterPosition(childBeingPushOut);
         final int originalAccessibility = ViewCompat.getImportantForAccessibility(
                 itemViewHolder.itemView);
-        assertTrue(ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO == originalAccessibility
-                || ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES == originalAccessibility);
+        assertTrue(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO == originalAccessibility
+                || View.IMPORTANT_FOR_ACCESSIBILITY_YES == originalAccessibility);
 
         itemAnimator.expect(ItemAnimatorTestDouble.MOVE_START, 1);
         mActivityRule.runOnUiThread(new Runnable() {
@@ -908,8 +908,8 @@
         // RV Changes accessiblity after onMoveStart, so wait one more cycle.
         waitOneCycle();
         assertTrue(itemAnimator.getMovesAnimations().contains(itemViewHolder));
-        assertEquals(ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
-                ViewCompat.getImportantForAccessibility(itemViewHolder.itemView));
+        assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
+                itemViewHolder.itemView.getImportantForAccessibility());
 
         // notify Change again to run predictive animation.
         mLayoutManager.expectLayouts(2);
@@ -935,8 +935,8 @@
         // the important for accessibility should be reset to YES/AUTO:
         final int newAccessibility = ViewCompat.getImportantForAccessibility(
                 itemViewHolder.itemView);
-        assertTrue(ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO == newAccessibility
-                || ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES == newAccessibility);
+        assertTrue(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO == newAccessibility
+                || View.IMPORTANT_FOR_ACCESSIBILITY_YES == newAccessibility);
     }
 
     @Test
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerWrapContentTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerWrapContentTest.java
index 07e10e5..dea5a18 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerWrapContentTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/LinearLayoutManagerWrapContentTest.java
@@ -22,8 +22,8 @@
 import android.graphics.Rect;
 import android.os.Build;
 import android.view.Gravity;
+import android.view.View;
 
-import androidx.core.view.ViewCompat;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 
@@ -167,7 +167,7 @@
 
     @Override
     protected int getHorizontalGravity(RecyclerView.LayoutManager layoutManager) {
-        boolean rtl = layoutManager.getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+        boolean rtl = layoutManager.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
         if (mConfig.mOrientation == VERTICAL) {
             if (rtl) {
                 return Gravity.RIGHT;
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAccessibilityLifecycleTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAccessibilityLifecycleTest.java
index 3d5e3c6..2ee833e 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAccessibilityLifecycleTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAccessibilityLifecycleTest.java
@@ -88,8 +88,7 @@
             public TestViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
                     int viewType) {
                 TestViewHolder vh = super.onCreateViewHolder(parent, viewType);
-                ViewCompat.setImportantForAccessibility(vh.itemView,
-                        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+                vh.itemView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
                 return vh;
             }
         };
@@ -104,10 +103,10 @@
         lm.waitForLayout(2);
         recyclerView.waitUntilAnimations();
         assertThat(invocations, is(Arrays.asList(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES)));
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
+                View.IMPORTANT_FOR_ACCESSIBILITY_YES,
+                View.IMPORTANT_FOR_ACCESSIBILITY_YES)));
 
         assertThat(calledA11DuringLayout.get(), is(false));
     }
@@ -437,7 +436,7 @@
                     @Override
                     public void run() {
                         View itemView = mRecyclerView.getChildAt(0);
-                        assertTrue(ViewCompat.performAccessibilityAction(itemView, 42, null));
+                        assertTrue(itemView.performAccessibilityAction(42, null));
                     }
                 });
     }
@@ -454,7 +453,7 @@
                     @Override
                     public void run() {
                         View itemView = mRecyclerView.getChildAt(0);
-                        assertTrue(ViewCompat.performAccessibilityAction(itemView, 42, null));
+                        assertTrue(itemView.performAccessibilityAction(42, null));
                     }
                 },
                 new TextViewCreator() {
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAnimationsTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAnimationsTest.java
index 3ab549f..cde0f62 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAnimationsTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewAnimationsTest.java
@@ -31,7 +31,6 @@
 import android.view.ViewGroup;
 
 import androidx.annotation.NonNull;
-import androidx.core.view.ViewCompat;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
 import androidx.testutils.AnimationDurationScaleRule;
@@ -690,8 +689,7 @@
             public boolean canProceed() {
                 View slideInView = mRecyclerView.getChildAt(2);
                 View slideOutView = mRecyclerView.getChildAt(3);
-                return ViewCompat.hasTransientState(slideInView)
-                        && ViewCompat.hasTransientState(slideOutView);
+                return slideInView.hasTransientState() && slideOutView.hasTransientState();
             }
         });
 
@@ -788,8 +786,7 @@
             @Override
             public void onBindViewHolder(@NonNull TestViewHolder holder, int position) {
                 super.onBindViewHolder(holder, position);
-                ViewCompat.setImportantForAccessibility(
-                        holder.itemView, boundImportantForAccessibility);
+                holder.itemView.setImportantForAccessibility(boundImportantForAccessibility);
             }
         };
 
@@ -806,7 +803,7 @@
                 targetChild[0] = mRecyclerView.getChildAt(0);
                 assertEquals(
                         expectedImportantForAccessibility,
-                        ViewCompat.getImportantForAccessibility(targetChild[0]));
+                        targetChild[0].getImportantForAccessibility());
             }
         });
 
@@ -824,8 +821,8 @@
                 // The view is still a child of mRecyclerView, and is invisible for accessibility.
                 assertTrue(targetChild[0].getParent() == mRecyclerView);
                 assertEquals(
-                        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
-                        ViewCompat.getImportantForAccessibility(targetChild[0]));
+                        View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
+                        targetChild[0].getImportantForAccessibility());
             }
         });
 
@@ -839,7 +836,7 @@
                 assertTrue(targetChild[0].getParent() == null);
                 assertEquals(
                         expectedImportantForAccessibility,
-                        ViewCompat.getImportantForAccessibility(targetChild[0]));
+                        targetChild[0].getImportantForAccessibility());
             }
         });
 
@@ -856,7 +853,7 @@
                         "the item must be reused", targetChild[0] == mRecyclerView.getChildAt(0));
                 assertEquals(
                         expectedImportantForAccessibility,
-                        ViewCompat.getImportantForAccessibility(targetChild[0]));
+                        targetChild[0].getImportantForAccessibility());
             }
         });
     }
@@ -864,29 +861,29 @@
     @Test
     public void importantForAccessibilityWhileDetelingAuto() throws Throwable {
         runTestImportantForAccessibilityWhileDeteling(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+                View.IMPORTANT_FOR_ACCESSIBILITY_AUTO,
+                View.IMPORTANT_FOR_ACCESSIBILITY_YES);
     }
 
     @Test
     public void importantForAccessibilityWhileDetelingNo() throws Throwable {
         runTestImportantForAccessibilityWhileDeteling(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO,
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO);
     }
 
     @Test
     public void importantForAccessibilityWhileDetelingNoHideDescandants() throws Throwable {
         runTestImportantForAccessibilityWhileDeteling(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS,
+                View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
     }
 
     @Test
     public void importantForAccessibilityWhileDetelingYes() throws Throwable {
         runTestImportantForAccessibilityWhileDeteling(
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES,
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+                View.IMPORTANT_FOR_ACCESSIBILITY_YES,
+                View.IMPORTANT_FOR_ACCESSIBILITY_YES);
     }
 
     @Test
@@ -1583,7 +1580,7 @@
             @Override
             public void onViewDetachedFromWindow(TestViewHolder holder) {
                 if ((addedView[0] == holder.itemView || addedView[1] == holder.itemView)
-                        && ViewCompat.hasTransientState(holder.itemView)) {
+                        && holder.itemView.hasTransientState()) {
                     holder.itemView.animate().cancel();
                 }
                 super.onViewDetachedFromWindow(holder);
@@ -1607,11 +1604,11 @@
                 public void run() {
                     if (mRecyclerView.getChildCount() == 3) {
                         View view = mRecyclerView.getChildAt(0);
-                        if (ViewCompat.hasTransientState(view)) {
+                        if (view.hasTransientState()) {
                             addedView[0] = view;
                         }
                         view = mRecyclerView.getChildAt(1);
-                        if (ViewCompat.hasTransientState(view)) {
+                        if (view.hasTransientState()) {
                             addedView[1] = view;
                         }
                     }
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java
index 741bb69..07d8564 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java
@@ -2377,7 +2377,7 @@
         mActivityRule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                ViewCompat.setHasTransientState(vh.itemView, true);
+                vh.itemView.setHasTransientState(true);
             }
         });
         tlm.expectLayouts(1);
@@ -4908,14 +4908,14 @@
     @Test
     public void focusBigViewOnLeftRTL() throws Throwable {
         focusTooBigViewTest(Gravity.LEFT, true);
-        assertEquals("Assumption check", ViewCompat.LAYOUT_DIRECTION_RTL,
+        assertEquals("Assumption check", View.LAYOUT_DIRECTION_RTL,
                 mRecyclerView.getLayoutManager().getLayoutDirection());
     }
 
     @Test
     public void focusBigViewOnRightRTL() throws Throwable {
         focusTooBigViewTest(Gravity.RIGHT, true);
-        assertEquals("Assumption check", ViewCompat.LAYOUT_DIRECTION_RTL,
+        assertEquals("Assumption check", View.LAYOUT_DIRECTION_RTL,
                 mRecyclerView.getLayoutManager().getLayoutDirection());
     }
 
@@ -4926,7 +4926,7 @@
     public void focusTooBigViewTest(final int gravity, final boolean rtl) throws Throwable {
         RecyclerView rv = new RecyclerView(getActivity());
         if (rtl) {
-            ViewCompat.setLayoutDirection(rv, ViewCompat.LAYOUT_DIRECTION_RTL);
+            ViewCompat.setLayoutDirection(rv, View.LAYOUT_DIRECTION_RTL);
         }
         final AtomicInteger vScrollDist = new AtomicInteger(0);
         final AtomicInteger hScrollDist = new AtomicInteger(0);
@@ -4936,7 +4936,7 @@
 
             @Override
             public int getLayoutDirection() {
-                return rtl ? ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR;
+                return rtl ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR;
             }
 
             @Override
@@ -4957,7 +4957,7 @@
                         left = gravity == Gravity.LEFT ? getWidth() - view.getMeasuredWidth() - 80
                                 : 90;
                         top = 0;
-                        if (ViewCompat.LAYOUT_DIRECTION_RTL == getLayoutDirection()) {
+                        if (View.LAYOUT_DIRECTION_RTL == getLayoutDirection()) {
                             hDesiredDist.set((left + view.getMeasuredWidth()) - getWidth());
                         } else {
                             hDesiredDist.set(left);
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingA11yScrollTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingA11yScrollTest.java
index 25ece5f..a6bf082 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingA11yScrollTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewNestedScrollingA11yScrollTest.java
@@ -188,7 +188,7 @@
                     }
                 });
 
-                ViewCompat.performAccessibilityAction(mRecyclerView, action, null);
+                mRecyclerView.performAccessibilityAction(action, null);
             }
         });
         assertThat(countDownLatch.await(2, TimeUnit.SECONDS), is(true));
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/WrappedRecyclerView.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/WrappedRecyclerView.java
index e610193..ebb2957 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/WrappedRecyclerView.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/WrappedRecyclerView.java
@@ -18,8 +18,8 @@
 
 import android.content.Context;
 import android.util.AttributeSet;
+import android.view.View;
 
-import androidx.core.view.ViewCompat;
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import org.hamcrest.CoreMatchers;
@@ -104,8 +104,8 @@
             return super.getLayoutDirection();
         }
         //noinspection WrongConstant
-        return Boolean.TRUE.equals(mFakeRTL) ? ViewCompat.LAYOUT_DIRECTION_RTL
-                : ViewCompat.LAYOUT_DIRECTION_LTR;
+        return Boolean.TRUE.equals(mFakeRTL) ? View.LAYOUT_DIRECTION_RTL
+                : View.LAYOUT_DIRECTION_LTR;
     }
 
     @Override
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/FastScroller.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/FastScroller.java
index 030e705..96438a5 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/FastScroller.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/FastScroller.java
@@ -24,12 +24,12 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.StateListDrawable;
 import android.view.MotionEvent;
+import android.view.View;
 
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
-import androidx.core.view.ViewCompat;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -212,7 +212,7 @@
     }
 
     private boolean isLayoutRTL() {
-        return ViewCompat.getLayoutDirection(mRecyclerView) == ViewCompat.LAYOUT_DIRECTION_RTL;
+        return mRecyclerView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
     }
 
     public boolean isDragging() {
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java
index 2865dad..0bfd394 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/ItemTouchHelper.java
@@ -1205,7 +1205,7 @@
         final int originalMovementFlags = mCallback.getMovementFlags(mRecyclerView, viewHolder);
         final int absoluteMovementFlags = mCallback.convertToAbsoluteDirection(
                 originalMovementFlags,
-                ViewCompat.getLayoutDirection(mRecyclerView));
+                mRecyclerView.getLayoutDirection());
         final int flags = (absoluteMovementFlags
                 & ACTION_MODE_SWIPE_MASK) >> (ACTION_STATE_SWIPE * DIRECTION_FLAG_COUNT);
         if (flags == 0) {
@@ -1220,7 +1220,7 @@
                 if ((originalFlags & swipeDir) == 0) {
                     // convert to relative
                     return Callback.convertToRelativeDirection(swipeDir,
-                            ViewCompat.getLayoutDirection(mRecyclerView));
+                            mRecyclerView.getLayoutDirection());
                 }
                 return swipeDir;
             }
@@ -1236,7 +1236,7 @@
                 if ((originalFlags & swipeDir) == 0) {
                     // convert to relative
                     return Callback.convertToRelativeDirection(swipeDir,
-                            ViewCompat.getLayoutDirection(mRecyclerView));
+                            mRecyclerView.getLayoutDirection());
                 }
                 return swipeDir;
             }
@@ -1495,7 +1495,7 @@
                 return flags; // does not have any abs flags, good.
             }
             flags &= ~masked; //remove left / right.
-            if (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
+            if (layoutDirection == View.LAYOUT_DIRECTION_LTR) {
                 // no change. just OR with 2 bits shifted mask and return
                 flags |= masked << 2; // START is 2 bits after LEFT, END is 2 bits after RIGHT.
                 return flags;
@@ -1586,7 +1586,7 @@
                 return flags; // does not have any relative flags, good.
             }
             flags &= ~masked; //remove start / end
-            if (layoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
+            if (layoutDirection == View.LAYOUT_DIRECTION_LTR) {
                 // no change. just OR with 2 bits shifted mask and return
                 flags |= masked >> 2; // START is 2 bits after LEFT, END is 2 bits after RIGHT.
                 return flags;
@@ -1602,7 +1602,7 @@
         final int getAbsoluteMovementFlags(RecyclerView recyclerView,
                 ViewHolder viewHolder) {
             final int flags = getMovementFlags(recyclerView, viewHolder);
-            return convertToAbsoluteDirection(flags, ViewCompat.getLayoutDirection(recyclerView));
+            return convertToAbsoluteDirection(flags, recyclerView.getLayoutDirection());
         }
 
         boolean hasDragFlag(RecyclerView recyclerView, ViewHolder viewHolder) {
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
index 5f96d22..4fc3df2 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/LinearLayoutManager.java
@@ -1121,7 +1121,7 @@
     }
 
     protected boolean isLayoutRTL() {
-        return getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+        return getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
     }
 
     void ensureLayoutState() {
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
index a4ea5a5..ea813c32 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/RecyclerView.java
@@ -799,10 +799,9 @@
         initChildrenHelper();
         initAutofill();
         // If not explicitly specified this view is important for accessibility.
-        if (ViewCompat.getImportantForAccessibility(this)
-                == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-            ViewCompat.setImportantForAccessibility(this,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+        if (this.getImportantForAccessibility()
+                == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+            setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
         mAccessibilityManager = (AccessibilityManager) getContext()
                 .getSystemService(Context.ACCESSIBILITY_SERVICE);
@@ -3085,7 +3084,7 @@
         }
 
         if (invalidate || overscrollX != 0 || overscrollY != 0) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
@@ -3108,7 +3107,7 @@
             needsInvalidate |= mBottomGlow.isFinished();
         }
         if (needsInvalidate) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
@@ -3131,7 +3130,7 @@
             needsInvalidate |= mBottomGlow.isFinished();
         }
         if (needsInvalidate) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
@@ -3161,7 +3160,7 @@
         }
 
         if (velocityX != 0 || velocityY != 0) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
@@ -3301,7 +3300,7 @@
                 needsFocusFailureLayout = found == null;
             }
             if (!needsFocusFailureLayout && mLayout.canScrollHorizontally()) {
-                boolean rtl = mLayout.getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+                boolean rtl = mLayout.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
                 final int absDir = (direction == View.FOCUS_FORWARD) ^ rtl
                         ? View.FOCUS_RIGHT : View.FOCUS_LEFT;
                 final View found = ff.findNextFocus(this, focused, absDir);
@@ -3378,7 +3377,7 @@
         mTempRect2.set(0, 0, next.getWidth(), next.getHeight());
         offsetDescendantRectToMyCoords(focused, mTempRect);
         offsetDescendantRectToMyCoords(next, mTempRect2);
-        final int rtl = mLayout.getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL ? -1 : 1;
+        final int rtl = mLayout.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL ? -1 : 1;
         int rightness = 0;
         if ((mTempRect.left < mTempRect2.left
                 || mTempRect.right <= mTempRect2.left)
@@ -5087,7 +5086,7 @@
         }
 
         if (needsInvalidate) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
@@ -7027,10 +7026,9 @@
         private void attachAccessibilityDelegateOnBind(ViewHolder holder) {
             if (isAccessibilityEnabled()) {
                 final View itemView = holder.itemView;
-                if (ViewCompat.getImportantForAccessibility(itemView)
-                        == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-                    ViewCompat.setImportantForAccessibility(itemView,
-                            ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+                if (itemView.getImportantForAccessibility()
+                        == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+                    itemView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
                 }
                 if (mAccessibilityDelegate == null) {
                     return;
@@ -7931,16 +7929,16 @@
             holder.mBindingAdapter = this;
             if (sDebugAssertionsEnabled) {
                 if (holder.itemView.getParent() == null
-                        && (ViewCompat.isAttachedToWindow(holder.itemView)
+                        && (holder.itemView.isAttachedToWindow()
                         != holder.isTmpDetached())) {
                     throw new IllegalStateException("Temp-detached state out of sync with reality. "
                             + "holder.isTmpDetached(): " + holder.isTmpDetached()
                             + ", attached to window: "
-                            + ViewCompat.isAttachedToWindow(holder.itemView)
+                            + holder.itemView.isAttachedToWindow()
                             + ", holder: " + holder);
                 }
                 if (holder.itemView.getParent() == null
-                        && ViewCompat.isAttachedToWindow(holder.itemView)) {
+                        && holder.itemView.isAttachedToWindow()) {
                     throw new IllegalStateException(
                             "Attempting to bind attached holder with no parent"
                                     + " (AKA temp detached): " + holder);
@@ -9412,7 +9410,7 @@
          * is not RTL.
          */
         public int getLayoutDirection() {
-            return ViewCompat.getLayoutDirection(mRecyclerView);
+            return mRecyclerView.getLayoutDirection();
         }
 
         /**
@@ -10783,7 +10781,7 @@
             // of a large rect into view. If we decide to bring in end because start is already
             // visible, limit the scroll such that start won't go out of bounds.
             final int dx;
-            if (getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL) {
+            if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
                 dx = offScreenRight != 0 ? offScreenRight
                         : Math.max(offScreenLeft, childRight - parentRight);
             } else {
@@ -12059,7 +12057,7 @@
         // Saves isImportantForAccessibility value for the view item while it's in hidden state and
         // marked as unimportant for accessibility.
         private int mWasImportantForAccessibilityBeforeHidden =
-                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+                View.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
         // set if we defer the accessibility state change of the view holder
         @VisibleForTesting
         int mPendingAccessibilityState = PENDING_ACCESSIBILITY_STATE_NOT_SET;
@@ -12427,7 +12425,7 @@
             mShadowedHolder = null;
             mShadowingHolder = null;
             clearPayload();
-            mWasImportantForAccessibilityBeforeHidden = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+            mWasImportantForAccessibilityBeforeHidden = View.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
             mPendingAccessibilityState = PENDING_ACCESSIBILITY_STATE_NOT_SET;
             clearNestedRecyclerViewIfNotNested(this);
         }
@@ -12441,10 +12439,10 @@
                 mWasImportantForAccessibilityBeforeHidden = mPendingAccessibilityState;
             } else {
                 mWasImportantForAccessibilityBeforeHidden =
-                        ViewCompat.getImportantForAccessibility(itemView);
+                        itemView.getImportantForAccessibility();
             }
             parent.setChildImportantForAccessibilityInternal(this,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
+                    View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
         }
 
         /**
@@ -12453,7 +12451,7 @@
         void onLeftHiddenState(RecyclerView parent) {
             parent.setChildImportantForAccessibilityInternal(this,
                     mWasImportantForAccessibilityBeforeHidden);
-            mWasImportantForAccessibilityBeforeHidden = ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+            mWasImportantForAccessibilityBeforeHidden = View.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
         }
 
         @Override
@@ -12554,7 +12552,7 @@
             mPendingAccessibilityImportanceChange.add(viewHolder);
             return false;
         }
-        ViewCompat.setImportantForAccessibility(viewHolder.itemView, importantForAccessibility);
+        viewHolder.itemView.setImportantForAccessibility(importantForAccessibility);
         return true;
     }
 
@@ -12567,7 +12565,7 @@
             int state = viewHolder.mPendingAccessibilityState;
             if (state != ViewHolder.PENDING_ACCESSIBILITY_STATE_NOT_SET) {
                 //noinspection WrongConstant
-                ViewCompat.setImportantForAccessibility(viewHolder.itemView, state);
+                viewHolder.itemView.setImportantForAccessibility(state);
                 viewHolder.mPendingAccessibilityState =
                         ViewHolder.PENDING_ACCESSIBILITY_STATE_NOT_SET;
             }
diff --git a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/StaggeredGridLayoutManager.java b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/StaggeredGridLayoutManager.java
index 45911a1..ec4a4d7 100644
--- a/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/StaggeredGridLayoutManager.java
+++ b/recyclerview/recyclerview/src/main/java/androidx/recyclerview/widget/StaggeredGridLayoutManager.java
@@ -33,7 +33,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
-import androidx.core.view.ViewCompat;
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
 
 import java.util.ArrayList;
@@ -565,7 +564,7 @@
     }
 
     boolean isLayoutRTL() {
-        return getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+        return getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
     }
 
     /**
diff --git a/remotecallback/remotecallback-processor/build.gradle b/remotecallback/remotecallback-processor/build.gradle
index b097e37..932f574 100644
--- a/remotecallback/remotecallback-processor/build.gradle
+++ b/remotecallback/remotecallback-processor/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/remotecallback/remotecallback/build.gradle b/remotecallback/remotecallback/build.gradle
index bbac5924..bc5b285 100644
--- a/remotecallback/remotecallback/build.gradle
+++ b/remotecallback/remotecallback/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/resourceinspection/resourceinspection-annotation/build.gradle b/resourceinspection/resourceinspection-annotation/build.gradle
index fa51321..1476034 100644
--- a/resourceinspection/resourceinspection-annotation/build.gradle
+++ b/resourceinspection/resourceinspection-annotation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/resourceinspection/resourceinspection-processor/build.gradle b/resourceinspection/resourceinspection-processor/build.gradle
index edd9e79..720cf10e 100644
--- a/resourceinspection/resourceinspection-processor/build.gradle
+++ b/resourceinspection/resourceinspection-processor/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.SdkHelperKt
 
diff --git a/room/benchmark/build.gradle b/room/benchmark/build.gradle
index f5b8320..835d34b 100644
--- a/room/benchmark/build.gradle
+++ b/room/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/room/integration-tests/incremental-annotation-processing/build.gradle b/room/integration-tests/incremental-annotation-processing/build.gradle
index bd41a2f..3821f46 100644
--- a/room/integration-tests/incremental-annotation-processing/build.gradle
+++ b/room/integration-tests/incremental-annotation-processing/build.gradle
@@ -14,6 +14,13 @@
  * 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.SdkResourceGenerator
 
 plugins {
diff --git a/room/room-common/build.gradle b/room/room-common/build.gradle
index c67a39d..241d52e 100644
--- a/room/room-common/build.gradle
+++ b/room/room-common/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
diff --git a/room/room-compiler-processing-testing/build.gradle b/room/room-compiler-processing-testing/build.gradle
index 81a7875..4e2e6ab 100644
--- a/room/room-compiler-processing-testing/build.gradle
+++ b/room/room-compiler-processing-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.KotlinTarget
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/room/room-compiler-processing/build.gradle b/room/room-compiler-processing/build.gradle
index 2b4f78a2..42a9e97 100644
--- a/room/room-compiler-processing/build.gradle
+++ b/room/room-compiler-processing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/room/room-compiler/build.gradle b/room/room-compiler/build.gradle
index 31eeab1..f0c0121 100644
--- a/room/room-compiler/build.gradle
+++ b/room/room-compiler/build.gradle
@@ -14,6 +14,13 @@
  * 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.BuildOnServerKt
 import androidx.build.LibraryType
 import androidx.build.SdkHelperKt
diff --git a/room/room-compiler/src/test/kotlin/androidx/room/processor/GeneratedCustomConverterTest.kt b/room/room-compiler/src/test/kotlin/androidx/room/processor/GeneratedCustomConverterTest.kt
new file mode 100644
index 0000000..fc28dad
--- /dev/null
+++ b/room/room-compiler/src/test/kotlin/androidx/room/processor/GeneratedCustomConverterTest.kt
@@ -0,0 +1,134 @@
+/*
+ * 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.room.processor
+
+import androidx.room.RoomKspProcessor
+import androidx.room.RoomProcessor
+import androidx.room.compiler.processing.XElement
+import androidx.room.compiler.processing.XFiler
+import androidx.room.compiler.processing.XProcessingEnv
+import androidx.room.compiler.processing.XProcessingStep
+import androidx.room.compiler.processing.addOriginatingElement
+import androidx.room.compiler.processing.javac.JavacBasicAnnotationProcessor
+import androidx.room.compiler.processing.ksp.KspBasicAnnotationProcessor
+import androidx.room.compiler.processing.util.Source
+import androidx.room.compiler.processing.util.runProcessorTest
+import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
+import com.google.devtools.ksp.processing.SymbolProcessorProvider
+import com.squareup.javapoet.ClassName
+import com.squareup.javapoet.JavaFile
+import com.squareup.javapoet.MethodSpec
+import com.squareup.javapoet.TypeSpec
+import javax.lang.model.SourceVersion
+import javax.lang.model.element.Modifier
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+class GeneratedCustomConverterTest {
+
+    @Test
+    fun generatedConverter() {
+        val src = Source.kotlin(
+            "Sources.kt",
+            """
+            import androidx.room.*
+
+            @Database(entities = [MyEntity::class], version = 1, exportSchema = false)
+            @TypeConverters(Generated_CustomConverters::class)
+            abstract class MyDatabase : RoomDatabase() {
+              abstract fun getMyDao(): MyDao
+            }
+
+            @Dao
+            interface MyDao {
+              @Query("SELECT * FROM MyEntity")
+              fun getMyEntity(): MyEntity
+            }
+
+            @Entity
+            @GenConverter
+            data class MyEntity(
+              @PrimaryKey val id: Long,
+              val data: Foo
+            )
+
+            class Foo
+
+            annotation class GenConverter
+            """.trimIndent()
+        )
+       runProcessorTest(
+           sources = listOf(src),
+           javacProcessors =
+             listOf(RoomProcessor(), JavacCustomConverter()),
+           symbolProcessorProviders =
+             listOf(RoomKspProcessor.Provider(), KspCustomConverter.Provider())
+       ) {
+           it.hasNoWarnings()
+       }
+    }
+
+    class CustomConverterGenerator : XProcessingStep {
+        override fun annotations() = setOf("GenConverter")
+        override fun process(
+            env: XProcessingEnv,
+            elementsByAnnotation: Map<String, Set<XElement>>,
+            isLastRound: Boolean
+        ): Set<XElement> {
+            val elements = elementsByAnnotation.getOrDefault("GenConverter", emptySet())
+            val element = elements.singleOrNull() ?: return emptySet()
+            val typeSpec = TypeSpec.classBuilder("Generated_CustomConverters")
+                .addOriginatingElement(element)
+                .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
+                .addMethod(MethodSpec.methodBuilder("fooToString")
+                    .addAnnotation(ClassName.get("androidx.room", "TypeConverter"))
+                    .addModifiers(Modifier.PUBLIC)
+                    .returns(ClassName.get("java.lang", "String"))
+                    .addParameter(ClassName.get("", "Foo"), "f")
+                    .addStatement("return \$S", "")
+                    .build()
+                )
+                .addMethod(MethodSpec.methodBuilder("stringToFoo")
+                    .addAnnotation(ClassName.get("androidx.room", "TypeConverter"))
+                    .addModifiers(Modifier.PUBLIC)
+                    .returns(ClassName.get("", "Foo"))
+                    .addParameter(ClassName.get("java.lang", "String"), "s")
+                    .addStatement("return new Foo()")
+                    .build()
+                )
+                .build()
+            val javaFile = JavaFile.builder("", typeSpec).build()
+            env.filer.write(javaFile, XFiler.Mode.Isolating)
+            return emptySet()
+        }
+    }
+
+    class JavacCustomConverter : JavacBasicAnnotationProcessor() {
+        override fun processingSteps() = listOf(CustomConverterGenerator())
+        override fun getSupportedSourceVersion() = SourceVersion.latest()
+    }
+
+    class KspCustomConverter(env: SymbolProcessorEnvironment) : KspBasicAnnotationProcessor(env) {
+        override fun processingSteps() = listOf(CustomConverterGenerator())
+        class Provider : SymbolProcessorProvider {
+            override fun create(environment: SymbolProcessorEnvironment) =
+                KspCustomConverter(environment)
+        }
+    }
+}
diff --git a/room/room-gradle-plugin/build.gradle b/room/room-gradle-plugin/build.gradle
index 6b3e02f..5b0b1e7 100644
--- a/room/room-gradle-plugin/build.gradle
+++ b/room/room-gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.SdkResourceGenerator
 
diff --git a/room/room-guava/build.gradle b/room/room-guava/build.gradle
index d327c97..447c000 100644
--- a/room/room-guava/build.gradle
+++ b/room/room-guava/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/room/room-ktx/build.gradle b/room/room-ktx/build.gradle
index 0cf215a..58a0f23 100644
--- a/room/room-ktx/build.gradle
+++ b/room/room-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/room/room-migration/build.gradle b/room/room-migration/build.gradle
index b717d633..2a7e17c 100644
--- a/room/room-migration/build.gradle
+++ b/room/room-migration/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/room/room-paging-guava/build.gradle b/room/room-paging-guava/build.gradle
index 5926417..fd4bc96 100644
--- a/room/room-paging-guava/build.gradle
+++ b/room/room-paging-guava/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import androidx.build.LibraryType
 import androidx.build.Publish
diff --git a/room/room-paging-rxjava2/build.gradle b/room/room-paging-rxjava2/build.gradle
index ef456c6..f767f78 100644
--- a/room/room-paging-rxjava2/build.gradle
+++ b/room/room-paging-rxjava2/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import androidx.build.LibraryType
 import androidx.build.Publish
diff --git a/room/room-paging-rxjava3/build.gradle b/room/room-paging-rxjava3/build.gradle
index 9f9c7617..ade15bc 100644
--- a/room/room-paging-rxjava3/build.gradle
+++ b/room/room-paging-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import androidx.build.LibraryType
 import androidx.build.Publish
diff --git a/room/room-paging/build.gradle b/room/room-paging/build.gradle
index 440665a..cbe5f5d 100644
--- a/room/room-paging/build.gradle
+++ b/room/room-paging/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import androidx.build.LibraryType
 import androidx.build.Publish
diff --git a/room/room-runtime-lint/build.gradle b/room/room-runtime-lint/build.gradle
index 52cc23c..5a0f53d 100644
--- a/room/room-runtime-lint/build.gradle
+++ b/room/room-runtime-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/room/room-runtime/build.gradle b/room/room-runtime/build.gradle
index 204e27c..33991a3 100644
--- a/room/room-runtime/build.gradle
+++ b/room/room-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.LibraryType
 import androidx.build.PlatformIdentifier
diff --git a/room/room-rxjava2/build.gradle b/room/room-rxjava2/build.gradle
index 1ed88d2..69ab4da 100644
--- a/room/room-rxjava2/build.gradle
+++ b/room/room-rxjava2/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/room/room-rxjava3/build.gradle b/room/room-rxjava3/build.gradle
index 74a8894..1610f8a 100644
--- a/room/room-rxjava3/build.gradle
+++ b/room/room-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/room/room-testing/build.gradle b/room/room-testing/build.gradle
index a7d0d81..8fbdb36 100644
--- a/room/room-testing/build.gradle
+++ b/room/room-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/safeparcel/safeparcel-processor/build.gradle b/safeparcel/safeparcel-processor/build.gradle
index a9b3651..9b88268 100644
--- a/safeparcel/safeparcel-processor/build.gradle
+++ b/safeparcel/safeparcel-processor/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/safeparcel/safeparcel/build.gradle b/safeparcel/safeparcel/build.gradle
index aedc6bb..572cf67 100644
--- a/safeparcel/safeparcel/build.gradle
+++ b/safeparcel/safeparcel/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/samples/AndroidXDemos/build.gradle b/samples/AndroidXDemos/build.gradle
index 810fd6b..147b863 100644
--- a/samples/AndroidXDemos/build.gradle
+++ b/samples/AndroidXDemos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/samples/AndroidXDemos/src/main/java/com/example/androidx/graphics/PaletteActivity.java b/samples/AndroidXDemos/src/main/java/com/example/androidx/graphics/PaletteActivity.java
index 3eed2a3..6e584bb 100644
--- a/samples/AndroidXDemos/src/main/java/com/example/androidx/graphics/PaletteActivity.java
+++ b/samples/AndroidXDemos/src/main/java/com/example/androidx/graphics/PaletteActivity.java
@@ -33,7 +33,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.view.ViewCompat;
 import androidx.cursoradapter.widget.ResourceCursorAdapter;
 import androidx.fragment.app.ListFragment;
 import androidx.loader.app.LoaderManager;
@@ -195,12 +194,12 @@
                 ImageView imageView = (ImageView) view.findViewById(R.id.image);
                 imageView.setImageDrawable(null);
 
-                ViewCompat.setBackground(view.findViewById(R.id.text_vibrant), null);
-                ViewCompat.setBackground(view.findViewById(R.id.text_muted), null);
-                ViewCompat.setBackground(view.findViewById(R.id.text_light_vibrant), null);
-                ViewCompat.setBackground(view.findViewById(R.id.text_light_muted), null);
-                ViewCompat.setBackground(view.findViewById(R.id.text_dark_vibrant), null);
-                ViewCompat.setBackground(view.findViewById(R.id.text_dark_muted), null);
+                view.findViewById(R.id.text_vibrant).setBackground(null);
+                view.findViewById(R.id.text_muted).setBackground(null);
+                view.findViewById(R.id.text_light_vibrant).setBackground(null);
+                view.findViewById(R.id.text_light_muted).setBackground(null);
+                view.findViewById(R.id.text_dark_vibrant).setBackground(null);
+                view.findViewById(R.id.text_dark_muted).setBackground(null);
 
                 final long id = cursor.getLong(
                         cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID));
diff --git a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java
index f5a94d7..57d01f5 100644
--- a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java
+++ b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/GridLayoutManagerActivity.java
@@ -18,7 +18,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.core.view.ViewCompat;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -79,14 +78,13 @@
                 new ConfigToggle(this, R.string.checkbox_layout_dir) {
                     @Override
                     public boolean isChecked() {
-                        return ViewCompat.getLayoutDirection(mRecyclerView) ==
-                                ViewCompat.LAYOUT_DIRECTION_RTL;
+                        return mRecyclerView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
                     }
 
                     @Override
                     public void onChange(boolean newValue) {
-                        ViewCompat.setLayoutDirection(mRecyclerView, newValue ?
-                                ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
+                        mRecyclerView.setLayoutDirection(newValue
+                                ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
                     }
                 },
                 new ConfigToggle(this, R.string.checkbox_stack_from_end) {
diff --git a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/LinearLayoutManagerActivity.java b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/LinearLayoutManagerActivity.java
index 5bae336..07ec953 100644
--- a/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/LinearLayoutManagerActivity.java
+++ b/samples/AndroidXDemos/src/main/java/com/example/androidx/widget/LinearLayoutManagerActivity.java
@@ -16,7 +16,8 @@
 
 package com.example.androidx.widget;
 
-import androidx.core.view.ViewCompat;
+import android.view.View;
+
 import androidx.recyclerview.widget.DividerItemDecoration;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.LinearSnapHelper;
@@ -78,14 +79,13 @@
                 new ConfigToggle(this, R.string.checkbox_layout_dir) {
                     @Override
                     public boolean isChecked() {
-                        return ViewCompat.getLayoutDirection(mRecyclerView) ==
-                                ViewCompat.LAYOUT_DIRECTION_RTL;
+                        return mRecyclerView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
                     }
 
                     @Override
                     public void onChange(boolean newValue) {
-                        ViewCompat.setLayoutDirection(mRecyclerView, newValue ?
-                                ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR);
+                        mRecyclerView.setLayoutDirection(newValue
+                                ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR);
                     }
                 },
                 new ConfigToggle(this, R.string.checkbox_stack_from_end) {
diff --git a/samples/MediaRoutingDemo/build.gradle b/samples/MediaRoutingDemo/build.gradle
index 456800f..108ce24 100644
--- a/samples/MediaRoutingDemo/build.gradle
+++ b/samples/MediaRoutingDemo/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/samples/Support4Demos/build.gradle b/samples/Support4Demos/build.gradle
index 3b84a11..8ae4eda 100644
--- a/samples/Support4Demos/build.gradle
+++ b/samples/Support4Demos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/samples/Support4Demos/src/main/java/com/example/android/supportv4/view/CheckableFrameLayout.java b/samples/Support4Demos/src/main/java/com/example/android/supportv4/view/CheckableFrameLayout.java
index 9cdc294..d9f1871 100644
--- a/samples/Support4Demos/src/main/java/com/example/android/supportv4/view/CheckableFrameLayout.java
+++ b/samples/Support4Demos/src/main/java/com/example/android/supportv4/view/CheckableFrameLayout.java
@@ -22,8 +22,6 @@
 import android.widget.Checkable;
 import android.widget.FrameLayout;
 
-import androidx.core.view.ViewCompat;
-
 public class CheckableFrameLayout extends FrameLayout implements Checkable {
     private boolean mChecked;
 
@@ -38,7 +36,7 @@
     @Override
     public void setChecked(boolean checked) {
         mChecked = checked;
-        ViewCompat.setBackground(this, checked ? new ColorDrawable(0xff0000a0) : null);
+        setBackground(checked ? new ColorDrawable(0xff0000a0) : null);
     }
 
     @Override
diff --git a/samples/SupportAnimationDemos/build.gradle b/samples/SupportAnimationDemos/build.gradle
index c0c6e5f..5143dde 100644
--- a/samples/SupportAnimationDemos/build.gradle
+++ b/samples/SupportAnimationDemos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/samples/SupportLeanbackDemos/build.gradle b/samples/SupportLeanbackDemos/build.gradle
index 2526092..c929731 100644
--- a/samples/SupportLeanbackDemos/build.gradle
+++ b/samples/SupportLeanbackDemos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/samples/SupportPreferenceDemos/build.gradle b/samples/SupportPreferenceDemos/build.gradle
index c40e8ce..73d482c 100644
--- a/samples/SupportPreferenceDemos/build.gradle
+++ b/samples/SupportPreferenceDemos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/samples/SupportTransitionDemos/build.gradle b/samples/SupportTransitionDemos/build.gradle
index c9e585b..6119a42 100644
--- a/samples/SupportTransitionDemos/build.gradle
+++ b/samples/SupportTransitionDemos/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.
+ */
 plugins {
     id("AndroidXPlugin")
     id("com.android.application")
diff --git a/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java
index 2ffab79..9d2ec514 100644
--- a/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java
+++ b/samples/SupportTransitionDemos/src/main/java/com/example/android/support/transition/widget/ChangeClipBoundsUsage.java
@@ -23,7 +23,6 @@
 import android.view.ViewGroup;
 import android.widget.ImageView;
 
-import androidx.core.view.ViewCompat;
 import androidx.transition.ChangeClipBounds;
 import androidx.transition.TransitionManager;
 
@@ -60,10 +59,10 @@
 
     void toggle() {
         TransitionManager.beginDelayedTransition(mRoot, mChangeClipBounds);
-        if (BOUNDS.equals(ViewCompat.getClipBounds(mPhoto))) {
-            ViewCompat.setClipBounds(mPhoto, null);
+        if (BOUNDS.equals(mPhoto.getClipBounds())) {
+            mPhoto.setClipBounds(null);
         } else {
-            ViewCompat.setClipBounds(mPhoto, BOUNDS);
+            mPhoto.setClipBounds(BOUNDS);
         }
     }
 
diff --git a/savedstate/savedstate-ktx/build.gradle b/savedstate/savedstate-ktx/build.gradle
index daba854..915bed4 100644
--- a/savedstate/savedstate-ktx/build.gradle
+++ b/savedstate/savedstate-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/savedstate/savedstate/build.gradle b/savedstate/savedstate/build.gradle
index 6932b10..ec7b4e9 100644
--- a/savedstate/savedstate/build.gradle
+++ b/savedstate/savedstate/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/security/security-app-authenticator-testing/build.gradle b/security/security-app-authenticator-testing/build.gradle
index 601a1897..ea467d0 100644
--- a/security/security-app-authenticator-testing/build.gradle
+++ b/security/security-app-authenticator-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/security/security-app-authenticator/build.gradle b/security/security-app-authenticator/build.gradle
index 28cb85f..5d02e7c 100644
--- a/security/security-app-authenticator/build.gradle
+++ b/security/security-app-authenticator/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/security/security-biometric/build.gradle b/security/security-biometric/build.gradle
index 1adc401..25e8964 100644
--- a/security/security-biometric/build.gradle
+++ b/security/security-biometric/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/security/security-crypto-ktx/build.gradle b/security/security-crypto-ktx/build.gradle
index f859b4d..3ad3bb3 100644
--- a/security/security-crypto-ktx/build.gradle
+++ b/security/security-crypto-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/security/security-crypto/build.gradle b/security/security-crypto/build.gradle
index b166436..8a3c866 100644
--- a/security/security-crypto/build.gradle
+++ b/security/security-crypto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/security/security-identity-credential/build.gradle b/security/security-identity-credential/build.gradle
index 92a2786..b04125e 100644
--- a/security/security-identity-credential/build.gradle
+++ b/security/security-identity-credential/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/sharetarget/sharetarget/build.gradle b/sharetarget/sharetarget/build.gradle
index 82fd862..d9ea084 100644
--- a/sharetarget/sharetarget/build.gradle
+++ b/sharetarget/sharetarget/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/slice/slice-benchmark/build.gradle b/slice/slice-benchmark/build.gradle
index 889b783..2cb25fe 100644
--- a/slice/slice-benchmark/build.gradle
+++ b/slice/slice-benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/slice/slice-builders-ktx/build.gradle b/slice/slice-builders-ktx/build.gradle
index 6050969..da1bc13 100644
--- a/slice/slice-builders-ktx/build.gradle
+++ b/slice/slice-builders-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/slice/slice-builders-ktx/src/androidTest/java/androidx/slice/builders/SliceBuildersKtxTest.kt b/slice/slice-builders-ktx/src/androidTest/java/androidx/slice/builders/SliceBuildersKtxTest.kt
index 71dae27..0612976 100644
--- a/slice/slice-builders-ktx/src/androidTest/java/androidx/slice/builders/SliceBuildersKtxTest.kt
+++ b/slice/slice-builders-ktx/src/androidTest/java/androidx/slice/builders/SliceBuildersKtxTest.kt
@@ -21,9 +21,6 @@
 import android.content.Intent
 import android.net.Uri
 import androidx.core.graphics.drawable.IconCompat
-import androidx.slice.SliceProvider
-import androidx.slice.SliceSpecs
-import androidx.slice.builders.ListBuilder.ICON_IMAGE
 import androidx.slice.builders.ktx.test.R
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.filters.MediumTest
@@ -37,8 +34,8 @@
     private val context = ApplicationProvider.getApplicationContext() as android.content.Context
 
     init {
-        SliceProvider.setSpecs(setOf(SliceSpecs.LIST))
-        SliceProvider.setClock { 0 }
+        androidx.slice.SliceProvider.setSpecs(setOf(androidx.slice.SliceSpecs.LIST))
+        androidx.slice.SliceProvider.setClock { 0 }
     }
 
     private fun pendingIntentToTestActivity() =
@@ -209,7 +206,7 @@
             addAction(sliceAction2)
             gridRow {
                 icons.forEach {
-                    cell { addImage(it, ICON_IMAGE) }
+                    cell { addImage(it, androidx.slice.builders.ListBuilder.ICON_IMAGE) }
                 }
             }
         }
@@ -227,10 +224,12 @@
             addGridRow(
                 GridRowBuilder().apply {
                     icons.forEach { icon ->
-                        GridRowBuilder.CellBuilder().addImage(icon, ICON_IMAGE)
+                        GridRowBuilder.CellBuilder().addImage(
+                            icon, androidx.slice.builders.ListBuilder.ICON_IMAGE
+                        )
                         addCell(
                             GridRowBuilder.CellBuilder().apply {
-                                addImage(icon, ICON_IMAGE)
+                                addImage(icon, androidx.slice.builders.ListBuilder.ICON_IMAGE)
                             }
                         )
                     }
diff --git a/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt b/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt
index a782bc4..9c40e5d 100644
--- a/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt
+++ b/slice/slice-builders-ktx/src/main/java/androidx/slice/builders/ListBuilder.kt
@@ -21,7 +21,6 @@
 import androidx.annotation.RestrictTo
 import androidx.annotation.RestrictTo.Scope.LIBRARY
 import androidx.core.graphics.drawable.IconCompat
-import androidx.slice.builders.ListBuilder.ICON_IMAGE
 
 @RestrictTo(LIBRARY)
 @DslMarker
@@ -247,7 +246,7 @@
 fun tapSliceAction(
     pendingIntent: PendingIntent,
     icon: IconCompat,
-    @ListBuilder.ImageMode imageMode: Int = ICON_IMAGE,
+    @ListBuilder.ImageMode imageMode: Int = ListBuilder.ICON_IMAGE,
     title: CharSequence
 ) = SliceAction(pendingIntent, icon, imageMode, title)
 
diff --git a/slice/slice-builders/build.gradle b/slice/slice-builders/build.gradle
index aa91191..b5d3806 100644
--- a/slice/slice-builders/build.gradle
+++ b/slice/slice-builders/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/slice/slice-core/build.gradle b/slice/slice-core/build.gradle
index 0ae161e..63f826f 100644
--- a/slice/slice-core/build.gradle
+++ b/slice/slice-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/slice/slice-remotecallback/build.gradle b/slice/slice-remotecallback/build.gradle
index e71b68c..d587921 100644
--- a/slice/slice-remotecallback/build.gradle
+++ b/slice/slice-remotecallback/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/slice/slice-test/build.gradle b/slice/slice-test/build.gradle
index 6913178..1f122dc 100644
--- a/slice/slice-test/build.gradle
+++ b/slice/slice-test/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/slice/slice-view/build.gradle b/slice/slice-view/build.gradle
index 7752f52..cecbb5b 100644
--- a/slice/slice-view/build.gradle
+++ b/slice/slice-view/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java b/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java
index 3bbf8bd..dd01abd 100644
--- a/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java
+++ b/slice/slice-view/src/main/java/androidx/slice/widget/RowView.java
@@ -99,7 +99,6 @@
 import androidx.annotation.RestrictTo;
 import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.core.graphics.drawable.IconCompat;
-import androidx.core.view.ViewCompat;
 import androidx.slice.CornerDrawable;
 import androidx.slice.SliceItem;
 import androidx.slice.SliceStructure;
@@ -232,9 +231,8 @@
         mActionSpinner = findViewById(R.id.action_sent_indicator);
         SliceViewUtil.tintIndeterminateProgressBar(getContext(), mActionSpinner);
         mEndContainer = findViewById(android.R.id.widget_frame);
-        ViewCompat.setImportantForAccessibility(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
-        ViewCompat.setImportantForAccessibility(
-                mContent, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
+        setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
+        mContent.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
     }
 
     /**
@@ -695,9 +693,9 @@
             mShowActionSpinner = true;
         }
 
-        ViewCompat.setImportantForAccessibility(mRootView, mRootView.isClickable()
-                ? ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO
-                : ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO
+        mRootView.setImportantForAccessibility(mRootView.isClickable()
+                ? View.IMPORTANT_FOR_ACCESSIBILITY_AUTO
+                : View.IMPORTANT_FOR_ACCESSIBILITY_NO
         );
     }
 
diff --git a/slidingpanelayout/slidingpanelayout-testapp/build.gradle b/slidingpanelayout/slidingpanelayout-testapp/build.gradle
index 7d5ebec..e1057d7 100644
--- a/slidingpanelayout/slidingpanelayout-testapp/build.gradle
+++ b/slidingpanelayout/slidingpanelayout-testapp/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/slidingpanelayout/slidingpanelayout/build.gradle b/slidingpanelayout/slidingpanelayout/build.gradle
index 3a1f464..14b7661 100644
--- a/slidingpanelayout/slidingpanelayout/build.gradle
+++ b/slidingpanelayout/slidingpanelayout/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
index e1927f2..ecb153b 100644
--- a/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
+++ b/slidingpanelayout/slidingpanelayout/src/main/java/androidx/slidingpanelayout/widget/SlidingPaneLayout.kt
@@ -595,7 +595,7 @@
     init {
         setWillNotDraw(false)
         ViewCompat.setAccessibilityDelegate(this, AccessibilityDelegate())
-        ViewCompat.setImportantForAccessibility(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES)
+        setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES)
 
         context.withStyledAttributes(
             attrs,
@@ -1796,7 +1796,7 @@
             info.className =
                 ACCESSIBILITY_CLASS_NAME
             info.setSource(host)
-            val parent = ViewCompat.getParentForAccessibility(host)
+            val parent = host.getParentForAccessibility()
             if (parent is View) {
                 info.setParent(parent as View)
             }
@@ -1808,9 +1808,7 @@
                 val child = getChildAt(i)
                 if (!filter(child) && child.visibility == VISIBLE) {
                     // Force importance to "yes" since we can't read the value.
-                    ViewCompat.setImportantForAccessibility(
-                        child, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES
-                    )
+                    child.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES)
                     info.addChild(child)
                 }
             }
diff --git a/sqlite/integration-tests/driver-conformance-test/build.gradle b/sqlite/integration-tests/driver-conformance-test/build.gradle
index cc6b108..ab1abc6 100644
--- a/sqlite/integration-tests/driver-conformance-test/build.gradle
+++ b/sqlite/integration-tests/driver-conformance-test/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
 
diff --git a/sqlite/sqlite-bundled/build.gradle b/sqlite/sqlite-bundled/build.gradle
index d9c9abd2..a1a6e59 100644
--- a/sqlite/sqlite-bundled/build.gradle
+++ b/sqlite/sqlite-bundled/build.gradle
@@ -14,6 +14,13 @@
  * 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.AndroidXConfig
 import androidx.build.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
diff --git a/sqlite/sqlite-framework/build.gradle b/sqlite/sqlite-framework/build.gradle
index 5dd5b8f..b2ad298 100644
--- a/sqlite/sqlite-framework/build.gradle
+++ b/sqlite/sqlite-framework/build.gradle
@@ -14,7 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
diff --git a/sqlite/sqlite-framework/lint-baseline.xml b/sqlite/sqlite-framework/lint-baseline.xml
index 81a9b1f..a7eaf0d 100644
--- a/sqlite/sqlite-framework/lint-baseline.xml
+++ b/sqlite/sqlite-framework/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 8.3.0-alpha04" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0-alpha04)" variant="all" version="8.3.0-alpha04">
+<issues format="6" by="lint 8.3.0-alpha10" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0-alpha10)" variant="all" version="8.3.0-alpha10">
 
     <issue
         id="BanThreadSleep"
@@ -7,7 +7,7 @@
         errorLine1="                Thread.sleep(500)"
         errorLine2="                       ~~~~~">
         <location
-            file="src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.kt"/>
+            file="src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.android.kt"/>
     </issue>
 
 </issues>
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteDatabase.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteDatabase.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteDatabase.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteDatabase.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteProgram.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteProgram.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteProgram.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteProgram.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteStatement.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteStatement.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteStatement.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/db/framework/FrameworkSQLiteStatement.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLite.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLite.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLite.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLite.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteConnection.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteConnection.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteConnection.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteConnection.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteDriver.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteDriver.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteDriver.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteDriver.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteStatement.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteStatement.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteStatement.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/driver/AndroidSQLiteStatement.android.kt
diff --git a/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/util/ProcessLock.kt b/sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/util/ProcessLock.android.kt
similarity index 100%
rename from sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/util/ProcessLock.kt
rename to sqlite/sqlite-framework/src/androidMain/kotlin/androidx/sqlite/util/ProcessLock.android.kt
diff --git a/sqlite/sqlite-inspection/build.gradle b/sqlite/sqlite-inspection/build.gradle
index 3210e2c..950e5c3 100644
--- a/sqlite/sqlite-inspection/build.gradle
+++ b/sqlite/sqlite-inspection/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/sqlite/sqlite-ktx/build.gradle b/sqlite/sqlite-ktx/build.gradle
index 1fa5b0e..ac587d8 100644
--- a/sqlite/sqlite-ktx/build.gradle
+++ b/sqlite/sqlite-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/sqlite/sqlite/build.gradle b/sqlite/sqlite/build.gradle
index df13eee..ce5dd33 100644
--- a/sqlite/sqlite/build.gradle
+++ b/sqlite/sqlite/build.gradle
@@ -14,6 +14,13 @@
  * 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.KmpPlatformsKt
 import androidx.build.PlatformIdentifier
 import androidx.build.Publish
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SimpleSQLiteQuery.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SimpleSQLiteQuery.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SimpleSQLiteQuery.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SimpleSQLiteQuery.android.kt
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteCompat.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteCompat.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteCompat.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteCompat.android.kt
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteDatabase.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteDatabase.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteDatabase.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteDatabase.android.kt
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteOpenHelper.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteOpenHelper.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteOpenHelper.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteOpenHelper.android.kt
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteProgram.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteProgram.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteProgram.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteProgram.android.kt
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQuery.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQuery.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQuery.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQuery.android.kt
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQueryBuilder.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQueryBuilder.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQueryBuilder.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteQueryBuilder.android.kt
diff --git a/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteStatement.kt b/sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteStatement.android.kt
similarity index 100%
rename from sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteStatement.kt
rename to sqlite/sqlite/src/androidMain/kotlin/androidx/sqlite/db/SupportSQLiteStatement.android.kt
diff --git a/stableaidl/stableaidl-gradle-plugin/build.gradle b/stableaidl/stableaidl-gradle-plugin/build.gradle
index 51bb29b..7c377f8 100644
--- a/stableaidl/stableaidl-gradle-plugin/build.gradle
+++ b/stableaidl/stableaidl-gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.*
 
 plugins {
diff --git a/startup/startup-runtime-lint/build.gradle b/startup/startup-runtime-lint/build.gradle
index 2ca037c..d3a2172 100644
--- a/startup/startup-runtime-lint/build.gradle
+++ b/startup/startup-runtime-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/startup/startup-runtime/build.gradle b/startup/startup-runtime/build.gradle
index 2a0859a..285ff7e 100644
--- a/startup/startup-runtime/build.gradle
+++ b/startup/startup-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/swiperefreshlayout/swiperefreshlayout/build.gradle b/swiperefreshlayout/swiperefreshlayout/build.gradle
index 811b678..8e423a1 100644
--- a/swiperefreshlayout/swiperefreshlayout/build.gradle
+++ b/swiperefreshlayout/swiperefreshlayout/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/CircleImageView.java b/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/CircleImageView.java
index 9af99fb..c33fd2a3 100644
--- a/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/CircleImageView.java
+++ b/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/CircleImageView.java
@@ -87,7 +87,7 @@
             setPadding(padding, padding, padding, padding);
         }
         circle.getPaint().setColor(mBackgroundColor);
-        ViewCompat.setBackground(this, circle);
+        setBackground(circle);
     }
 
     private boolean elevationSupported() {
diff --git a/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java b/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java
index f7d24cc..1daa440 100644
--- a/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java
+++ b/swiperefreshlayout/swiperefreshlayout/src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java
@@ -51,7 +51,6 @@
 import androidx.core.view.NestedScrollingParent3;
 import androidx.core.view.NestedScrollingParentHelper;
 import androidx.core.view.ViewCompat;
-import androidx.core.widget.ListViewCompat;
 
 /**
  * The SwipeRefreshLayout should be used whenever the user can refresh the
@@ -752,7 +751,7 @@
             return mChildScrollUpCallback.canChildScrollUp(this, mTarget);
         }
         if (mTarget instanceof ListView) {
-            return ListViewCompat.canScrollList((ListView) mTarget, -1);
+            return ((ListView) mTarget).canScrollList(-1);
         }
         return mTarget.canScrollVertically(-1);
     }
diff --git a/test/ext/junit-gtest/build.gradle b/test/ext/junit-gtest/build.gradle
index ea12d35..4f5b227 100644
--- a/test/ext/junit-gtest/build.gradle
+++ b/test/ext/junit-gtest/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/test/integration-tests/junit-gtest-test/build.gradle b/test/integration-tests/junit-gtest-test/build.gradle
index 7d9a45d..6bc805a 100644
--- a/test/integration-tests/junit-gtest-test/build.gradle
+++ b/test/integration-tests/junit-gtest-test/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/test/screenshot/screenshot-proto/build.gradle b/test/screenshot/screenshot-proto/build.gradle
index 879e232..7975b0d 100644
--- a/test/screenshot/screenshot-proto/build.gradle
+++ b/test/screenshot/screenshot-proto/build.gradle
@@ -14,6 +14,13 @@
  * 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.BuildServerConfigurationKt
 
 plugins {
diff --git a/test/screenshot/screenshot/build.gradle b/test/screenshot/screenshot/build.gradle
index 23dbc2b..2803de1 100644
--- a/test/screenshot/screenshot/build.gradle
+++ b/test/screenshot/screenshot/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/test/uiautomator/uiautomator/build.gradle b/test/uiautomator/uiautomator/build.gradle
index aeb61bc..d7ebbba 100644
--- a/test/uiautomator/uiautomator/build.gradle
+++ b/test/uiautomator/uiautomator/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-appcompat/build.gradle b/testutils/testutils-appcompat/build.gradle
index ac4b131..a66bd45 100644
--- a/testutils/testutils-appcompat/build.gradle
+++ b/testutils/testutils-appcompat/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-common/build.gradle b/testutils/testutils-common/build.gradle
index a73524b..a49f6d2 100644
--- a/testutils/testutils-common/build.gradle
+++ b/testutils/testutils-common/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 /*
@@ -16,6 +23,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-datastore/build.gradle b/testutils/testutils-datastore/build.gradle
index 3bb4fcf..ef661f7 100644
--- a/testutils/testutils-datastore/build.gradle
+++ b/testutils/testutils-datastore/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/FileTestIO.kt b/testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/FileTestIO.jvm.kt
similarity index 100%
rename from testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/FileTestIO.kt
rename to testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/FileTestIO.jvm.kt
diff --git a/testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/TestingSerializer.kt b/testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/TestingSerializer.jvm.kt
similarity index 100%
rename from testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/TestingSerializer.kt
rename to testutils/testutils-datastore/src/jvmMain/kotlin/androidx/datastore/TestingSerializer.jvm.kt
diff --git a/testutils/testutils-espresso/build.gradle b/testutils/testutils-espresso/build.gradle
index 8bdb558..87da559 100644
--- a/testutils/testutils-espresso/build.gradle
+++ b/testutils/testutils-espresso/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-fonts/build.gradle b/testutils/testutils-fonts/build.gradle
index f2095aa..2dd302b 100644
--- a/testutils/testutils-fonts/build.gradle
+++ b/testutils/testutils-fonts/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-fonts/src/commonMain/java/androidx/testutils/WeightStyleFont.kt b/testutils/testutils-fonts/src/commonMain/java/androidx/testutils/WeightStyleFont.android.kt
similarity index 100%
rename from testutils/testutils-fonts/src/commonMain/java/androidx/testutils/WeightStyleFont.kt
rename to testutils/testutils-fonts/src/commonMain/java/androidx/testutils/WeightStyleFont.android.kt
diff --git a/testutils/testutils-gradle-plugin/build.gradle b/testutils/testutils-gradle-plugin/build.gradle
index b1885a3..fcac202 100644
--- a/testutils/testutils-gradle-plugin/build.gradle
+++ b/testutils/testutils-gradle-plugin/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-ktx/build.gradle b/testutils/testutils-ktx/build.gradle
index 21ef343d..fd63ad7 100644
--- a/testutils/testutils-ktx/build.gradle
+++ b/testutils/testutils-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/MainDispatcherRule.kt b/testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/MainDispatcherRule.jvm.kt
similarity index 100%
rename from testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/MainDispatcherRule.kt
rename to testutils/testutils-ktx/src/jvmMain/kotlin/androidx/testutils/MainDispatcherRule.jvm.kt
diff --git a/testutils/testutils-macrobenchmark/build.gradle b/testutils/testutils-macrobenchmark/build.gradle
index 62bf7f3..e07a748 100644
--- a/testutils/testutils-macrobenchmark/build.gradle
+++ b/testutils/testutils-macrobenchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-mockito/build.gradle b/testutils/testutils-mockito/build.gradle
index c502a0d..c50d41e 100644
--- a/testutils/testutils-mockito/build.gradle
+++ b/testutils/testutils-mockito/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-navigation/build.gradle b/testutils/testutils-navigation/build.gradle
index b4e0204..773ee21 100644
--- a/testutils/testutils-navigation/build.gradle
+++ b/testutils/testutils-navigation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/testutils/testutils-paging/build.gradle b/testutils/testutils-paging/build.gradle
index a0ed808..8688589 100644
--- a/testutils/testutils-paging/build.gradle
+++ b/testutils/testutils-paging/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-paging/src/commonMain/kotlin/androidx/paging/TestPagingDataPresenter.kt b/testutils/testutils-paging/src/commonMain/kotlin/androidx/paging/TestPagingDataPresenter.kt
index 8597658..2a732bc 100644
--- a/testutils/testutils-paging/src/commonMain/kotlin/androidx/paging/TestPagingDataPresenter.kt
+++ b/testutils/testutils-paging/src/commonMain/kotlin/androidx/paging/TestPagingDataPresenter.kt
@@ -24,15 +24,6 @@
 
     val currentList: List<T> get() = List(size) { i -> get(i)!! }
 
-    override suspend fun presentNewList(
-        previousList: NullPaddedList<T>,
-        newList: NullPaddedList<T>,
-        lastAccessedIndex: Int,
-        onListPresentable: () -> Unit,
-    ) {
-        onListPresentable()
-    }
-
     companion object {
         private val noopDifferCallback = object : DifferCallback {
             override fun onChanged(position: Int, count: Int) {}
diff --git a/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/LoadStateCapture.kt b/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/LoadStateCapture.jvm.kt
similarity index 100%
rename from testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/LoadStateCapture.kt
rename to testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/LoadStateCapture.jvm.kt
diff --git a/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestItemKeyedDataSource.kt b/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestItemKeyedDataSource.jvm.kt
similarity index 100%
rename from testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestItemKeyedDataSource.kt
rename to testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestItemKeyedDataSource.jvm.kt
diff --git a/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPageKeyedDataSource.kt b/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPageKeyedDataSource.jvm.kt
similarity index 100%
rename from testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPageKeyedDataSource.kt
rename to testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPageKeyedDataSource.jvm.kt
diff --git a/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPositionalDataSource.kt b/testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPositionalDataSource.jvm.kt
similarity index 100%
rename from testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPositionalDataSource.kt
rename to testutils/testutils-paging/src/jvmMain/kotlin/androidx/paging/TestPositionalDataSource.jvm.kt
diff --git a/testutils/testutils-paparazzi/build.gradle b/testutils/testutils-paparazzi/build.gradle
index ff3b18a..68d62b0 100644
--- a/testutils/testutils-paparazzi/build.gradle
+++ b/testutils/testutils-paparazzi/build.gradle
@@ -14,6 +14,13 @@
  * 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.BundleInsideHelper
 import androidx.build.LibraryType
 
diff --git a/testutils/testutils-runtime/build.gradle b/testutils/testutils-runtime/build.gradle
index 8413a90..4d4ce3b 100644
--- a/testutils/testutils-runtime/build.gradle
+++ b/testutils/testutils-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt b/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
index 7836624..635d871 100644
--- a/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
+++ b/testutils/testutils-runtime/src/androidTest/java/androidx/testutils/LocaleTestUtilsTest.kt
@@ -18,9 +18,8 @@
 
 import android.content.Context
 import android.content.res.Configuration
+import android.view.View
 import androidx.core.os.ConfigurationCompat
-import androidx.core.view.ViewCompat.LAYOUT_DIRECTION_LTR
-import androidx.core.view.ViewCompat.LAYOUT_DIRECTION_RTL
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
@@ -117,7 +116,9 @@
         assertThat(
             "Layout direction should be ${if (expectRtl) "RTL" else "LTR"}",
             configuration.layoutDirection,
-            CoreMatchers.equalTo(if (expectRtl) LAYOUT_DIRECTION_RTL else LAYOUT_DIRECTION_LTR)
+            CoreMatchers.equalTo(
+                if (expectRtl) View.LAYOUT_DIRECTION_RTL else View.LAYOUT_DIRECTION_LTR
+            )
         )
     }
 
@@ -127,6 +128,6 @@
             configuration.language,
             CoreMatchers.equalTo(DEFAULT_LANGUAGE)
         )
-        expectRtlInDefaultLanguage = configuration.layoutDirection == LAYOUT_DIRECTION_RTL
+        expectRtlInDefaultLanguage = configuration.layoutDirection == View.LAYOUT_DIRECTION_RTL
     }
 }
diff --git a/testutils/testutils-truth/build.gradle b/testutils/testutils-truth/build.gradle
index 1e46a9e..361293b 100644
--- a/testutils/testutils-truth/build.gradle
+++ b/testutils/testutils-truth/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/text/text/build.gradle b/text/text/build.gradle
index a918d46..a7b4568 100644
--- a/text/text/build.gradle
+++ b/text/text/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/tracing/tracing-ktx/build.gradle b/tracing/tracing-ktx/build.gradle
index e08c118..b764032 100644
--- a/tracing/tracing-ktx/build.gradle
+++ b/tracing/tracing-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/tracing/tracing-perfetto-binary/build.gradle b/tracing/tracing-perfetto-binary/build.gradle
index 8df5469..0a9ab3df 100644
--- a/tracing/tracing-perfetto-binary/build.gradle
+++ b/tracing/tracing-perfetto-binary/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.AndroidXConfig
 
diff --git a/tracing/tracing-perfetto-handshake/build.gradle b/tracing/tracing-perfetto-handshake/build.gradle
index 9f6adaa..2956b7e 100644
--- a/tracing/tracing-perfetto-handshake/build.gradle
+++ b/tracing/tracing-perfetto-handshake/build.gradle
@@ -14,6 +14,13 @@
  * 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.BuildServerConfigurationKt
 import androidx.build.Publish
 
diff --git a/tracing/tracing-perfetto/build.gradle b/tracing/tracing-perfetto/build.gradle
index fa31194..a49481d 100644
--- a/tracing/tracing-perfetto/build.gradle
+++ b/tracing/tracing-perfetto/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.AndroidXConfig
 
diff --git a/tracing/tracing/build.gradle b/tracing/tracing/build.gradle
index 0edefb34..2e1d131 100644
--- a/tracing/tracing/build.gradle
+++ b/tracing/tracing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/transition/transition-ktx/build.gradle b/transition/transition-ktx/build.gradle
index 6d7000c..9ca355f 100644
--- a/transition/transition-ktx/build.gradle
+++ b/transition/transition-ktx/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/transition/transition/build.gradle b/transition/transition/build.gradle
index 6d5daad..dce4a5e 100644
--- a/transition/transition/build.gradle
+++ b/transition/transition/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java b/transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java
index b1d6ce8..475b59e 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java
+++ b/transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java
@@ -32,7 +32,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import androidx.core.view.ViewCompat;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.SdkSuppress;
 
@@ -66,9 +65,9 @@
         rule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                assertNull(ViewCompat.getClipBounds(redSquare));
+                assertNull(redSquare.getClipBounds());
                 TransitionManager.beginDelayedTransition(mRoot, mTransition);
-                ViewCompat.setClipBounds(redSquare, newClip);
+                redSquare.setClipBounds(newClip);
             }
         });
         waitForStart();
@@ -79,7 +78,7 @@
         rule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                final Rect endRect = ViewCompat.getClipBounds(redSquare);
+                final Rect endRect = redSquare.getClipBounds();
                 assertNotNull(endRect);
                 assertEquals(newClip, endRect);
             }
@@ -91,7 +90,7 @@
             @Override
             public void run() {
                 TransitionManager.beginDelayedTransition(mRoot, mTransition);
-                ViewCompat.setClipBounds(redSquare, null);
+                redSquare.setClipBounds(null);
             }
         });
         waitForStart();
@@ -102,7 +101,7 @@
         rule.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                assertNull(ViewCompat.getClipBounds(redSquare));
+                assertNull(redSquare.getClipBounds());
             }
         });
 
diff --git a/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java b/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java
index 3d38f1a..bd58f79 100644
--- a/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java
+++ b/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java
@@ -36,7 +36,6 @@
 import android.view.ViewTreeObserver;
 import android.widget.FrameLayout;
 
-import androidx.core.view.ViewCompat;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.filters.MediumTest;
 
@@ -60,7 +59,7 @@
         mContext = rule.getActivity();
         mRoot = new FrameLayout(mContext);
         rule.getActivity().getRoot().addView(mRoot, new ViewGroup.LayoutParams(SIZE, SIZE));
-        ViewCompat.setBackground(rule.getActivity().getRoot(), new ColorDrawable(Color.WHITE));
+        rule.getActivity().getRoot().setBackground(new ColorDrawable(Color.WHITE));
     }
 
     @Test
@@ -311,7 +310,7 @@
 
     private View makeColorView(int color) {
         View view = new View(mContext);
-        ViewCompat.setBackground(view, new ColorDrawable(color));
+        view.setBackground(new ColorDrawable(color));
         return view;
     }
 
diff --git a/transition/transition/src/main/java/androidx/transition/ChangeBounds.java b/transition/transition/src/main/java/androidx/transition/ChangeBounds.java
index e72333d..89077d0 100644
--- a/transition/transition/src/main/java/androidx/transition/ChangeBounds.java
+++ b/transition/transition/src/main/java/androidx/transition/ChangeBounds.java
@@ -35,7 +35,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.content.res.TypedArrayUtils;
-import androidx.core.view.ViewCompat;
 
 import java.util.Map;
 
@@ -199,12 +198,12 @@
     private void captureValues(TransitionValues values) {
         View view = values.view;
 
-        if (ViewCompat.isLaidOut(view) || view.getWidth() != 0 || view.getHeight() != 0) {
+        if (view.isLaidOut() || view.getWidth() != 0 || view.getHeight() != 0) {
             values.values.put(PROPNAME_BOUNDS, new Rect(view.getLeft(), view.getTop(),
                     view.getRight(), view.getBottom()));
             values.values.put(PROPNAME_PARENT, values.view.getParent());
             if (mResizeClip) {
-                values.values.put(PROPNAME_CLIP, ViewCompat.getClipBounds(view));
+                values.values.put(PROPNAME_CLIP, view.getClipBounds());
             }
         }
     }
@@ -333,7 +332,7 @@
                 }
                 ObjectAnimator clipAnimator = null;
                 if (!startClip.equals(endClip)) {
-                    ViewCompat.setClipBounds(view, startClip);
+                    view.setClipBounds(startClip);
                     clipAnimator = ObjectAnimator.ofObject(view, "clipBounds", sRectEvaluator,
                             startClip, endClip);
                     ClipListener listener = new ClipListener(view,
@@ -457,7 +456,7 @@
             ViewUtils.setLeftTopRightBottom(mView, left, top, left + maxWidth, top + maxHeight);
 
             Rect clip = isReverse ? mEndClip : mStartClip;
-            ViewCompat.setClipBounds(mView, clip);
+            mView.setClipBounds(clip);
         }
 
         @Override
@@ -468,7 +467,7 @@
             Rect clip = isReverse
                     ? (mStartClipIsNull ? null : mStartClip)
                     : (mEndClipIsNull ? null : mEndClip);
-            ViewCompat.setClipBounds(mView, clip);
+            mView.setClipBounds(clip);
             if (isReverse) {
                 ViewUtils.setLeftTopRightBottom(mView, mStartLeft, mStartTop, mStartRight,
                         mStartBottom);
@@ -484,17 +483,17 @@
 
         @Override
         public void onTransitionPause(@NonNull Transition transition) {
-            Rect pauseClip = ViewCompat.getClipBounds(mView);
+            Rect pauseClip = mView.getClipBounds();
             mView.setTag(R.id.transition_clip, pauseClip);
             Rect clip = mEndClipIsNull ? null : mEndClip;
-            ViewCompat.setClipBounds(mView, clip);
+            mView.setClipBounds(clip);
         }
 
         @Override
         public void onTransitionResume(@NonNull Transition transition) {
             Rect pauseClip = (Rect) mView.getTag(R.id.transition_clip);
             mView.setTag(R.id.transition_clip, null);
-            ViewCompat.setClipBounds(mView, pauseClip);
+            mView.setClipBounds(pauseClip);
         }
 
         @Override
diff --git a/transition/transition/src/main/java/androidx/transition/ChangeClipBounds.java b/transition/transition/src/main/java/androidx/transition/ChangeClipBounds.java
index bcd40a3..0d1d14e 100644
--- a/transition/transition/src/main/java/androidx/transition/ChangeClipBounds.java
+++ b/transition/transition/src/main/java/androidx/transition/ChangeClipBounds.java
@@ -27,7 +27,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.view.ViewCompat;
 
 /**
  * ChangeClipBounds captures the {@link android.view.View#getClipBounds()} before and after the
@@ -78,7 +77,7 @@
             clip = (Rect) view.getTag(R.id.transition_clip);
         }
         if (clip == null) {
-            clip = ViewCompat.getClipBounds(view);
+            clip = view.getClipBounds();
         }
         if (clip == NULL_SENTINEL) {
             clip = null;
@@ -123,7 +122,7 @@
             return null;
         }
 
-        ViewCompat.setClipBounds(endValues.view, start);
+        endValues.view.setClipBounds(start);
         RectEvaluator evaluator = new RectEvaluator(new Rect());
         ObjectAnimator animator = ObjectAnimator.ofObject(endValues.view, ViewUtils.CLIP_BOUNDS,
                 evaluator, startClip, endClip);
@@ -162,18 +161,18 @@
 
         @Override
         public void onTransitionPause(@NonNull Transition transition) {
-            Rect clipBounds = ViewCompat.getClipBounds(mView);
+            Rect clipBounds = mView.getClipBounds();
             if (clipBounds == null) {
                 clipBounds = NULL_SENTINEL;
             }
             mView.setTag(R.id.transition_clip, clipBounds);
-            ViewCompat.setClipBounds(mView, mEnd);
+            mView.setClipBounds(mEnd);
         }
 
         @Override
         public void onTransitionResume(@NonNull Transition transition) {
             Rect clipBounds = (Rect) mView.getTag(R.id.transition_clip);
-            ViewCompat.setClipBounds(mView, clipBounds);
+            mView.setClipBounds(clipBounds);
             mView.setTag(R.id.transition_clip, null);
         }
 
@@ -185,9 +184,9 @@
         @Override
         public void onAnimationEnd(Animator animation, boolean isReverse) {
             if (!isReverse) {
-                ViewCompat.setClipBounds(mView, mEnd);
+                mView.setClipBounds(mEnd);
             } else {
-                ViewCompat.setClipBounds(mView, mStart);
+                mView.setClipBounds(mStart);
             }
         }
     }
diff --git a/transition/transition/src/main/java/androidx/transition/Fade.java b/transition/transition/src/main/java/androidx/transition/Fade.java
index 039e19b..4ce248e 100644
--- a/transition/transition/src/main/java/androidx/transition/Fade.java
+++ b/transition/transition/src/main/java/androidx/transition/Fade.java
@@ -31,7 +31,6 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.content.res.TypedArrayUtils;
-import androidx.core.view.ViewCompat;
 
 /**
  * This transition tracks changes to the visibility of target views in the
@@ -199,7 +198,7 @@
 
         @Override
         public void onAnimationStart(Animator animation) {
-            if (ViewCompat.hasOverlappingRendering(mView)
+            if (mView.hasOverlappingRendering()
                     && mView.getLayerType() == View.LAYER_TYPE_NONE) {
                 mLayerTypeChanged = true;
                 mView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
diff --git a/transition/transition/src/main/java/androidx/transition/GhostViewPort.java b/transition/transition/src/main/java/androidx/transition/GhostViewPort.java
index b82927d..7e4a8e9 100644
--- a/transition/transition/src/main/java/androidx/transition/GhostViewPort.java
+++ b/transition/transition/src/main/java/androidx/transition/GhostViewPort.java
@@ -25,7 +25,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.view.ViewCompat;
 
 /**
  * Backport of android.view.GhostView introduced in API level 21.
@@ -53,10 +52,10 @@
                 @Override
                 public boolean onPreDraw() {
                     // We draw the view.
-                    ViewCompat.postInvalidateOnAnimation(GhostViewPort.this);
+                    GhostViewPort.this.postInvalidateOnAnimation();
                     if (mStartParent != null && mStartView != null) {
                         mStartParent.endViewTransition(mStartView);
-                        ViewCompat.postInvalidateOnAnimation(mStartParent);
+                        mStartParent.postInvalidateOnAnimation();
                         mStartParent = null;
                         mStartView = null;
                     }
diff --git a/transition/transition/src/main/java/androidx/transition/SidePropagation.java b/transition/transition/src/main/java/androidx/transition/SidePropagation.java
index 8e85055..e7198e1 100644
--- a/transition/transition/src/main/java/androidx/transition/SidePropagation.java
+++ b/transition/transition/src/main/java/androidx/transition/SidePropagation.java
@@ -23,7 +23,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.view.ViewCompat;
 
 /**
  * A <code>TransitionPropagation</code> that propagates based on the distance to the side
@@ -125,12 +124,12 @@
             int left, int top, int right, int bottom) {
         final int side;
         if (mSide == Gravity.START) {
-            final boolean isRtl = ViewCompat.getLayoutDirection(sceneRoot)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
+            final boolean isRtl = sceneRoot.getLayoutDirection()
+                    == View.LAYOUT_DIRECTION_RTL;
             side = isRtl ? Gravity.RIGHT : Gravity.LEFT;
         } else if (mSide == Gravity.END) {
-            final boolean isRtl = ViewCompat.getLayoutDirection(sceneRoot)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
+            final boolean isRtl = sceneRoot.getLayoutDirection()
+                    == View.LAYOUT_DIRECTION_RTL;
             side = isRtl ? Gravity.LEFT : Gravity.RIGHT;
         } else {
             side = mSide;
diff --git a/transition/transition/src/main/java/androidx/transition/Slide.java b/transition/transition/src/main/java/androidx/transition/Slide.java
index 62d2dcf..ea0f60d 100644
--- a/transition/transition/src/main/java/androidx/transition/Slide.java
+++ b/transition/transition/src/main/java/androidx/transition/Slide.java
@@ -35,7 +35,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.core.content.res.TypedArrayUtils;
-import androidx.core.view.ViewCompat;
 
 import org.xmlpull.v1.XmlPullParser;
 
@@ -100,8 +99,8 @@
     private static final CalculateSlide sCalculateStart = new CalculateSlideHorizontal() {
         @Override
         public float getGoneX(ViewGroup sceneRoot, View view) {
-            final boolean isRtl = ViewCompat.getLayoutDirection(sceneRoot)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
+            final boolean isRtl = sceneRoot.getLayoutDirection()
+                    == View.LAYOUT_DIRECTION_RTL;
             final float x;
             if (isRtl) {
                 x = view.getTranslationX() + sceneRoot.getWidth();
@@ -129,8 +128,8 @@
     private static final CalculateSlide sCalculateEnd = new CalculateSlideHorizontal() {
         @Override
         public float getGoneX(ViewGroup sceneRoot, View view) {
-            final boolean isRtl = ViewCompat.getLayoutDirection(sceneRoot)
-                    == ViewCompat.LAYOUT_DIRECTION_RTL;
+            final boolean isRtl = sceneRoot.getLayoutDirection()
+                    == View.LAYOUT_DIRECTION_RTL;
             final float x;
             if (isRtl) {
                 x = view.getTranslationX() - sceneRoot.getWidth();
diff --git a/transition/transition/src/main/java/androidx/transition/Transition.java b/transition/transition/src/main/java/androidx/transition/Transition.java
index fc34dc5..89bb535 100644
--- a/transition/transition/src/main/java/androidx/transition/Transition.java
+++ b/transition/transition/src/main/java/androidx/transition/Transition.java
@@ -1667,11 +1667,11 @@
                     // Duplicate item IDs: cannot match by item ID.
                     View alreadyMatched = transitionValuesMaps.mItemIdValues.get(itemId);
                     if (alreadyMatched != null) {
-                        ViewCompat.setHasTransientState(alreadyMatched, false);
+                        alreadyMatched.setHasTransientState(false);
                         transitionValuesMaps.mItemIdValues.put(itemId, null);
                     }
                 } else {
-                    ViewCompat.setHasTransientState(view, true);
+                    view.setHasTransientState(true);
                     transitionValuesMaps.mItemIdValues.put(itemId, view);
                 }
             }
@@ -2073,13 +2073,13 @@
             for (int i = 0; i < mStartValues.mItemIdValues.size(); ++i) {
                 View view = mStartValues.mItemIdValues.valueAt(i);
                 if (view != null) {
-                    ViewCompat.setHasTransientState(view, false);
+                    view.setHasTransientState(false);
                 }
             }
             for (int i = 0; i < mEndValues.mItemIdValues.size(); ++i) {
                 View view = mEndValues.mItemIdValues.valueAt(i);
                 if (view != null) {
-                    ViewCompat.setHasTransientState(view, false);
+                    view.setHasTransientState(false);
                 }
             }
             mEnded = true;
diff --git a/transition/transition/src/main/java/androidx/transition/TransitionManager.java b/transition/transition/src/main/java/androidx/transition/TransitionManager.java
index 261738f4..78aa1a0 100644
--- a/transition/transition/src/main/java/androidx/transition/TransitionManager.java
+++ b/transition/transition/src/main/java/androidx/transition/TransitionManager.java
@@ -27,7 +27,6 @@
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.collection.ArrayMap;
-import androidx.core.view.ViewCompat;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -362,7 +361,7 @@
      * another Transition is being captured for {@code sceneRoot}, or {@code sceneRoot} hasn't
      * had a layout yet.
      * @throws IllegalArgumentException if {@code transition} returns {@code false} from
-     * {@link Transition#isSeekingSupported()}.
+     *                                  {@link Transition#isSeekingSupported()}.
      */
     @Nullable
     public static TransitionSeekController createSeekController(
@@ -378,7 +377,7 @@
             return null; // Already in the process of transitioning
         }
         Scene oldScene = Scene.getCurrentScene(sceneRoot);
-        if (!ViewCompat.isLaidOut(sceneRoot)
+        if (!sceneRoot.isLaidOut()
                 || Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE
         ) {
             // Can't control it, so just change the scene immediately
@@ -458,7 +457,7 @@
      */
     public static void beginDelayedTransition(@NonNull final ViewGroup sceneRoot,
             @Nullable Transition transition) {
-        if (!sPendingTransitions.contains(sceneRoot) && ViewCompat.isLaidOut(sceneRoot)) {
+        if (!sPendingTransitions.contains(sceneRoot) && sceneRoot.isLaidOut()) {
             if (Transition.DBG) {
                 Log.d(LOG_TAG, "beginDelayedTransition: root, transition = "
                         + sceneRoot + ", " + transition);
@@ -498,14 +497,14 @@
      * another Transition is being captured for {@code sceneRoot}, or {@code sceneRoot} hasn't
      * had a layout yet.
      * @throws IllegalArgumentException if {@code transition} returns {@code false} from
-     * {@link Transition#isSeekingSupported()}.
+     *                                  {@link Transition#isSeekingSupported()}.
      */
     @Nullable
     public static TransitionSeekController controlDelayedTransition(
             @NonNull final ViewGroup sceneRoot,
             @NonNull Transition transition
     ) {
-        if (sPendingTransitions.contains(sceneRoot) || !ViewCompat.isLaidOut(sceneRoot)
+        if (sPendingTransitions.contains(sceneRoot) || !sceneRoot.isLaidOut()
                 || Build.VERSION.SDK_INT < 34) {
             return null;
         }
diff --git a/transition/transition/src/main/java/androidx/transition/ViewUtils.java b/transition/transition/src/main/java/androidx/transition/ViewUtils.java
index ee69e47..16de6e6 100644
--- a/transition/transition/src/main/java/androidx/transition/ViewUtils.java
+++ b/transition/transition/src/main/java/androidx/transition/ViewUtils.java
@@ -24,7 +24,6 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import androidx.core.view.ViewCompat;
 
 /**
  * Compatibility utilities for platform features of {@link View}.
@@ -71,12 +70,12 @@
 
                 @Override
                 public Rect get(View view) {
-                    return ViewCompat.getClipBounds(view);
+                    return view.getClipBounds();
                 }
 
                 @Override
                 public void set(View view, Rect clipBounds) {
-                    ViewCompat.setClipBounds(view, clipBounds);
+                    view.setClipBounds(clipBounds);
                 }
 
             };
diff --git a/tv/integration-tests/playground/build.gradle b/tv/integration-tests/playground/build.gradle
index 0842d00..f0e12a7 100644
--- a/tv/integration-tests/playground/build.gradle
+++ b/tv/integration-tests/playground/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/tv/integration-tests/presentation/build.gradle b/tv/integration-tests/presentation/build.gradle
index 1b3e68c..7606a29 100644
--- a/tv/integration-tests/presentation/build.gradle
+++ b/tv/integration-tests/presentation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/tv/samples/build.gradle b/tv/samples/build.gradle
index fbf05ce..b47b047 100644
--- a/tv/samples/build.gradle
+++ b/tv/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/tv/tv-foundation/build.gradle b/tv/tv-foundation/build.gradle
index 585c6f5..5aae051 100644
--- a/tv/tv-foundation/build.gradle
+++ b/tv/tv-foundation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/tv/tv-material/build.gradle b/tv/tv-material/build.gradle
index c982834..95c3c1b 100644
--- a/tv/tv-material/build.gradle
+++ b/tv/tv-material/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/tvprovider/tvprovider/build.gradle b/tvprovider/tvprovider/build.gradle
index 363ac19..ea4b858 100644
--- a/tvprovider/tvprovider/build.gradle
+++ b/tvprovider/tvprovider/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/vectordrawable/integration-tests/testapp/src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java b/vectordrawable/integration-tests/testapp/src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java
index 48b7a5b..81537bd 100644
--- a/vectordrawable/integration-tests/testapp/src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java
+++ b/vectordrawable/integration-tests/testapp/src/main/java/com/example/android/support/vectordrawable/app/SimpleStaticVectorDrawable.java
@@ -88,7 +88,7 @@
         LinearLayout container = new LinearLayout(this);
         scrollView.addView(container);
         container.setOrientation(LinearLayout.VERTICAL);
-        final Resources res = this.getResources();
+        final Resources res = getResources();
         final Resources.Theme theme = getTheme();
         container.setBackgroundColor(0xFF888888);
         VectorDrawableCompat[] d = new VectorDrawableCompat[mIcons.length];
diff --git a/vectordrawable/vectordrawable-animated/build.gradle b/vectordrawable/vectordrawable-animated/build.gradle
index 32733ad0..a725897 100644
--- a/vectordrawable/vectordrawable-animated/build.gradle
+++ b/vectordrawable/vectordrawable-animated/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/vectordrawable/vectordrawable-animated/src/androidTest/java/androidx/vectordrawable/graphics/drawable/tests/AnimatedVectorDrawableTest.java b/vectordrawable/vectordrawable-animated/src/androidTest/java/androidx/vectordrawable/graphics/drawable/tests/AnimatedVectorDrawableTest.java
index 7aae59ba7..711c05c 100644
--- a/vectordrawable/vectordrawable-animated/src/androidTest/java/androidx/vectordrawable/graphics/drawable/tests/AnimatedVectorDrawableTest.java
+++ b/vectordrawable/vectordrawable-animated/src/androidTest/java/androidx/vectordrawable/graphics/drawable/tests/AnimatedVectorDrawableTest.java
@@ -40,7 +40,6 @@
 
 import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
-import androidx.core.view.ViewCompat;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.FlakyTest;
@@ -310,7 +309,7 @@
             public void run() {
                 AnimatedVectorDrawableCompat avd = AnimatedVectorDrawableCompat.create(mContext,
                         R.drawable.animated_color_fill);
-                ViewCompat.setBackground(imageButton, avd);
+                imageButton.setBackground(avd);
                 avd.start();
             }
         });
@@ -392,7 +391,7 @@
 
         AnimatedVectorDrawableCompat avd = AnimatedVectorDrawableCompat.create(mContext,
                 R.drawable.animation_vector_drawable_grouping_1); // Duration is 50 ms.
-        ViewCompat.setBackground(imageButton, avd);
+        imageButton.setBackground(avd);
         return avd;
     }
 
diff --git a/vectordrawable/vectordrawable-seekable/build.gradle b/vectordrawable/vectordrawable-seekable/build.gradle
index 928385c..4dd5f98 100644
--- a/vectordrawable/vectordrawable-seekable/build.gradle
+++ b/vectordrawable/vectordrawable-seekable/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/vectordrawable/vectordrawable/build.gradle b/vectordrawable/vectordrawable/build.gradle
index edcf674..83e231e 100644
--- a/vectordrawable/vectordrawable/build.gradle
+++ b/vectordrawable/vectordrawable/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/vectordrawable/vectordrawable/src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java b/vectordrawable/vectordrawable/src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java
index 2ae01e1..d1c0a37 100644
--- a/vectordrawable/vectordrawable/src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java
+++ b/vectordrawable/vectordrawable/src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java
@@ -50,6 +50,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Xml;
+import android.view.View;
 
 import androidx.annotation.ColorInt;
 import androidx.annotation.DrawableRes;
@@ -63,7 +64,6 @@
 import androidx.core.content.res.TypedArrayUtils;
 import androidx.core.graphics.PathParser;
 import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.core.view.ViewCompat;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
@@ -919,7 +919,7 @@
     // We don't support RTL auto mirroring since the getLayoutDirection() is for API 17+.
     private boolean needMirroring() {
         return isAutoMirrored()
-                && DrawableCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL;
+                && DrawableCompat.getLayoutDirection(this) == View.LAYOUT_DIRECTION_RTL;
     }
 
     // Extra override functions for delegation for SDK >= 7.
diff --git a/versionedparcelable/versionedparcelable-compiler/build.gradle b/versionedparcelable/versionedparcelable-compiler/build.gradle
index ff5be75..8fc8fba 100644
--- a/versionedparcelable/versionedparcelable-compiler/build.gradle
+++ b/versionedparcelable/versionedparcelable-compiler/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/versionedparcelable/versionedparcelable/build.gradle b/versionedparcelable/versionedparcelable/build.gradle
index 119f9cf..57eca7c 100644
--- a/versionedparcelable/versionedparcelable/build.gradle
+++ b/versionedparcelable/versionedparcelable/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/viewpager/viewpager/build.gradle b/viewpager/viewpager/build.gradle
index 9a8f6d3..d6dabdc 100644
--- a/viewpager/viewpager/build.gradle
+++ b/viewpager/viewpager/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/viewpager/viewpager/src/androidTest/java/android/support/v4/testutils/TestUtilsMatchers.java b/viewpager/viewpager/src/androidTest/java/android/support/v4/testutils/TestUtilsMatchers.java
index 0ab4152..240f725c 100644
--- a/viewpager/viewpager/src/androidTest/java/android/support/v4/testutils/TestUtilsMatchers.java
+++ b/viewpager/viewpager/src/androidTest/java/android/support/v4/testutils/TestUtilsMatchers.java
@@ -24,7 +24,6 @@
 import android.view.ViewParent;
 
 import androidx.annotation.ColorInt;
-import androidx.core.view.ViewCompat;
 import androidx.test.espresso.matcher.BoundedMatcher;
 
 import org.hamcrest.Description;
@@ -116,8 +115,8 @@
                 }
                 final ViewGroup parentGroup = (ViewGroup) parent;
 
-                final int parentLayoutDirection = ViewCompat.getLayoutDirection(parentGroup);
-                if (parentLayoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
+                final int parentLayoutDirection = parentGroup.getLayoutDirection();
+                if (parentLayoutDirection == View.LAYOUT_DIRECTION_LTR) {
                     if (view.getLeft() == 0) {
                         return true;
                     } else {
@@ -162,8 +161,8 @@
                 }
                 final ViewGroup parentGroup = (ViewGroup) parent;
 
-                final int parentLayoutDirection = ViewCompat.getLayoutDirection(parentGroup);
-                if (parentLayoutDirection == ViewCompat.LAYOUT_DIRECTION_LTR) {
+                final int parentLayoutDirection = parentGroup.getLayoutDirection();
+                if (parentLayoutDirection == View.LAYOUT_DIRECTION_LTR) {
                     if (view.getRight() == parentGroup.getWidth()) {
                         return true;
                     } else {
diff --git a/viewpager/viewpager/src/main/java/androidx/viewpager/widget/ViewPager.java b/viewpager/viewpager/src/main/java/androidx/viewpager/widget/ViewPager.java
index adcb306..5b36e33 100644
--- a/viewpager/viewpager/src/main/java/androidx/viewpager/widget/ViewPager.java
+++ b/viewpager/viewpager/src/main/java/androidx/viewpager/widget/ViewPager.java
@@ -429,10 +429,9 @@
 
         ViewCompat.setAccessibilityDelegate(this, new MyAccessibilityDelegate());
 
-        if (ViewCompat.getImportantForAccessibility(this)
-                == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-            ViewCompat.setImportantForAccessibility(this,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+        if (this.getImportantForAccessibility()
+                == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+            setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
 
         ViewCompat.setOnApplyWindowInsetsListener(this,
@@ -1004,7 +1003,7 @@
         // where we call computeScrollOffset().
         mIsScrollStarted = false;
         mScroller.startScroll(sx, sy, dx, dy, duration);
-        ViewCompat.postInvalidateOnAnimation(this);
+        postInvalidateOnAnimation();
     }
 
     ItemInfo addNewItem(int position, int index) {
@@ -1803,7 +1802,7 @@
             }
 
             // Keep on drawing until the animation has finished.
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
             return;
         }
 
@@ -2120,7 +2119,7 @@
                 if (mIsBeingDragged) {
                     // Scroll to follow the motion event
                     if (performDrag(x, y)) {
-                        ViewCompat.postInvalidateOnAnimation(this);
+                        postInvalidateOnAnimation();
                     }
                 }
                 break;
@@ -2319,7 +2318,7 @@
                 break;
         }
         if (needsInvalidate) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
         return true;
     }
@@ -2527,7 +2526,7 @@
 
         if (needsInvalidate) {
             // Keep animating
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
diff --git a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt
index b211aef..c1588fa 100644
--- a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt
+++ b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/BaseTest.kt
@@ -19,7 +19,6 @@
 import android.view.View
 import androidx.annotation.LayoutRes
 import androidx.core.text.TextUtilsCompat
-import androidx.core.view.ViewCompat
 import androidx.fragment.app.FragmentActivity
 import androidx.test.espresso.Espresso.onData
 import androidx.test.espresso.Espresso.onIdle
@@ -67,7 +66,7 @@
     lateinit var idleWatcher: ViewPagerIdleWatcher
     lateinit var viewPager: ViewPager2
     val isRtl = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) ==
-        ViewCompat.LAYOUT_DIRECTION_RTL
+        View.LAYOUT_DIRECTION_RTL
 
     @Before
     open fun setUp() {
diff --git a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/ViewPagerActions.kt b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/ViewPagerActions.kt
index 20b83eb..c84cef5 100644
--- a/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/ViewPagerActions.kt
+++ b/viewpager2/integration-tests/testapp/src/androidTest/java/androidx/viewpager2/integration/testapp/test/util/ViewPagerActions.kt
@@ -20,7 +20,6 @@
 import android.os.SystemClock
 import android.view.MotionEvent
 import android.view.View
-import androidx.core.view.ViewCompat
 import androidx.test.espresso.InjectEventSecurityException
 import androidx.test.espresso.PerformException
 import androidx.test.espresso.UiController
@@ -103,7 +102,7 @@
     }
 
     private fun ViewPager2.isRtl(): Boolean {
-        return ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL
+        return getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
     }
 }
 
diff --git a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/FakeDragActivity.kt b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/FakeDragActivity.kt
index 3024898..a873593 100644
--- a/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/FakeDragActivity.kt
+++ b/viewpager2/integration-tests/testapp/src/main/java/androidx/viewpager2/integration/testapp/FakeDragActivity.kt
@@ -21,7 +21,6 @@
 import android.view.MotionEvent
 import android.view.View
 import androidx.core.text.TextUtilsCompat
-import androidx.core.view.ViewCompat
 import androidx.fragment.app.FragmentActivity
 import androidx.viewpager2.integration.testapp.cards.CardViewAdapter
 import androidx.viewpager2.widget.ViewPager2
@@ -34,7 +33,7 @@
     private var lastValue: Float = 0f
 
     private val isRtl = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) ==
-        ViewCompat.LAYOUT_DIRECTION_RTL
+        View.LAYOUT_DIRECTION_RTL
 
     private val ViewPager2.isHorizontal: Boolean
         get() {
diff --git a/viewpager2/viewpager2/build.gradle b/viewpager2/viewpager2/build.gradle
index 5a7e8bd..aeb25ad 100644
--- a/viewpager2/viewpager2/build.gradle
+++ b/viewpager2/viewpager2/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt
index df70e16..b7834d2 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AccessibilityTest.kt
@@ -17,7 +17,7 @@
 package androidx.viewpager2.widget
 
 import android.os.Build
-import androidx.core.view.ViewCompat
+import android.view.accessibility.AccessibilityNodeInfo
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
 import androidx.test.filters.LargeTest
 import androidx.test.platform.app.InstrumentationRegistry
@@ -79,13 +79,11 @@
                 val latch = viewPager.addWaitForScrolledLatch(targetPage)
                 runOnUiThreadSync {
                     if (targetPage - currentPage == 1) {
-                        ViewCompat.performAccessibilityAction(
-                            viewPager,
+                        viewPager.performAccessibilityAction(
                             getNextPageAction(config.orientation, viewPager.isRtl), null
                         )
                     } else {
-                        ViewCompat.performAccessibilityAction(
-                            viewPager,
+                        viewPager.performAccessibilityAction(
                             getPreviousPageAction(config.orientation, viewPager.isRtl), null
                         )
                     }
@@ -106,14 +104,15 @@
         test_collectionInfo(0)
     }
 
+    @Suppress("DEPRECATION") // AccessibilityNodeInfo.obtain()
     private fun test_collectionInfo(numberOfItems: Int) {
         setUpTest(config.orientation).apply {
             setAdapterSync(viewAdapterProvider.provider(stringSequence(numberOfItems)))
             assertBasicState(viewPager.currentItem, null)
 
-            var node = AccessibilityNodeInfoCompat.obtain()
+            var node = AccessibilityNodeInfo.obtain()
             runOnUiThreadSync {
-                ViewCompat.onInitializeAccessibilityNodeInfo(viewPager, node)
+                viewPager.onInitializeAccessibilityNodeInfo(node)
             }
             var collectionInfo = node.collectionInfo
             if (config.orientation == ORIENTATION_VERTICAL) {
@@ -130,6 +129,7 @@
         }
     }
 
+    @Suppress("DEPRECATION") // AccessibilityNodeInfo.obtain()
     @Test
     fun test_collectionItemInfo() {
         setUpTest(config.orientation).apply {
@@ -137,10 +137,10 @@
             listOf(1, 0, 2, 5).forEach { targetPage ->
                 viewPager.setCurrentItemSync(targetPage, false, 2, TimeUnit.SECONDS)
                 assertBasicState(targetPage)
-                var nodeChild = AccessibilityNodeInfoCompat.obtain()
+                var nodeChild = AccessibilityNodeInfo.obtain()
                 val item = viewPager.linearLayoutManager.findViewByPosition(targetPage)
                 runOnUiThreadSync {
-                    ViewCompat.onInitializeAccessibilityNodeInfo(item!!, nodeChild)
+                    item!!.onInitializeAccessibilityNodeInfo(nodeChild)
                 }
                 var collectionItemInfo = nodeChild.collectionItemInfo
                 if (config.orientation == ORIENTATION_VERTICAL) {
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
index 48f23b3..9d21890 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
@@ -22,7 +22,6 @@
 import android.view.View
 import android.view.ViewConfiguration
 import android.view.accessibility.AccessibilityNodeInfo
-import androidx.core.view.ViewCompat
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD
@@ -725,6 +724,6 @@
 }
 
 val View.isRtl: Boolean
-    get() = ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL
+    get() = getLayoutDirection() == View.LAYOUT_DIRECTION_RTL
 
 val ViewPager2.isHorizontal: Boolean get() = orientation == ORIENTATION_HORIZONTAL
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
index 074d046..52960af 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
@@ -22,7 +22,6 @@
 import android.view.animation.DecelerateInterpolator
 import android.view.animation.Interpolator
 import android.view.animation.LinearInterpolator
-import androidx.core.view.ViewCompat
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD
 import androidx.core.view.animation.PathInterpolatorCompat
 import androidx.test.filters.LargeTest
@@ -345,7 +344,7 @@
     fun test_performA11yActionDuringFakeDrag() {
         startManualDragDuringFakeDrag(.9f, 1000, interpolator = fastDecelerateInterpolator) {
             test.runOnUiThreadSync {
-                ViewCompat.performAccessibilityAction(test.viewPager, getNextPageAction(), null)
+                test.viewPager.performAccessibilityAction(getNextPageAction(), null)
             }
         }
     }
diff --git a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt
index 4ca8cf5..102df12 100644
--- a/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt
+++ b/viewpager2/viewpager2/src/androidTest/java/androidx/viewpager2/widget/HostFragmentBackStackTest.kt
@@ -25,7 +25,6 @@
 import android.view.ViewGroup.LayoutParams
 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
 import android.widget.FrameLayout
-import androidx.core.view.ViewCompat
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentManager
 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -53,7 +52,7 @@
     fun test_sameFragment_multipleBackStackEntries() {
         @Suppress("DEPRECATION")
         FragmentManager.enableDebugLogging(true)
-        val containerId = ViewCompat.generateViewId()
+        val containerId = View.generateViewId()
         setUpTest(ORIENTATION_HORIZONTAL).apply {
             val container: ViewGroup = FrameLayout(activity).apply {
                 id = containerId
diff --git a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
index dca3df1..a6a77bb 100644
--- a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
+++ b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentStateAdapter.java
@@ -38,7 +38,6 @@
 import androidx.annotation.RequiresOptIn;
 import androidx.collection.ArraySet;
 import androidx.collection.LongSparseArray;
-import androidx.core.view.ViewCompat;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
@@ -187,7 +186,7 @@
         /* Special case when {@link RecyclerView} decides to keep the {@link container}
          * attached to the window, resulting in no {@link `onViewAttachedToWindow} callback later */
         final FrameLayout container = holder.getContainer();
-        if (ViewCompat.isAttachedToWindow(container)) {
+        if (container.isAttachedToWindow()) {
             placeFragmentInViewHolder(holder);
         }
 
@@ -357,7 +356,7 @@
                         return;
                     }
                     source.getLifecycle().removeObserver(this);
-                    if (ViewCompat.isAttachedToWindow(holder.getContainer())) {
+                    if (holder.getContainer().isAttachedToWindow()) {
                         placeFragmentInViewHolder(holder);
                     }
                 }
diff --git a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentViewHolder.java b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentViewHolder.java
index bcb5b2d..1627a07 100644
--- a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentViewHolder.java
+++ b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/adapter/FragmentViewHolder.java
@@ -16,11 +16,11 @@
 
 package androidx.viewpager2.adapter;
 
+import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
 
 import androidx.annotation.NonNull;
-import androidx.core.view.ViewCompat;
 import androidx.fragment.app.Fragment;
 import androidx.recyclerview.widget.RecyclerView.ViewHolder;
 
@@ -38,7 +38,7 @@
         container.setLayoutParams(
                 new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                         ViewGroup.LayoutParams.MATCH_PARENT));
-        container.setId(ViewCompat.generateViewId());
+        container.setId(View.generateViewId());
         container.setSaveEnabled(false);
         return new FragmentViewHolder(container);
     }
diff --git a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
index 54fec80..93946b2 100644
--- a/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
+++ b/viewpager2/viewpager2/src/main/java/androidx/viewpager2/widget/ViewPager2.java
@@ -188,7 +188,7 @@
                 : new BasicAccessibilityProvider();
 
         mRecyclerView = new RecyclerViewImpl(context);
-        mRecyclerView.setId(ViewCompat.generateViewId());
+        mRecyclerView.setId(View.generateViewId());
         mRecyclerView.setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS);
 
         mLayoutManager = new LinearLayoutManagerImpl(context);
@@ -583,7 +583,7 @@
     }
 
     boolean isRtl() {
-        return mLayoutManager.getLayoutDirection() == ViewCompat.LAYOUT_DIRECTION_RTL;
+        return mLayoutManager.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
     }
 
     /**
@@ -1370,8 +1370,7 @@
         @Override
         public void onInitialize(@NonNull CompositeOnPageChangeCallback pageChangeEventDispatcher,
                 @NonNull RecyclerView recyclerView) {
-            ViewCompat.setImportantForAccessibility(recyclerView,
-                    ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO);
+            recyclerView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
 
             mAdapterDataObserver = new DataSetChangeObserver() {
                 @Override
@@ -1380,10 +1379,9 @@
                 }
             };
 
-            if (ViewCompat.getImportantForAccessibility(ViewPager2.this)
-                    == ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-                ViewCompat.setImportantForAccessibility(ViewPager2.this,
-                        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+            if (ViewPager2.this.getImportantForAccessibility()
+                    == View.IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+                ViewPager2.this.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
             }
         }
 
diff --git a/wear/compose/compose-foundation/benchmark/build.gradle b/wear/compose/compose-foundation/benchmark/build.gradle
index 516348d..4d5d0b7 100644
--- a/wear/compose/compose-foundation/benchmark/build.gradle
+++ b/wear/compose/compose-foundation/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-foundation/build.gradle b/wear/compose/compose-foundation/build.gradle
index 71f1302..9625da5 100644
--- a/wear/compose/compose-foundation/build.gradle
+++ b/wear/compose/compose-foundation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.AndroidXComposePlugin
 
@@ -33,6 +40,7 @@
     implementation(libs.kotlinStdlib)
     implementation(project(":compose:foundation:foundation-layout"))
     implementation(project(":compose:ui:ui-util"))
+    implementation(project(":lifecycle:lifecycle-runtime-compose"))
     implementation("androidx.core:core:1.11.0")
     implementation("androidx.profileinstaller:profileinstaller:1.3.0")
 
diff --git a/wear/compose/compose-foundation/samples/build.gradle b/wear/compose/compose-foundation/samples/build.gradle
index 624f945..ffe6c86 100644
--- a/wear/compose/compose-foundation/samples/build.gradle
+++ b/wear/compose/compose-foundation/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CompositionLocals.kt b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CompositionLocals.kt
index 03c26c6..6c6eb62 100644
--- a/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CompositionLocals.kt
+++ b/wear/compose/compose-foundation/src/main/java/androidx/wear/compose/foundation/CompositionLocals.kt
@@ -29,13 +29,13 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.platform.LocalContext
 import androidx.core.os.HandlerCompat
+import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import java.util.concurrent.atomic.AtomicReference
 import kotlinx.coroutines.MainScope
-import kotlinx.coroutines.channels.Channel
-import kotlinx.coroutines.channels.Channel.Factory.CONFLATED
+import kotlinx.coroutines.channels.awaitClose
 import kotlinx.coroutines.flow.SharingStarted
 import kotlinx.coroutines.flow.StateFlow
-import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.callbackFlow
 import kotlinx.coroutines.flow.stateIn
 
 /**
@@ -48,7 +48,8 @@
 val LocalReduceMotion: ProvidableCompositionLocal<ReduceMotion> = staticCompositionLocalOf {
     ReduceMotion {
         val context = LocalContext.current.applicationContext
-        getReduceMotionFlowFor(context).value
+        val flow = getReduceMotionFlowFor(context)
+        flow.collectAsStateWithLifecycle().value
     }
 }
 
@@ -85,27 +86,34 @@
 private fun getReduceMotionFlowFor(applicationContext: Context): StateFlow<Boolean> {
     val resolver = applicationContext.contentResolver
     val reduceMotionUri = Settings.Global.getUriFor(REDUCE_MOTION)
-    val channel = Channel<Unit>(CONFLATED)
-    val contentObserver =
-        object : ContentObserver(HandlerCompat.createAsync(Looper.getMainLooper())) {
-            override fun onChange(selfChange: Boolean, uri: Uri?) {
-                channel.trySend(Unit)
-            }
-        }
+
     return reduceMotionCache.updateAndGet {
-        it ?: flow {
-            resolver.registerContentObserver(reduceMotionUri, false, contentObserver)
-            try {
-                for (value in channel) {
-                    val newValue = getReducedMotionSettingValue(resolver)
-                    emit(newValue)
+        it ?: callbackFlow {
+            val contentObserver =
+                object : ContentObserver(HandlerCompat.createAsync(Looper.getMainLooper())) {
+                    override fun deliverSelfNotifications(): Boolean {
+                        // Returning true to receive change notification so that
+                        // the flow sends new value after it is initialized.
+                        return true
+                    }
+
+                    override fun onChange(selfChange: Boolean, uri: Uri?) {
+                        super.onChange(selfChange, uri)
+                        trySend(getReducedMotionSettingValue(resolver))
+                    }
                 }
-            } finally {
+
+            resolver.registerContentObserver(reduceMotionUri, false, contentObserver)
+
+            // Force send value when flow is initialized
+            resolver.notifyChange(reduceMotionUri, contentObserver)
+
+            awaitClose {
                 resolver.unregisterContentObserver(contentObserver)
             }
         }.stateIn(
             MainScope(),
-            SharingStarted.WhileSubscribed(),
+            SharingStarted.WhileSubscribed(5000),
             getReducedMotionSettingValue(resolver)
         )
     }
diff --git a/wear/compose/compose-material-core/build.gradle b/wear/compose/compose-material-core/build.gradle
index 2d3a058..d11b75d 100644
--- a/wear/compose/compose-material-core/build.gradle
+++ b/wear/compose/compose-material-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.AndroidXComposePlugin
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/wear/compose/compose-material/benchmark/build.gradle b/wear/compose/compose-material/benchmark/build.gradle
index 55879b0..e99d31e 100644
--- a/wear/compose/compose-material/benchmark/build.gradle
+++ b/wear/compose/compose-material/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-material/build.gradle b/wear/compose/compose-material/build.gradle
index 75f85b7..d5cc186 100644
--- a/wear/compose/compose-material/build.gradle
+++ b/wear/compose/compose-material/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-material/samples/build.gradle b/wear/compose/compose-material/samples/build.gradle
index bd81624..fb672d1 100644
--- a/wear/compose/compose-material/samples/build.gradle
+++ b/wear/compose/compose-material/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-material3/benchmark/build.gradle b/wear/compose/compose-material3/benchmark/build.gradle
index 1fcfc80..1d173cc 100644
--- a/wear/compose/compose-material3/benchmark/build.gradle
+++ b/wear/compose/compose-material3/benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-material3/build.gradle b/wear/compose/compose-material3/build.gradle
index 1d3888f..6114059 100644
--- a/wear/compose/compose-material3/build.gradle
+++ b/wear/compose/compose-material3/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/wear/compose/compose-material3/integration-tests/build.gradle b/wear/compose/compose-material3/integration-tests/build.gradle
index 93bbd98..3aa8b91 100644
--- a/wear/compose/compose-material3/integration-tests/build.gradle
+++ b/wear/compose/compose-material3/integration-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/RadioButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/RadioButtonDemo.kt
index b286854..545812f 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/RadioButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/RadioButtonDemo.kt
@@ -129,6 +129,7 @@
     content: (@Composable BoxScope.() -> Unit)? = null,
 ) {
     RadioButton(
+        modifier = Modifier.fillMaxWidth(),
         icon = content,
         label = {
             Text(
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SplitToggleButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SplitToggleButtonDemo.kt
index 1079368..62e3461 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SplitToggleButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/SplitToggleButtonDemo.kt
@@ -154,12 +154,13 @@
     var checked by remember { mutableStateOf(initiallyChecked) }
     val context = LocalContext.current
     SplitToggleButton(
+        modifier = Modifier.fillMaxWidth(),
         label = {
             Text(
                 "Primary label",
                 modifier = Modifier.fillMaxWidth(),
                 maxLines = 3,
-                textAlign = TextAlign.Center,
+                textAlign = TextAlign.Start,
                 overflow = TextOverflow.Ellipsis
             )
         },
diff --git a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ToggleButtonDemo.kt b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ToggleButtonDemo.kt
index e8c3371..fc3460f 100644
--- a/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ToggleButtonDemo.kt
+++ b/wear/compose/compose-material3/integration-tests/src/main/java/androidx/wear/compose/material3/demos/ToggleButtonDemo.kt
@@ -110,7 +110,7 @@
                 enabled = true,
                 initiallyChecked = true,
                 primary = "8:15AM",
-                secondary = "Mon, Tue, Wed"
+                secondary = "Monday"
             )
         }
         item {
@@ -141,6 +141,7 @@
 ) {
     var checked by remember { mutableStateOf(initiallyChecked) }
     ToggleButton(
+        modifier = Modifier.fillMaxWidth(),
         label = {
             Text(
                 primary,
@@ -173,6 +174,7 @@
 private fun DemoToggleSwitch(enabled: Boolean, initiallyChecked: Boolean) {
     var checked by remember { mutableStateOf(initiallyChecked) }
     ToggleButton(
+        modifier = Modifier.fillMaxWidth(),
         label = {
             Text(
                 "Primary label",
diff --git a/wear/compose/compose-material3/samples/build.gradle b/wear/compose/compose-material3/samples/build.gradle
index df3d49c..94ca565 100644
--- a/wear/compose/compose-material3/samples/build.gradle
+++ b/wear/compose/compose-material3/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-navigation/build.gradle b/wear/compose/compose-navigation/build.gradle
index 651ab99..653dcf4 100644
--- a/wear/compose/compose-navigation/build.gradle
+++ b/wear/compose/compose-navigation/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-navigation/samples/build.gradle b/wear/compose/compose-navigation/samples/build.gradle
index 1a69b7a..9ee6695 100644
--- a/wear/compose/compose-navigation/samples/build.gradle
+++ b/wear/compose/compose-navigation/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/compose-ui-tooling/build.gradle b/wear/compose/compose-ui-tooling/build.gradle
index 4d68f5b..799209c 100644
--- a/wear/compose/compose-ui-tooling/build.gradle
+++ b/wear/compose/compose-ui-tooling/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/compose/integration-tests/demos/build.gradle b/wear/compose/integration-tests/demos/build.gradle
index 64ad508..24f6946 100644
--- a/wear/compose/integration-tests/demos/build.gradle
+++ b/wear/compose/integration-tests/demos/build.gradle
@@ -69,6 +69,9 @@
     androidTestImplementation(project(":activity:activity-compose"))
     androidTestImplementation(project(":activity:activity-ktx"))
     androidTestImplementation(project(":compose:ui:ui-test-junit4"))
+    androidTestImplementation(project(":lifecycle:lifecycle-runtime"))
+    androidTestImplementation(project(":lifecycle:lifecycle-common"))
+    androidTestImplementation(project(":lifecycle:lifecycle-runtime-ktx"))
     androidTestImplementation(libs.testCore)
     androidTestImplementation(libs.testRules)
     androidTestImplementation(libs.testRunner)
diff --git a/wear/compose/integration-tests/navigation/build.gradle b/wear/compose/integration-tests/navigation/build.gradle
index 065c152..dc4e776 100644
--- a/wear/compose/integration-tests/navigation/build.gradle
+++ b/wear/compose/integration-tests/navigation/build.gradle
@@ -52,12 +52,8 @@
     implementation(project(":wear:compose:compose-foundation-samples"))
     implementation(project(":wear:compose:compose-material-samples"))
     implementation(project(':wear:compose:compose-navigation'))
-    // 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,
-    // but it doesn't work in androidx.
-    // See aosp/1804059
-    androidTestImplementation "androidx.lifecycle:lifecycle-common-java8:2.4.0"
+
+    androidTestImplementation(project(":lifecycle:lifecycle-common"))
     // Uses project dependency to match collections/compose-runtime
     androidTestImplementation api("androidx.annotation:annotation:1.7.0")
 }
\ No newline at end of file
diff --git a/wear/protolayout/protolayout-expression-pipeline/build.gradle b/wear/protolayout/protolayout-expression-pipeline/build.gradle
index b238c42..af85399 100644
--- a/wear/protolayout/protolayout-expression-pipeline/build.gradle
+++ b/wear/protolayout/protolayout-expression-pipeline/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/protolayout/protolayout-expression/build.gradle b/wear/protolayout/protolayout-expression/build.gradle
index 1c6549b..c7124fa 100644
--- a/wear/protolayout/protolayout-expression/build.gradle
+++ b/wear/protolayout/protolayout-expression/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/protolayout/protolayout-lint/build.gradle b/wear/protolayout/protolayout-lint/build.gradle
index dbe2777..dfb3ae5 100644
--- a/wear/protolayout/protolayout-lint/build.gradle
+++ b/wear/protolayout/protolayout-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/protolayout/protolayout-material-core/build.gradle b/wear/protolayout/protolayout-material-core/build.gradle
index e185149..dcf081a 100644
--- a/wear/protolayout/protolayout-material-core/build.gradle
+++ b/wear/protolayout/protolayout-material-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/protolayout/protolayout-material/build.gradle b/wear/protolayout/protolayout-material/build.gradle
index 5cebdff..a09bf05 100644
--- a/wear/protolayout/protolayout-material/build.gradle
+++ b/wear/protolayout/protolayout-material/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/protolayout/protolayout-renderer/build.gradle b/wear/protolayout/protolayout-renderer/build.gradle
index ab96dd5..5b4f8d4 100644
--- a/wear/protolayout/protolayout-renderer/build.gradle
+++ b/wear/protolayout/protolayout-renderer/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/protolayout/protolayout/build.gradle b/wear/protolayout/protolayout/build.gradle
index 808f6e3..d6a862c 100644
--- a/wear/protolayout/protolayout/build.gradle
+++ b/wear/protolayout/protolayout/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/tiles/tiles-material/build.gradle b/wear/tiles/tiles-material/build.gradle
index 8275b3e..e7b5bd2 100644
--- a/wear/tiles/tiles-material/build.gradle
+++ b/wear/tiles/tiles-material/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.LibraryType
 
diff --git a/wear/tiles/tiles-renderer/build.gradle b/wear/tiles/tiles-renderer/build.gradle
index 0181fdd..35f449f 100644
--- a/wear/tiles/tiles-renderer/build.gradle
+++ b/wear/tiles/tiles-renderer/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 import androidx.build.Publish
diff --git a/wear/tiles/tiles-testing/build.gradle b/wear/tiles/tiles-testing/build.gradle
index 0bc8344..a85c803f 100644
--- a/wear/tiles/tiles-testing/build.gradle
+++ b/wear/tiles/tiles-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.LibraryType
 
diff --git a/wear/tiles/tiles-tooling-preview/build.gradle b/wear/tiles/tiles-tooling-preview/build.gradle
index 8e93c514..463b22e 100644
--- a/wear/tiles/tiles-tooling-preview/build.gradle
+++ b/wear/tiles/tiles-tooling-preview/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/wear/tiles/tiles-tooling/build.gradle b/wear/tiles/tiles-tooling/build.gradle
index 668c069..3ad6fab 100644
--- a/wear/tiles/tiles-tooling/build.gradle
+++ b/wear/tiles/tiles-tooling/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/wear/tiles/tiles/build.gradle b/wear/tiles/tiles/build.gradle
index 732f7b2..4afba58 100644
--- a/wear/tiles/tiles/build.gradle
+++ b/wear/tiles/tiles/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.LibraryType
 
diff --git a/wear/watchface/watchface-client-guava/build.gradle b/wear/watchface/watchface-client-guava/build.gradle
index e3e6940..6b66845 100644
--- a/wear/watchface/watchface-client-guava/build.gradle
+++ b/wear/watchface/watchface-client-guava/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/wear/watchface/watchface-client/build.gradle b/wear/watchface/watchface-client/build.gradle
index a268b00..ad5d312 100644
--- a/wear/watchface/watchface-client/build.gradle
+++ b/wear/watchface/watchface-client/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/wear/watchface/watchface-complications-data-source/build.gradle b/wear/watchface/watchface-complications-data-source/build.gradle
index c4c006f..848bad5 100644
--- a/wear/watchface/watchface-complications-data-source/build.gradle
+++ b/wear/watchface/watchface-complications-data-source/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/watchface/watchface-complications-data/build.gradle b/wear/watchface/watchface-complications-data/build.gradle
index 4e7408d..3e8e7bd 100644
--- a/wear/watchface/watchface-complications-data/build.gradle
+++ b/wear/watchface/watchface-complications-data/build.gradle
@@ -14,6 +14,13 @@
  * 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.RunApiTasks
 
 import androidx.build.Publish
diff --git a/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle b/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle
index 2cad372..1ef5703 100644
--- a/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle
+++ b/wear/watchface/watchface-complications-permission-dialogs-sample/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/watchface/watchface-complications-rendering/build.gradle b/wear/watchface/watchface-complications-rendering/build.gradle
index 05fc82f..21d92cf 100644
--- a/wear/watchface/watchface-complications-rendering/build.gradle
+++ b/wear/watchface/watchface-complications-rendering/build.gradle
@@ -14,7 +14,13 @@
  * 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.RunApiTasks
 import androidx.build.Publish
 
diff --git a/wear/watchface/watchface-complications/build.gradle b/wear/watchface/watchface-complications/build.gradle
index 65afe42..1ee658c 100644
--- a/wear/watchface/watchface-complications/build.gradle
+++ b/wear/watchface/watchface-complications/build.gradle
@@ -14,6 +14,13 @@
  * 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.RunApiTasks
 
 import androidx.build.Publish
diff --git a/wear/watchface/watchface-data/build.gradle b/wear/watchface/watchface-data/build.gradle
index cc33a28..b8e6667 100644
--- a/wear/watchface/watchface-data/build.gradle
+++ b/wear/watchface/watchface-data/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/watchface/watchface-editor-guava/build.gradle b/wear/watchface/watchface-editor-guava/build.gradle
index e8f298d..3234cf6 100644
--- a/wear/watchface/watchface-editor-guava/build.gradle
+++ b/wear/watchface/watchface-editor-guava/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/wear/watchface/watchface-editor/build.gradle b/wear/watchface/watchface-editor/build.gradle
index 6b71dbd..8b69535 100644
--- a/wear/watchface/watchface-editor/build.gradle
+++ b/wear/watchface/watchface-editor/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/wear/watchface/watchface-editor/samples/build.gradle b/wear/watchface/watchface-editor/samples/build.gradle
index 03b1185..9cd724a 100644
--- a/wear/watchface/watchface-editor/samples/build.gradle
+++ b/wear/watchface/watchface-editor/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/wear/watchface/watchface-guava/build.gradle b/wear/watchface/watchface-guava/build.gradle
index b309a46..f15c90c 100644
--- a/wear/watchface/watchface-guava/build.gradle
+++ b/wear/watchface/watchface-guava/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 
diff --git a/wear/watchface/watchface-style/build.gradle b/wear/watchface/watchface-style/build.gradle
index 7ab745c..23d2b84 100644
--- a/wear/watchface/watchface-style/build.gradle
+++ b/wear/watchface/watchface-style/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/wear/watchface/watchface-style/old-api-test-service/build.gradle b/wear/watchface/watchface-style/old-api-test-service/build.gradle
index 905cc31..441f679 100644
--- a/wear/watchface/watchface-style/old-api-test-service/build.gradle
+++ b/wear/watchface/watchface-style/old-api-test-service/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import com.android.build.api.artifact.SingleArtifact
 
diff --git a/wear/watchface/watchface-style/old-api-test-stub/build.gradle b/wear/watchface/watchface-style/old-api-test-stub/build.gradle
index aa784be..0d17e5a 100644
--- a/wear/watchface/watchface-style/old-api-test-stub/build.gradle
+++ b/wear/watchface/watchface-style/old-api-test-stub/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/wear/watchface/watchface/build.gradle b/wear/watchface/watchface/build.gradle
index afaabe8..218c5a5 100644
--- a/wear/watchface/watchface/build.gradle
+++ b/wear/watchface/watchface/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/wear/watchface/watchface/samples/build.gradle b/wear/watchface/watchface/samples/build.gradle
index f7b78e9..ee1d2ce 100644
--- a/wear/watchface/watchface/samples/build.gradle
+++ b/wear/watchface/watchface/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/wear/watchface/watchface/samples/minimal/build.gradle b/wear/watchface/watchface/samples/minimal/build.gradle
index c8e5139..1c78a40 100644
--- a/wear/watchface/watchface/samples/minimal/build.gradle
+++ b/wear/watchface/watchface/samples/minimal/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
index 9381afd..2952487 100644
--- a/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
+++ b/wear/watchface/watchface/src/main/java/androidx/wear/watchface/control/InteractiveInstanceManager.kt
@@ -16,6 +16,7 @@
 
 package androidx.wear.watchface.control
 
+import android.os.Build
 import android.util.Log
 import androidx.annotation.UiThread
 import androidx.annotation.VisibleForTesting
@@ -198,7 +199,10 @@
             val engine = impl.engine!!
             engine.setUserStyle(value.params.userStyle)
 
-            if (engine.resourceOnlyWatchFacePackageName !=
+            // Note prior to android U, auxiliaryComponentPackageName may be non null for regular
+            // watch faces.
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE &&
+                engine.resourceOnlyWatchFacePackageName !=
                     value.params.auxiliaryComponentPackageName
             ) {
                 val message =
diff --git a/wear/wear-input-testing/build.gradle b/wear/wear-input-testing/build.gradle
index 4e30e44..0db4514 100644
--- a/wear/wear-input-testing/build.gradle
+++ b/wear/wear-input-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/wear-input/build.gradle b/wear/wear-input/build.gradle
index da42d97..29b0e3c 100644
--- a/wear/wear-input/build.gradle
+++ b/wear/wear-input/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/wear-input/samples/build.gradle b/wear/wear-input/samples/build.gradle
index 01f8339..6fcf666 100644
--- a/wear/wear-input/samples/build.gradle
+++ b/wear/wear-input/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/wear-ongoing/build.gradle b/wear/wear-ongoing/build.gradle
index b9f9d8d..325ab9a 100644
--- a/wear/wear-ongoing/build.gradle
+++ b/wear/wear-ongoing/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/wear/wear-phone-interactions/build.gradle b/wear/wear-phone-interactions/build.gradle
index 0403497..d6cccbc 100644
--- a/wear/wear-phone-interactions/build.gradle
+++ b/wear/wear-phone-interactions/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/wear-phone-interactions/samples/build.gradle b/wear/wear-phone-interactions/samples/build.gradle
index 3d3f23f..0bc144d 100644
--- a/wear/wear-phone-interactions/samples/build.gradle
+++ b/wear/wear-phone-interactions/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/wear-remote-interactions/build.gradle b/wear/wear-remote-interactions/build.gradle
index 06ac5a4..0c21be6 100644
--- a/wear/wear-remote-interactions/build.gradle
+++ b/wear/wear-remote-interactions/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/wear-remote-interactions/samples/build.gradle b/wear/wear-remote-interactions/samples/build.gradle
index 27b52fe..0baf948 100644
--- a/wear/wear-remote-interactions/samples/build.gradle
+++ b/wear/wear-remote-interactions/samples/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/wear-samples-ambient/build.gradle b/wear/wear-samples-ambient/build.gradle
index 29d1b8f..f731c07 100644
--- a/wear/wear-samples-ambient/build.gradle
+++ b/wear/wear-samples-ambient/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/wear/wear-tooling-preview/build.gradle b/wear/wear-tooling-preview/build.gradle
index f90f251..43715bf 100644
--- a/wear/wear-tooling-preview/build.gradle
+++ b/wear/wear-tooling-preview/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/wear/wear/build.gradle b/wear/wear/build.gradle
index 4db7c84..daa8ec8 100644
--- a/wear/wear/build.gradle
+++ b/wear/wear/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 
 plugins {
diff --git a/wear/wear/src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java b/wear/wear/src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java
index dd5e729..0c9b641 100644
--- a/wear/wear/src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java
+++ b/wear/wear/src/main/java/androidx/wear/widget/drawer/WearableDrawerLayout.java
@@ -40,7 +40,6 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.core.view.NestedScrollingParent;
 import androidx.core.view.NestedScrollingParentHelper;
-import androidx.core.view.ViewCompat;
 import androidx.customview.widget.ViewDragHelper;
 import androidx.wear.widget.drawer.FlingWatcherFactory.FlingListener;
 import androidx.wear.widget.drawer.FlingWatcherFactory.FlingWatcher;
@@ -532,7 +531,7 @@
         final boolean bottomSettling = mBottomDrawerDragger.continueSettling(true /*
         deferCallbacks */);
         if (topSettling || bottomSettling) {
-            ViewCompat.postInvalidateOnAnimation(this);
+            postInvalidateOnAnimation();
         }
     }
 
diff --git a/webkit/integration-tests/instrumentation/build.gradle b/webkit/integration-tests/instrumentation/build.gradle
index 3c0f930..683d7ee 100644
--- a/webkit/integration-tests/instrumentation/build.gradle
+++ b/webkit/integration-tests/instrumentation/build.gradle
@@ -1,3 +1,10 @@
+/**
+ * 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.Publish
 import androidx.build.LibraryType
 
diff --git a/webkit/integration-tests/testapp/build.gradle b/webkit/integration-tests/testapp/build.gradle
index 9eb4b5d..97efa1c 100644
--- a/webkit/integration-tests/testapp/build.gradle
+++ b/webkit/integration-tests/testapp/build.gradle
@@ -14,7 +14,13 @@
  * 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.ApkCopyHelperKt
 import androidx.build.Publish
 
diff --git a/webkit/webkit/build.gradle b/webkit/webkit/build.gradle
index ad9dfa7..eae85db 100644
--- a/webkit/webkit/build.gradle
+++ b/webkit/webkit/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.AndroidXConfig
 
diff --git a/window/extensions/core/core/build.gradle b/window/extensions/core/core/build.gradle
index b842a7c..70152c7 100644
--- a/window/extensions/core/core/build.gradle
+++ b/window/extensions/core/core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/window/extensions/extensions/build.gradle b/window/extensions/extensions/build.gradle
index bc989df..991473b 100644
--- a/window/extensions/extensions/build.gradle
+++ b/window/extensions/extensions/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/window/integration-tests/configuration-change-tests/build.gradle b/window/integration-tests/configuration-change-tests/build.gradle
index 3165fac..d376316 100644
--- a/window/integration-tests/configuration-change-tests/build.gradle
+++ b/window/integration-tests/configuration-change-tests/build.gradle
@@ -14,6 +14,13 @@
  * 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
diff --git a/window/sidecar/sidecar/build.gradle b/window/sidecar/sidecar/build.gradle
index 4e5dbea..6fcdb47 100644
--- a/window/sidecar/sidecar/build.gradle
+++ b/window/sidecar/sidecar/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import androidx.build.RunApiTasks
 
diff --git a/window/window-core/build.gradle b/window/window-core/build.gradle
index 8e33dbf..703cd61 100644
--- a/window/window-core/build.gradle
+++ b/window/window-core/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.PlatformIdentifier
 
diff --git a/window/window-demos/demo/build.gradle b/window/window-demos/demo/build.gradle
index abbe7d0..cb2221e 100644
--- a/window/window-demos/demo/build.gradle
+++ b/window/window-demos/demo/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/window/window-java/build.gradle b/window/window-java/build.gradle
index 9c00e25..9a4a33c 100644
--- a/window/window-java/build.gradle
+++ b/window/window-java/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/window/window-rxjava2/build.gradle b/window/window-rxjava2/build.gradle
index 32360e3..062f54c 100644
--- a/window/window-rxjava2/build.gradle
+++ b/window/window-rxjava2/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import androidx.build.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
diff --git a/window/window-rxjava3/build.gradle b/window/window-rxjava3/build.gradle
index 6f676d6..96fd6a3 100644
--- a/window/window-rxjava3/build.gradle
+++ b/window/window-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/window/window-testing/build.gradle b/window/window-testing/build.gradle
index 3f3a7a6..b491afc 100644
--- a/window/window-testing/build.gradle
+++ b/window/window-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/window/window/build.gradle b/window/window/build.gradle
index 099eb15..4df8a41 100644
--- a/window/window/build.gradle
+++ b/window/window/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
diff --git a/window/window/samples/build.gradle b/window/window/samples/build.gradle
index 7db715c..eb2557c 100644
--- a/window/window/samples/build.gradle
+++ b/window/window/samples/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/work/work-benchmark/build.gradle b/work/work-benchmark/build.gradle
index cd0c8a6..4e4f926 100644
--- a/work/work-benchmark/build.gradle
+++ b/work/work-benchmark/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/work/work-datatransfer/build.gradle b/work/work-datatransfer/build.gradle
index 076684d..b90d5b32 100644
--- a/work/work-datatransfer/build.gradle
+++ b/work/work-datatransfer/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/work/work-gcm/build.gradle b/work/work-gcm/build.gradle
index f9dd750b..d3b314a 100644
--- a/work/work-gcm/build.gradle
+++ b/work/work-gcm/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/work/work-inspection/build.gradle b/work/work-inspection/build.gradle
index 99506bf..43af2b0 100644
--- a/work/work-inspection/build.gradle
+++ b/work/work-inspection/build.gradle
@@ -14,7 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/work/work-lint/build.gradle b/work/work-lint/build.gradle
index fb59083..0e7fe99 100644
--- a/work/work-lint/build.gradle
+++ b/work/work-lint/build.gradle
@@ -14,6 +14,13 @@
  * 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.LibraryType
 
 plugins {
diff --git a/work/work-multiprocess/build.gradle b/work/work-multiprocess/build.gradle
index da06b4d..021178b 100644
--- a/work/work-multiprocess/build.gradle
+++ b/work/work-multiprocess/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/work/work-runtime-ktx/build.gradle b/work/work-runtime-ktx/build.gradle
index 77beaf2..ffc1117 100644
--- a/work/work-runtime-ktx/build.gradle
+++ b/work/work-runtime-ktx/build.gradle
@@ -14,7 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/work/work-runtime/build.gradle b/work/work-runtime/build.gradle
index 1686b65..6f9cc9e 100644
--- a/work/work-runtime/build.gradle
+++ b/work/work-runtime/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 import static androidx.inspection.gradle.InspectionPluginKt.packageInspector
diff --git a/work/work-runtime/src/main/java/androidx/work/Data_.kt b/work/work-runtime/src/main/java/androidx/work/Data_.kt
index 4487d0d..b698bbc 100644
--- a/work/work-runtime/src/main/java/androidx/work/Data_.kt
+++ b/work/work-runtime/src/main/java/androidx/work/Data_.kt
@@ -21,9 +21,12 @@
 import androidx.room.TypeConverter
 import java.io.ByteArrayInputStream
 import java.io.ByteArrayOutputStream
+import java.io.DataInputStream
+import java.io.DataOutputStream
 import java.io.IOException
 import java.io.ObjectInputStream
 import java.io.ObjectOutputStream
+import java.io.ObjectStreamConstants
 import java.util.Collections
 import java.util.Objects
 
@@ -202,7 +205,7 @@
      * @throws IllegalStateException if the serialized payload is bigger than
      * [.MAX_DATA_BYTES]
      */
-    fun toByteArray(): ByteArray = toByteArrayInternal(this)
+    fun toByteArray(): ByteArray = toByteArrayInternalV1(this)
 
     /**
      * Returns `true` if the instance of [Data] has a non-null value corresponding to
@@ -512,7 +515,7 @@
             val data = Data(values)
             // Make sure we catch Data objects that are too large at build() instead of later.  This
             // method will throw an exception if data is too big.
-            toByteArrayInternal(data)
+            toByteArrayInternalV1(data)
             return data
         }
     }
@@ -532,6 +535,40 @@
         const val MAX_DATA_BYTES = 10 * 1024 // 10KB
 
         /**
+         * The list of supported types.
+         */
+        private const val TYPE_NULL: Byte = 0
+        private const val TYPE_BOOLEAN: Byte = 1
+        private const val TYPE_BYTE: Byte = 2
+        private const val TYPE_INTEGER: Byte = 3
+        private const val TYPE_LONG: Byte = 4
+        private const val TYPE_FLOAT: Byte = 5
+        private const val TYPE_DOUBLE: Byte = 6
+        private const val TYPE_STRING: Byte = 7
+        private const val TYPE_BOOLEAN_ARRAY: Byte = 8
+        private const val TYPE_BYTE_ARRAY: Byte = 9
+        private const val TYPE_INTEGER_ARRAY: Byte = 10
+        private const val TYPE_LONG_ARRAY: Byte = 11
+        private const val TYPE_FLOAT_ARRAY: Byte = 12
+        private const val TYPE_DOUBLE_ARRAY: Byte = 13
+        private const val TYPE_STRING_ARRAY: Byte = 14
+
+        /**
+         * Denotes `null` in a String array.
+         */
+        private const val NULL_STRING_V1 = "androidx.work.Data-95ed6082-b8e9-46e8-a73f-ff56f00f5d9d"
+
+        /**
+         * Magic number used in stream header.
+         */
+        private const val STREAM_MAGIC: Short = 0xabef.toShort()
+
+        /**
+         * Version number used in stream header.
+         */
+        private const val STREAM_VERSION: Short = 1
+
+        /**
          * Converts [Data] to a byte array for persistent storage.
          *
          * @param data The [Data] object to convert
@@ -541,8 +578,11 @@
          */
         @JvmStatic
         @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-        @TypeConverter
-        fun toByteArrayInternal(data: Data): ByteArray {
+        @Deprecated(
+            message = "This is kept for testing migration",
+            replaceWith = ReplaceWith("toByteArrayInternalV1")
+        )
+        fun toByteArrayInternalV0(data: Data): ByteArray {
             return try {
                 val stream = ByteArrayOutputStream().use { outputStream ->
                     ObjectOutputStream(outputStream).use { objectOutputStream ->
@@ -566,6 +606,115 @@
             }
         }
 
+        @JvmStatic
+        @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+        @TypeConverter
+        fun toByteArrayInternalV1(data: Data): ByteArray {
+            fun DataOutputStream.writeHeader() {
+                // We use our own magic and it's different from the
+                // `ObjectStreamConstants.STREAM_MAGIC` used in V0.
+                writeShort(STREAM_MAGIC.toInt())
+                writeShort(STREAM_VERSION.toInt())
+            }
+
+            fun DataOutputStream.writeArray(array: Array<*>) {
+                val type = when (array::class) {
+                    Array<Boolean>::class -> TYPE_BOOLEAN_ARRAY
+                    Array<Byte>::class -> TYPE_BYTE_ARRAY
+                    Array<Int>::class -> TYPE_INTEGER_ARRAY
+                    Array<Long>::class -> TYPE_LONG_ARRAY
+                    Array<Float>::class -> TYPE_FLOAT_ARRAY
+                    Array<Double>::class -> TYPE_DOUBLE_ARRAY
+                    Array<String>::class -> TYPE_STRING_ARRAY
+                    else -> {
+                        throw IllegalArgumentException(
+                            "Unsupported value type ${array::class.qualifiedName}")
+                    }
+                }
+                writeByte(type.toInt())
+                writeInt(array.size)
+                for (element in array) {
+                    when (type) {
+                        TYPE_BOOLEAN_ARRAY -> writeBoolean(element as? Boolean ?: false)
+                        TYPE_BYTE_ARRAY -> writeByte((element as? Byte)?.toInt() ?: 0)
+                        TYPE_INTEGER_ARRAY -> writeInt(element as? Int ?: 0)
+                        TYPE_LONG_ARRAY -> writeLong(element as? Long ?: 0L)
+                        TYPE_FLOAT_ARRAY -> writeFloat(element as? Float ?: 0f)
+                        TYPE_DOUBLE_ARRAY -> writeDouble(element as? Double ?: 0.0)
+                        TYPE_STRING_ARRAY -> writeUTF(element as? String ?: NULL_STRING_V1)
+                    }
+                }
+            }
+
+            fun DataOutputStream.writeEntry(key: String, value: Any?) {
+                // type + value
+                when (value) {
+                    null ->
+                        writeByte(TYPE_NULL.toInt())
+                    is Boolean -> {
+                        writeByte(TYPE_BOOLEAN.toInt())
+                        writeBoolean(value)
+                    }
+                    is Byte -> {
+                        writeByte(TYPE_BYTE.toInt())
+                        writeByte(value.toInt())
+                    }
+                    is Int -> {
+                        writeByte(TYPE_INTEGER.toInt())
+                        writeInt(value)
+                    }
+                    is Long -> {
+                        writeByte(TYPE_LONG.toInt())
+                        writeLong(value)
+                    }
+                    is Float -> {
+                        writeByte(TYPE_FLOAT.toInt())
+                        writeFloat(value)
+                    }
+                    is Double -> {
+                        writeByte(TYPE_DOUBLE.toInt())
+                        writeDouble(value)
+                    }
+                    is String -> {
+                        writeByte(TYPE_STRING.toInt())
+                        writeUTF(value)
+                    }
+                    is Array<*> -> {
+                        writeArray(value)
+                    }
+                    else -> {
+                        // Exhaustive check
+                        throw IllegalArgumentException(
+                            "Unsupported value type ${value::class.simpleName}")
+                    }
+                }
+                // key
+                writeUTF(key)
+            }
+
+            return try {
+                ByteArrayOutputStream().let { outputStream ->
+                    DataOutputStream(outputStream).use {
+                        it.apply {
+                            writeHeader()
+                            writeInt(data.size())
+                            for ((key, value) in data.values) {
+                                writeEntry(key, value)
+                            }
+                            flush()
+                        }
+                        check(it.size() <= MAX_DATA_BYTES) {
+                            "Data cannot occupy more than $MAX_DATA_BYTES bytes when serialized"
+                        }
+                        outputStream.toByteArray()
+                    }
+                }
+            } catch (e: IOException) {
+                loge(TAG, e) { "Error in Data#toByteArray: " }
+                ByteArray(0)
+            }
+        }
+
         /**
          * Converts a byte array to [Data].
          *
@@ -576,6 +725,84 @@
         @JvmStatic
         @TypeConverter
         fun fromByteArray(bytes: ByteArray): Data {
+            fun ByteArrayInputStream.isObjectStream(): Boolean {
+                val header = ByteArray(2)
+                read(header)
+                val magic = ObjectStreamConstants.STREAM_MAGIC.toInt()
+                val magicLow = magic.toByte()
+                val magicHigh = (magic ushr 8).toByte()
+                val result = (header[0] == magicHigh) && (header[1] == magicLow)
+                reset()
+                return result
+            }
+            fun DataInputStream.readHeader() {
+                readShort().let { magic ->
+                    check(magic == STREAM_MAGIC) {
+                        "Magic number doesn't match: $magic"
+                    }
+                }
+                readShort().let { version ->
+                    check(version == STREAM_VERSION) {
+                        "Unsupported version number: $version"
+                    }
+                }
+            }
+            fun DataInputStream.readValue(type: Byte): Any? {
+                return when (type) {
+                    TYPE_NULL -> null
+                    TYPE_BOOLEAN -> readBoolean()
+                    TYPE_BYTE -> readByte()
+                    TYPE_INTEGER -> readInt()
+                    TYPE_LONG -> readLong()
+                    TYPE_FLOAT -> readFloat()
+                    TYPE_DOUBLE -> readDouble()
+                    TYPE_STRING -> readUTF()
+                    TYPE_BOOLEAN_ARRAY -> {
+                        Array(readInt()) {
+                            readBoolean()
+                        }
+                    }
+                    TYPE_BYTE_ARRAY -> {
+                        Array(readInt()) {
+                            readByte()
+                        }
+                    }
+                    TYPE_INTEGER_ARRAY -> {
+                        Array(readInt()) {
+                            readInt()
+                        }
+                    }
+                    TYPE_LONG_ARRAY -> {
+                        Array(readInt()) {
+                            readLong()
+                        }
+                    }
+                    TYPE_FLOAT_ARRAY -> {
+                        Array(readInt()) {
+                            readFloat()
+                        }
+                    }
+                    TYPE_DOUBLE_ARRAY -> {
+                        Array(readInt()) {
+                            readDouble()
+                        }
+                    }
+                    TYPE_STRING_ARRAY -> {
+                        Array(readInt()) {
+                            readUTF().let {
+                                if (it == NULL_STRING_V1) {
+                                    null
+                                } else {
+                                    it
+                                }
+                            }
+                        }
+                    }
+                    else -> {
+                        throw IllegalStateException("Unsupported type $type");
+                    }
+                }
+            }
             check(bytes.size <= MAX_DATA_BYTES) {
                 "Data cannot occupy more than $MAX_DATA_BYTES bytes when serialized"
             }
@@ -583,10 +810,26 @@
 
             val map = mutableMapOf<String, Any?>()
             try {
-                ByteArrayInputStream(bytes).use { inputStream ->
-                    ObjectInputStream(inputStream).use { objectInputStream ->
-                        repeat(objectInputStream.readInt()) {
-                            map[objectInputStream.readUTF()] = objectInputStream.readObject()
+                ByteArrayInputStream(bytes).let { inputStream ->
+                    if (inputStream.isObjectStream()) { // V0
+                        ObjectInputStream(inputStream).use {
+                            it.apply {
+                                repeat(readInt()) {
+                                    map[readUTF()] = readObject()
+                                }
+                            }
+                        }
+                    } else { // V1
+                        DataInputStream(inputStream).use {
+                            it.apply {
+                                readHeader()
+                                repeat(readInt()) {
+                                    val type = readByte()
+                                    val value = readValue(type)
+                                    val key = readUTF()
+                                    map[key] = value
+                                }
+                            }
                         }
                     }
                 }
diff --git a/work/work-runtime/src/test/java/androidx/work/DataTest.java b/work/work-runtime/src/test/java/androidx/work/DataTest.java
index e6d117a..ff8736d 100644
--- a/work/work-runtime/src/test/java/androidx/work/DataTest.java
+++ b/work/work-runtime/src/test/java/androidx/work/DataTest.java
@@ -80,7 +80,7 @@
                 .putIntArray(KEY2, expectedValue2)
                 .build();
 
-        byte[] byteArray = Data.toByteArrayInternal(data);
+        byte[] byteArray = Data.toByteArrayInternalV1(data);
         Data restoredData = Data.fromByteArray(byteArray);
 
         assertThat(restoredData, is(notNullValue()));
@@ -90,6 +90,14 @@
     }
 
     @Test
+    @SuppressWarnings("deprecation")
+    public void testSerializeMigration() {
+        Data data = createData();
+        Data restored = Data.fromByteArray(Data.toByteArrayInternalV0(data));
+        assertThat(restored, is(data));
+    }
+
+    @Test
     public void testSerializePastMaxSize() {
         int[] payload = new int[Data.MAX_DATA_BYTES + 1];
         boolean caughtIllegalStateException = false;
@@ -234,12 +242,20 @@
     @NonNull
     private Data createData() {
         Map<String, Object> map = new HashMap<>();
+        map.put("boolean", true);
         map.put("byte", (byte) 1);
         map.put("int", 1);
+        map.put("long", 99L);
         map.put("float", 99f);
+        map.put("double", 99d);
         map.put("String", "two");
+        map.put("boolean array", new boolean[] { false, true, false });
         map.put("byte array", new byte[] { 1, 2, 3 });
+        map.put("int array", new long[] { 1, 2, 3 });
         map.put("long array", new long[] { 1L, 2L, 3L });
+        map.put("float array", new float[] { 1f, 2f, 3f });
+        map.put("double array", new double[] { 1d, 2d, 3d });
+        map.put("string array", new String[] { "one", "two", "three", null, "" });
         map.put("null", null);
         Data.Builder dataBuilder = new Data.Builder();
         dataBuilder.putAll(map);
diff --git a/work/work-rxjava2/build.gradle b/work/work-rxjava2/build.gradle
index a6e54d4..5e33680 100644
--- a/work/work-rxjava2/build.gradle
+++ b/work/work-rxjava2/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/work/work-rxjava3/build.gradle b/work/work-rxjava3/build.gradle
index 580b450..4a2b68d 100644
--- a/work/work-rxjava3/build.gradle
+++ b/work/work-rxjava3/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {
diff --git a/work/work-testing/build.gradle b/work/work-testing/build.gradle
index 8b41dc6..cb67331 100644
--- a/work/work-testing/build.gradle
+++ b/work/work-testing/build.gradle
@@ -14,6 +14,13 @@
  * 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.Publish
 
 plugins {