[go: nahoru, domu]

Merge "Initial modules for macrobenchmark of Wear Compose components. Test: androidx.wear.compose.integration.macrobenchmark.test Bug: 187407581" into androidx-main
diff --git a/activity/activity-compose/build.gradle b/activity/activity-compose/build.gradle
index 5fb1360..f763d59 100644
--- a/activity/activity-compose/build.gradle
+++ b/activity/activity-compose/build.gradle
@@ -26,13 +26,13 @@
 }
 
 dependencies {
-    kotlinPlugin projectOrArtifact(":compose:compiler:compiler")
+    kotlinPlugin "androidx.compose.compiler:compiler:1.0.0-rc01"
 
     implementation(libs.kotlinStdlib)
-    api projectOrArtifact(":compose:runtime:runtime")
-    api projectOrArtifact(":compose:runtime:runtime-saveable")
+    api "androidx.compose.runtime:runtime:1.0.0-rc01"
+    api "androidx.compose.runtime:runtime-saveable:1.0.0-rc01"
     api(projectOrArtifact(":activity:activity-ktx"))
-    api(projectOrArtifact(":compose:ui:ui"))
+    api("androidx.compose.ui:ui:1.0.0-rc01")
 
     androidTestImplementation projectOrArtifact(":compose:ui:ui-test-junit4")
     androidTestImplementation projectOrArtifact(":compose:material:material")
diff --git a/activity/activity-compose/samples/build.gradle b/activity/activity-compose/samples/build.gradle
index 787fdc3..7848084 100644
--- a/activity/activity-compose/samples/build.gradle
+++ b/activity/activity-compose/samples/build.gradle
@@ -25,14 +25,14 @@
 }
 
 dependencies {
-    kotlinPlugin projectOrArtifact(":compose:compiler:compiler")
+    kotlinPlugin "androidx.compose.compiler:compiler:1.0.0-rc01"
     implementation(libs.kotlinStdlib)
 
     compileOnly projectOrArtifact(":annotation:annotation-sampled")
-    implementation projectOrArtifact(":compose:foundation:foundation")
+    implementation "androidx.compose.foundation:foundation:1.0.0-rc01"
     implementation projectOrArtifact(":activity:activity-compose")
     implementation projectOrArtifact(":activity:activity-ktx")
-    implementation projectOrArtifact(":compose:material:material")
+    implementation "androidx.compose.material:material:1.0.0-rc01"
 }
 
 androidx {
diff --git a/activity/integration-tests/testapp/lint-baseline.xml b/activity/integration-tests/testapp/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/activity/integration-tests/testapp/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/ads/ads-identifier-common/lint-baseline.xml b/ads/ads-identifier-common/lint-baseline.xml
index fde8d29..3c648dc 100644
--- a/ads/ads-identifier-common/lint-baseline.xml
+++ b/ads/ads-identifier-common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="PrivateConstructorForUtilityClass"
diff --git a/ads/ads-identifier-provider/integration-tests/testapp/lint-baseline.xml b/ads/ads-identifier-provider/integration-tests/testapp/lint-baseline.xml
index 6afbeb5..a417427 100644
--- a/ads/ads-identifier-provider/integration-tests/testapp/lint-baseline.xml
+++ b/ads/ads-identifier-provider/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml b/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
index c90d548..45809b6 100644
--- a/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
+++ b/ads/ads-identifier/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml b/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
index d8f1c56..bd764f2 100644
--- a/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
+++ b/annotation/annotation-experimental-lint/integration-tests/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ExperimentalAnnotationRetention"
@@ -25,138 +25,6 @@
 
     <issue
         id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@Experimental"
-        errorLine2="~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/experimental/ExperimentalDateTimeKt.kt"
-            line="20"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@Experimental"
-        errorLine2="~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/experimental/ExperimentalDateTimeKt.kt"
-            line="20"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@Experimental"
-        errorLine2="~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/experimental/ExperimentalDateTimeKt.kt"
-            line="20"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@Experimental"
-        errorLine2="~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/experimental/ExperimentalDateTimeKt.kt"
-            line="20"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@Experimental"
-        errorLine2="~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/experimental/ExperimentalDateTimeKt.kt"
-            line="20"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@RequiresOptIn(level = RequiresOptIn.Level.ERROR)"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/optin/ExperimentalKotlinAnnotation.kt"
-            line="19"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@RequiresOptIn(level = RequiresOptIn.Level.ERROR)"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/optin/ExperimentalKotlinAnnotation.kt"
-            line="19"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@RequiresOptIn(level = RequiresOptIn.Level.ERROR)"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/optin/ExperimentalKotlinAnnotation.kt"
-            line="19"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@RequiresOptIn(level = RequiresOptIn.Level.ERROR)"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/optin/ExperimentalKotlinAnnotation.kt"
-            line="19"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@RequiresOptIn(level = RequiresOptIn.Level.ERROR)"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/optin/ExperimentalKotlinAnnotation.kt"
-            line="19"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@Experimental"
-        errorLine2="~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/experimental/ExperimentalLocationKt.kt"
-            line="20"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
-        message="Failed to extract attribute &quot;level&quot; from annotation"
-        errorLine1="@Experimental"
-        errorLine2="~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/sample/experimental/ExperimentalLocationKt.kt"
-            line="20"
-            column="1"/>
-    </issue>
-
-    <issue
-        id="UnsafeOptInUsageError"
         message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.optin.ExperimentalJavaAnnotation&apos; or &apos;@OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class)&apos;"
         errorLine1="        AnnotatedJavaClass experimentalObject = new AnnotatedJavaClass();"
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -476,6 +344,105 @@
 
     <issue
         id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalDateTimeKt&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalDateTimeKt.class)&apos;"
+        errorLine1="        sample.experimental.DateProviderKt dateProvider = new sample.experimental.DateProviderKt();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="25"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalDateTimeKt&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalDateTimeKt.class)&apos;"
+        errorLine1="        return dateProvider.getDate();"
+        errorLine2="                            ~~~~~~~">
+        <location
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="26"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.optin.ExperimentalKotlinAnnotation&apos; or &apos;@OptIn(markerClass = sample.optin.ExperimentalKotlinAnnotation.class)&apos;"
+        errorLine1="        AnnotatedKotlinClass experimentalObject = new AnnotatedKotlinClass();"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="28"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.optin.ExperimentalKotlinAnnotation&apos; or &apos;@OptIn(markerClass = sample.optin.ExperimentalKotlinAnnotation.class)&apos;"
+        errorLine1="        return experimentalObject.method();"
+        errorLine2="                                  ~~~~~~">
+        <location
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="29"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalLocationKt&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalLocationKt.class)&apos;"
+        errorLine1="        LocationProviderKt locationProvider = new LocationProviderKt();"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="54"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalLocationKt&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalLocationKt.class)&apos;"
+        errorLine1="        return dateProvider.getDate() + locationProvider.getLocation();"
+        errorLine2="                                                         ~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="55"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalDateTimeKt&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalDateTimeKt.class)&apos;"
+        errorLine1="        TimeProviderKt.getTimeStatically();"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="88"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalDateTimeKt&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalDateTimeKt.class)&apos;"
+        errorLine1="        TimeProviderKt.Companion.getTimeStatically();"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="89"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalDateTimeKt&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalDateTimeKt.class)&apos;"
+        errorLine1="        new TimeProviderKt().getTime();"
+        errorLine2="                             ~~~~~~~">
+        <location
+            file="src/main/java/sample/experimental/UseKtExperimentalFromJava.java"
+            line="96"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
         message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.experimental.ExperimentalDateTime&apos; or &apos;@OptIn(markerClass = sample.experimental.ExperimentalDateTime.class)&apos;"
         errorLine1="        new TimeProviderKt().getTimeJava();"
         errorLine2="                             ~~~~~~~~~~~">
@@ -487,6 +454,39 @@
 
     <issue
         id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.optin.ExperimentalKotlinAnnotation&apos; or &apos;@OptIn(markerClass = sample.optin.ExperimentalKotlinAnnotation.class)&apos;"
+        errorLine1="        AnnotatedKotlinMembers.methodStatic();"
+        errorLine2="                               ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="97"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.optin.ExperimentalKotlinAnnotation&apos; or &apos;@OptIn(markerClass = sample.optin.ExperimentalKotlinAnnotation.class)&apos;"
+        errorLine1="        AnnotatedKotlinMembers.Companion.methodStatic();"
+        errorLine2="                                         ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="98"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
+        message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.optin.ExperimentalKotlinAnnotation&apos; or &apos;@OptIn(markerClass = sample.optin.ExperimentalKotlinAnnotation.class)&apos;"
+        errorLine1="        new AnnotatedKotlinMembers().method();"
+        errorLine2="                                     ~~~~~~">
+        <location
+            file="src/main/java/sample/optin/UseKtExperimentalFromJava.java"
+            line="107"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="UnsafeOptInUsageError"
         message="This declaration is opt-in and its usage should be marked with&#xA;&apos;@sample.optin.ExperimentalJavaAnnotation&apos; or &apos;@OptIn(markerClass = sample.optin.ExperimentalJavaAnnotation.class)&apos;"
         errorLine1="        new AnnotatedKotlinMembers().methodWithJavaMarker();"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~">
diff --git a/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt b/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt
index dc4996c..b194f01 100644
--- a/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt
+++ b/annotation/annotation-experimental-lint/src/main/java/androidx/annotation/experimental/lint/ExperimentalDetector.kt
@@ -30,7 +30,6 @@
 import com.android.tools.lint.detector.api.isKotlin
 import com.intellij.psi.PsiClassType
 import com.intellij.psi.PsiElement
-import com.intellij.psi.PsiField
 import com.intellij.psi.PsiMethod
 import org.jetbrains.uast.UAnnotated
 import org.jetbrains.uast.UAnnotation
@@ -39,7 +38,6 @@
 import org.jetbrains.uast.UClassLiteralExpression
 import org.jetbrains.uast.UElement
 import org.jetbrains.uast.UExpression
-import org.jetbrains.uast.UReferenceExpression
 import org.jetbrains.uast.getParentOfType
 import java.util.Locale
 
@@ -115,33 +113,15 @@
     ) {
         val useAnnotation = (annotation.uastParent as? UClass)?.qualifiedName ?: return
         if (!hasOrUsesAnnotation(context, usage, useAnnotation, useAnnotationNames)) {
-            val level = extractAttribute(annotation, "level")
-            if (level != null) {
-                report(
-                    context, usage,
-                    """
+            val level = annotation.extractAttribute(context, "level") ?: "ERROR"
+            report(
+                context, usage,
+                """
                     This declaration is opt-in and its usage should be marked with
                     '@$useAnnotation' or '@OptIn(markerClass = $useAnnotation.class)'
                 """,
-                    level
-                )
-            } else {
-                report(
-                    context, annotation,
-                    """
-                    Failed to extract attribute "level" from annotation
-                """,
-                    "ERROR"
-                )
-            }
-        }
-    }
-
-    @Suppress("SameParameterValue")
-    private fun extractAttribute(annotation: UAnnotation, name: String): String? {
-        // Using findAttributeValue instead of findDeclaredAttributeValue allows default values.
-        return annotation.findAttributeValue(name)?.let { expression ->
-            ((expression as? UReferenceExpression)?.resolve() as? PsiField)?.name
+                level
+            )
         }
     }
 
@@ -210,7 +190,16 @@
                     "of: ERROR, WARNING"
             )
         }
-        context.report(issue, usage, context.getNameLocation(usage), message.trimIndent())
+        try {
+            context.report(issue, usage, context.getNameLocation(usage), message.trimIndent())
+        } catch (e: UnsupportedOperationException) {
+            if ("Method not implemented" == e.message) {
+                // Workaround for b/191286558 where lint attempts to read annotations from a
+                // compiled UAST parent of `usage`. Swallow the exception and don't report anything.
+            } else {
+                throw e
+            }
+        }
     }
 
     companion object {
diff --git a/appcompat/appcompat-resources/lint-baseline.xml b/appcompat/appcompat-resources/lint-baseline.xml
index 4826d47..4f61f54 100644
--- a/appcompat/appcompat-resources/lint-baseline.xml
+++ b/appcompat/appcompat-resources/lint-baseline.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `android.graphics.drawable.Drawable#getColorFilter`"
+        errorLine1="        assertNotNull(ld.getDrawable(0).getColorFilter());"
+        errorLine2="                                        ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/TintResourcesTest.java"
+            line="79"
+            column="41"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
@@ -8,7 +19,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="92"
+            line="93"
             column="5"/>
     </issue>
 
@@ -19,7 +30,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="130"
+            line="131"
             column="5"/>
     </issue>
 
@@ -30,7 +41,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="134"
+            line="135"
             column="5"/>
     </issue>
 
@@ -41,7 +52,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="138"
+            line="139"
             column="5"/>
     </issue>
 
@@ -52,7 +63,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="161"
+            line="162"
             column="5"/>
     </issue>
 
@@ -63,7 +74,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="316"
+            line="317"
             column="5"/>
     </issue>
 
@@ -74,7 +85,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="337"
+            line="338"
             column="5"/>
     </issue>
 
@@ -85,7 +96,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="352"
+            line="353"
             column="5"/>
     </issue>
 
@@ -96,7 +107,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="380"
+            line="381"
             column="5"/>
     </issue>
 
@@ -107,7 +118,7 @@
         errorLine2="    ^">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="470"
+            line="471"
             column="5"/>
     </issue>
 
@@ -145,7 +156,7 @@
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"
-            line="164"
+            line="165"
             column="19"/>
     </issue>
 
@@ -156,7 +167,7 @@
         errorLine2="                                    ~~~~~">
         <location
             file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"
-            line="275"
+            line="276"
             column="37"/>
     </issue>
 
@@ -167,7 +178,7 @@
         errorLine2="           ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/graphics/drawable/AnimatedStateListDrawableCompat.java"
-            line="604"
+            line="605"
             column="12"/>
     </issue>
 
@@ -409,7 +420,7 @@
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="95"
+            line="96"
             column="32"/>
     </issue>
 
@@ -420,7 +431,7 @@
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="130"
+            line="131"
             column="39"/>
     </issue>
 
@@ -431,7 +442,7 @@
         errorLine2="                        ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="134"
+            line="135"
             column="25"/>
     </issue>
 
@@ -442,7 +453,7 @@
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="470"
+            line="471"
             column="32"/>
     </issue>
 
@@ -453,7 +464,7 @@
         errorLine2="                       ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/ResourceManagerInternal.java"
-            line="471"
+            line="472"
             column="24"/>
     </issue>
 
diff --git a/appcompat/appcompat/api/current.txt b/appcompat/appcompat/api/current.txt
index 9311e6d..f53fafa 100644
--- a/appcompat/appcompat/api/current.txt
+++ b/appcompat/appcompat/api/current.txt
@@ -461,13 +461,15 @@
     method public boolean onMenuItemClick(android.view.MenuItem!);
   }
 
-  public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.core.view.TintableBackgroundView {
+  public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView {
     ctor public AppCompatAutoCompleteTextView(android.content.Context);
     ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
     ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method public void setTextAppearance(android.content.Context!, int);
@@ -494,7 +496,7 @@
     method public void setTextAppearance(android.content.Context!, int);
   }
 
-  public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
+  public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
     ctor public AppCompatCheckBox(android.content.Context);
     ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?);
     ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?, int);
@@ -502,7 +504,9 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
@@ -572,7 +576,7 @@
     method public void setTextAppearance(android.content.Context!, int);
   }
 
-  public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
+  public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
     ctor public AppCompatRadioButton(android.content.Context!);
     ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?);
     ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?, int);
@@ -580,7 +584,9 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
diff --git a/appcompat/appcompat/api/public_plus_experimental_current.txt b/appcompat/appcompat/api/public_plus_experimental_current.txt
index 9311e6d..f53fafa 100644
--- a/appcompat/appcompat/api/public_plus_experimental_current.txt
+++ b/appcompat/appcompat/api/public_plus_experimental_current.txt
@@ -461,13 +461,15 @@
     method public boolean onMenuItemClick(android.view.MenuItem!);
   }
 
-  public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.core.view.TintableBackgroundView {
+  public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView {
     ctor public AppCompatAutoCompleteTextView(android.content.Context);
     ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
     ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method public void setTextAppearance(android.content.Context!, int);
@@ -494,7 +496,7 @@
     method public void setTextAppearance(android.content.Context!, int);
   }
 
-  public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
+  public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
     ctor public AppCompatCheckBox(android.content.Context);
     ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?);
     ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?, int);
@@ -502,7 +504,9 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
@@ -572,7 +576,7 @@
     method public void setTextAppearance(android.content.Context!, int);
   }
 
-  public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
+  public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
     ctor public AppCompatRadioButton(android.content.Context!);
     ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?);
     ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?, int);
@@ -580,7 +584,9 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
diff --git a/appcompat/appcompat/api/restricted_current.txt b/appcompat/appcompat/api/restricted_current.txt
index 0c43708..a57f49e 100644
--- a/appcompat/appcompat/api/restricted_current.txt
+++ b/appcompat/appcompat/api/restricted_current.txt
@@ -1329,13 +1329,15 @@
     ctor public AlertDialogLayout(android.content.Context?, android.util.AttributeSet?);
   }
 
-  @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.core.view.TintableBackgroundView {
+  @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatAutoCompleteTextView extends android.widget.AutoCompleteTextView implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView {
     ctor public AppCompatAutoCompleteTextView(android.content.Context);
     ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?);
     ctor public AppCompatAutoCompleteTextView(android.content.Context, android.util.AttributeSet?, int);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportBackgroundTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method public void setTextAppearance(android.content.Context!, int);
@@ -1362,7 +1364,7 @@
     method public void setTextAppearance(android.content.Context!, int);
   }
 
-  @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
+  @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatCheckBox extends android.widget.CheckBox implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
     ctor public AppCompatCheckBox(android.content.Context);
     ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?);
     ctor public AppCompatCheckBox(android.content.Context, android.util.AttributeSet?, int);
@@ -1370,7 +1372,9 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
@@ -1467,7 +1471,7 @@
     method public void setTextAppearance(android.content.Context!, int);
   }
 
-  @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
+  @androidx.resourceinspection.annotation.AppCompatShadowedAttributes public class AppCompatRadioButton extends android.widget.RadioButton implements androidx.appcompat.widget.EmojiCompatConfigurationView androidx.core.view.TintableBackgroundView androidx.core.widget.TintableCompoundButton {
     ctor public AppCompatRadioButton(android.content.Context!);
     ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?);
     ctor public AppCompatRadioButton(android.content.Context!, android.util.AttributeSet?, int);
@@ -1475,7 +1479,9 @@
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportBackgroundTintMode();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.content.res.ColorStateList? getSupportButtonTintList();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public android.graphics.PorterDuff.Mode? getSupportButtonTintMode();
+    method public boolean isEmojiCompatEnabled();
     method public void setBackgroundDrawable(android.graphics.drawable.Drawable?);
+    method public void setEmojiCompatEnabled(boolean);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintList(android.content.res.ColorStateList?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportBackgroundTintMode(android.graphics.PorterDuff.Mode?);
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public void setSupportButtonTintList(android.content.res.ColorStateList?);
diff --git a/appcompat/appcompat/lint-baseline.xml b/appcompat/appcompat/lint-baseline.xml
index 9775b50..7a93bc3 100644
--- a/appcompat/appcompat/lint-baseline.xml
+++ b/appcompat/appcompat/lint-baseline.xml
@@ -1,5 +1,148 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 21 (current min is 14): `android.graphics.drawable.AnimatedStateListDrawable`"
+        errorLine1="                || button instanceof AnimatedStateListDrawable);"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatCheckBoxTest.java"
+            line="71"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 21 (current min is 14): `android.graphics.drawable.AnimatedStateListDrawable`"
+        errorLine1="                || checkMark instanceof AnimatedStateListDrawable);"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatCheckedTextViewTest.java"
+            line="89"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 25 (current min is 14): `new android.view.inputmethod.InputContentInfo`"
+        errorLine1="        final InputContentInfo contentInfo = new InputContentInfo("
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java"
+            line="535"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 25 (current min is 14): `android.view.inputmethod.InputConnection#commitContent`"
+        errorLine1="        return ic.commitContent(contentInfo, flags, null);"
+        errorLine2="                  ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextReceiveContentTest.java"
+            line="543"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 26 (current min is 14): `android.view.textclassifier.TextClassifier`"
+        errorLine1="    private static class NoOpTextClassifier implements TextClassifier {}"
+        errorLine2="                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextTest.java"
+            line="201"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 21 (current min is 14): `android.graphics.drawable.AnimatedStateListDrawable`"
+        errorLine1="                || button instanceof AnimatedStateListDrawable);"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatRadioButtonTest.java"
+            line="72"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.ContextThemeWrapper#applyOverrideConfiguration`"
+        errorLine1="        wrappedBase.applyOverrideConfiguration(overrideConfig);"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatSpinnerRtlActivity.java"
+            line="33"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 26 (current min is 14): `android.view.textclassifier.TextClassifier`"
+        errorLine1="    private static class NoOpTextClassifier implements TextClassifier {}"
+        errorLine2="                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/widget/AppCompatTextViewTest.java"
+            line="928"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.ContextThemeWrapper#applyOverrideConfiguration`"
+        errorLine1="            wrappedBase.applyOverrideConfiguration(overrideConfig);"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/testutils/BaseTestActivity.java"
+            line="97"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 20 (current min is 14): `android.view.WindowInsets#getSystemWindowInsetTop`"
+        errorLine1="        mSystemWindowInsetTop = insets.getSystemWindowInsetTop();"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/custom/CustomDrawerLayout.java"
+            line="41"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.content.res.Configuration#setLayoutDirection`"
+        errorLine1="        configuration.setLayoutDirection(locale)"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/app/NightModeRtlTestUtilsRegressionTestCase.kt"
+            line="73"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.content.res.Configuration#setLocale`"
+        errorLine1="        configuration.setLocale(locale)"
+        errorLine2="                      ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/app/NightModeRtlTestUtilsRegressionTestCase.kt"
+            line="74"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 16): `android.text.TextUtils#getLayoutDirectionFromLocale`"
+        errorLine1="        assertEquals(TextUtils.getLayoutDirectionFromLocale(CUSTOM_LOCALE), config.layoutDirection)"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/appcompat/app/NightModeRtlTestUtilsRegressionTestCase.kt"
+            line="94"
+            column="32"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
@@ -113,7 +256,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                info.setHomeAsUpIndicator.invoke(actionBar, drawable);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -124,7 +267,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                info.setHomeActionContentDescription.invoke(actionBar, contentDescRes);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -135,7 +278,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                info.setHomeActionContentDescription.invoke(actionBar, contentDescRes);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -146,7 +289,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                        method.invoke(mTextView);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -157,7 +300,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            result = (T) method.invoke(object);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -168,7 +311,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                mResolvedMethod.invoke(mResolvedContext, v);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -179,7 +322,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            mSetExclusiveCheckableMethod.invoke(mWrappedObject, checkable);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -190,40 +333,40 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mDoBeforeTextChanged.invoke(view);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="2073"
+            line="2080"
             column="21"/>
     </issue>
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mDoAfterTextChanged.invoke(view);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="2083"
+            line="2090"
             column="21"/>
     </issue>
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mEnsureImeVisible.invoke(view, /* visible = */ true);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="2093"
+            line="2100"
             column="21"/>
     </issue>
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    return (Boolean) mMethod.invoke(mRealOwner, item);"
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -234,7 +377,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mMethod.invoke(mRealOwner, item);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -245,7 +388,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                sComputeFitSystemWindowsMethod.invoke(view, inoutInsets, outLocalInsets);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -349,7 +492,7 @@
         errorLine2="                        ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="608"
+            line="610"
             column="25"/>
     </issue>
 
@@ -360,7 +503,7 @@
         errorLine2="                                            ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="608"
+            line="610"
             column="45"/>
     </issue>
 
@@ -371,7 +514,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="641"
+            line="643"
             column="37"/>
     </issue>
 
@@ -382,7 +525,7 @@
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="715"
+            line="717"
             column="39"/>
     </issue>
 
@@ -393,7 +536,7 @@
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="716"
+            line="718"
             column="39"/>
     </issue>
 
@@ -404,7 +547,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="905"
+            line="907"
             column="26"/>
     </issue>
 
@@ -415,7 +558,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="906"
+            line="908"
             column="26"/>
     </issue>
 
@@ -426,7 +569,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="1054"
+            line="1056"
             column="26"/>
     </issue>
 
@@ -437,7 +580,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="1055"
+            line="1057"
             column="26"/>
     </issue>
 
@@ -987,7 +1130,7 @@
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1698"
+            line="1705"
             column="32"/>
     </issue>
 
@@ -998,7 +1141,7 @@
         errorLine2="                ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="2026"
+            line="2033"
             column="17"/>
     </issue>
 
@@ -1009,7 +1152,7 @@
         errorLine2="                              ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="1116"
+            line="1130"
             column="31"/>
     </issue>
 
@@ -5489,7 +5632,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
-            line="184"
+            line="186"
             column="35"/>
     </issue>
 
@@ -5500,7 +5643,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
-            line="192"
+            line="194"
             column="12"/>
     </issue>
 
@@ -5511,7 +5654,7 @@
         errorLine2="                                                   ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java"
-            line="192"
+            line="194"
             column="52"/>
     </issue>
 
@@ -5522,7 +5665,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
-            line="177"
+            line="179"
             column="35"/>
     </issue>
 
@@ -5533,7 +5676,7 @@
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
-            line="185"
+            line="187"
             column="48"/>
     </issue>
 
@@ -5544,7 +5687,7 @@
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
-            line="191"
+            line="193"
             column="51"/>
     </issue>
 
@@ -5555,7 +5698,7 @@
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
-            line="216"
+            line="218"
             column="34"/>
     </issue>
 
@@ -5566,7 +5709,7 @@
         errorLine2="           ~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatButton.java"
-            line="350"
+            line="352"
             column="12"/>
     </issue>
 
@@ -5610,7 +5753,7 @@
         errorLine2="                                  ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java"
-            line="86"
+            line="88"
             column="35"/>
     </issue>
 
@@ -5995,7 +6138,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"
-            line="213"
+            line="215"
             column="35"/>
     </issue>
 
@@ -6006,7 +6149,7 @@
         errorLine2="                                                                       ~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatEditText.java"
-            line="291"
+            line="293"
             column="72"/>
     </issue>
 
@@ -6017,7 +6160,7 @@
         errorLine2="                               ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatImageButton.java"
-            line="101"
+            line="103"
             column="32"/>
     </issue>
 
@@ -6039,7 +6182,7 @@
         errorLine2="                               ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatImageView.java"
-            line="111"
+            line="113"
             column="32"/>
     </issue>
 
@@ -6050,7 +6193,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
-            line="182"
+            line="184"
             column="35"/>
     </issue>
 
@@ -6061,7 +6204,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
-            line="190"
+            line="192"
             column="12"/>
     </issue>
 
@@ -6072,7 +6215,7 @@
         errorLine2="                                                   ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java"
-            line="190"
+            line="192"
             column="52"/>
     </issue>
 
@@ -6083,7 +6226,7 @@
         errorLine2="                                ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
-            line="60"
+            line="62"
             column="33"/>
     </issue>
 
@@ -6094,7 +6237,7 @@
         errorLine2="                                ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
-            line="64"
+            line="66"
             column="33"/>
     </issue>
 
@@ -6105,7 +6248,7 @@
         errorLine2="                                ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
-            line="68"
+            line="70"
             column="33"/>
     </issue>
 
@@ -6116,7 +6259,7 @@
         errorLine2="                                  ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java"
-            line="84"
+            line="86"
             column="35"/>
     </issue>
 
@@ -6138,7 +6281,7 @@
         errorLine2="                                        ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="208"
+            line="210"
             column="41"/>
     </issue>
 
@@ -6149,7 +6292,7 @@
         errorLine2="           ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="308"
+            line="310"
             column="12"/>
     </issue>
 
@@ -6160,7 +6303,7 @@
         errorLine2="                                           ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="313"
+            line="315"
             column="44"/>
     </issue>
 
@@ -6171,7 +6314,7 @@
         errorLine2="           ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="327"
+            line="329"
             column="12"/>
     </issue>
 
@@ -6182,7 +6325,7 @@
         errorLine2="                           ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="401"
+            line="403"
             column="28"/>
     </issue>
 
@@ -6193,7 +6336,7 @@
         errorLine2="                                ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="427"
+            line="429"
             column="33"/>
     </issue>
 
@@ -6204,7 +6347,7 @@
         errorLine2="                          ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="462"
+            line="464"
             column="27"/>
     </issue>
 
@@ -6215,7 +6358,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="471"
+            line="473"
             column="12"/>
     </issue>
 
@@ -6226,7 +6369,7 @@
         errorLine2="           ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="616"
+            line="618"
             column="12"/>
     </issue>
 
@@ -6237,7 +6380,7 @@
         errorLine2="                                       ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatSpinner.java"
-            line="624"
+            line="626"
             column="40"/>
     </issue>
 
@@ -6248,7 +6391,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
-            line="208"
+            line="210"
             column="35"/>
     </issue>
 
@@ -6259,7 +6402,7 @@
         errorLine2="                                 ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
-            line="267"
+            line="269"
             column="34"/>
     </issue>
 
@@ -6270,7 +6413,7 @@
         errorLine2="           ~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
-            line="428"
+            line="430"
             column="12"/>
     </issue>
 
@@ -6281,7 +6424,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
-            line="440"
+            line="442"
             column="12"/>
     </issue>
 
@@ -6292,7 +6435,7 @@
         errorLine2="                                                   ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
-            line="440"
+            line="442"
             column="52"/>
     </issue>
 
@@ -6303,7 +6446,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/AppCompatTextView.java"
-            line="548"
+            line="550"
             column="12"/>
     </issue>
 
@@ -7843,7 +7986,7 @@
         errorLine2="           ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="230"
+            line="239"
             column="12"/>
     </issue>
 
@@ -7854,7 +7997,7 @@
         errorLine2="                                   ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="241"
+            line="250"
             column="36"/>
     </issue>
 
@@ -7865,7 +8008,7 @@
         errorLine2="                          ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="292"
+            line="302"
             column="27"/>
     </issue>
 
@@ -7876,7 +8019,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1730"
+            line="1750"
             column="12"/>
     </issue>
 
@@ -7887,7 +8030,7 @@
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1730"
+            line="1750"
             column="46"/>
     </issue>
 
@@ -7898,7 +8041,7 @@
         errorLine2="              ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1743"
+            line="1763"
             column="15"/>
     </issue>
 
@@ -7909,7 +8052,7 @@
         errorLine2="              ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1753"
+            line="1773"
             column="15"/>
     </issue>
 
@@ -7920,7 +8063,7 @@
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1753"
+            line="1773"
             column="49"/>
     </issue>
 
@@ -7931,7 +8074,7 @@
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1760"
+            line="1780"
             column="41"/>
     </issue>
 
@@ -7942,7 +8085,7 @@
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1765"
+            line="1785"
             column="48"/>
     </issue>
 
@@ -7953,7 +8096,7 @@
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1771"
+            line="1791"
             column="51"/>
     </issue>
 
@@ -7964,7 +8107,7 @@
         errorLine2="                            ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1784"
+            line="1804"
             column="29"/>
     </issue>
 
@@ -7975,7 +8118,7 @@
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1784"
+            line="1804"
             column="40"/>
     </issue>
 
@@ -7986,7 +8129,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1812"
+            line="1832"
             column="29"/>
     </issue>
 
@@ -7997,7 +8140,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java"
-            line="1819"
+            line="1839"
             column="29"/>
     </issue>
 
@@ -10758,7 +10901,7 @@
         errorLine2="                                ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/PopupMenu.java"
-            line="282"
+            line="295"
             column="33"/>
     </issue>
 
@@ -10769,7 +10912,7 @@
         errorLine2="                       ~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/PopupMenu.java"
-            line="294"
+            line="307"
             column="24"/>
     </issue>
 
@@ -10857,7 +11000,7 @@
         errorLine2="                                  ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="216"
+            line="217"
             column="35"/>
     </issue>
 
@@ -10868,7 +11011,7 @@
         errorLine2="                                  ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="226"
+            line="227"
             column="35"/>
     </issue>
 
@@ -10879,7 +11022,7 @@
         errorLine2="                                  ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="405"
+            line="408"
             column="35"/>
     </issue>
 
@@ -10890,7 +11033,7 @@
         errorLine2="                                 ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="428"
+            line="431"
             column="34"/>
     </issue>
 
@@ -10901,7 +11044,7 @@
         errorLine2="                                               ~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="478"
+            line="482"
             column="48"/>
     </issue>
 
@@ -10912,7 +11055,7 @@
         errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="510"
+            line="514"
             column="40"/>
     </issue>
 
@@ -10923,7 +11066,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="519"
+            line="523"
             column="36"/>
     </issue>
 
@@ -10934,7 +11077,7 @@
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="528"
+            line="532"
             column="51"/>
     </issue>
 
@@ -10945,7 +11088,7 @@
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="537"
+            line="541"
             column="41"/>
     </issue>
 
@@ -10956,7 +11099,7 @@
         errorLine2="                                         ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="549"
+            line="553"
             column="42"/>
     </issue>
 
@@ -10967,7 +11110,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="558"
+            line="562"
             column="12"/>
     </issue>
 
@@ -10978,7 +11121,7 @@
         errorLine2="                         ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="570"
+            line="574"
             column="26"/>
     </issue>
 
@@ -10989,7 +11132,7 @@
         errorLine2="                                      ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="744"
+            line="750"
             column="39"/>
     </issue>
 
@@ -11000,7 +11143,7 @@
         errorLine2="           ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="754"
+            line="760"
             column="12"/>
     </issue>
 
@@ -11011,7 +11154,7 @@
         errorLine2="              ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1344"
+            line="1351"
             column="15"/>
     </issue>
 
@@ -11022,7 +11165,7 @@
         errorLine2="                                          ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1352"
+            line="1359"
             column="43"/>
     </issue>
 
@@ -11033,7 +11176,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1841"
+            line="1848"
             column="35"/>
     </issue>
 
@@ -11044,7 +11187,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1845"
+            line="1852"
             column="35"/>
     </issue>
 
@@ -11055,7 +11198,7 @@
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1845"
+            line="1852"
             column="52"/>
     </issue>
 
@@ -11066,7 +11209,7 @@
         errorLine2="                                  ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1849"
+            line="1856"
             column="35"/>
     </issue>
 
@@ -11077,7 +11220,7 @@
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1849"
+            line="1856"
             column="52"/>
     </issue>
 
@@ -11088,7 +11231,7 @@
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1884"
+            line="1891"
             column="36"/>
     </issue>
 
@@ -11099,7 +11242,7 @@
         errorLine2="                                                                      ~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1920"
+            line="1927"
             column="71"/>
     </issue>
 
@@ -11110,7 +11253,7 @@
         errorLine2="                                                ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1935"
+            line="1942"
             column="49"/>
     </issue>
 
@@ -11121,7 +11264,7 @@
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1982"
+            line="1989"
             column="16"/>
     </issue>
 
@@ -11132,7 +11275,7 @@
         errorLine2="                                                       ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SearchView.java"
-            line="1982"
+            line="1989"
             column="56"/>
     </issue>
 
@@ -11902,7 +12045,7 @@
         errorLine2="                                        ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="339"
+            line="340"
             column="41"/>
     </issue>
 
@@ -11913,7 +12056,7 @@
         errorLine2="                                  ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="406"
+            line="407"
             column="35"/>
     </issue>
 
@@ -11924,7 +12067,7 @@
         errorLine2="                                  ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="434"
+            line="435"
             column="35"/>
     </issue>
 
@@ -11935,7 +12078,7 @@
         errorLine2="                                 ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="522"
+            line="526"
             column="34"/>
     </issue>
 
@@ -11946,7 +12089,7 @@
         errorLine2="           ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="551"
+            line="556"
             column="12"/>
     </issue>
 
@@ -11957,7 +12100,7 @@
         errorLine2="                                 ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="641"
+            line="648"
             column="34"/>
     </issue>
 
@@ -11968,7 +12111,7 @@
         errorLine2="           ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="672"
+            line="680"
             column="12"/>
     </issue>
 
@@ -11979,7 +12122,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="784"
+            line="796"
             column="12"/>
     </issue>
 
@@ -11990,7 +12133,7 @@
         errorLine2="                          ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="807"
+            line="819"
             column="27"/>
     </issue>
 
@@ -12001,7 +12144,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="822"
+            line="835"
             column="12"/>
     </issue>
 
@@ -12012,7 +12155,7 @@
         errorLine2="                           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="844"
+            line="857"
             column="28"/>
     </issue>
 
@@ -12023,7 +12166,7 @@
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="956"
+            line="970"
             column="46"/>
     </issue>
 
@@ -12034,7 +12177,7 @@
         errorLine2="                                ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="993"
+            line="1007"
             column="33"/>
     </issue>
 
@@ -12045,7 +12188,7 @@
         errorLine2="                     ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="1226"
+            line="1240"
             column="22"/>
     </issue>
 
@@ -12056,7 +12199,7 @@
         errorLine2="                          ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="1291"
+            line="1305"
             column="27"/>
     </issue>
 
@@ -12067,7 +12210,7 @@
         errorLine2="              ~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="1415"
+            line="1429"
             column="15"/>
     </issue>
 
@@ -12078,7 +12221,7 @@
         errorLine2="                                     ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="1461"
+            line="1475"
             column="38"/>
     </issue>
 
@@ -12089,7 +12232,7 @@
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="1484"
+            line="1498"
             column="48"/>
     </issue>
 
@@ -12100,7 +12243,7 @@
         errorLine2="                                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/SwitchCompat.java"
-            line="1490"
+            line="1504"
             column="51"/>
     </issue>
 
@@ -12375,7 +12518,7 @@
         errorLine2="                        ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="557"
+            line="564"
             column="25"/>
     </issue>
 
@@ -12386,7 +12529,7 @@
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="557"
+            line="564"
             column="43"/>
     </issue>
 
@@ -12397,7 +12540,7 @@
         errorLine2="                        ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="631"
+            line="638"
             column="25"/>
     </issue>
 
@@ -12408,7 +12551,7 @@
         errorLine2="           ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="653"
+            line="661"
             column="12"/>
     </issue>
 
@@ -12419,7 +12562,7 @@
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="677"
+            line="685"
             column="36"/>
     </issue>
 
@@ -12430,7 +12573,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="691"
+            line="700"
             column="12"/>
     </issue>
 
@@ -12441,7 +12584,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="738"
+            line="748"
             column="12"/>
     </issue>
 
@@ -12452,7 +12595,7 @@
         errorLine2="                         ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="762"
+            line="772"
             column="26"/>
     </issue>
 
@@ -12463,7 +12606,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="794"
+            line="805"
             column="12"/>
     </issue>
 
@@ -12474,7 +12617,7 @@
         errorLine2="                            ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="816"
+            line="827"
             column="29"/>
     </issue>
 
@@ -12485,7 +12628,7 @@
         errorLine2="                                       ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="847"
+            line="858"
             column="40"/>
     </issue>
 
@@ -12496,7 +12639,7 @@
         errorLine2="                                          ~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="858"
+            line="869"
             column="43"/>
     </issue>
 
@@ -12507,7 +12650,7 @@
         errorLine2="                                             ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="1022"
+            line="1035"
             column="46"/>
     </issue>
 
@@ -12518,7 +12661,7 @@
         errorLine2="           ~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="1128"
+            line="1144"
             column="12"/>
     </issue>
 
@@ -12529,7 +12672,7 @@
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="1205"
+            line="1221"
             column="44"/>
     </issue>
 
@@ -12540,7 +12683,7 @@
         errorLine2="              ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="1533"
+            line="1555"
             column="15"/>
     </issue>
 
@@ -12551,7 +12694,7 @@
         errorLine2="                                          ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="1545"
+            line="1567"
             column="43"/>
     </issue>
 
@@ -12562,7 +12705,7 @@
         errorLine2="                                ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="1579"
+            line="1601"
             column="33"/>
     </issue>
 
@@ -12573,7 +12716,7 @@
         errorLine2="                                ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="1605"
+            line="1627"
             column="33"/>
     </issue>
 
@@ -12584,7 +12727,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2200"
+            line="2222"
             column="12"/>
     </issue>
 
@@ -12595,7 +12738,7 @@
         errorLine2="                                             ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2200"
+            line="2222"
             column="46"/>
     </issue>
 
@@ -12606,7 +12749,7 @@
         errorLine2="              ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2205"
+            line="2227"
             column="15"/>
     </issue>
 
@@ -12617,7 +12760,7 @@
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2205"
+            line="2227"
             column="49"/>
     </issue>
 
@@ -12628,7 +12771,7 @@
         errorLine2="              ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2218"
+            line="2240"
             column="15"/>
     </issue>
 
@@ -12639,7 +12782,7 @@
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2223"
+            line="2245"
             column="41"/>
     </issue>
 
@@ -12650,7 +12793,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2229"
+            line="2251"
             column="12"/>
     </issue>
 
@@ -12661,7 +12804,7 @@
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2278"
+            line="2300"
             column="34"/>
     </issue>
 
@@ -12672,7 +12815,7 @@
         errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2278"
+            line="2300"
             column="62"/>
     </issue>
 
@@ -12683,7 +12826,7 @@
         errorLine2="                                       ~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2333"
+            line="2355"
             column="40"/>
     </issue>
 
@@ -12694,7 +12837,7 @@
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2352"
+            line="2374"
             column="49"/>
     </issue>
 
@@ -12705,7 +12848,7 @@
         errorLine2="                            ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2370"
+            line="2392"
             column="29"/>
     </issue>
 
@@ -12716,7 +12859,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2376"
+            line="2398"
             column="29"/>
     </issue>
 
@@ -12727,7 +12870,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2380"
+            line="2402"
             column="29"/>
     </issue>
 
@@ -12738,7 +12881,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2387"
+            line="2409"
             column="29"/>
     </issue>
 
@@ -12749,7 +12892,7 @@
         errorLine2="                          ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2403"
+            line="2425"
             column="27"/>
     </issue>
 
@@ -12760,7 +12903,7 @@
         errorLine2="                          ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2407"
+            line="2429"
             column="27"/>
     </issue>
 
@@ -12771,7 +12914,7 @@
         errorLine2="                                         ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2407"
+            line="2429"
             column="42"/>
     </issue>
 
@@ -12782,7 +12925,7 @@
         errorLine2="                          ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2413"
+            line="2435"
             column="27"/>
     </issue>
 
@@ -12793,7 +12936,7 @@
         errorLine2="                                  ~~~~~~">
         <location
             file="src/main/java/androidx/appcompat/widget/Toolbar.java"
-            line="2418"
+            line="2440"
             column="35"/>
     </issue>
 
diff --git a/appcompat/appcompat/src/androidTest/AndroidManifest.xml b/appcompat/appcompat/src/androidTest/AndroidManifest.xml
index 590def4..ee5cf1c 100644
--- a/appcompat/appcompat/src/androidTest/AndroidManifest.xml
+++ b/appcompat/appcompat/src/androidTest/AndroidManifest.xml
@@ -103,6 +103,11 @@
             android:theme="@style/Theme.TextColors"/>
 
         <activity
+            android:name="androidx.appcompat.widget.AppCompatAutoCompleteTextViewEmojiActivity"
+            android:label="@string/app_compat_auto_complete_text_view_activity"
+            android:theme="@style/Theme.TextColors"/>
+
+        <activity
             android:name="androidx.appcompat.widget.AppCompatTextViewActivity"
             android:label="@string/app_compat_text_view_activity"
             android:theme="@style/Theme.TextColors"/>
@@ -168,11 +173,21 @@
             android:theme="@style/Theme.AppCompat.Light"/>
 
         <activity
+            android:name="androidx.appcompat.widget.AppCompatRadioButtonEmojiActivity"
+            android:label="@string/app_compat_text_view_emoji_activity"
+            android:theme="@style/Theme.AppCompat.Light" />
+
+        <activity
             android:name="androidx.appcompat.widget.AppCompatCheckBoxActivity"
             android:label="@string/app_compat_checkbox_activity"
             android:theme="@style/Theme.AppCompat.Light"/>
 
         <activity
+            android:name="androidx.appcompat.widget.AppCompatCheckBoxEmojiActivity"
+            android:label="@string/app_compat_text_view_emoji_activity"
+            android:theme="@style/Theme.AppCompat.Light" />
+
+        <activity
             android:name="androidx.appcompat.widget.AppCompatCheckedTextViewActivity"
             android:label="@string/app_compat_checkedtextview_activity"
             android:theme="@style/Theme.AppCompat.Light"/>
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiActivity.java
new file mode 100644
index 0000000..5bf2882
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiActivity.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2016 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.appcompat.widget;
+
+import androidx.appcompat.test.R;
+import androidx.appcompat.testutils.BaseTestActivity;
+
+public class AppCompatAutoCompleteTextViewEmojiActivity extends BaseTestActivity {
+    @Override
+    protected int getContentViewLayoutResId() {
+        return R.layout.appcompat_autocompletetextview_emoji_activity;
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
new file mode 100644
index 0000000..912d32e
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatAutoCompleteTextViewEmojiTest.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.widget;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AppCompatAutoCompleteTextViewEmojiTest
+        extends AppCompatBaseEditTextEmojiTest<AppCompatAutoCompleteTextViewEmojiActivity,
+        AppCompatTextView> {
+
+    public AppCompatAutoCompleteTextViewEmojiTest() {
+        super(AppCompatAutoCompleteTextViewEmojiActivity.class);
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseEditTextEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseEditTextEmojiTest.java
new file mode 100644
index 0000000..e779b6c
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatBaseEditTextEmojiTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.widget;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+
+import android.text.InputType;
+import android.text.method.KeyListener;
+import android.widget.TextView;
+
+import androidx.appcompat.testutils.BaseTestActivity;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.MediumTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public abstract class AppCompatBaseEditTextEmojiTest<ActivityType extends BaseTestActivity,
+        ViewType extends TextView & EmojiCompatConfigurationView> extends
+        AppCompatBaseTextViewEmojiTest<ActivityType, ViewType> {
+
+
+    public AppCompatBaseEditTextEmojiTest(Class<ActivityType> clazz) {
+        super(clazz);
+    }
+
+    @Test
+    @UiThreadTest
+    public void setKeyListener_hasSameFocusChangeBehavior_asPlatform() {
+        TextView platformTextView = new TextView(mActivityTestRule.getActivity());
+        platformTextView.setFocusable(false);
+        platformTextView.setEnabled(false);
+
+        ViewType notFocusable =
+                mActivityTestRule.getActivity()
+                        .findViewById(androidx.appcompat.test.R.id.not_focusable);
+
+        KeyListener keyListener = mock(KeyListener.class);
+        notFocusable.setKeyListener(keyListener);
+        platformTextView.setKeyListener(keyListener);
+
+        assertThat(notFocusable.isFocusable()).isEqualTo(platformTextView.isFocusable());
+        assertThat(notFocusable.isEnabled()).isEqualTo(platformTextView.isEnabled());
+    }
+
+    @Test
+    @UiThreadTest
+    public void constructor_doesntClobber_inputType() {
+        ViewType textEmailAddress =
+                mActivityTestRule.getActivity()
+                        .findViewById(androidx.appcompat.test.R.id.text_email_address);
+        int actual = textEmailAddress.getInputType();
+        assertThat(actual & InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS).isEqualTo(
+                InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+    }
+
+    @Test
+    @UiThreadTest
+    public void setKeyListener_hasSameInputTypeBehavior_asPlatform() {
+        TextView platformTextView = new TextView(mActivityTestRule.getActivity());
+        platformTextView.setInputType(
+                InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
+
+        ViewType textEmailAddress =
+                mActivityTestRule.getActivity()
+                        .findViewById(androidx.appcompat.test.R.id.text_email_address);
+
+        KeyListener keyListener = mock(KeyListener.class);
+        platformTextView.setKeyListener(keyListener);
+        textEmailAddress.setKeyListener(keyListener);
+
+        assertThat(textEmailAddress.getInputType()).isEqualTo(platformTextView.getInputType());
+    }
+
+    @Test
+    @UiThreadTest
+    public void setKeyListener_null_setsToNull() {
+        ViewType textEmailAddress =
+                mActivityTestRule.getActivity()
+                        .findViewById(androidx.appcompat.test.R.id.text_email_address);
+
+        textEmailAddress.setKeyListener(null);
+        assertThat(textEmailAddress.getKeyListener()).isNull();
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckBoxEmojiActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckBoxEmojiActivity.java
new file mode 100644
index 0000000..f52066e
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckBoxEmojiActivity.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2016 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.appcompat.widget;
+
+import androidx.appcompat.test.R;
+import androidx.appcompat.testutils.BaseTestActivity;
+
+public class AppCompatCheckBoxEmojiActivity extends BaseTestActivity {
+    @Override
+    protected int getContentViewLayoutResId() {
+        return R.layout.appcompat_checkbox_emoji_activity;
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckBoxEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckBoxEmojiTest.java
new file mode 100644
index 0000000..8617b8f
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatCheckBoxEmojiTest.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.widget;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AppCompatCheckBoxEmojiTest
+        extends AppCompatBaseTextViewEmojiTest<AppCompatCheckBoxEmojiActivity, AppCompatTextView> {
+
+    public AppCompatCheckBoxEmojiTest() {
+        super(AppCompatCheckBoxEmojiActivity.class);
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
index 1b1cdb7c..5f6eff5 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatEditTextEmojiTest.java
@@ -18,13 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.mock;
-
-import android.text.InputType;
-import android.text.method.KeyListener;
-import android.widget.TextView;
-
-import androidx.appcompat.test.R;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.SmallTest;
@@ -35,7 +28,7 @@
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class AppCompatEditTextEmojiTest
-        extends AppCompatBaseTextViewEmojiTest<AppCompatEditTextEmojiActivity, AppCompatTextView> {
+        extends AppCompatBaseEditTextEmojiTest<AppCompatEditTextEmojiActivity, AppCompatTextView> {
 
     public AppCompatEditTextEmojiTest() {
         super(AppCompatEditTextEmojiActivity.class);
@@ -49,64 +42,10 @@
     @UiThreadTest
     public void respectsFocusableAndEditableAttribute() {
         AppCompatEditText notFocusable =
-                mActivityTestRule.getActivity().findViewById(R.id.not_focusable);
+                mActivityTestRule.getActivity()
+                        .findViewById(androidx.appcompat.test.R.id.not_focusable);
 
         assertThat(notFocusable.isEnabled()).isFalse();
         assertThat(notFocusable.isFocusable()).isFalse();
     }
-
-    @Test
-    @UiThreadTest
-    public void setKeyListener_hasSameFocusChangeBehavior_asPlatform() {
-        TextView platformTextView = new TextView(mActivityTestRule.getActivity());
-        platformTextView.setFocusable(false);
-        platformTextView.setEnabled(false);
-
-        AppCompatEditText notFocusable =
-                mActivityTestRule.getActivity().findViewById(R.id.not_focusable);
-
-        KeyListener keyListener = mock(KeyListener.class);
-        notFocusable.setKeyListener(keyListener);
-        platformTextView.setKeyListener(keyListener);
-
-        assertThat(notFocusable.isFocusable()).isEqualTo(platformTextView.isFocusable());
-        assertThat(notFocusable.isEnabled()).isEqualTo(platformTextView.isEnabled());
-    }
-
-    @Test
-    @UiThreadTest
-    public void constructor_doesntClobber_inputType() {
-        AppCompatEditText textEmailAddress =
-                mActivityTestRule.getActivity().findViewById(R.id.text_email_address);
-        int actual = textEmailAddress.getInputType();
-        assertThat(actual).isEqualTo(
-                InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
-    }
-
-    @Test
-    @UiThreadTest
-    public void setKeyListener_hasSameInputTypeBehavior_asPlatform() {
-        TextView platformTextView = new TextView(mActivityTestRule.getActivity());
-        platformTextView.setInputType(
-                InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
-
-        AppCompatEditText textEmailAddress =
-                mActivityTestRule.getActivity().findViewById(R.id.text_email_address);
-
-        KeyListener keyListener = mock(KeyListener.class);
-        platformTextView.setKeyListener(keyListener);
-        textEmailAddress.setKeyListener(keyListener);
-
-        assertThat(textEmailAddress.getInputType()).isEqualTo(platformTextView.getInputType());
-    }
-
-    @Test
-    @UiThreadTest
-    public void setKeyListener_null_setsToNull() {
-        AppCompatEditText textEmailAddress =
-                mActivityTestRule.getActivity().findViewById(R.id.text_email_address);
-
-        textEmailAddress.setKeyListener(null);
-        assertThat(textEmailAddress.getKeyListener()).isNull();
-    }
 }
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatRadioButtonEmojiActivity.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatRadioButtonEmojiActivity.java
new file mode 100644
index 0000000..6907613
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatRadioButtonEmojiActivity.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2016 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.appcompat.widget;
+
+import androidx.appcompat.test.R;
+import androidx.appcompat.testutils.BaseTestActivity;
+
+public class AppCompatRadioButtonEmojiActivity extends BaseTestActivity {
+    @Override
+    protected int getContentViewLayoutResId() {
+        return R.layout.appcompat_checkbox_emoji_activity;
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatRadioButtonEmojiTest.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatRadioButtonEmojiTest.java
new file mode 100644
index 0000000..764db977
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/widget/AppCompatRadioButtonEmojiTest.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.widget;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.SmallTest;
+
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class AppCompatRadioButtonEmojiTest
+        extends AppCompatBaseTextViewEmojiTest<AppCompatCheckBoxEmojiActivity, AppCompatTextView> {
+
+    public AppCompatRadioButtonEmojiTest() {
+        super(AppCompatCheckBoxEmojiActivity.class);
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/res/layout/appcompat_autocompletetextview_emoji_activity.xml b/appcompat/appcompat/src/androidTest/res/layout/appcompat_autocompletetextview_emoji_activity.xml
new file mode 100644
index 0000000..f988480
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/res/layout/appcompat_autocompletetextview_emoji_activity.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<ScrollView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:id="@+id/container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+        <androidx.appcompat.widget.AppCompatAutoCompleteTextView
+            android:id="@+id/emoji_default"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <androidx.appcompat.widget.AppCompatAutoCompleteTextView
+            android:id="@+id/emoji_enabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:emojiCompatEnabled="true" />
+
+        <androidx.appcompat.widget.AppCompatAutoCompleteTextView
+            android:id="@+id/emoji_disabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:emojiCompatEnabled="false" />
+
+        <androidx.appcompat.widget.AppCompatAutoCompleteTextView
+            android:id="@+id/not_focusable"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:enabled="false"
+            android:focusable="false"
+            android:text="Not focusable" />
+
+        <androidx.appcompat.widget.AppCompatAutoCompleteTextView
+            android:id="@+id/text_email_address"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:inputType="textEmailAddress" />
+    </LinearLayout>
+</ScrollView>
diff --git a/appcompat/appcompat/src/androidTest/res/layout/appcompat_checkbox_emoji_activity.xml b/appcompat/appcompat/src/androidTest/res/layout/appcompat_checkbox_emoji_activity.xml
new file mode 100644
index 0000000..516d198
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/res/layout/appcompat_checkbox_emoji_activity.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<ScrollView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:id="@+id/container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+        <androidx.appcompat.widget.AppCompatCheckBox
+            android:id="@+id/emoji_default"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <androidx.appcompat.widget.AppCompatCheckBox
+            android:id="@+id/emoji_enabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:emojiCompatEnabled="true" />
+
+        <androidx.appcompat.widget.AppCompatCheckBox
+            android:id="@+id/emoji_disabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:emojiCompatEnabled="false" />
+
+    </LinearLayout>
+
+</ScrollView>
diff --git a/appcompat/appcompat/src/androidTest/res/layout/appcompat_radiobutton_emoji_activity.xml b/appcompat/appcompat/src/androidTest/res/layout/appcompat_radiobutton_emoji_activity.xml
new file mode 100644
index 0000000..4326dfe
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/res/layout/appcompat_radiobutton_emoji_activity.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+
+<ScrollView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:id="@+id/container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+    <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+        <androidx.appcompat.widget.AppCompatRadioButton
+            android:id="@+id/emoji_default"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <androidx.appcompat.widget.AppCompatRadioButton
+            android:id="@+id/emoji_enabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:emojiCompatEnabled="true" />
+
+        <androidx.appcompat.widget.AppCompatRadioButton
+            android:id="@+id/emoji_disabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:emojiCompatEnabled="false" />
+
+    </LinearLayout>
+
+</ScrollView>
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
index 27a34d8..e7381ce 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
@@ -22,6 +22,7 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
+import android.text.method.KeyListener;
 import android.util.AttributeSet;
 import android.view.ActionMode;
 import android.view.inputmethod.EditorInfo;
@@ -56,7 +57,7 @@
  */
 @AppCompatShadowedAttributes
 public class AppCompatAutoCompleteTextView extends AutoCompleteTextView implements
-        TintableBackgroundView {
+        TintableBackgroundView, EmojiCompatConfigurationView {
 
     private static final int[] TINT_ATTRS = {
             android.R.attr.popupBackground
@@ -64,6 +65,8 @@
 
     private final AppCompatBackgroundHelper mBackgroundTintHelper;
     private final AppCompatTextHelper mTextHelper;
+    @NonNull
+    private final AppCompatEmojiEditTextHelper mAppCompatEmojiEditTextHelper;
 
     public AppCompatAutoCompleteTextView(@NonNull Context context) {
         this(context, null);
@@ -92,6 +95,10 @@
         mTextHelper = new AppCompatTextHelper(this);
         mTextHelper.loadFromAttributes(attrs, defStyleAttr);
         mTextHelper.applyCompoundDrawablesTints();
+
+        mAppCompatEmojiEditTextHelper = new AppCompatEmojiEditTextHelper(this);
+        mAppCompatEmojiEditTextHelper.loadFromAttributes(attrs, defStyleAttr);
+        mAppCompatEmojiEditTextHelper.initKeyListener();
     }
 
     @Override
@@ -192,8 +199,9 @@
 
     @Override
     public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
-        return AppCompatHintHelper.onCreateInputConnection(super.onCreateInputConnection(outAttrs),
-                outAttrs, this);
+        InputConnection inputConnection = AppCompatHintHelper.onCreateInputConnection(
+                super.onCreateInputConnection(outAttrs), outAttrs, this);
+        return mAppCompatEmojiEditTextHelper.onCreateInputConnection(inputConnection, outAttrs);
     }
 
     /**
@@ -213,4 +221,25 @@
         return TextViewCompat.unwrapCustomSelectionActionModeCallback(
                 super.getCustomSelectionActionModeCallback());
     }
+
+    /**
+     * Adds EmojiCompat KeyListener to correctly edit multi-codepoint emoji when they've been
+     * converted to spans.
+     *
+     * {@inheritDoc}
+     */
+    @Override
+    public void setKeyListener(@Nullable KeyListener keyListener) {
+        super.setKeyListener(mAppCompatEmojiEditTextHelper.getKeyListener(keyListener));
+    }
+
+    @Override
+    public void setEmojiCompatEnabled(boolean enabled) {
+        mAppCompatEmojiEditTextHelper.setEnabled(enabled);
+    }
+
+    @Override
+    public boolean isEmojiCompatEnabled() {
+        return mAppCompatEmojiEditTextHelper.isEnabled();
+    }
 }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
index 14e910be..703414c 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
@@ -22,6 +22,7 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
+import android.text.InputFilter;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.CheckBox;
@@ -54,11 +55,12 @@
  */
 @AppCompatShadowedAttributes
 public class AppCompatCheckBox extends CheckBox implements TintableCompoundButton,
-        TintableBackgroundView {
+        TintableBackgroundView, EmojiCompatConfigurationView {
 
     private final AppCompatCompoundButtonHelper mCompoundButtonHelper;
     private final AppCompatBackgroundHelper mBackgroundTintHelper;
     private final AppCompatTextHelper mTextHelper;
+    private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
 
     public AppCompatCheckBox(@NonNull Context context) {
         this(context, null);
@@ -82,6 +84,20 @@
 
         mTextHelper = new AppCompatTextHelper(this);
         mTextHelper.loadFromAttributes(attrs, defStyleAttr);
+
+        AppCompatEmojiTextHelper emojiTextViewHelper = getEmojiTextViewHelper();
+        emojiTextViewHelper.loadFromAttributes(attrs, defStyleAttr);
+    }
+
+    /**
+     * This may be called from super constructors.
+     */
+    @NonNull
+    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+        if (mAppCompatEmojiTextHelper == null) {
+            mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
+        }
+        return mAppCompatEmojiTextHelper;
     }
 
     @Override
@@ -236,4 +252,25 @@
             mTextHelper.applyCompoundDrawablesTints();
         }
     }
+
+    @Override
+    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+        super.setFilters(getEmojiTextViewHelper().getFilters(filters));
+    }
+
+    @Override
+    public void setAllCaps(boolean allCaps) {
+        super.setAllCaps(allCaps);
+        getEmojiTextViewHelper().setAllCaps(allCaps);
+    }
+
+    @Override
+    public void setEmojiCompatEnabled(boolean enabled) {
+        getEmojiTextViewHelper().setEnabled(enabled);
+    }
+
+    @Override
+    public boolean isEmojiCompatEnabled() {
+        return getEmojiTextViewHelper().isEnabled();
+    }
 }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
index 652fd7b..0004689 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
@@ -22,11 +22,13 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
+import android.text.InputFilter;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.RadioButton;
 
 import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 import androidx.appcompat.R;
@@ -53,11 +55,12 @@
  */
 @AppCompatShadowedAttributes
 public class AppCompatRadioButton extends RadioButton implements TintableCompoundButton,
-        TintableBackgroundView {
+        TintableBackgroundView, EmojiCompatConfigurationView {
 
     private final AppCompatCompoundButtonHelper mCompoundButtonHelper;
     private final AppCompatBackgroundHelper mBackgroundTintHelper;
     private final AppCompatTextHelper mTextHelper;
+    private AppCompatEmojiTextHelper mAppCompatEmojiTextHelper;
 
     public AppCompatRadioButton(Context context) {
         this(context, null);
@@ -80,6 +83,19 @@
 
         mTextHelper = new AppCompatTextHelper(this);
         mTextHelper.loadFromAttributes(attrs, defStyleAttr);
+        AppCompatEmojiTextHelper emojiTextViewHelper = getEmojiTextViewHelper();
+        emojiTextViewHelper.loadFromAttributes(attrs, defStyleAttr);
+    }
+
+    /**
+     * This may be called from super constructors.
+     */
+    @NonNull
+    private AppCompatEmojiTextHelper getEmojiTextViewHelper() {
+        if (mAppCompatEmojiTextHelper == null) {
+            mAppCompatEmojiTextHelper = new AppCompatEmojiTextHelper(this);
+        }
+        return mAppCompatEmojiTextHelper;
     }
 
     @Override
@@ -235,4 +251,25 @@
             mTextHelper.applyCompoundDrawablesTints();
         }
     }
+
+    @Override
+    public void setFilters(@SuppressWarnings("ArrayReturn") @NonNull InputFilter[] filters) {
+        super.setFilters(getEmojiTextViewHelper().getFilters(filters));
+    }
+
+    @Override
+    public void setAllCaps(boolean allCaps) {
+        super.setAllCaps(allCaps);
+        getEmojiTextViewHelper().setAllCaps(allCaps);
+    }
+
+    @Override
+    public void setEmojiCompatEnabled(boolean enabled) {
+        getEmojiTextViewHelper().setEnabled(enabled);
+    }
+
+    @Override
+    public boolean isEmojiCompatEnabled() {
+        return getEmojiTextViewHelper().isEnabled();
+    }
 }
diff --git a/appsearch/compiler/lint-baseline.xml b/appsearch/compiler/lint-baseline.xml
index 0df44a3..01adaec 100644
--- a/appsearch/compiler/lint-baseline.xml
+++ b/appsearch/compiler/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/arch/core/core-common/lint-baseline.xml b/arch/core/core-common/lint-baseline.xml
index 6798d30..78f729e 100644
--- a/arch/core/core-common/lint-baseline.xml
+++ b/arch/core/core-common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/arch/core/core-runtime/lint-baseline.xml b/arch/core/core-runtime/lint-baseline.xml
index c49c3ba..f2a45eb 100644
--- a/arch/core/core-runtime/lint-baseline.xml
+++ b/arch/core/core-runtime/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/arch/core/core-testing/lint-baseline.xml b/arch/core/core-testing/lint-baseline.xml
index a4d298c..1438e70 100644
--- a/arch/core/core-testing/lint-baseline.xml
+++ b/arch/core/core-testing/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/autofill/autofill/lint-baseline.xml b/autofill/autofill/lint-baseline.xml
index 06ac3e7..f97aac0 100644
--- a/autofill/autofill/lint-baseline.xml
+++ b/autofill/autofill/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/benchmark/common/lint-baseline.xml b/benchmark/common/lint-baseline.xml
index 7edd276..1aaaf43 100644
--- a/benchmark/common/lint-baseline.xml
+++ b/benchmark/common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
@@ -118,7 +118,7 @@
         errorLine2="                                                                     ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/benchmark/Outputs.kt"
-            line="59"
+            line="57"
             column="70"/>
     </issue>
 
@@ -129,7 +129,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/benchmark/Outputs.kt"
-            line="61"
+            line="59"
             column="37"/>
     </issue>
 
@@ -140,7 +140,7 @@
         errorLine2="              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/benchmark/Profiler.kt"
-            line="100"
+            line="98"
             column="15"/>
     </issue>
 
diff --git a/benchmark/integration-tests/macrobenchmark/lint-baseline.xml b/benchmark/integration-tests/macrobenchmark/lint-baseline.xml
new file mode 100644
index 0000000..88e5728
--- /dev/null
+++ b/benchmark/integration-tests/macrobenchmark/lint-baseline.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SmallListStartupBenchmark.kt"
+            line="37"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="    fun startup() = benchmarkRule.measureStartup("
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/benchmark/integration/macrobenchmark/SmallListStartupBenchmark.kt"
+            line="40"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/benchmark/integration/macrobenchmark/TrivialStartupBenchmark.kt"
+            line="37"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="    fun startup() = benchmarkRule.measureStartup("
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/benchmark/integration/macrobenchmark/TrivialStartupBenchmark.kt"
+            line="40"
+            column="35"/>
+    </issue>
+
+</issues>
diff --git a/benchmark/macro/lint-baseline.xml b/benchmark/macro/lint-baseline.xml
index 916146a..b296a9f 100644
--- a/benchmark/macro/lint-baseline.xml
+++ b/benchmark/macro/lint-baseline.xml
@@ -1,5 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 18): `StartupTimingMetric`"
+        errorLine1="    val metric = StartupTimingMetric()"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/benchmark/macro/StartupTimingMetricTest.kt"
+            line="90"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 18): `configure$lint_module`"
+        errorLine1="    metric.configure(packageName)"
+        errorLine2="           ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/benchmark/macro/StartupTimingMetricTest.kt"
+            line="91"
+            column="12"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 18): `getMetrics$lint_module`"
+        errorLine1="    return metric.getMetrics(packageName, tracePath)"
+        errorLine2="                  ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/benchmark/macro/StartupTimingMetricTest.kt"
+            line="93"
+            column="19"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
@@ -8,7 +41,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/benchmark/macro/Macrobenchmark.kt"
-            line="49"
+            line="47"
             column="26"/>
     </issue>
 
diff --git a/biometric/biometric/lint-baseline.xml b/biometric/biometric/lint-baseline.xml
new file mode 100644
index 0000000..1d9592f
--- /dev/null
+++ b/biometric/biometric/lint-baseline.xml
@@ -0,0 +1,1049 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `getBiometricCallback`"
+        errorLine1="                mAuthenticationCallbackProvider.getBiometricCallback();"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="62"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `getBiometricCallback`"
+        errorLine1="        assertThat(mAuthenticationCallbackProvider.getBiometricCallback()).isEqualTo(callback);"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="63"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.AuthenticationResult`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricPrompt.AuthenticationResult.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="70"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `new android.hardware.biometrics.BiometricPrompt.CryptoObject`"
+        errorLine1="                new android.hardware.biometrics.BiometricPrompt.CryptoObject(mCipher);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="72"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.AuthenticationResult#getCryptoObject`"
+        errorLine1="        when(result.getCryptoObject()).thenReturn(crypto);"
+        errorLine2="                    ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="73"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.AuthenticationCallback#onAuthenticationSucceeded`"
+        errorLine1="        mAuthenticationCallbackProvider.getBiometricCallback().onAuthenticationSucceeded(result);"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="75"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `getBiometricCallback`"
+        errorLine1="        mAuthenticationCallbackProvider.getBiometricCallback().onAuthenticationSucceeded(result);"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="75"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `getBiometricCallback`"
+        errorLine1="        mAuthenticationCallbackProvider.getBiometricCallback()"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="89"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.AuthenticationCallback#onAuthenticationError`"
+        errorLine1="                .onAuthenticationError(errorCode, errorMessage);"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="90"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `getBiometricCallback`"
+        errorLine1="        mAuthenticationCallbackProvider.getBiometricCallback()"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="102"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.AuthenticationCallback#onAuthenticationHelp`"
+        errorLine1="                .onAuthenticationHelp(helpCode, helpMessage);"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="103"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.AuthenticationCallback#onAuthenticationFailed`"
+        errorLine1="        mAuthenticationCallbackProvider.getBiometricCallback().onAuthenticationFailed();"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="111"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `getBiometricCallback`"
+        errorLine1="        mAuthenticationCallbackProvider.getBiometricCallback().onAuthenticationFailed();"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/AuthenticationCallbackProviderTest.java"
+            line="111"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricPrompt.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricFragmentTest.java"
+            line="169"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt#authenticate`"
+        errorLine1="        doThrow(NullPointerException.class).when(biometricPrompt).authenticate("
+        errorLine2="                                                                  ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricFragmentTest.java"
+            line="170"
+            column="67"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 16 (current min is 14): `android.os.CancellationSignal`"
+        errorLine1="                any(android.os.CancellationSignal.class),"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricFragmentTest.java"
+            line="171"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.AuthenticationCallback`"
+        errorLine1="                any(android.hardware.biometrics.BiometricPrompt.AuthenticationCallback.class));"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricFragmentTest.java"
+            line="173"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `authenticateWithBiometricPrompt`"
+        errorLine1="        mFragment.authenticateWithBiometricPrompt(biometricPrompt, mContext);"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricFragmentTest.java"
+            line="176"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="59"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_SUCCESS);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="60"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="81"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_ERROR_NONE_ENROLLED);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="82"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="104"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_ERROR_NO_HARDWARE);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="105"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="127"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_SUCCESS);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="128"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="169"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_SUCCESS);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="170"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="207"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_SUCCESS);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="208"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="245"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_ERROR_NO_HARDWARE);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="246"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="284"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_ERROR_NO_HARDWARE);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="285"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="323"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_ERROR_NONE_ENROLLED);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="324"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="358"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_SUCCESS);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="359"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="381"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_ERROR_NONE_ENROLLED);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="382"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="404"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_SUCCESS);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="405"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager`"
+        errorLine1="                mock(android.hardware.biometrics.BiometricManager.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="444"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.hardware.biometrics.BiometricManager#canAuthenticate`"
+        errorLine1="        when(frameworkBiometricManager.canAuthenticate()).thenReturn(BIOMETRIC_SUCCESS);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/BiometricManagerTest.java"
+            line="445"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 16 (current min is 14): `android.os.CancellationSignal`"
+        errorLine1="                return mock(android.os.CancellationSignal.class);"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="69"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `getBiometricCancellationSignal`"
+        errorLine1="                provider.getBiometricCancellationSignal();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="85"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `getBiometricCancellationSignal`"
+        errorLine1="        assertThat(provider.getBiometricCancellationSignal()).isEqualTo(cancellationSignal);"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="86"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `getBiometricCancellationSignal`"
+        errorLine1="        assertThat(provider.getBiometricCancellationSignal())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="95"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.os.CancellationSignal#cancel`"
+        errorLine1="        verify(mBiometricCancellationSignal).cancel();"
+        errorLine2="                                             ~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="100"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `getBiometricCancellationSignal`"
+        errorLine1="        assertThat(provider.getBiometricCancellationSignal())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="130"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.os.CancellationSignal#cancel`"
+        errorLine1="        verify(mBiometricCancellationSignal).cancel();"
+        errorLine2="                                             ~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="137"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `getBiometricCancellationSignal`"
+        errorLine1="                provider.getBiometricCancellationSignal();"
+        errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="147"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.os.CancellationSignal#cancel`"
+        errorLine1="        doThrow(NullPointerException.class).when(biometricSignal).cancel();"
+        errorLine2="                                                                  ~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="151"
+            column="67"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `getBiometricCancellationSignal`"
+        errorLine1="        assertThat(provider.getBiometricCancellationSignal()).isNotEqualTo(biometricSignal);"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CancellationSignalProviderTest.java"
+            line="156"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `unwrapFromBiometricPrompt`"
+        errorLine1="        assertThat(CryptoObjectUtils.unwrapFromBiometricPrompt(null)).isNull();"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="54"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `new android.hardware.biometrics.BiometricPrompt.CryptoObject`"
+        errorLine1="                new android.hardware.biometrics.BiometricPrompt.CryptoObject(mCipher);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="61"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `unwrapFromBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.unwrapFromBiometricPrompt(wrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="64"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `new android.hardware.biometrics.BiometricPrompt.CryptoObject`"
+        errorLine1="                new android.hardware.biometrics.BiometricPrompt.CryptoObject(mSignature);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="76"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `unwrapFromBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.unwrapFromBiometricPrompt(wrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="79"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `new android.hardware.biometrics.BiometricPrompt.CryptoObject`"
+        errorLine1="                new android.hardware.biometrics.BiometricPrompt.CryptoObject(mMac);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="91"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `unwrapFromBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.unwrapFromBiometricPrompt(wrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="94"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 30 (current min is 14): `android.security.identity.IdentityCredential`"
+        errorLine1="                mock(android.security.identity.IdentityCredential.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="106"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `new android.hardware.biometrics.BiometricPrompt.CryptoObject`"
+        errorLine1="                new android.hardware.biometrics.BiometricPrompt.CryptoObject(identityCredential);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="108"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `unwrapFromBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.unwrapFromBiometricPrompt(wrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="111"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `getIdentityCredential`"
+        errorLine1="        assertThat(unwrappedCrypto.getIdentityCredential()).isEqualTo(identityCredential);"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="117"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `wrapForBiometricPrompt`"
+        errorLine1="        assertThat(CryptoObjectUtils.wrapForBiometricPrompt(null)).isNull();"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="123"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `wrapForBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.wrapForBiometricPrompt(unwrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="133"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getCipher`"
+        errorLine1="        assertThat(wrappedCrypto.getCipher()).isEqualTo(mCipher);"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="136"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getSignature`"
+        errorLine1="        assertThat(wrappedCrypto.getSignature()).isNull();"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="137"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getMac`"
+        errorLine1="        assertThat(wrappedCrypto.getMac()).isNull();"
+        errorLine2="                                 ~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="138"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `wrapForBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.wrapForBiometricPrompt(unwrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="148"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getCipher`"
+        errorLine1="        assertThat(wrappedCrypto.getCipher()).isNull();"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="151"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getSignature`"
+        errorLine1="        assertThat(wrappedCrypto.getSignature()).isEqualTo(mSignature);"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="152"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getMac`"
+        errorLine1="        assertThat(wrappedCrypto.getMac()).isNull();"
+        errorLine2="                                 ~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="153"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `wrapForBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.wrapForBiometricPrompt(unwrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="162"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getCipher`"
+        errorLine1="        assertThat(wrappedCrypto.getCipher()).isNull();"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="165"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getSignature`"
+        errorLine1="        assertThat(wrappedCrypto.getSignature()).isNull();"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="166"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getMac`"
+        errorLine1="        assertThat(wrappedCrypto.getMac()).isEqualTo(mMac);"
+        errorLine2="                                 ~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="167"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 30 (current min is 14): `android.security.identity.IdentityCredential`"
+        errorLine1="                mock(android.security.identity.IdentityCredential.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="174"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `CryptoObject`"
+        errorLine1="                new BiometricPrompt.CryptoObject(identityCredential);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="176"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `wrapForBiometricPrompt`"
+        errorLine1="                CryptoObjectUtils.wrapForBiometricPrompt(unwrappedCrypto);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="179"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getCipher`"
+        errorLine1="        assertThat(wrappedCrypto.getCipher()).isNull();"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="182"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getSignature`"
+        errorLine1="        assertThat(wrappedCrypto.getSignature()).isNull();"
+        errorLine2="                                 ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="183"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getMac`"
+        errorLine1="        assertThat(wrappedCrypto.getMac()).isNull();"
+        errorLine2="                                 ~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="184"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.hardware.biometrics.BiometricPrompt.CryptoObject#getIdentityCredential`"
+        errorLine1="        assertThat(wrappedCrypto.getIdentityCredential()).isEqualTo(identityCredential);"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="185"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 30 (current min is 14): `android.security.identity.IdentityCredential`"
+        errorLine1="                mock(android.security.identity.IdentityCredential.class);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="294"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `CryptoObject`"
+        errorLine1="                new BiometricPrompt.CryptoObject(identityCredential);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/CryptoObjectUtilsTest.java"
+            line="296"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.content.Context#getSystemService`"
+        errorLine1="        when(mContext.getSystemService(KeyguardManager.class)).thenReturn(mKeyguardManager);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/KeyguardUtilsTest.java"
+            line="54"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.content.Context#getSystemService`"
+        errorLine1="        when(mContext.getSystemService(KeyguardManager.class)).thenReturn(null);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/KeyguardUtilsTest.java"
+            line="68"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.content.Context#getSystemService`"
+        errorLine1="        when(mContext.getSystemService(any(Class.class))).thenReturn(mKeyguardManager);"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/KeyguardUtilsTest.java"
+            line="95"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.app.KeyguardManager#isDeviceSecure`"
+        errorLine1="        when(mKeyguardManager.isDeviceSecure()).thenReturn(true);"
+        errorLine2="                              ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/KeyguardUtilsTest.java"
+            line="96"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.app.KeyguardManager#isKeyguardSecure`"
+        errorLine1="        when(mKeyguardManager.isKeyguardSecure()).thenReturn(true);"
+        errorLine2="                              ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/biometric/KeyguardUtilsTest.java"
+            line="104"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: BiometricPrompt.AUTHENTICATION_RESULT_TYPE_UNKNOWN, BiometricPrompt.AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL, BiometricPrompt.AUTHENTICATION_RESULT_TYPE_BIOMETRIC"
+        errorLine1="            return result.getAuthenticationType();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/biometric/AuthenticationCallbackProvider.java"
+            line="189"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: BiometricManager.BIOMETRIC_SUCCESS, BiometricManager.BIOMETRIC_STATUS_UNKNOWN, BiometricManager.BIOMETRIC_ERROR_UNSUPPORTED, BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE, BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED, BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE, BiometricManager.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED"
+        errorLine1="            return biometricManager.canAuthenticate(authenticators);"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/biometric/BiometricManager.java"
+            line="532"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: BiometricManager.BIOMETRIC_SUCCESS, BiometricManager.BIOMETRIC_STATUS_UNKNOWN, BiometricManager.BIOMETRIC_ERROR_UNSUPPORTED, BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE, BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED, BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE, BiometricManager.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED"
+        errorLine1="            return biometricManager.canAuthenticate();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/biometric/BiometricManager.java"
+            line="568"
+            column="20"/>
+    </issue>
+
+</issues>
diff --git a/browser/browser/lint-baseline.xml b/browser/browser/lint-baseline.xml
index b85e4387..99ae271 100644
--- a/browser/browser/lint-baseline.xml
+++ b/browser/browser/lint-baseline.xml
@@ -1,5 +1,49 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 16): `android.os.Bundle#getBinder`"
+        errorLine1="                intent.getExtras().getBinder(CustomTabsIntent.EXTRA_SESSION));"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java"
+            line="280"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 16): `android.os.Bundle#getBinder`"
+        errorLine1="                intent.getExtras().getBinder(CustomTabsIntent.EXTRA_SESSION));"
+        errorLine2="                                   ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java"
+            line="289"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 16): `android.os.Bundle#getBinder`"
+        errorLine1="        assertNull(intent.getExtras().getBinder(CustomTabsIntent.EXTRA_SESSION));"
+        errorLine2="                                      ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/browser/customtabs/CustomTabsIntentTest.java"
+            line="304"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 16): `android.os.Bundle#getBinder`"
+        errorLine1="        assertEquals(session.getBinder(), intent.getExtras().getBinder("
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/browser/customtabs/TestUtil.java"
+            line="56"
+            column="62"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/buildSrc/lint.xml b/buildSrc/lint.xml
index 1837ce0..1fb6d32 100644
--- a/buildSrc/lint.xml
+++ b/buildSrc/lint.xml
@@ -4,4 +4,15 @@
     <issue id="LintBaseline" severity="ignore">
         <ignore regexp=".* filtered out because .* listed in the baseline file.*"/>
     </issue>
+    <!-- Disable all lint checks on tests by default. -->
+    <issue id="all">
+        <ignore path="**/src/test/**" />
+        <ignore path="**/src/androidTest/**" />
+        <!-- Required for Kotlin multi-platform tests. -->
+        <ignore path="**/src/androidAndroidTest/**" />
+        <!-- Required for AppSearch icing tests. -->
+        <ignore path="**/java/tests/**" />
+    </issue>
+    <!-- Re-enable NewApi for tests (and everything else). -->
+    <issue id="NewApi" severity="fatal" />
 </lint>
diff --git a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
index ac18598..02146dc 100644
--- a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
@@ -19,6 +19,7 @@
 import androidx.benchmark.gradle.BenchmarkPlugin
 import androidx.build.AndroidXPlugin.Companion.CHECK_RELEASE_READY_TASK
 import androidx.build.AndroidXPlugin.Companion.TASK_TIMEOUT_MINUTES
+import androidx.build.Release.DEFAULT_PUBLISH_CONFIG
 import androidx.build.SupportConfig.BUILD_TOOLS_VERSION
 import androidx.build.SupportConfig.COMPILE_SDK_VERSION
 import androidx.build.SupportConfig.DEFAULT_MIN_SDK_VERSION
@@ -264,6 +265,12 @@
             configureAndroidLibraryOptions(project, androidXExtension)
         }
 
+        project.extensions.getByType<com.android.build.api.dsl.LibraryExtension>().apply {
+            publishing {
+                singleVariant(DEFAULT_PUBLISH_CONFIG)
+            }
+        }
+
         // TODO(aurimas): migrate away from this when upgrading to AGP 7.1.0-alpha03 or newer
         @Suppress("DEPRECATION")
         project.extensions.getByType<
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 50cfdb8..0777d2d 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -20,7 +20,7 @@
  * The list of versions codes of all the libraries in this project.
  */
 object LibraryVersions {
-    val ACTIVITY = Version("1.3.0-beta03")
+    val ACTIVITY = Version("1.4.0-alpha01")
     val ADS_IDENTIFIER = Version("1.0.0-alpha05")
     val ANNOTATION = Version("1.3.0-alpha01")
     val ANNOTATION_EXPERIMENTAL = Version("1.2.0-alpha01")
@@ -46,7 +46,7 @@
     val CAR_APP_PRE_RELEASE = Version("1.0.0-alpha01")
     val COLLECTION = Version("1.2.0-alpha02")
     val CONTENTPAGER = Version("1.1.0-alpha01")
-    val COMPOSE = Version(System.getenv("COMPOSE_CUSTOM_VERSION") ?: "1.0.0-beta10")
+    val COMPOSE = Version(System.getenv("COMPOSE_CUSTOM_VERSION") ?: "1.1.0-alpha01")
     val COORDINATORLAYOUT = Version("1.2.0-alpha01")
     val CORE = Version("1.7.0-alpha01")
     val CORE_ANIMATION = Version("1.0.0-alpha03")
@@ -56,7 +56,7 @@
     val CORE_ROLE = Version("1.1.0-alpha02")
     val CURSORADAPTER = Version("1.1.0-alpha01")
     val CUSTOMVIEW = Version("1.2.0-alpha01")
-    val DATASTORE = Version("1.0.0-beta03")
+    val DATASTORE = Version("1.0.0-rc01")
     val DOCUMENTFILE = Version("1.1.0-alpha01")
     val DRAWERLAYOUT = Version("1.2.0-alpha01")
     val DYNAMICANIMATION = Version("1.1.0-alpha04")
@@ -95,7 +95,7 @@
     val PRINT = Version("1.1.0-beta01")
     val PERCENTLAYOUT = Version("1.1.0-alpha01")
     val PREFERENCE = Version("1.2.0-alpha01")
-    val PROFILEINSTALLER = Version("1.0.0-beta02")
+    val PROFILEINSTALLER = Version("1.1.0-alpha01")
     val RECOMMENDATION = Version("1.1.0-alpha01")
     val RECYCLERVIEW = Version("1.3.0-alpha01")
     val RECYCLERVIEW_SELECTION = Version("1.2.0-alpha02")
diff --git a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
index 2538b82..60244af 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LintConfiguration.kt
@@ -129,6 +129,9 @@
             }
             isIgnoreWarnings = true
 
+            // Run lint on tests. Uses top-level lint.xml to specify checks.
+            isCheckTestSources = true
+
             // Write output directly to the console (and nowhere else).
             textReport = true
             htmlReport = false
@@ -210,7 +213,7 @@
             if (lintConfig == null) {
                 // suppress warnings more specifically than issue-wide severity (regexes)
                 // Currently suppresses warnings from baseline files working as intended
-                lintConfig = project.rootProject.file("buildSrc/lint.xml")
+                lintConfig = File(project.getSupportRootFolder(), "buildSrc/lint.xml")
             }
 
             // Ideally, teams aren't able to add new violations to a baseline file; they should only
@@ -225,41 +228,17 @@
 
                 // Analyze tasks are responsible for reading baselines and detecting issues, but
                 // they won't detect any issues that are already in the baselines. Delete them
-                // before the task evaluates up-to-date-ness.
-                listOf(
-                    tasks.named("lintAnalyzeDebug"),
-                    tasks.named("lintAnalyze"),
-                ).forEach { task ->
-                    val removeBaselineTask = project.tasks.register(
-                        "removeBaselineOf${task.name.capitalize(Locale.US)}",
-                        RemoveBaselineTask::class.java,
-                    ) { baselineTask ->
-                        baselineTask.baselineFile.set(lintBaseline)
-                    }
-
-                    task.configure {
-                        it.dependsOn(removeBaselineTask)
-                    }
-                }
+                // before the task evaluates up-to-date-ness using:
+                //
+                //     find . -type f -name lint-baseline.xml -exec rm -f {} \;
 
                 // Regular lint tasks are responsible for reading the output of analyze tasks and
                 // generating baseline files. They will fail if they generate a new baseline but
-                // there are no issues, so we need to delete the file as a finalization step.
-                listOf(
-                    tasks.named("lintDebug"),
-                    tasks.named("lint"),
-                ).forEach { task ->
-                    val removeEmptyBaselineTask = project.tasks.register(
-                        "removeEmptyBaselineOf${task.name.capitalize(Locale.US)}",
-                        RemoveEmptyBaselineTask::class.java,
-                    ) { baselineTask ->
-                        baselineTask.baselineFile.set(lintBaseline)
-                    }
-
-                    task.configure {
-                        it.finalizedBy(removeEmptyBaselineTask)
-                    }
-                }
+                // there are no issues, so we need to delete the file as a finalization step using:
+                //
+                //     find . -type f -name lint-baseline.xml \
+                //         -exec awk -v x=5 'NR==x{exit 1}' {} \; \
+                //         -exec rm -f {} \;
 
                 // Continue running after errors or after creating a new, blank baseline file.
                 // This doesn't work right now due to b/188545420, but it's technically correct.
diff --git a/buildSrc/src/main/kotlin/androidx/build/dackka/DackkaTask.kt b/buildSrc/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
index 62196e2..5b48527 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dackka/DackkaTask.kt
@@ -102,7 +102,9 @@
             // Configuration of sources. The generated string looks like this:
             // "-sourceSet -src /path/to/src -samples /path/to/samples ..."
             "-sourceSet",
-            "-src $sourcesDir -samples $samplesDir -classpath $classPath $includesString"
+            "-src $sourcesDir -samples $samplesDir -classpath $classPath $includesString",
+
+            "-offlineMode"
         )
     }
 
diff --git a/busytown/androidx-studio-integration.sh b/busytown/androidx-studio-integration.sh
index 945a9c3..fb9cc91 100755
--- a/busytown/androidx-studio-integration.sh
+++ b/busytown/androidx-studio-integration.sh
@@ -47,7 +47,7 @@
 function buildAndroidx() {
   LOG_PROCESSOR="$SCRIPT_DIR/../development/build_log_processor.sh"
   properties="-Pandroidx.summarizeStderr --no-daemon -Pandroidx.allWarningsAsErrors"
-  "$LOG_PROCESSOR"                   $gw $properties -p frameworks/support    listTaskOutputs bOS -x lintDebug -x lint -x verifyDependencyVersions --stacktrace -PverifyUpToDate --profile
+  "$LOG_PROCESSOR"                   $gw $properties -p frameworks/support    listTaskOutputs bOS -x verifyDependencyVersions --stacktrace -PverifyUpToDate --profile
   $SCRIPT_DIR/impl/parse_profile_htmls.sh
 }
 
diff --git a/camera/camera-camera2-pipe/lint-baseline.xml b/camera/camera-camera2-pipe/lint-baseline.xml
new file mode 100644
index 0000000..72e3568
--- /dev/null
+++ b/camera/camera-camera2-pipe/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.hardware.camera2.CameraDevice#createReprocessCaptureRequest`"
+        errorLine1="        return fakeCamera.cameraDevice.createReprocessCaptureRequest(inputResult)"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/pipe/testing/FakeCameraDeviceWrapper.kt"
+            line="51"
+            column="40"/>
+    </issue>
+
+</issues>
diff --git a/camera/camera-camera2/lint-baseline.xml b/camera/camera-camera2/lint-baseline.xml
index 195e5d3..3c8a8b9 100644
--- a/camera/camera-camera2/lint-baseline.xml
+++ b/camera/camera-camera2/lint-baseline.xml
@@ -1,5 +1,544 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `android.hardware.camera2.CameraCaptureSession#captureBurstRequests`"
+        errorLine1="        verify(mCaptureSession, times(1)).captureBurstRequests(any(List.class),"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraCaptureSessionCompatTest.java"
+            line="83"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `android.hardware.camera2.CameraCaptureSession#captureSingleRequest`"
+        errorLine1="        verify(mCaptureSession, times(1)).captureSingleRequest(any(CaptureRequest.class),"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraCaptureSessionCompatTest.java"
+            line="110"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `android.hardware.camera2.CameraCaptureSession#setRepeatingBurstRequests`"
+        errorLine1="        verify(mCaptureSession, times(1)).setRepeatingBurstRequests(any(List.class),"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraCaptureSessionCompatTest.java"
+            line="140"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `android.hardware.camera2.CameraCaptureSession#setSingleRepeatingRequest`"
+        errorLine1="        verify(mCaptureSession, times(1)).setSingleRepeatingRequest(any(CaptureRequest.class),"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraCaptureSessionCompatTest.java"
+            line="168"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `android.hardware.camera2.CameraDevice#createCaptureSessionByOutputConfigurations`"
+        errorLine1="        verify(mCameraDevice, times(1)).createCaptureSessionByOutputConfigurations("
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="104"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `android.hardware.camera2.CameraDevice#createCaptureSession`"
+        errorLine1="        verify(mCameraDevice, times(1)).createCaptureSession("
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="123"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 28 (current min is 21): `android.hardware.camera2.params.SessionConfiguration`"
+        errorLine1="                any(SessionConfiguration.class));"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="124"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 23 (current min is 21): `android.hardware.camera2.params.InputConfiguration`"
+        errorLine1="                InputConfigurationCompat.wrap(mock(InputConfiguration.class))));"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="167"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.hardware.camera2.CameraDevice#createReprocessableCaptureSession`"
+        errorLine1="        verify(mCameraDevice, times(1)).createReprocessableCaptureSession("
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="172"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 23 (current min is 21): `android.hardware.camera2.params.InputConfiguration`"
+        errorLine1="                any(InputConfiguration.class),"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="173"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 23 (current min is 21): `android.hardware.camera2.params.InputConfiguration`"
+        errorLine1="                InputConfigurationCompat.wrap(mock(InputConfiguration.class))));"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="192"
+            column="52"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `android.hardware.camera2.CameraDevice#createReprocessableCaptureSessionByConfigurations`"
+        errorLine1="        verify(mCameraDevice, times(1)).createReprocessableCaptureSessionByConfigurations("
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="197"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 23 (current min is 21): `android.hardware.camera2.params.InputConfiguration`"
+        errorLine1="                any(InputConfiguration.class),"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="198"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.hardware.camera2.CameraDevice#createConstrainedHighSpeedCaptureSession`"
+        errorLine1="        verify(mCameraDevice, times(1)).createConstrainedHighSpeedCaptureSession("
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/CameraDeviceCompatTest.java"
+            line="217"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="104"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="122"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="140"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="158"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="176"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="194"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="212"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="230"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="248"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="266"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ENABLE_ZSL`"
+        errorLine1="                CaptureRequest.CONTROL_ENABLE_ZSL, null))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/ImageCaptureOptionUnpackerTest.java"
+            line="284"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `new android.hardware.camera2.params.InputConfiguration`"
+        errorLine1="        InputConfiguration inputConfig = new InputConfiguration(WIDTH, HEIGHT, FORMAT);"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/InputConfigurationCompatTest.java"
+            line="52"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `new android.hardware.camera2.params.InputConfiguration`"
+        errorLine1="        InputConfiguration config = new InputConfiguration(WIDTH, HEIGHT, FORMAT);"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/InputConfigurationCompatTest.java"
+            line="84"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `new android.hardware.camera2.params.InputConfiguration`"
+        errorLine1="        InputConfiguration config = new InputConfiguration(WIDTH, HEIGHT, FORMAT);"
+        errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/InputConfigurationCompatTest.java"
+            line="96"
+            column="37"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 24 (current min is 21): `android.hardware.camera2.params.OutputConfiguration`"
+        errorLine1="        assertThat(outputConfig).isInstanceOf(OutputConfiguration.class);"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatTest.java"
+            line="172"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.hardware.camera2.params.OutputConfiguration`"
+        errorLine1="        OutputConfiguration outputConfig = new OutputConfiguration(surface);"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatTest.java"
+            line="179"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `new android.hardware.camera2.params.OutputConfiguration`"
+        errorLine1="        OutputConfiguration outputConfig = new OutputConfiguration(TEST_GROUP_ID, surface);"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatTest.java"
+            line="189"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `OutputConfigurationCompat`"
+        errorLine1="        OutputConfigurationCompat outputConfigCompat = new OutputConfigurationCompat("
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatTest.java"
+            line="198"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 24 (current min is 21): `android.hardware.camera2.params.OutputConfiguration`"
+        errorLine1="        OutputConfiguration outputConfig = mock(OutputConfiguration.class);"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatTest.java"
+            line="218"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId`"
+        errorLine1="        verify(outputConfig, times(1)).setPhysicalCameraId(PHYSICAL_CAMERA_ID);"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/OutputConfigurationCompatTest.java"
+            line="224"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 24 (current min is 21): `android.hardware.camera2.params.OutputConfiguration`"
+        errorLine1="            outputConfigs.add((OutputConfiguration) outputConfigCompat.unwrap());"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompatTest.java"
+            line="93"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `new android.hardware.camera2.params.SessionConfiguration`"
+        errorLine1="        SessionConfiguration sessionConfig = new SessionConfiguration("
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompatTest.java"
+            line="96"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 21): `android.hardware.camera2.params.SessionConfiguration#getOutputConfigurations`"
+        errorLine1="                ((SessionConfiguration) sessionConfigCompat.unwrap()).getOutputConfigurations())"
+        errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompatTest.java"
+            line="114"
+            column="71"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 28 (current min is 21): `android.hardware.camera2.params.SessionConfiguration`"
+        errorLine1="                ((SessionConfiguration) sessionConfigCompat.unwrap()).getOutputConfigurations())"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompatTest.java"
+            line="114"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `android.hardware.camera2.CameraCaptureSession.StateCallback#onCaptureQueueEmpty`"
+        errorLine1="        sessionConfigurationCompat.getStateCallback().onCaptureQueueEmpty(mMockCaptureSession);"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionBaseTest.java"
+            line="118"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `onCaptureQueueEmpty`"
+        errorLine1="        verify(mMockStateCallback).onCaptureQueueEmpty(any(SynchronizedCaptureSession.class));"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionBaseTest.java"
+            line="120"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.hardware.camera2.CameraCaptureSession.StateCallback#onSurfacePrepared`"
+        errorLine1="        sessionConfigurationCompat.getStateCallback().onSurfacePrepared(mMockCaptureSession,"
+        errorLine2="                                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionBaseTest.java"
+            line="132"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `onSurfacePrepared`"
+        errorLine1="        verify(mMockStateCallback).onSurfacePrepared(any(SynchronizedCaptureSession.class),"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionBaseTest.java"
+            line="135"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `onCaptureQueueEmpty`"
+        errorLine1="        mStateCallback.onCaptureQueueEmpty(mCaptureSessionCompatBaseImpl);"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionStateCallbackTest.java"
+            line="70"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `onCaptureQueueEmpty`"
+        errorLine1="        verify(mMockStateCallback).onCaptureQueueEmpty(any());"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionStateCallbackTest.java"
+            line="71"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `android.hardware.camera2.CameraCaptureSession.StateCallback#onCaptureQueueEmpty`"
+        errorLine1="        verify(mMockCameraCaptureSessionStateCallback).onCaptureQueueEmpty(any());"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionStateCallbackTest.java"
+            line="72"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `onSurfacePrepared`"
+        errorLine1="        mStateCallback.onSurfacePrepared(mCaptureSessionCompatBaseImpl, mock(Surface.class));"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionStateCallbackTest.java"
+            line="79"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `onSurfacePrepared`"
+        errorLine1="        verify(mMockStateCallback).onSurfacePrepared(any(), any(Surface.class));"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionStateCallbackTest.java"
+            line="80"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.hardware.camera2.CameraCaptureSession.StateCallback#onSurfacePrepared`"
+        errorLine1="        verify(mMockCameraCaptureSessionStateCallback).onSurfacePrepared(any(), any(Surface.class));"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/camera2/internal/SynchronizedCaptureSessionStateCallbackTest.java"
+            line="81"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 30 (current min is 21): `android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO`"
+        errorLine1="                CaptureRequest.CONTROL_ZOOM_RATIO, null);"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/camera/camera2/internal/ZoomControlDeviceTest.java"
+            line="269"
+            column="17"/>
+    </issue>
 
     <issue
         id="SoonBlockedPrivateApi"
@@ -24,8 +563,19 @@
     </issue>
 
     <issue
+        id="WrongConstant"
+        message="Must be one of: SessionConfigurationCompat.SESSION_REGULAR, SessionConfigurationCompat.SESSION_HIGH_SPEED"
+        errorLine1="            return mObject.getSessionType();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/camera2/internal/compat/params/SessionConfigurationCompat.java"
+            line="427"
+            column="20"/>
+    </issue>
+
+    <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                return (Size) getSurfaceSize.invoke(null, surface);"
         errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -36,7 +586,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                return (int) detectSurfaceType.invoke(null, surface);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -47,7 +597,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                return (int) getGenerationId.invoke(surface);"
         errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/camera/camera-core/lint-baseline.xml b/camera/camera-core/lint-baseline.xml
index 9b6f6dc..debefae 100644
--- a/camera/camera-core/lint-baseline.xml
+++ b/camera/camera-core/lint-baseline.xml
@@ -1,5 +1,82 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `java.time.Duration#ofMillis`"
+        errorLine1="        ShadowSystemClock.advanceBy(Duration.ofMillis(100));"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/core/impl/utils/ExifTest.java"
+            line="159"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `java.time.Duration#ofMillis`"
+        errorLine1="        ShadowSystemClock.advanceBy(Duration.ofMillis(100));"
+        errorLine2="                                             ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/core/impl/utils/ExifTest.java"
+            line="162"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `new android.graphics.SurfaceTexture`"
+        errorLine1="        mTestSurfaceTexture = new SurfaceTexture(/* singleBufferMode= */ false);"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/core/internal/compat/ImageWriterCompatTest.java"
+            line="47"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `newInstance`"
+        errorLine1="        ImageWriter imageWriter = ImageWriterCompat.newInstance(mTestSurface,"
+        errorLine2="                                                    ~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/core/internal/compat/ImageWriterCompatTest.java"
+            line="59"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 22 (current min is 21): `android.os.Message#isAsynchronous`"
+        errorLine1="        boolean isAsyncBeforeSending = message.isAsynchronous();"
+        errorLine2="                                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/core/impl/utils/MainThreadAsyncHandlerTest.java"
+            line="64"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 22 (current min is 21): `android.os.Message#isAsynchronous`"
+        errorLine1="        boolean isAsyncAfterSending = message.isAsynchronous();"
+        errorLine2="                                              ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/camera/core/impl/utils/MainThreadAsyncHandlerTest.java"
+            line="68"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 23): `triggerImage`"
+        errorLine1="        triggerImage(processingSurface, 1);"
+        errorLine2="        ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/camera/core/ProcessingSurfaceTest.java"
+            line="158"
+            column="9"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/camera/camera-extensions-stub/lint-baseline.xml b/camera/camera-extensions-stub/lint-baseline.xml
index 9b4df78..e77b730 100644
--- a/camera/camera-extensions-stub/lint-baseline.xml
+++ b/camera/camera-extensions-stub/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/camera/camera-extensions/lint-baseline.xml b/camera/camera-extensions/lint-baseline.xml
deleted file mode 100644
index 5bc97e7..0000000
--- a/camera/camera-extensions/lint-baseline.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public Version getVersion() {"
-        errorLine2="           ~~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/VersionName.java"
-            line="39"
-            column="12"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public String toVersionString() {"
-        errorLine2="           ~~~~~~">
-        <location
-            file="src/main/java/androidx/camera/extensions/VersionName.java"
-            line="56"
-            column="12"/>
-    </issue>
-
-</issues>
diff --git a/camera/camera-testing/lint-baseline.xml b/camera/camera-testing/lint-baseline.xml
index 3163cc2..d112ce8 100644
--- a/camera/camera-testing/lint-baseline.xml
+++ b/camera/camera-testing/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
@@ -85,7 +85,7 @@
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/testing/fakes/FakeCameraControl.java"
-            line="87"
+            line="86"
             column="53"/>
     </issue>
 
diff --git a/camera/camera-video/lint-baseline.xml b/camera/camera-video/lint-baseline.xml
new file mode 100644
index 0000000..896856e
--- /dev/null
+++ b/camera/camera-video/lint-baseline.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `prepareRecording`"
+        errorLine1="            recorder.prepareRecording(outputOptions)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/camera/video/RecorderTest.kt"
+            line="298"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: OutputFormat.MUXER_OUTPUT_MPEG_4, OutputFormat.MUXER_OUTPUT_WEBM, OutputFormat.MUXER_OUTPUT_3GPP, OutputFormat.MUXER_OUTPUT_HEIF, OutputFormat.MUXER_OUTPUT_OGG"
+        errorLine1="                        outputFormat);"
+        errorLine2="                        ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/video/Recorder.java"
+            line="929"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: OutputFormat.MUXER_OUTPUT_MPEG_4, OutputFormat.MUXER_OUTPUT_WEBM, OutputFormat.MUXER_OUTPUT_3GPP, OutputFormat.MUXER_OUTPUT_HEIF, OutputFormat.MUXER_OUTPUT_OGG"
+        errorLine1="                    mMediaMuxer = new MediaMuxer(path, outputFormat);"
+        errorLine2="                                                       ~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/video/Recorder.java"
+            line="964"
+            column="56"/>
+    </issue>
+
+</issues>
diff --git a/camera/camera-view/api/current.txt b/camera/camera-view/api/current.txt
index e9aa22e..a1ecc5d 100644
--- a/camera/camera-view/api/current.txt
+++ b/camera/camera-view/api/current.txt
@@ -80,6 +80,8 @@
     method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
     method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
     method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort(int);
     method @UiThread public void setController(androidx.camera.view.CameraController?);
     method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
     method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
diff --git a/camera/camera-view/api/public_plus_experimental_current.txt b/camera/camera-view/api/public_plus_experimental_current.txt
index 991872b..ab1bd4b 100644
--- a/camera/camera-view/api/public_plus_experimental_current.txt
+++ b/camera/camera-view/api/public_plus_experimental_current.txt
@@ -86,8 +86,8 @@
     method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
     method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
     method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
-    method @UiThread @androidx.camera.core.ExperimentalUseCaseGroup public androidx.camera.core.ViewPort? getViewPort();
-    method @UiThread @androidx.camera.core.ExperimentalUseCaseGroup public androidx.camera.core.ViewPort? getViewPort(int);
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort(int);
     method @UiThread public void setController(androidx.camera.view.CameraController?);
     method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
     method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
@@ -126,10 +126,10 @@
 
   public final class CoordinateTransform {
     ctor public CoordinateTransform(androidx.camera.view.transform.OutputTransform, androidx.camera.view.transform.OutputTransform);
-    method public void getTransform(android.graphics.Matrix);
     method public void mapPoint(android.graphics.PointF);
     method public void mapPoints(float[]);
     method public void mapRect(android.graphics.RectF);
+    method public void transform(android.graphics.Matrix);
   }
 
   public final class FileTransformFactory {
diff --git a/camera/camera-view/api/restricted_current.txt b/camera/camera-view/api/restricted_current.txt
index 93845dc..c08e4ed 100644
--- a/camera/camera-view/api/restricted_current.txt
+++ b/camera/camera-view/api/restricted_current.txt
@@ -80,6 +80,8 @@
     method public androidx.lifecycle.LiveData<androidx.camera.view.PreviewView.StreamState!> getPreviewStreamState();
     method @UiThread public androidx.camera.view.PreviewView.ScaleType getScaleType();
     method @UiThread public androidx.camera.core.Preview.SurfaceProvider getSurfaceProvider();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort();
+    method @UiThread public androidx.camera.core.ViewPort? getViewPort(@androidx.camera.core.impl.ImageOutputConfig.RotationValue int);
     method @UiThread public void setController(androidx.camera.view.CameraController?);
     method @UiThread public void setImplementationMode(androidx.camera.view.PreviewView.ImplementationMode);
     method @UiThread public void setScaleType(androidx.camera.view.PreviewView.ScaleType);
diff --git a/camera/camera-view/lint-baseline.xml b/camera/camera-view/lint-baseline.xml
new file mode 100644
index 0000000..327075e
--- /dev/null
+++ b/camera/camera-view/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: AspectRatio.RATIO_4_3, AspectRatio.RATIO_16_9"
+        errorLine1="            builder.setTargetAspectRatio(outputSize.getAspectRatio());"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/camera/view/CameraController.java"
+            line="465"
+            column="42"/>
+    </issue>
+
+</issues>
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java b/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java
index 720ba9b..37bfd4b 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/PreviewView.java
@@ -497,7 +497,6 @@
      */
     @UiThread
     @Nullable
-    @ExperimentalUseCaseGroup
     public ViewPort getViewPort() {
         Threads.checkMainThread();
         if (getDisplay() == null) {
@@ -548,7 +547,7 @@
     @UiThread
     @SuppressLint("WrongConstant")
     @Nullable
-    @ExperimentalUseCaseGroup
+    @OptIn(markerClass = ExperimentalUseCaseGroup.class)
     public ViewPort getViewPort(@ImageOutputConfig.RotationValue int targetRotation) {
         Threads.checkMainThread();
         if (getWidth() == 0 || getHeight() == 0) {
diff --git a/camera/camera-view/src/main/java/androidx/camera/view/transform/CoordinateTransform.java b/camera/camera-view/src/main/java/androidx/camera/view/transform/CoordinateTransform.java
index 297560a..2410885 100644
--- a/camera/camera-view/src/main/java/androidx/camera/view/transform/CoordinateTransform.java
+++ b/camera/camera-view/src/main/java/androidx/camera/view/transform/CoordinateTransform.java
@@ -97,13 +97,12 @@
     }
 
     /**
-     * Gets the transform matrix.
+     * Copies the current transform to the specified {@link Matrix}.
      *
-     * @param matrix a {@link android.graphics.Matrix} that represents the transform from source
-     *               to target.
+     * @param outMatrix a {@link android.graphics.Matrix} in which to copy the current transform.
      */
-    public void getTransform(@NonNull Matrix matrix) {
-        matrix.set(mMatrix);
+    public void transform(@NonNull Matrix outMatrix) {
+        outMatrix.set(mMatrix);
     }
 
     /**
diff --git a/camera/camera-view/src/test/java/androidx/camera/view/transform/CoordinateTransformTest.kt b/camera/camera-view/src/test/java/androidx/camera/view/transform/CoordinateTransformTest.kt
index 419116c..31153d8 100644
--- a/camera/camera-view/src/test/java/androidx/camera/view/transform/CoordinateTransformTest.kt
+++ b/camera/camera-view/src/test/java/androidx/camera/view/transform/CoordinateTransformTest.kt
@@ -101,7 +101,7 @@
         // Set an arbitrary transform so it's no longer identity matrix.
         matrix.setRotate(90f)
         assertThat(matrix.isIdentity).isFalse()
-        transform.getTransform(matrix)
+        transform.transform(matrix)
         assertThat(matrix.isIdentity).isTrue()
     }
 
diff --git a/camera/integration-tests/camerapipetestapp/lint-baseline.xml b/camera/integration-tests/camerapipetestapp/lint-baseline.xml
index 6dca65d..b8de2b8 100644
--- a/camera/integration-tests/camerapipetestapp/lint-baseline.xml
+++ b/camera/integration-tests/camerapipetestapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
@@ -12,37 +12,4 @@
             column="43"/>
     </issue>
 
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    fun useAppContext() {"
-        errorLine2="        ~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/camera/integration/camera2/pipe/BasicInstrumentedTest.kt"
-            line="35"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="19"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="19"
-            column="6"/>
-    </issue>
-
 </issues>
diff --git a/camera/integration-tests/coretestapp/lint-baseline.xml b/camera/integration-tests/coretestapp/lint-baseline.xml
index b9701dd..4560f89 100644
--- a/camera/integration-tests/coretestapp/lint-baseline.xml
+++ b/camera/integration-tests/coretestapp/lint-baseline.xml
@@ -1,26 +1,48 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
-        id="UnsupportedChromeOsHardware"
-        message="Expecting `android:required=&quot;false&quot;` for this hardware feature that may not be supported by all Chrome OS devices"
-        errorLine1="    &lt;uses-feature android:name=&quot;android.hardware.camera&quot; />"
-        errorLine2="     ~~~~~~~~~~~~">
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.lang.Double#isFinite`"
+        errorLine1="            if (Double.isFinite(actual[i])) {"
+        errorLine2="                       ~~~~~~~~">
         <location
-            file="src/main/AndroidManifest.xml"
-            line="22"
-            column="6"/>
+            file="src/test/java/androidx/camera/integration/core/FpsRecorderTest.java"
+            line="63"
+            column="24"/>
     </issue>
 
     <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.lang.Double#isFinite`"
+        errorLine1="            if (Double.isFinite(actual[i])) {"
+        errorLine2="                       ~~~~~~~~">
         <location
-            file="src/main/AndroidManifest.xml"
-            line="18"
-            column="6"/>
+            file="src/test/java/androidx/camera/integration/core/FpsRecorderTest.java"
+            line="138"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.media.ImageWriter#newInstance`"
+        errorLine1="            imageWriter = ImageWriter.newInstance(surface, 2)"
+        errorLine2="                                      ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt"
+            line="1512"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.media.ImageWriter#queueInputImage`"
+        errorLine1="                imageWriter!!.queueInputImage(imageProxy.image)"
+        errorLine2="                              ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/camera/integration/core/ImageCaptureTest.kt"
+            line="1520"
+            column="31"/>
     </issue>
 
     <issue
@@ -30,7 +52,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="182"
+            line="180"
             column="13"/>
     </issue>
 
@@ -41,7 +63,7 @@
         errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="185"
+            line="183"
             column="22"/>
     </issue>
 
@@ -52,7 +74,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="186"
+            line="184"
             column="21"/>
     </issue>
 
@@ -63,7 +85,7 @@
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="384"
+            line="380"
             column="25"/>
     </issue>
 
@@ -74,7 +96,7 @@
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="387"
+            line="383"
             column="25"/>
     </issue>
 
@@ -85,7 +107,7 @@
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="396"
+            line="392"
             column="33"/>
     </issue>
 
@@ -96,7 +118,7 @@
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="405"
+            line="401"
             column="45"/>
     </issue>
 
@@ -107,7 +129,7 @@
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/core/CameraXActivity.java"
-            line="427"
+            line="423"
             column="45"/>
     </issue>
 
diff --git a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
index daaf6fb..be615c3 100644
--- a/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
+++ b/camera/integration-tests/coretestapp/src/main/java/androidx/camera/integration/core/CameraXActivity.java
@@ -412,6 +412,13 @@
                         if (finalize.getError() != VideoRecordEvent.ERROR_NONE) {
                             msg += " with error (" + finalize.getError() + ")";
                         }
+                        // The video file path is used in tracing e2e test log. Don't remove it.
+                        String videoFile = getAbsolutePathFromUri(
+                                getApplicationContext().getContentResolver(),
+                                uri
+                        );
+                        Log.d(TAG, "Saved video file: " + videoFile);
+
                         Log.d(TAG, msg, finalize.getCause());
                         Toast.makeText(CameraXActivity.this, msg, Toast.LENGTH_LONG).show();
                         break;
diff --git a/camera/integration-tests/extensionstestapp/lint-baseline.xml b/camera/integration-tests/extensionstestapp/lint-baseline.xml
index e773319..4e7aca8 100644
--- a/camera/integration-tests/extensionstestapp/lint-baseline.xml
+++ b/camera/integration-tests/extensionstestapp/lint-baseline.xml
@@ -1,26 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
-        id="UnsupportedChromeOsHardware"
-        message="Expecting `android:required=&quot;false&quot;` for this hardware feature that may not be supported by all Chrome OS devices"
-        errorLine1="    &lt;uses-feature android:name=&quot;android.hardware.camera&quot; />"
-        errorLine2="     ~~~~~~~~~~~~">
+        id="NewApi"
+        message="Call requires API level 29 (current min is 21): `android.os.Handler#hasCallbacks`"
+        errorLine1="        if (!mIdle &amp;&amp; !mHandler.hasCallbacks(mRunnable)) {"
+        errorLine2="                                ~~~~~~~~~~~~">
         <location
-            file="src/main/AndroidManifest.xml"
-            line="24"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="20"
-            column="6"/>
+            file="src/androidTest/java/androidx/camera/integration/extensions/idlingresource/ViewIdlingResource.java"
+            line="78"
+            column="33"/>
     </issue>
 
     <issue
@@ -30,7 +19,7 @@
         errorLine2="                            ~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/extensions/CameraExtensionsActivity.java"
-            line="281"
+            line="265"
             column="29"/>
     </issue>
 
diff --git a/camera/integration-tests/extensionstestlib/lint-baseline.xml b/camera/integration-tests/extensionstestlib/lint-baseline.xml
index 19e17b2..17cd540 100644
--- a/camera/integration-tests/extensionstestlib/lint-baseline.xml
+++ b/camera/integration-tests/extensionstestlib/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/camera/integration-tests/timingtestapp/lint-baseline.xml b/camera/integration-tests/timingtestapp/lint-baseline.xml
index 3a68c2d..56aa960 100644
--- a/camera/integration-tests/timingtestapp/lint-baseline.xml
+++ b/camera/integration-tests/timingtestapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
@@ -19,30 +19,8 @@
         errorLine2="                           ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/camera/integration/antelope/cameracontrollers/CameraXController.kt"
-            line="279"
+            line="282"
             column="28"/>
     </issue>
 
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="20"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="20"
-            column="6"/>
-    </issue>
-
 </issues>
diff --git a/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml b/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml
index f3c0b38..4baa02f 100644
--- a/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml
+++ b/camera/integration-tests/uiwidgetstestapp/lint-baseline.xml
@@ -1,27 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="56"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="56"
-            column="6"/>
-    </issue>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/camera/integration-tests/viewtestapp/lint-baseline.xml b/camera/integration-tests/viewtestapp/lint-baseline.xml
deleted file mode 100644
index 07b6fc0..0000000
--- a/camera/integration-tests/viewtestapp/lint-baseline.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="18"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="PermissionImpliesUnsupportedChromeOsHardware"
-        message="Permission exists without corresponding hardware `&lt;uses-feature android:name=&quot;android.hardware.camera.autofocus&quot; required=&quot;false&quot;>` tag"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.CAMERA&quot; />"
-        errorLine2="     ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="18"
-            column="6"/>
-    </issue>
-
-</issues>
diff --git a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/TransformFragment.java b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/TransformFragment.java
index 78b879c..5e6eaa3 100644
--- a/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/TransformFragment.java
+++ b/camera/integration-tests/viewtestapp/src/main/java/androidx/camera/integration/view/TransformFragment.java
@@ -589,7 +589,7 @@
             @NonNull RectF imageProxyTile) {
         CoordinateTransform transform = new CoordinateTransform(source, target);
         Matrix matrix = new Matrix();
-        transform.getTransform(matrix);
+        transform.transform(matrix);
         matrix.mapRect(imageProxyTile);
         return imageProxyTile;
     }
diff --git a/car/app/app-automotive/build.gradle b/car/app/app-automotive/build.gradle
index 0a2212a..54abcc2 100644
--- a/car/app/app-automotive/build.gradle
+++ b/car/app/app-automotive/build.gradle
@@ -41,6 +41,7 @@
     testImplementation(libs.robolectric)
     testImplementation(libs.truth)
     testImplementation("androidx.fragment:fragment-testing:1.2.3")
+    testImplementation project(path: ':car:app:app-testing')
 }
 
 android {
diff --git a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/AutomotiveCarHardwareManager.java b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/AutomotiveCarHardwareManager.java
index 7c058d0..1b5f28d 100644
--- a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/AutomotiveCarHardwareManager.java
+++ b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/AutomotiveCarHardwareManager.java
@@ -18,17 +18,20 @@
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 
+import static java.util.Objects.requireNonNull;
+
 import android.content.Context;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
+import androidx.car.app.hardware.common.PropertyManager;
 import androidx.car.app.hardware.info.AutomotiveCarInfo;
 import androidx.car.app.hardware.info.AutomotiveCarSensors;
 import androidx.car.app.hardware.info.CarInfo;
 import androidx.car.app.hardware.info.CarSensors;
 
 /**
- * {@link CarHardwareManager} which connects to Android Automotive OS to access properties, sensors,
+ * {@link CarHardwareManager} which uses Android Automotive OS APIs to access properties, sensors,
  * and actions.
  *
  * @hide
@@ -39,6 +42,12 @@
     private final AutomotiveCarInfo mCarInfo;
     private final AutomotiveCarSensors mCarSensors;
 
+    public AutomotiveCarHardwareManager(@NonNull Context context) {
+        requireNonNull(context);
+        mCarInfo = new AutomotiveCarInfo(new PropertyManager(context));
+        mCarSensors = new AutomotiveCarSensors();
+    }
+
     @NonNull
     @Override
     public CarInfo getCarInfo() {
@@ -50,9 +59,4 @@
     public CarSensors getCarSensors() {
         return mCarSensors;
     }
-
-    public AutomotiveCarHardwareManager(@NonNull Context context) {
-        mCarInfo = new AutomotiveCarInfo();
-        mCarSensors = new AutomotiveCarSensors();
-    }
 }
diff --git a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/info/AutomotiveCarInfo.java b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/info/AutomotiveCarInfo.java
index c1705f5..b45bcfd 100644
--- a/car/app/app-automotive/src/main/java/androidx/car/app/hardware/info/AutomotiveCarInfo.java
+++ b/car/app/app-automotive/src/main/java/androidx/car/app/hardware/info/AutomotiveCarInfo.java
@@ -15,35 +15,84 @@
  */
 package androidx.car.app.hardware.info;
 
+import static android.car.VehiclePropertyIds.INFO_EV_CONNECTOR_TYPE;
+import static android.car.VehiclePropertyIds.INFO_FUEL_TYPE;
+import static android.car.VehiclePropertyIds.INFO_MAKE;
+import static android.car.VehiclePropertyIds.INFO_MODEL;
+import static android.car.VehiclePropertyIds.INFO_MODEL_YEAR;
+
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
+import static androidx.car.app.activity.LogTags.TAG;
+
+import static java.util.Objects.requireNonNull;
+
+import android.util.Log;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
+import androidx.annotation.VisibleForTesting;
+import androidx.car.app.hardware.common.CarPropertyResponse;
+import androidx.car.app.hardware.common.CarValue;
+import androidx.car.app.hardware.common.GetPropertyRequest;
 import androidx.car.app.hardware.common.OnCarDataListener;
+import androidx.car.app.hardware.common.PropertyManager;
 
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
+import java.util.stream.Collectors;
 
 /**
- * Manages access to vehicle specific info communication with a car app host.
+ * Manages access to vehicle specific info, for example, energy info, model info.
  *
  * @hide
  */
 @RestrictTo(LIBRARY)
 public class AutomotiveCarInfo implements CarInfo {
+    private PropertyManager mPropertyManager;
 
-    public AutomotiveCarInfo() {
+    /**
+     * AutomotiveCarInfo class constructor initializing PropertyWorkManager object.
+     *
+     * @throws NullPointerException if {@code manager} is null
+     */
+    public AutomotiveCarInfo(@NonNull PropertyManager manager) {
+        mPropertyManager = requireNonNull(manager);
     }
 
     @Override
     public void getModel(@NonNull Executor executor,
             @NonNull OnCarDataListener<Model> listener) {
+        // Prepare request GetPropertyRequest
+        List<GetPropertyRequest> request = new ArrayList<>();
 
+        // Add "make", "model", "year" of the vehicle to the requests.
+        request.add(GetPropertyRequest.create(INFO_MAKE));
+        request.add(GetPropertyRequest.create(INFO_MODEL));
+        request.add(GetPropertyRequest.create(INFO_MODEL_YEAR));
+        ListenableFuture<List<CarPropertyResponse<?>>> future =
+                mPropertyManager.submitGetPropertyRequest(request, executor);
+        populateModelData(executor, listener, future);
     }
 
     @Override
     public void getEnergyProfile(@NonNull Executor executor,
             @NonNull OnCarDataListener<EnergyProfile> listener) {
+        // Prepare request GetPropertyRequest
+        List<GetPropertyRequest> request = new ArrayList<>();
 
+        // Add "evConnector" and "fuel" type of the vehicle to the requests.
+        request.add(GetPropertyRequest.create(INFO_EV_CONNECTOR_TYPE));
+        request.add(GetPropertyRequest.create(INFO_FUEL_TYPE));
+
+        ListenableFuture<List<CarPropertyResponse<?>>> future =
+                mPropertyManager.submitGetPropertyRequest(request, executor);
+        populateEnergyProfileData(executor, listener, future);
     }
 
     @Override
@@ -54,40 +103,111 @@
 
     @Override
     public void removeTollListener(@NonNull OnCarDataListener<TollCard> listener) {
-
     }
 
     @Override
     public void addEnergyLevelListener(@NonNull Executor executor,
             @NonNull OnCarDataListener<EnergyLevel> listener) {
-
     }
 
     @Override
     public void removeEnergyLevelListener(@NonNull OnCarDataListener<EnergyLevel> listener) {
-
     }
 
     @Override
     public void addSpeedListener(@NonNull Executor executor,
             @NonNull OnCarDataListener<Speed> listener) {
-
     }
 
     @Override
     public void removeSpeedListener(@NonNull OnCarDataListener<Speed> listener) {
-
     }
 
     @Override
     public void addMileageListener(@NonNull Executor executor,
             @NonNull OnCarDataListener<Mileage> listener) {
-
     }
 
     @Override
     public void removeMileageListener(@NonNull OnCarDataListener<Mileage> listener) {
-
     }
 
+    <T> CarValue<T> getCarValue(CarPropertyResponse<?> response, @Nullable T value) {
+        long timeStamp = response.getTimestampMillis();
+        int status = response.getStatus();
+        return new CarValue<>(value, timeStamp, status);
+    }
+
+    @VisibleForTesting
+    void populateModelData(@NonNull Executor executor, OnCarDataListener<Model> listener,
+            ListenableFuture<List<CarPropertyResponse<?>>> future) {
+        future.addListener(() -> {
+            try {
+                List<CarPropertyResponse<?>> result = future.get();
+                CarValue<String> makeValue = CarValue.UNIMPLEMENTED_STRING;
+                CarValue<Integer> yearValue = CarValue.UNIMPLEMENTED_INTEGER;
+                CarValue<String> modelValue = CarValue.UNIMPLEMENTED_STRING;
+                for (CarPropertyResponse<?> value : result) {
+                    if (value.getPropertyId() == INFO_MAKE) {
+                        makeValue = getCarValue(value, (String) value.getValue());
+                    }
+                    if (value.getPropertyId() == INFO_MODEL) {
+                        modelValue = getCarValue(value, (String) value.getValue());
+                    }
+                    if (value.getPropertyId() == INFO_MODEL_YEAR) {
+                        yearValue = getCarValue(value, (Integer) value.getValue());
+                    }
+                }
+                Model model = new Model.Builder().setName(makeValue)
+                        .setManufacturer(modelValue)
+                        .setYear(yearValue)
+                        .build();
+                listener.onCarData(model);
+            } catch (ExecutionException e) {
+                // TODO(b/191084385): Match exception style in {@link CarValue}.
+                Log.e(TAG, "Failed to get CarPropertyResponse for Model", e);
+            } catch (InterruptedException e) {
+                // TODO(b/191084385): Match exception style in {@link CarValue}.
+                Log.e(TAG, "Failed to get CarPropertyResponse for Model", e);
+                Thread.currentThread().interrupt();
+            }
+        }, executor);
+    }
+
+    @VisibleForTesting
+    void populateEnergyProfileData(@NonNull Executor executor,
+            OnCarDataListener<EnergyProfile> listener,
+            ListenableFuture<List<CarPropertyResponse<?>>> future) {
+        future.addListener(() -> {
+            try {
+                List<CarPropertyResponse<?>> result = future.get();
+                CarValue<List<Integer>> evConnector = CarValue.UNIMPLEMENTED_INTEGER_LIST;
+                CarValue<List<Integer>> fuel = CarValue.UNIMPLEMENTED_INTEGER_LIST;
+                for (CarPropertyResponse<?> value : result) {
+                    if (value.getPropertyId() == INFO_EV_CONNECTOR_TYPE) {
+                        evConnector = getCarValue(value, Arrays.stream((int[]) requireNonNull(
+                                value.getValue()))
+                                .boxed().collect(Collectors.toList()));
+                    }
+                    if (value.getPropertyId() == INFO_FUEL_TYPE) {
+                        fuel = getCarValue(value, Arrays.stream((int[]) requireNonNull(
+                                value.getValue()))
+                                .boxed().collect(Collectors.toList()));
+                    }
+                }
+                EnergyProfile energyProfile = new EnergyProfile.Builder().setEvConnectorTypes(
+                        evConnector)
+                        .setFuelTypes(fuel)
+                        .build();
+                listener.onCarData(energyProfile);
+            } catch (ExecutionException e) {
+                // TODO(b/191084385): Match exception style in {@link CarValue}.
+                Log.e(TAG, "Failed to get CarPropertyResponse for Energy Profile", e);
+            } catch (InterruptedException e) {
+                // TODO(b/191084385): Match exception style in {@link CarValue}.
+                Log.e(TAG, "Failed to get CarPropertyResponse for Energy Profile", e);
+                Thread.currentThread().interrupt();
+            }
+        }, executor);
+    }
 }
diff --git a/car/app/app-automotive/src/test/java/androidx/car/app/hardware/info/AutomotiveCarInfoTest.java b/car/app/app-automotive/src/test/java/androidx/car/app/hardware/info/AutomotiveCarInfoTest.java
new file mode 100644
index 0000000..57c0590
--- /dev/null
+++ b/car/app/app-automotive/src/test/java/androidx/car/app/hardware/info/AutomotiveCarInfoTest.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.car.app.hardware.info;
+
+import static android.car.VehiclePropertyIds.INFO_EV_CONNECTOR_TYPE;
+import static android.car.VehiclePropertyIds.INFO_FUEL_TYPE;
+
+import static androidx.car.app.hardware.common.CarValue.STATUS_SUCCESS;
+import static androidx.car.app.hardware.info.EnergyProfile.EVCONNECTOR_TYPE_CHADEMO;
+import static androidx.car.app.hardware.info.EnergyProfile.FUEL_TYPE_UNLEADED;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.car.Car;
+import android.car.VehiclePropertyIds;
+import android.car.hardware.property.CarPropertyManager;
+
+import androidx.car.app.hardware.common.CarPropertyResponse;
+import androidx.car.app.hardware.common.OnCarDataListener;
+import androidx.car.app.hardware.common.PropertyManager;
+import androidx.car.app.shadows.car.ShadowCar;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.internal.DoNotInstrument;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicReference;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(
+        manifest = Config.NONE,
+        shadows = {ShadowCar.class}
+)
+@DoNotInstrument
+public class AutomotiveCarInfoTest {
+    @Mock
+    ListenableFuture<List<CarPropertyResponse<?>>> mListenableCarPropertyResponse;
+    private List<CarPropertyResponse<?>> mResponse = new ArrayList<>();
+    private CountDownLatch mCountDownLatch = new CountDownLatch(1);
+    private AtomicReference<Model> mLoadedResult = new AtomicReference<>();
+    private Executor mExecutor = Executors.newSingleThreadExecutor();
+    private AutomotiveCarInfo mAutomotiveCarInfo;
+    @Mock
+    private Car mCarMock;
+    @Mock
+    private CarPropertyManager mCarPropertyManagerMock;
+    @Mock
+    private PropertyManager mPropertyManager;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        ShadowCar.setCar(mCarMock);
+        when(mCarMock.getCarManager(anyString())).thenReturn(mCarPropertyManagerMock);
+        mAutomotiveCarInfo = new AutomotiveCarInfo(mPropertyManager);
+    }
+
+    @After
+    public void tearDown() {
+        mResponse = new ArrayList<>();
+    }
+
+    @Test
+    public void getModel_verifyResponse() throws InterruptedException {
+        // Add "make", "model", "year" values to the response.
+        mResponse.add(CarPropertyResponse.create(VehiclePropertyIds.INFO_MAKE,
+                STATUS_SUCCESS, 1, "Speedy "
+                        + "Model"));
+        mResponse.add(CarPropertyResponse.create(VehiclePropertyIds.INFO_MODEL,
+                STATUS_SUCCESS, 2, "Toy "
+                        + "Vehicle"));
+        mResponse.add(CarPropertyResponse.create(VehiclePropertyIds.INFO_MODEL_YEAR,
+                STATUS_SUCCESS, 3, 2020));
+        mListenableCarPropertyResponse = Futures.immediateFuture(mResponse);
+        when(mPropertyManager.submitGetPropertyRequest(any(), any())).thenReturn(
+                mListenableCarPropertyResponse);
+        OnCarDataListener<Model> listener = (data) -> {
+            mLoadedResult.set(data);
+            mCountDownLatch.countDown();
+        };
+        mAutomotiveCarInfo.getModel(Executors.newFixedThreadPool(1),
+                listener);
+        verify(mPropertyManager, times(1)).submitGetPropertyRequest(any(), any());
+        mCountDownLatch.await();
+        Model mModel = mLoadedResult.get();
+        assertThat(mModel.getName().getValue()).isEqualTo("Speedy Model");
+        assertThat(mModel.getManufacturer().getValue()).isEqualTo("Toy Vehicle");
+        assertThat(mModel.getYear().getValue()).isEqualTo(2020);
+        assertThat(mModel.getName().getTimestampMillis()).isEqualTo(1);
+        assertThat(mModel.getManufacturer().getTimestampMillis()).isEqualTo(2);
+        assertThat(mModel.getYear().getTimestampMillis()).isEqualTo(3);
+    }
+
+    @Test
+    public void getEnergyProfile_verifyResponse() throws InterruptedException {
+        // Add "evConnector" and "fuel" type of the vehicle to the requests.
+        mResponse.add(CarPropertyResponse.create(INFO_EV_CONNECTOR_TYPE,
+                STATUS_SUCCESS, 1, new int[]{EVCONNECTOR_TYPE_CHADEMO}));
+        mResponse.add(CarPropertyResponse.create(INFO_FUEL_TYPE,
+                STATUS_SUCCESS, 2, new int[]{FUEL_TYPE_UNLEADED}));
+        mListenableCarPropertyResponse = Futures.immediateFuture(mResponse);
+        when(mPropertyManager.submitGetPropertyRequest(any(), any())).thenReturn(
+                mListenableCarPropertyResponse);
+        AtomicReference<EnergyProfile> loadedResult = new AtomicReference<>();
+        CountDownLatch countDownLatch = new CountDownLatch(1);
+        OnCarDataListener<EnergyProfile> listener = (data) -> {
+            loadedResult.set(data);
+            countDownLatch.countDown();
+        };
+        mAutomotiveCarInfo.getEnergyProfile(Executors.newFixedThreadPool(1),
+                listener);
+        verify(mPropertyManager, times(1)).submitGetPropertyRequest(any(), any());
+        countDownLatch.await();
+        EnergyProfile energyProfile = loadedResult.get();
+        List<Integer> evConnector = new ArrayList<Integer>();
+        evConnector.add(EVCONNECTOR_TYPE_CHADEMO);
+        List<Integer> fuel = new ArrayList<Integer>();
+        fuel.add(FUEL_TYPE_UNLEADED);
+        assertThat(energyProfile.getEvConnectorTypes().getValue()).isEqualTo(
+                evConnector);
+        assertThat(energyProfile.getFuelTypes().getValue()).isEqualTo(fuel);
+    }
+}
diff --git a/car/app/app-automotive/src/test/java/androidx/car/app/shadows/car/ShadowCar.java b/car/app/app-automotive/src/test/java/androidx/car/app/shadows/car/ShadowCar.java
new file mode 100644
index 0000000..a95033f
--- /dev/null
+++ b/car/app/app-automotive/src/test/java/androidx/car/app/shadows/car/ShadowCar.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.car.app.shadows.car;
+
+import android.car.Car;
+import android.content.Context;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+/**
+ * Robolectric shadow class for {@link Car}.
+ *
+ * <p>{@link Car} is declared final, so this shadow class allows for mocking and
+ * controlling return values and behavior of the {@link Car} instance.
+ */
+@Implements(Car.class)
+public class ShadowCar {
+    private static Car sCar;
+
+    @Implementation
+    public static Car createCar(Context context) {
+        return sCar;
+    }
+
+    public static void setCar(Car car) {
+        sCar = car;
+    }
+
+    @Implementation
+    public Object getCarManager(String serviceName) {
+        return sCar.getCarManager(serviceName);
+    }
+}
diff --git a/car/app/app-samples/helloworld/mobile/lint-baseline.xml b/car/app/app-samples/helloworld/mobile/lint-baseline.xml
index ce0936b..14802ab 100644
--- a/car/app/app-samples/helloworld/mobile/lint-baseline.xml
+++ b/car/app/app-samples/helloworld/mobile/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="Instantiatable"
diff --git a/car/app/app-samples/navigation/common/lint-baseline.xml b/car/app/app-samples/navigation/common/lint-baseline.xml
index 46c007f..1f16ba2 100644
--- a/car/app/app-samples/navigation/common/lint-baseline.xml
+++ b/car/app/app-samples/navigation/common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
@@ -8,7 +8,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java"
-            line="106"
+            line="104"
             column="21"/>
     </issue>
 
@@ -19,7 +19,7 @@
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java"
-            line="107"
+            line="105"
             column="33"/>
     </issue>
 
@@ -30,7 +30,7 @@
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="451"
+            line="449"
             column="17"/>
     </issue>
 
@@ -41,7 +41,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="452"
+            line="450"
             column="26"/>
     </issue>
 
@@ -52,7 +52,7 @@
         errorLine2="                         ~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="453"
+            line="451"
             column="26"/>
     </issue>
 
@@ -63,7 +63,7 @@
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="466"
+            line="464"
             column="38"/>
     </issue>
 
@@ -74,7 +74,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="471"
+            line="469"
             column="26"/>
     </issue>
 
@@ -85,7 +85,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="488"
+            line="486"
             column="26"/>
     </issue>
 
@@ -96,7 +96,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="505"
+            line="502"
             column="21"/>
     </issue>
 
@@ -107,7 +107,7 @@
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/car/app/sample/navigation/common/nav/NavigationService.java"
-            line="506"
+            line="503"
             column="34"/>
     </issue>
 
diff --git a/car/app/app-samples/navigation/mobile/lint-baseline.xml b/car/app/app-samples/navigation/mobile/lint-baseline.xml
index d8758e0..1f71361 100644
--- a/car/app/app-samples/navigation/mobile/lint-baseline.xml
+++ b/car/app/app-samples/navigation/mobile/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="Instantiatable"
diff --git a/car/app/app-samples/places/mobile/lint-baseline.xml b/car/app/app-samples/places/mobile/lint-baseline.xml
index 81bc66c..ea00bc2 100644
--- a/car/app/app-samples/places/mobile/lint-baseline.xml
+++ b/car/app/app-samples/places/mobile/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="Instantiatable"
diff --git a/car/app/app-samples/showcase/automotive/lint-baseline.xml b/car/app/app-samples/showcase/automotive/lint-baseline.xml
deleted file mode 100644
index 4653593..0000000
--- a/car/app/app-samples/showcase/automotive/lint-baseline.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="Instantiatable"
-        message="`DelayedFileProvider` must extend android.content.ContentProvider"
-        errorLine1="        android:name=&quot;androidx.car.app.sample.showcase.common.textandicons.DelayedFileProvider&quot;"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="74"
-            column="23"/>
-    </issue>
-
-</issues>
diff --git a/car/app/app-samples/showcase/common/lint-baseline.xml b/car/app/app-samples/showcase/common/lint-baseline.xml
index f8d21eaf..34ce884 100644
--- a/car/app/app-samples/showcase/common/lint-baseline.xml
+++ b/car/app/app-samples/showcase/common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/car/app/app-samples/showcase/mobile/lint-baseline.xml b/car/app/app-samples/showcase/mobile/lint-baseline.xml
index b47a401..51b60eb 100644
--- a/car/app/app-samples/showcase/mobile/lint-baseline.xml
+++ b/car/app/app-samples/showcase/mobile/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="Instantiatable"
diff --git a/car/app/app-testing/lint-baseline.xml b/car/app/app-testing/lint-baseline.xml
new file mode 100644
index 0000000..a412c08
--- /dev/null
+++ b/car/app/app-testing/lint-baseline.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMinutes`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(1)).build();"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="73"
+            column="74"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(1)).build();"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="73"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofHours`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(1)).build();"
+        errorLine2="                                                                         ~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="78"
+            column="74"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(1)).build();"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="78"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMinutes`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(2)).build();"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="105"
+            column="74"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(2)).build();"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="105"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofHours`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(2)).build();"
+        errorLine2="                                                                         ~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="110"
+            column="74"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(2)).build();"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="110"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMinutes`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(3)).build();"
+        errorLine2="                                                                         ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="126"
+            column="74"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofMinutes(3)).build();"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="126"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofHours`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(3)).build();"
+        errorLine2="                                                                         ~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="131"
+            column="74"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                                &quot;US/Pacific&quot;)).setRemainingTime(Duration.ofHours(3)).build();"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/testing/navigation/TestNavigationManagerTest.java"
+            line="131"
+            column="48"/>
+    </issue>
+
+</issues>
diff --git a/car/app/app/lint-baseline.xml b/car/app/app/lint-baseline.xml
index 785bf57..efbb573 100644
--- a/car/app/app/lint-baseline.xml
+++ b/car/app/app/lint-baseline.xml
@@ -1,9 +1,471 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 23): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertThat(actions.get(0).getIcon().getResId()).isEqualTo(icon1);"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/notification/CarAppExtenderTest.java"
+            line="209"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 23): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertThat(actions.get(1).getIcon().getResId()).isEqualTo(icon2);"
+        errorLine2="                                            ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/notification/CarAppExtenderTest.java"
+            line="212"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.content.res.Configuration#getLocales`"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/CarAppServiceTest.java"
+            line="212"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.os.LocaleList#get`"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine2="                                                                              ~~~">
+        <location
+            file="src/test/java/androidx/car/app/CarAppServiceTest.java"
+            line="212"
+            column="79"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.content.res.Configuration#getLocales`"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/CarAppServiceTest.java"
+            line="275"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.os.LocaleList#get`"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine2="                                                                              ~~~">
+        <location
+            file="src/test/java/androidx/car/app/CarAppServiceTest.java"
+            line="275"
+            column="79"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.content.res.Configuration#getLocales`"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine2="                                                                 ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/CarContextTest.java"
+            line="224"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `android.os.LocaleList#get`"
+        errorLine1="        assertThat(mCarContext.getResources().getConfiguration().getLocales().get(0))"
+        errorLine2="                                                                              ~~~">
+        <location
+            file="src/test/java/androidx/car/app/CarContextTest.java"
+            line="224"
+            column="79"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `android.app.Notification#getChannelId`"
+        errorLine1="        assertThat(changed.getChannelId()).isEqualTo(EXTENDED_CHANNEL);"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/notification/CarNotificationManagerTest.java"
+            line="112"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `android.app.Notification#getChannelId`"
+        errorLine1="        assertThat(output.getChannelId()).isEqualTo(DEFAULT_CHANNEL);"
+        errorLine2="                          ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/notification/CarNotificationManagerTest.java"
+            line="137"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `android.app.Notification#getChannelId`"
+        errorLine1="        assertThat(output.getChannelId()).isEqualTo(DEFAULT_CHANNEL);"
+        errorLine2="                          ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/notification/CarNotificationManagerTest.java"
+            line="165"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.ZonedDateTime#parse`"
+        errorLine1="        ZonedDateTime zonedDateTime = ZonedDateTime.parse(&quot;2020-05-14T19:57:00-07:00[US/Pacific]&quot;);"
+        errorLine2="                                                    ~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="135"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `create`"
+        errorLine1="        DateTimeWithZone dateTimeWithZone = DateTimeWithZone.create(zonedDateTime);"
+        errorLine2="                                                             ~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="136"
+            column="62"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `assertDateTimeWithZoneEquals`"
+        errorLine1="        assertDateTimeWithZoneEquals(zonedDateTime, dateTimeWithZone);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="138"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `create`"
+        errorLine1="                    DateTimeWithZone.create(null);"
+        errorLine2="                                     ~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="147"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#getSeconds`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                                                                            ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="156"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMillis`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="156"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#getSeconds`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                                                                            ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="174"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMillis`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="174"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#getSeconds`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                                                                            ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="193"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMillis`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="193"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#getSeconds`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                                                                            ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="212"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofMillis`"
+        errorLine1="                Duration.ofMillis(timeZone.getOffset(timeSinceEpochMillis)).getSeconds();"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/model/DateTimeWithZoneTest.java"
+            line="212"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `java.util.Collection#stream`"
+        errorLine1="                .stream()"
+        errorLine2="                 ~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+            line="132"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `java.util.stream.Stream#mapToLong`"
+        errorLine1="                .mapToLong(List::size)"
+        errorLine2="                 ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+            line="133"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `java.util.stream.LongStream#sum`"
+        errorLine1="                .sum()).isEqualTo(6);"
+        errorLine2="                 ~~~">
+        <location
+            file="src/test/java/androidx/car/app/validation/HostValidatorTest.java"
+            line="134"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 28 (current min is 23): `android.content.pm.SigningInfo`"
+        errorLine1="        packageInfo.signingInfo = mock(SigningInfo.class);"
+        errorLine2="                                       ~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="108"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 28 (current min is 23): `android.content.pm.PackageInfo#signingInfo`"
+        errorLine1="        packageInfo.signingInfo = mock(SigningInfo.class);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="108"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 23): `android.content.pm.SigningInfo#getSigningCertificateHistory`"
+        errorLine1="        when(packageInfo.signingInfo.getSigningCertificateHistory()).thenReturn(signatures);"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="109"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 28 (current min is 23): `android.content.pm.PackageInfo#signingInfo`"
+        errorLine1="        when(packageInfo.signingInfo.getSigningCertificateHistory()).thenReturn(signatures);"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/validation/HostValidatorTestApi28.java"
+            line="109"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.ZonedDateTime#parse`"
+        errorLine1="        ZonedDateTime arrivalTime = ZonedDateTime.parse(&quot;2020-05-14T19:57:00-07:00[US/Pacific]&quot;);"
+        errorLine2="                                                  ~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="69"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofHours`"
+        errorLine1="        Duration remainingTime = Duration.ofHours(10);"
+        errorLine2="                                          ~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="70"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `Builder`"
+        errorLine1="                new TravelEstimate.Builder(mRemainingDistance, arrivalTime).setRemainingTime("
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="73"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                new TravelEstimate.Builder(mRemainingDistance, arrivalTime).setRemainingTime("
+        errorLine2="                                                                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="73"
+            column="77"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#getSeconds`"
+        errorLine1="        assertThat(travelEstimate.getRemainingTimeSeconds()).isEqualTo(remainingTime.getSeconds());"
+        errorLine2="                                                                                     ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="77"
+            column="86"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `assertDateTimeWithZoneEquals`"
+        errorLine1="        assertDateTimeWithZoneEquals(arrivalTime, travelEstimate.getArrivalTimeAtDestination());"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="78"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.ZonedDateTime#parse`"
+        errorLine1="        ZonedDateTime arrivalTime = ZonedDateTime.parse(&quot;2020-05-14T19:57:00-07:00[US/Pacific]&quot;);"
+        errorLine2="                                                  ~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="115"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `Builder`"
+        errorLine1="                new TravelEstimate.Builder("
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="119"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `setRemainingTime`"
+        errorLine1="                        remainingDistance, arrivalTime).setRemainingTime("
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="120"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `java.time.Duration#ofSeconds`"
+        errorLine1="                        Duration.ofSeconds(REMAINING_TIME_UNKNOWN)).build();"
+        errorLine2="                                 ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="121"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 23): `assertDateTimeWithZoneEquals`"
+        errorLine1="        assertDateTimeWithZoneEquals(arrivalTime, travelEstimate.getArrivalTimeAtDestination());"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/car/app/navigation/model/TravelEstimateTest.java"
+            line="125"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: CarAppApiLevels.UNKNOWN, CarAppApiLevels.LEVEL_1, CarAppApiLevels.LEVEL_2, CarAppApiLevels.LEVEL_3"
+        errorLine1="        mCarAppApiLevel = handshakeInfo.getHostCarAppApiLevel();"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/car/app/CarContext.java"
+            line="583"
+            column="27"/>
+    </issue>
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            enumName = (String) nameMethod.invoke(obj);"
         errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14,7 +476,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            Object obj = converter.invoke(null, binder);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -25,7 +487,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            return nameMethod.invoke(null, enumName);"
         errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/collection/collection/lint-baseline.xml b/collection/collection/lint-baseline.xml
index 6d3f9db..5769268 100644
--- a/collection/collection/lint-baseline.xml
+++ b/collection/collection/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/compose/animation/animation-core/lint-baseline.xml b/compose/animation/animation-core/lint-baseline.xml
new file mode 100644
index 0000000..94fd5e3
--- /dev/null
+++ b/compose/animation/animation-core/lint-baseline.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.lang.Long#max`"
+        errorLine1="        val duration = max("
+        errorLine2="                       ~~~">
+        <location
+            file="src/test/java/androidx/compose/animation/core/AnimationTest.kt"
+            line="285"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.lang.Long#max`"
+        errorLine1="            max("
+        errorLine2="            ~~~">
+        <location
+            file="src/test/java/androidx/compose/animation/core/AnimationTest.kt"
+            line="287"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.Collection#parallelStream`"
+        errorLine1="        testCases.parallelStream().forEach {"
+        errorLine2="                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/compose/animation/core/SpringEstimationTest.kt"
+            line="54"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.stream.Stream#forEach`"
+        errorLine1="        testCases.parallelStream().forEach {"
+        errorLine2="                                   ~~~~~~~">
+        <location
+            file="src/test/java/androidx/compose/animation/core/SpringEstimationTest.kt"
+            line="54"
+            column="36"/>
+    </issue>
+
+</issues>
diff --git a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
index fb97b07..54cc9eb 100644
--- a/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
+++ b/compose/compiler/compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
@@ -45,20 +45,21 @@
             2800 to "1.0.0-beta07",
             2900 to "1.0.0-beta08",
             3000 to "1.0.0-beta09",
-            3100 to "1.0.0-beta10",
+            3100 to "1.0.0-rc01",
+            4000 to "1.1.0-alpha01",
         )
 
         /**
          * The minimum version int that this compiler is guaranteed to be compatible with. Typically
          * this will match the version int that is in ComposeVersion.kt in the runtime.
          */
-        private val minimumRuntimeVersionInt: Int = 3100
+        private val minimumRuntimeVersionInt: Int = 4000
 
         /**
          * The maven version string of this compiler. This string should be updated before/after every
          * release.
          */
-        val compilerVersion: String = "1.0.0-beta10"
+        val compilerVersion: String = "1.1.0-alpha01"
         private val minimumRuntimeVersion: String
             get() = versionTable[minimumRuntimeVersionInt] ?: "unknown"
     }
diff --git a/compose/foundation/foundation-layout/lint-baseline.xml b/compose/foundation/foundation-layout/lint-baseline.xml
new file mode 100644
index 0000000..8d64150
--- /dev/null
+++ b/compose/foundation/foundation-layout/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `waitAndScreenShot`"
+        errorLine1="        val bitmap = activityTestRule.waitAndScreenShot()"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/BoxWithConstraintsTest.kt"
+            line="673"
+            column="39"/>
+    </issue>
+
+</issues>
diff --git a/compose/foundation/foundation/lint-baseline.xml b/compose/foundation/foundation/lint-baseline.xml
new file mode 100644
index 0000000..78df605
--- /dev/null
+++ b/compose/foundation/foundation/lint-baseline.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 21): `isSoftwareKeyboardShown`"
+        errorLine1="            if (view.isSoftwareKeyboardShown()) {"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftKeyboardTest.kt"
+            line="183"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 21): `hideKeyboard`"
+        errorLine1="                view.hideKeyboard()"
+        errorLine2="                     ~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftKeyboardTest.kt"
+            line="184"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 21): `isSoftwareKeyboardShown`"
+        errorLine1="                view.waitUntil(timeout) { !view.isSoftwareKeyboardShown() }"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftKeyboardTest.kt"
+            line="185"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 21): `android.view.View#setWindowInsetsAnimationCallback`"
+        errorLine1="    rootView.setWindowInsetsAnimationCallback("
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftKeyboardTest.kt"
+            line="193"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 21): `InsetAnimationCallback`"
+        errorLine1="        InsetAnimationCallback {"
+        errorLine2="        ^">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/foundation/text/CoreTextFieldSoftKeyboardTest.kt"
+            line="194"
+            column="9"/>
+    </issue>
+
+</issues>
diff --git a/compose/integration-tests/docs-snippets/build.gradle b/compose/integration-tests/docs-snippets/build.gradle
index 2d3862e..7c756ac 100644
--- a/compose/integration-tests/docs-snippets/build.gradle
+++ b/compose/integration-tests/docs-snippets/build.gradle
@@ -35,7 +35,7 @@
     implementation(project(":compose:runtime:runtime-livedata"))
     implementation(project(":compose:ui:ui-graphics"))
     implementation(project(":compose:ui:ui-test-junit4"))
-    implementation(project(":compose:ui:ui-tooling"))
+    implementation(project(":compose:ui:ui-tooling-preview"))
     implementation(project(":compose:ui:ui-viewbinding"))
     implementation(project(":navigation:navigation-compose"))
     implementation(project(":activity:activity-compose"))
diff --git a/compose/integration-tests/macrobenchmark/lint-baseline.xml b/compose/integration-tests/macrobenchmark/lint-baseline.xml
new file mode 100644
index 0000000..86830d6
--- /dev/null
+++ b/compose/integration-tests/macrobenchmark/lint-baseline.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/IoSettingsStartupBenchmark.kt"
+            line="37"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="    fun startup() = benchmarkRule.measureStartup("
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/IoSettingsStartupBenchmark.kt"
+            line="40"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/NestedListsScrollBenchmark.kt"
+            line="42"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureRepeated`"
+        errorLine1="        benchmarkRule.measureRepeated("
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/NestedListsScrollBenchmark.kt"
+            line="54"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/SmallListStartupBenchmark.kt"
+            line="37"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="    fun startup() = benchmarkRule.measureStartup("
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/SmallListStartupBenchmark.kt"
+            line="40"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialListScrollBenchmark.kt"
+            line="42"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureRepeated`"
+        errorLine1="        benchmarkRule.measureRepeated("
+        errorLine2="                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialListScrollBenchmark.kt"
+            line="54"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialStartupBenchmark.kt"
+            line="37"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="    fun startup() = benchmarkRule.measureStartup("
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/compose/integration/macrobenchmark/TrivialStartupBenchmark.kt"
+            line="40"
+            column="35"/>
+    </issue>
+
+</issues>
diff --git a/compose/material/material/lint-baseline.xml b/compose/material/material/lint-baseline.xml
new file mode 100644
index 0000000..b0b67ac
--- /dev/null
+++ b/compose/material/material/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/material/BadgeTest.kt"
+            line="125"
+            column="14"/>
+    </issue>
+
+</issues>
diff --git a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
index e607dd0..8980737 100644
--- a/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
+++ b/compose/material/material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
@@ -964,6 +964,27 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    fun testOutlinedTextField_appliesBackgroundColor() {
+        rule.setMaterialContent {
+            OutlinedTextField(
+                value = "",
+                >
+                modifier = Modifier.testTag(TextfieldTag),
+                colors = TextFieldDefaults.outlinedTextFieldColors(
+                    backgroundColor = Color.Red,
+                    unfocusedBorderColor = Color.Red
+                ),
+                shape = RectangleShape
+            )
+        }
+
+        rule.onNodeWithTag(TextfieldTag).captureToImage().assertPixels {
+            Color.Red
+        }
+    }
+
+    @Test
     fun testOutlinedTextField_doesNotCrash_columnWidthWithMinIntrinsics() {
         var textFieldSize: IntSize? = null
         var dividerSize: IntSize? = null
diff --git a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidAlertDialog.android.kt b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidAlertDialog.android.kt
index e753449..9042e78 100644
--- a/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidAlertDialog.android.kt
+++ b/compose/material/material/src/androidMain/kotlin/androidx/compose/material/AndroidAlertDialog.android.kt
@@ -52,9 +52,9 @@
  * any events for this button so they need to be set up by the caller.
  * @param title The title of the Dialog which should specify the purpose of the Dialog. The title
  * is not mandatory, because there may be sufficient information inside the [text]. Provided text
- * style will be [Typography.h6].
+ * style will be [Typography.subtitle1].
  * @param text The text which presents the details regarding the Dialog's purpose. Provided text
- * style will be [Typography.body1].
+ * style will be [Typography.body2].
  * @param shape Defines the Dialog's shape
  * @param backgroundColor The background color of the dialog.
  * @param contentColor The preferred content color provided by this dialog to its children.
@@ -114,9 +114,9 @@
  * @param modifier Modifier to be applied to the layout of the dialog.
  * @param title The title of the Dialog which should specify the purpose of the Dialog. The title
  * is not mandatory, because there may be sufficient information inside the [text]. Provided text
- * style will be [Typography.h6].
+ * style will be [Typography.subtitle1].
  * @param text The text which presents the details regarding the Dialog's purpose. Provided text
- * style will be [Typography.body1].
+ * style will be [Typography.body2].
  * @param shape Defines the Dialog's shape.
  * @param backgroundColor The background color of the dialog.
  * @param contentColor The preferred content color provided by this dialog to its children.
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
index a5e1b53..add31f6 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
@@ -16,6 +16,7 @@
 
 package androidx.compose.material
 
+import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.interaction.Interaction
 import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -308,6 +309,7 @@
     indicatorWidth: Dp,
     indicatorColor: Color,
     cursorColor: Color,
+    backgroundColor: Color,
     shape: Shape
 ) {
     val labelSize = remember { mutableStateOf(Size.Zero) }
@@ -323,8 +325,9 @@
             )
             .defaultMinSize(
                 minWidth = MinWidth,
-                minHeight = MinHeight,
-            ),
+                minHeight = MinHeight
+            )
+            .background(backgroundColor, shape),
         >
         enabled = enabled,
         readOnly = readOnly,
diff --git a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
index 65913b9..a50a6d2 100644
--- a/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
+++ b/compose/material/material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
@@ -194,6 +194,7 @@
                     indicatorColor =
                         colors.indicatorColor(enabled, isError, interactionSource).value,
                     shape = shape,
+                    backgroundColor = colors.backgroundColor(enabled).value,
                     cursorColor = colors.cursorColor(isError).value
                 )
             }
diff --git a/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt b/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt
index b077db6..fecc83d 100644
--- a/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt
+++ b/compose/material/material/src/desktopMain/kotlin/androidx/compose/material/DesktopAlertDialog.desktop.kt
@@ -48,9 +48,9 @@
  * any events for this button so they need to be set up by the caller.
  * @param title The title of the Dialog which should specify the purpose of the Dialog. The title
  * is not mandatory, because there may be sufficient information inside the [text]. Provided text
- * style will be [Typography.h6].
+ * style will be [Typography.subtitle1].
  * @param text The text which presents the details regarding the Dialog's purpose. Provided text
- * style will be [Typography.body1].
+ * style will be [Typography.body2].
  * @param shape Defines the Dialog's shape
  * @param backgroundColor The background color of the dialog.
  * @param contentColor The preferred content color provided by this dialog to its children.
@@ -106,9 +106,9 @@
  * @param modifier Modifier to be applied to the layout of the dialog.
  * @param title The title of the Dialog which should specify the purpose of the Dialog. The title
  * is not mandatory, because there may be sufficient information inside the [text]. Provided text
- * style will be [Typography.h6].
+ * style will be [Typography.subtitle1].
  * @param text The text which presents the details regarding the Dialog's purpose. Provided text
- * style will be [Typography.body1].
+ * style will be [Typography.body2].
  * @param shape Defines the Dialog's shape.
  * @param backgroundColor The background color of the dialog.
  * @param contentColor The preferred content color provided by this dialog to its children.
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
index 78b5389..6e80fa41 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeVersion.kt
@@ -28,5 +28,5 @@
      * IMPORTANT: Whenever updating this value, please make sure to also update `versionTable` and
      * `minimumRuntimeVersionInt` in `VersionChecker.kt` of the compiler.
      */
-    const val version: Int = 3100
+    const val version: Int = 4000
 }
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
index cf8ee96..864628b 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
@@ -326,9 +326,13 @@
     /**
      * A Compose compiler plugin API. DO NOT call directly.
      *
-     * This is the instance that changes that are calculated by the composer will be played to.
-     * During while invoking [Composable] functions none of the [applier] methods are called.
-     * The changes are made in a batch after the all [Composable] functions have completed.
+     * Changes calculated and recorded during composition and are sent to [applier] which makes
+     * the physical changes to the node tree implied by a composition.
+     *
+     * Composition has two discrete phases, 1) calculate and record changes and 2) making the
+     * changes via the [applier]. While a [Composable] functions is executing, none of the
+     * [applier] methods are called. The recorded changes are sent to the [applier] all at once
+     * after all [Composable] functions have completed.
      */
     @ComposeCompilerApi
     val applier: Applier<*>
diff --git a/compose/ui/ui-graphics/build.gradle b/compose/ui/ui-graphics/build.gradle
index 887cec2..43f2863 100644
--- a/compose/ui/ui-graphics/build.gradle
+++ b/compose/ui/ui-graphics/build.gradle
@@ -34,7 +34,7 @@
          * corresponding block below
          */
 
-        api("androidx.annotation:annotation:1.2.0-beta01")
+        api("androidx.annotation:annotation:1.2.0")
         api(project(":compose:ui:ui-unit"))
 
         implementation(project(":compose:runtime:runtime"))
@@ -79,7 +79,7 @@
             }
 
             androidMain.dependencies {
-                api("androidx.annotation:annotation:1.2.0-beta01")
+                api("androidx.annotation:annotation:1.2.0")
             }
 
             desktopMain.dependencies {
diff --git a/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/GradientTest.kt b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/GradientTest.kt
new file mode 100644
index 0000000..272424f
--- /dev/null
+++ b/compose/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/GradientTest.kt
@@ -0,0 +1,371 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.ui.graphics
+
+import android.os.Build
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class GradientTest {
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testCountTransparentColorsN() {
+        assertEquals(0, countTransparentColors(listOf(Color.Red, Color.Green, Color.Blue)))
+        assertEquals(1, countTransparentColors(listOf(Color.Red, Color.Transparent, Color.Blue)))
+        assertEquals(
+            1,
+            countTransparentColors(
+                listOf(Color.Red, Color.Blue.copy(alpha = 0f), Color.Blue)
+            )
+        )
+        assertEquals(0, countTransparentColors(listOf(Color.Transparent, Color.Green, Color.Blue)))
+        assertEquals(0, countTransparentColors(listOf(Color.Red, Color.Green, Color.Transparent)))
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    fun testCountTransparentColorsO() {
+        assertEquals(0, countTransparentColors(listOf(Color.Red, Color.Green, Color.Blue)))
+        assertEquals(0, countTransparentColors(listOf(Color.Red, Color.Transparent, Color.Blue)))
+        assertEquals(
+            0,
+            countTransparentColors(
+                listOf(Color.Red, Color.Blue.copy(alpha = 0f), Color.Blue)
+            )
+        )
+        assertEquals(0, countTransparentColors(listOf(Color.Transparent, Color.Green, Color.Blue)))
+        assertEquals(0, countTransparentColors(listOf(Color.Red, Color.Green, Color.Transparent)))
+    }
+
+    @Test
+    fun testNoTransparentColorNoStopsReturnsNoStops() {
+        // Regardless of OS level, all color values that are not Color.Transparent
+        // should produce the same stops
+        val result = makeTransparentStops(
+            null,
+            listOf(Color.Red, Color.Green, Color.Blue, Color.Magenta),
+            0
+        )
+        assertNull(result)
+    }
+
+    @Test
+    fun testNoTransparentColorWithStopsReturnsSameStops() {
+        // Regardless of OS level, all color values that are not Color.Transparent
+        // should produce the same stops
+        val stops = listOf(0f, 0.25f, 0.3f, 1f)
+        val result = makeTransparentStops(
+            stops,
+            listOf(Color.Red, Color.Green, Color.Blue, Color.Magenta),
+            0
+        )
+        assertSameStops(stops, result!!)
+    }
+
+    @Test
+    fun testTransparentColorsAtEndsAndNoStopsReturnsNoStops() {
+        // Regardless of OS level, all color values that are not Color.Transparent
+        // should produce the same stops
+        val result = makeTransparentStops(
+            null,
+            listOf(Color.Transparent, Color.Green, Color.Blue, Color.Transparent),
+            0
+        )
+        assertNull(result)
+    }
+
+    @Test
+    fun testTransparentColorsAtEndsReturnsSameStops() {
+        // Regardless of OS level, all color values that are not Color.Transparent
+        // should produce the same stops
+        val stops = listOf(0f, 0.25f, 0.3f, 1f)
+        val result = makeTransparentStops(
+            stops,
+            listOf(Color.Transparent, Color.Green, Color.Blue, Color.Transparent),
+            0
+        )
+        assertSameStops(stops, result!!)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    fun testTransparentColorsInMiddleProducesNoStopsOnO() {
+        // On O and later, no stops should be produced.
+        val result = makeTransparentStops(
+            null,
+            listOf(
+                Color.Red,
+                Color.Transparent,
+                Color.Green,
+                Color.Transparent,
+                Color.Blue,
+                Color.Magenta
+            ),
+            0 // O always counts 0
+        )
+        assertNull(result)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    fun testTransparentColorsInMiddleAddsNoStopsOnO() {
+        val stops = listOf(
+            0f,
+            0.1f,
+            0.2f,
+            0.5f,
+            0.7f,
+            1f
+        )
+        val result = makeTransparentStops(
+            stops,
+            listOf(
+                Color.Red,
+                Color.Transparent,
+                Color.Green,
+                Color.Transparent,
+                Color.Blue,
+                Color.Magenta
+            ),
+            0 // O always counts 0
+        )
+        assertSameStops(stops, result!!)
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testTransparentColorsInMiddleProducesStopsOnN() {
+        val result = makeTransparentStops(
+            null,
+            listOf(
+                Color.Red,
+                Color.Transparent,
+                Color.Green,
+                Color.Transparent,
+                Color.Blue,
+                Color.Magenta
+            ),
+            2
+        )
+        assertNotNull(result)
+        assertSameStops(listOf(0f, 0.2f, 0.2f, 0.4f, 0.6f, 0.6f, 0.8f, 1f), result!!)
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testTransparentColorsInMiddleAddsStopsOnN() {
+        val result = makeTransparentStops(
+            listOf(
+                0.05f,
+                0.1f,
+                0.2f,
+                0.5f,
+                0.7f,
+                1f
+            ),
+            listOf(
+                Color.Red,
+                Color.Transparent,
+                Color.Green,
+                Color.Transparent,
+                Color.Blue,
+                Color.Magenta
+            ),
+            2
+        )
+        assertNotNull(result)
+        assertSameStops(listOf(0.05f, 0.1f, 0.1f, 0.2f, 0.5f, 0.5f, 0.7f, 1f), result!!)
+    }
+
+    @Test
+    fun testNoTransparentColorReturnsSameList() {
+        // Regardless of OS level, all color values that are not Color.Transparent
+        // should be consumed without modification
+        val colors = listOf(Color.Red, Color.Green, Color.Blue, Color.Magenta)
+        val result = makeTransparentColors(colors, 0)
+        assertSameColors(colors, result)
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    fun testTransparencyOnOReturnsSameList() {
+        // All Android Versions O and above should apply no modification of input colors
+        // that is the filtered color array is expected to have Color.Transparent values
+        val colors = listOf(Color.Transparent, Color.Green, Color.Transparent, Color.Magenta)
+        val result = makeTransparentColors(colors, 0)
+        assertSameColors(colors, result)
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testTransparencyOnNReturnsNewValues() {
+        // All Android Versions N and below should modify the color values and add
+        // one transparent value for the middle Transparent
+        val result = makeTransparentColors(
+            listOf(Color.Transparent, Color.Green, Color.Transparent, Color.Magenta),
+            1
+        )
+        assertSameColors(
+            listOf(
+                Color.Green.copy(alpha = 0f),
+                Color.Green,
+                Color.Green.copy(alpha = 0f),
+                Color.Magenta.copy(alpha = 0f),
+                Color.Magenta
+            ),
+            result
+        )
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testMultipleTrailingTransparentColorsOnN() {
+        val result = makeTransparentColors(
+            listOf(Color.Red, Color.Green, Color.Transparent, Color.Transparent),
+            1
+        )
+        assertSameColors(
+            listOf(
+                Color.Red,
+                Color.Green,
+                Color.Green.copy(alpha = 0.0f),
+                Color.Transparent,
+                Color.Transparent
+            ),
+            result
+        )
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testMultipleLeadingTransparentColorsReturnsPreviousOnN() {
+        val result = makeTransparentColors(
+            listOf(Color.Transparent, Color.Transparent, Color.Blue, Color.Magenta),
+            1
+        )
+        assertSameColors(
+            listOf(
+                Color.Transparent,
+                Color.Transparent,
+                Color.Blue.copy(alpha = 0f),
+                Color.Blue,
+                Color.Magenta
+            ),
+            result
+        )
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testTransparentAlternatingColors() {
+        val result = makeTransparentColors(
+            listOf(
+                Color.Transparent,
+                Color.Red,
+                Color.Transparent,
+                Color.Blue,
+                Color.Transparent
+            ),
+            1
+        )
+        assertSameColors(
+            listOf(
+                Color.Red.copy(alpha = 0f),
+                Color.Red,
+                Color.Red.copy(alpha = 0f),
+                Color.Blue.copy(alpha = 0f),
+                Color.Blue,
+                Color.Blue.copy(alpha = 0f)
+            ),
+            result
+        )
+    }
+
+    @Test
+    @SdkSuppress(maxSdkVersion = Build.VERSION_CODES.N_MR1)
+    fun testAllTransparentColorsProduceTransparentOnN() {
+        val result = makeTransparentColors(
+            listOf(
+                Color.Transparent,
+                Color.Transparent,
+                Color.Transparent
+            ),
+            1
+        )
+        assertSameColors(
+            listOf(
+                Color.Transparent,
+                Color.Transparent,
+                Color.Transparent,
+                Color.Transparent
+            ),
+            result
+        )
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    fun testAllTransparentColorsProduceTransparentOnO() {
+        val result = makeTransparentColors(
+            listOf(
+                Color.Transparent,
+                Color.Transparent,
+                Color.Transparent
+            ),
+            0 // Always 0 on O+
+        )
+        assertSameColors(
+            listOf(
+                Color.Transparent,
+                Color.Transparent,
+                Color.Transparent
+            ),
+            result
+        )
+    }
+
+    private fun assertSameStops(expected: List<Float>, actual: FloatArray) {
+        assertEquals(expected.size, actual.size)
+        expected.forEachIndexed { index, value ->
+            assertEquals(
+                "Stop[$index] expected to be $value, but was ${actual[index]}",
+                value,
+                actual[index]
+            )
+        }
+    }
+
+    private fun assertSameColors(expected: List<Color>, actual: IntArray) {
+        assertEquals(expected.size, actual.size)
+        expected.forEachIndexed { index, color ->
+            assertEquals(
+                "Color[$index] expected to be $color, but was ${Color(actual[index])}",
+                color.toArgb(),
+                actual[index]
+            )
+        }
+    }
+}
\ No newline at end of file
diff --git a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.android.kt b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.android.kt
index d416d3f..cac1f02 100644
--- a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.android.kt
+++ b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.android.kt
@@ -20,7 +20,10 @@
 import android.graphics.LinearGradient
 import android.graphics.RadialGradient
 import android.graphics.SweepGradient
+import android.os.Build
+import androidx.annotation.VisibleForTesting
 import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.util.fastForEachIndexed
 
 actual typealias Shader = android.graphics.Shader
 
@@ -32,13 +35,14 @@
     tileMode: TileMode
 ): Shader {
     validateColorStops(colors, colorStops)
+    val numTransparentColors = countTransparentColors(colors)
     return LinearGradient(
         from.x,
         from.y,
         to.x,
         to.y,
-        colors.toIntArray(),
-        colorStops?.toFloatArray(),
+        makeTransparentColors(colors, numTransparentColors),
+        makeTransparentStops(colorStops, colors, numTransparentColors),
         tileMode.toAndroidTileMode()
     )
 }
@@ -51,12 +55,13 @@
     tileMode: TileMode
 ): Shader {
     validateColorStops(colors, colorStops)
+    val numTransparentColors = countTransparentColors(colors)
     return RadialGradient(
         center.x,
         center.y,
         radius,
-        colors.toIntArray(),
-        colorStops?.toFloatArray(),
+        makeTransparentColors(colors, numTransparentColors),
+        makeTransparentStops(colorStops, colors, numTransparentColors),
         tileMode.toAndroidTileMode()
     )
 }
@@ -67,11 +72,12 @@
     colorStops: List<Float>?
 ): Shader {
     validateColorStops(colors, colorStops)
+    val numTransparentColors = countTransparentColors(colors)
     return SweepGradient(
         center.x,
         center.y,
-        colors.toIntArray(),
-        colorStops?.toFloatArray()
+        makeTransparentColors(colors, numTransparentColors),
+        makeTransparentStops(colorStops, colors, numTransparentColors),
     )
 }
 
@@ -87,8 +93,100 @@
     )
 }
 
-private fun List<Color>.toIntArray(): IntArray =
-    IntArray(size) { i -> this[i].toArgb() }
+/**
+ * Returns the number of transparent (alpha = 0) values that aren't at the beginning or
+ * end of the gradient so that the color stops can be added. On O and newer devices,
+ * this always returns 0 because no stops need to be added.
+ */
+@VisibleForTesting
+internal fun countTransparentColors(colors: List<Color>): Int {
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+        return 0
+    }
+    var numTransparentColors = 0
+    // Don't count the first and last value because we don't add stops for those
+    for (i in 1 until colors.lastIndex) {
+        if (colors[i].alpha == 0f) {
+            numTransparentColors++
+        }
+    }
+    return numTransparentColors
+}
+
+/**
+ * There was a change in behavior between Android N and O with how
+ * transparent colors are interpolated with skia gradients. More specifically
+ * Android O treats all fully transparent colors the same regardless of the
+ * rgb channels, however, Android N and older releases interpolated between
+ * the color channels as well. Because Color.Transparent is transparent black,
+ * this would introduce some muddy colors as part of gradients with transparency
+ * for Android N and below.
+ * In order to make gradient rendering consistent and match the behavior of Android O+,
+ * detect whenever Color.Transparent is used and a stop matching the color of the previous
+ * value, but alpha = 0 is added and another stop at the same point with the same color
+ * as the following value, but with alpha = 0 is used.
+ */
+@VisibleForTesting
+internal fun makeTransparentColors(
+    colors: List<Color>,
+    numTransparentColors: Int
+): IntArray {
+    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+        // No change for Android O+, map the colors directly to their argb equivalent
+        return IntArray(colors.size) { i -> colors[i].toArgb() }
+    }
+    val values = IntArray(colors.size + numTransparentColors)
+    var valuesIndex = 0
+    val lastIndex = colors.lastIndex
+    colors.fastForEachIndexed { index, color ->
+        if (color.alpha == 0f) {
+            if (index == 0) {
+                values[valuesIndex++] = colors[1].copy(alpha = 0f).toArgb()
+            } else if (index == lastIndex) {
+                values[valuesIndex++] = colors[index - 1].copy(alpha = 0f).toArgb()
+            } else {
+                val previousColor = colors[index - 1]
+                values[valuesIndex++] = previousColor.copy(alpha = 0f).toArgb()
+
+                val nextColor = colors[index + 1]
+                values[valuesIndex++] = nextColor.copy(alpha = 0f).toArgb()
+            }
+        } else {
+            values[valuesIndex++] = color.toArgb()
+        }
+    }
+    return values
+}
+
+/**
+ * See [makeTransparentColors].
+ *
+ * On N and earlier devices that have transparent values, we must duplicate the color stops for
+ * fully transparent values so that the color value before and after can be interpolated.
+ */
+@VisibleForTesting
+internal fun makeTransparentStops(
+    stops: List<Float>?,
+    colors: List<Color>,
+    numTransparentColors: Int
+): FloatArray? {
+    if (numTransparentColors == 0) {
+        return stops?.toFloatArray()
+    }
+    val newStops = FloatArray(colors.size + numTransparentColors)
+    newStops[0] = stops?.get(0) ?: 0f
+    var newStopsIndex = 1
+    for (i in 1 until colors.lastIndex) {
+        val color = colors[i]
+        val stop = stops?.get(i) ?: i.toFloat() / colors.lastIndex
+        newStops[newStopsIndex++] = stop
+        if (color.alpha == 0f) {
+            newStops[newStopsIndex++] = stop
+        }
+    }
+    newStops[newStopsIndex] = stops?.get(colors.lastIndex) ?: 1f
+    return newStops
+}
 
 private fun validateColorStops(colors: List<Color>, colorStops: List<Float>?) {
     if (colorStops == null) {
diff --git a/compose/ui/ui-test-junit4/src/androidAndroidTest/AndroidManifest.xml b/compose/ui/ui-test-junit4/src/androidAndroidTest/AndroidManifest.xml
index ebf98af..b0777ee 100644
--- a/compose/ui/ui-test-junit4/src/androidAndroidTest/AndroidManifest.xml
+++ b/compose/ui/ui-test-junit4/src/androidAndroidTest/AndroidManifest.xml
@@ -26,5 +26,8 @@
         <activity android:name="androidx.compose.ui.test.junit4.MultipleActivitiesFirstDrawTest$Activity1" />
         <activity android:name="androidx.compose.ui.test.junit4.MultipleActivitiesFirstDrawTest$Activity2" />
         <activity android:name="androidx.compose.ui.test.junit4.LateSetContentTest$Activity" />
+        <activity android:name=".MultipleActivitiesWithoutComposeTest$Activity1" />
+        <activity android:name=".MultipleActivitiesWithoutComposeTest$Activity2" />
+        <activity android:name=".MultipleActivitiesWithoutComposeTest$Activity3" />
     </application>
 </manifest>
diff --git a/compose/ui/ui-test-junit4/src/androidAndroidTest/kotlin/androidx/compose/ui/test/junit4/MultipleActivitiesWithoutComposeTest.kt b/compose/ui/ui-test-junit4/src/androidAndroidTest/kotlin/androidx/compose/ui/test/junit4/MultipleActivitiesWithoutComposeTest.kt
new file mode 100644
index 0000000..2de8d47
--- /dev/null
+++ b/compose/ui/ui-test-junit4/src/androidAndroidTest/kotlin/androidx/compose/ui/test/junit4/MultipleActivitiesWithoutComposeTest.kt
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.ui.test.junit4
+
+import android.app.Activity
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import android.view.ViewGroup
+import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
+import android.widget.Button
+import android.widget.FrameLayout
+import androidx.activity.ComponentActivity
+import androidx.activity.compose.setContent
+import androidx.compose.foundation.layout.Box
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import androidx.test.ext.junit.rules.ActivityScenarioRule
+import org.junit.Rule
+import org.junit.Test
+
+/**
+ * This test shows how you can test an application where the Activity that is launched from the
+ * test does not contain any Compose content, but an Activity to which the test eventually
+ * navigates does contain Compose content.
+ *
+ * In the test, Activity1 is launched, which contains an android.widget.Button.
+ * When clicked, Activity2 is launched, which contains another android.widget.Button.
+ * When that button is clicked, Activity3 is launched, which contains Compose content.
+ * The Compose content is finally asserted to exist.
+ */
+class MultipleActivitiesWithoutComposeTest {
+
+    // Because Activity1 does not use Compose, we do not have to guarantee that the
+    // ComposeTestRule performs setup before the ActivityScenarioRule, so we can just define the
+    // scenario rule as a sibling rule.
+    @get:Rule
+    val activityScenarioRule = ActivityScenarioRule(Activity1::class.java)
+
+    @get:Rule
+    val composeTestRule = createEmptyComposeRule()
+
+    @Test
+    fun test() {
+        onView(withText("CLICK_1")).perform(click())
+        onView(withText("CLICK_2")).perform(click())
+        composeTestRule.onNodeWithTag("compose-box").assertExists()
+    }
+
+    class Activity1 : ComponentActivity() {
+        override fun onCreate(savedInstanceState: Bundle?) {
+            super.onCreate(savedInstanceState)
+            setViewContent {
+                frameLayout {
+                    button("CLICK_1") {
+                        startActivity(Intent(this@Activity1, Activity2::class.java))
+                    }
+                }
+            }
+        }
+    }
+
+    class Activity2 : ComponentActivity() {
+        override fun onCreate(savedInstanceState: Bundle?) {
+            super.onCreate(savedInstanceState)
+            setViewContent {
+                frameLayout {
+                    button("CLICK_2") {
+                        startActivity(Intent(this@Activity2, Activity3::class.java))
+                    }
+                }
+            }
+        }
+    }
+
+    class Activity3 : ComponentActivity() {
+        override fun onCreate(savedInstanceState: Bundle?) {
+            super.onCreate(savedInstanceState)
+            setContent {
+                Box(Modifier.testTag("compose-box"))
+            }
+        }
+    }
+}
+
+private fun Activity.setViewContent(content: Activity.() -> View) {
+    setContentView(content())
+}
+
+private fun Context.frameLayout(content: FrameLayout.() -> Unit): FrameLayout {
+    return FrameLayout(this).apply {
+        layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)
+        content()
+    }
+}
+
+private fun ViewGroup.button(text: String, onClick: (View) -> Unit): Button {
+    return Button(context).also {
+        it.layoutParams = FrameLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT, Gravity.CENTER)
+        it.text = text
+        it.setOnClickListener(onClick)
+        addView(it)
+    }
+}
diff --git a/compose/ui/ui-text/benchmark/lint-baseline.xml b/compose/ui/ui-text/benchmark/lint-baseline.xml
index 029c0d9..00ea318 100644
--- a/compose/ui/ui-text/benchmark/lint-baseline.xml
+++ b/compose/ui/ui-text/benchmark/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-alpha01" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha01">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanUncheckedReflection"
diff --git a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt
index d4a7d39..657b05f 100644
--- a/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt
+++ b/compose/ui/ui-text/benchmark/src/androidTest/java/androidx/compose/ui/text/benchmark/ParagraphBenchmark.kt
@@ -50,8 +50,8 @@
         @JvmStatic
         @Parameterized.Parameters(name = "length={0} type={1} alphabet={2}")
         fun initParameters(): List<Array<Any>> = cartesian(
-            arrayOf(32, 512),
-            arrayOf(TextType.PlainText, TextType.StyledText),
+            arrayOf(512),
+            arrayOf(TextType.PlainText),
             arrayOf(Alphabet.Latin, Alphabet.Cjk)
         )
 
diff --git a/compose/ui/ui-text/lint-baseline.xml b/compose/ui/ui-text/lint-baseline.xml
new file mode 100644
index 0000000..78070ef
--- /dev/null
+++ b/compose/ui/ui-text/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `Font`"
+        errorLine1="            val font = Font(ParcelFileDescriptor.dup(inputStream.fd)) as AndroidFont"
+        errorLine2="                       ~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/text/font/AndroidFontTest.kt"
+            line="85"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `Font`"
+        errorLine1="            val fontFamily = Font(ParcelFileDescriptor.dup(inputStream.fd)).toFontFamily()"
+        errorLine2="                             ~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/TypefaceAdapterFileTest.kt"
+            line="107"
+            column="30"/>
+    </issue>
+
+</issues>
diff --git a/compose/ui/ui-tooling-preview/OWNERS b/compose/ui/ui-tooling-preview/OWNERS
new file mode 100644
index 0000000..7e888c71
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/OWNERS
@@ -0,0 +1,2 @@
+amaurym@google.com
+diegoperez@google.com
\ No newline at end of file
diff --git a/compose/ui/ui-tooling-preview/api/1.0.0-beta10.txt b/compose/ui/ui-tooling-preview/api/1.0.0-beta10.txt
new file mode 100644
index 0000000..6500942
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/1.0.0-beta10.txt
@@ -0,0 +1,91 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+  public final class Devices {
+    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+    field public static final String DEFAULT = "";
+    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+    field public static final String NEXUS_10 = "name:Nexus 10";
+    field public static final String NEXUS_5 = "id:Nexus 5";
+    field public static final String NEXUS_5X = "id:Nexus 5X";
+    field public static final String NEXUS_6 = "id:Nexus 6";
+    field public static final String NEXUS_6P = "id:Nexus 6P";
+    field public static final String NEXUS_7 = "id:Nexus 7";
+    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+    field public static final String NEXUS_9 = "id:Nexus 9";
+    field public static final String PIXEL = "id:pixel";
+    field public static final String PIXEL_2 = "id:pixel_2";
+    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+    field public static final String PIXEL_3 = "id:pixel_3";
+    field public static final String PIXEL_3A = "id:pixel_3a";
+    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+    field public static final String PIXEL_4 = "id:pixel_4";
+    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+    field public static final String PIXEL_C = "id:pixel_c";
+    field public static final String PIXEL_XL = "id:pixel_xl";
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
+    method public abstract int apiLevel() default -1;
+    method public abstract long backgroundColor() default 0L;
+    method public abstract String device() default "";
+    method public abstract float fontScale() default 1.0f;
+    method public abstract String group() default "";
+    method public abstract int heightDp() default -1;
+    method public abstract String locale() default "";
+    method public abstract String name() default "";
+    method public abstract boolean showBackground() default false;
+    method public abstract boolean showSystemUi() default false;
+    method public abstract int uiMode() default 0;
+    method public abstract int widthDp() default -1;
+    property public abstract int apiLevel;
+    property public abstract long backgroundColor;
+    property public abstract String device;
+    property public abstract float fontScale;
+    property public abstract String group;
+    property public abstract int heightDp;
+    property public abstract String locale;
+    property public abstract String name;
+    property public abstract boolean showBackground;
+    property public abstract boolean showSystemUi;
+    property public abstract int uiMode;
+    property public abstract int widthDp;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+    method public abstract int limit() default 2147483647;
+    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+    property public abstract int limit;
+    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+  }
+
+  public interface PreviewParameterProvider<T> {
+    method public default int getCount();
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public default int count;
+    property public abstract kotlin.sequences.Sequence<T> values;
+  }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public kotlin.sequences.Sequence<T> values;
+  }
+
+  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+    ctor public LoremIpsum(int words);
+    ctor public LoremIpsum();
+    method public kotlin.sequences.Sequence<java.lang.String> getValues();
+    property public kotlin.sequences.Sequence<java.lang.String> values;
+  }
+
+  public final class LoremIpsumKt {
+  }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/current.txt b/compose/ui/ui-tooling-preview/api/current.txt
new file mode 100644
index 0000000..6500942
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/current.txt
@@ -0,0 +1,91 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+  public final class Devices {
+    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+    field public static final String DEFAULT = "";
+    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+    field public static final String NEXUS_10 = "name:Nexus 10";
+    field public static final String NEXUS_5 = "id:Nexus 5";
+    field public static final String NEXUS_5X = "id:Nexus 5X";
+    field public static final String NEXUS_6 = "id:Nexus 6";
+    field public static final String NEXUS_6P = "id:Nexus 6P";
+    field public static final String NEXUS_7 = "id:Nexus 7";
+    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+    field public static final String NEXUS_9 = "id:Nexus 9";
+    field public static final String PIXEL = "id:pixel";
+    field public static final String PIXEL_2 = "id:pixel_2";
+    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+    field public static final String PIXEL_3 = "id:pixel_3";
+    field public static final String PIXEL_3A = "id:pixel_3a";
+    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+    field public static final String PIXEL_4 = "id:pixel_4";
+    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+    field public static final String PIXEL_C = "id:pixel_c";
+    field public static final String PIXEL_XL = "id:pixel_xl";
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
+    method public abstract int apiLevel() default -1;
+    method public abstract long backgroundColor() default 0L;
+    method public abstract String device() default "";
+    method public abstract float fontScale() default 1.0f;
+    method public abstract String group() default "";
+    method public abstract int heightDp() default -1;
+    method public abstract String locale() default "";
+    method public abstract String name() default "";
+    method public abstract boolean showBackground() default false;
+    method public abstract boolean showSystemUi() default false;
+    method public abstract int uiMode() default 0;
+    method public abstract int widthDp() default -1;
+    property public abstract int apiLevel;
+    property public abstract long backgroundColor;
+    property public abstract String device;
+    property public abstract float fontScale;
+    property public abstract String group;
+    property public abstract int heightDp;
+    property public abstract String locale;
+    property public abstract String name;
+    property public abstract boolean showBackground;
+    property public abstract boolean showSystemUi;
+    property public abstract int uiMode;
+    property public abstract int widthDp;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+    method public abstract int limit() default 2147483647;
+    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+    property public abstract int limit;
+    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+  }
+
+  public interface PreviewParameterProvider<T> {
+    method public default int getCount();
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public default int count;
+    property public abstract kotlin.sequences.Sequence<T> values;
+  }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public kotlin.sequences.Sequence<T> values;
+  }
+
+  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+    ctor public LoremIpsum(int words);
+    ctor public LoremIpsum();
+    method public kotlin.sequences.Sequence<java.lang.String> getValues();
+    property public kotlin.sequences.Sequence<java.lang.String> values;
+  }
+
+  public final class LoremIpsumKt {
+  }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/public_plus_experimental_1.0.0-beta10.txt b/compose/ui/ui-tooling-preview/api/public_plus_experimental_1.0.0-beta10.txt
new file mode 100644
index 0000000..6500942
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/public_plus_experimental_1.0.0-beta10.txt
@@ -0,0 +1,91 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+  public final class Devices {
+    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+    field public static final String DEFAULT = "";
+    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+    field public static final String NEXUS_10 = "name:Nexus 10";
+    field public static final String NEXUS_5 = "id:Nexus 5";
+    field public static final String NEXUS_5X = "id:Nexus 5X";
+    field public static final String NEXUS_6 = "id:Nexus 6";
+    field public static final String NEXUS_6P = "id:Nexus 6P";
+    field public static final String NEXUS_7 = "id:Nexus 7";
+    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+    field public static final String NEXUS_9 = "id:Nexus 9";
+    field public static final String PIXEL = "id:pixel";
+    field public static final String PIXEL_2 = "id:pixel_2";
+    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+    field public static final String PIXEL_3 = "id:pixel_3";
+    field public static final String PIXEL_3A = "id:pixel_3a";
+    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+    field public static final String PIXEL_4 = "id:pixel_4";
+    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+    field public static final String PIXEL_C = "id:pixel_c";
+    field public static final String PIXEL_XL = "id:pixel_xl";
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
+    method public abstract int apiLevel() default -1;
+    method public abstract long backgroundColor() default 0L;
+    method public abstract String device() default "";
+    method public abstract float fontScale() default 1.0f;
+    method public abstract String group() default "";
+    method public abstract int heightDp() default -1;
+    method public abstract String locale() default "";
+    method public abstract String name() default "";
+    method public abstract boolean showBackground() default false;
+    method public abstract boolean showSystemUi() default false;
+    method public abstract int uiMode() default 0;
+    method public abstract int widthDp() default -1;
+    property public abstract int apiLevel;
+    property public abstract long backgroundColor;
+    property public abstract String device;
+    property public abstract float fontScale;
+    property public abstract String group;
+    property public abstract int heightDp;
+    property public abstract String locale;
+    property public abstract String name;
+    property public abstract boolean showBackground;
+    property public abstract boolean showSystemUi;
+    property public abstract int uiMode;
+    property public abstract int widthDp;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+    method public abstract int limit() default 2147483647;
+    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+    property public abstract int limit;
+    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+  }
+
+  public interface PreviewParameterProvider<T> {
+    method public default int getCount();
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public default int count;
+    property public abstract kotlin.sequences.Sequence<T> values;
+  }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public kotlin.sequences.Sequence<T> values;
+  }
+
+  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+    ctor public LoremIpsum(int words);
+    ctor public LoremIpsum();
+    method public kotlin.sequences.Sequence<java.lang.String> getValues();
+    property public kotlin.sequences.Sequence<java.lang.String> values;
+  }
+
+  public final class LoremIpsumKt {
+  }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt b/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..6500942
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/public_plus_experimental_current.txt
@@ -0,0 +1,91 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+  public final class Devices {
+    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+    field public static final String DEFAULT = "";
+    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+    field public static final String NEXUS_10 = "name:Nexus 10";
+    field public static final String NEXUS_5 = "id:Nexus 5";
+    field public static final String NEXUS_5X = "id:Nexus 5X";
+    field public static final String NEXUS_6 = "id:Nexus 6";
+    field public static final String NEXUS_6P = "id:Nexus 6P";
+    field public static final String NEXUS_7 = "id:Nexus 7";
+    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+    field public static final String NEXUS_9 = "id:Nexus 9";
+    field public static final String PIXEL = "id:pixel";
+    field public static final String PIXEL_2 = "id:pixel_2";
+    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+    field public static final String PIXEL_3 = "id:pixel_3";
+    field public static final String PIXEL_3A = "id:pixel_3a";
+    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+    field public static final String PIXEL_4 = "id:pixel_4";
+    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+    field public static final String PIXEL_C = "id:pixel_c";
+    field public static final String PIXEL_XL = "id:pixel_xl";
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
+    method public abstract int apiLevel() default -1;
+    method public abstract long backgroundColor() default 0L;
+    method public abstract String device() default "";
+    method public abstract float fontScale() default 1.0f;
+    method public abstract String group() default "";
+    method public abstract int heightDp() default -1;
+    method public abstract String locale() default "";
+    method public abstract String name() default "";
+    method public abstract boolean showBackground() default false;
+    method public abstract boolean showSystemUi() default false;
+    method public abstract int uiMode() default 0;
+    method public abstract int widthDp() default -1;
+    property public abstract int apiLevel;
+    property public abstract long backgroundColor;
+    property public abstract String device;
+    property public abstract float fontScale;
+    property public abstract String group;
+    property public abstract int heightDp;
+    property public abstract String locale;
+    property public abstract String name;
+    property public abstract boolean showBackground;
+    property public abstract boolean showSystemUi;
+    property public abstract int uiMode;
+    property public abstract int widthDp;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+    method public abstract int limit() default 2147483647;
+    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+    property public abstract int limit;
+    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+  }
+
+  public interface PreviewParameterProvider<T> {
+    method public default int getCount();
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public default int count;
+    property public abstract kotlin.sequences.Sequence<T> values;
+  }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public kotlin.sequences.Sequence<T> values;
+  }
+
+  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+    ctor public LoremIpsum(int words);
+    ctor public LoremIpsum();
+    method public kotlin.sequences.Sequence<java.lang.String> getValues();
+    property public kotlin.sequences.Sequence<java.lang.String> values;
+  }
+
+  public final class LoremIpsumKt {
+  }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/res-1.0.0-beta10.txt b/compose/ui/ui-tooling-preview/api/res-1.0.0-beta10.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/res-1.0.0-beta10.txt
diff --git a/compose/ui/ui-tooling-preview/api/res-current.txt b/compose/ui/ui-tooling-preview/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/res-current.txt
diff --git a/compose/ui/ui-tooling-preview/api/restricted_1.0.0-beta10.txt b/compose/ui/ui-tooling-preview/api/restricted_1.0.0-beta10.txt
new file mode 100644
index 0000000..6500942
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/restricted_1.0.0-beta10.txt
@@ -0,0 +1,91 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+  public final class Devices {
+    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+    field public static final String DEFAULT = "";
+    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+    field public static final String NEXUS_10 = "name:Nexus 10";
+    field public static final String NEXUS_5 = "id:Nexus 5";
+    field public static final String NEXUS_5X = "id:Nexus 5X";
+    field public static final String NEXUS_6 = "id:Nexus 6";
+    field public static final String NEXUS_6P = "id:Nexus 6P";
+    field public static final String NEXUS_7 = "id:Nexus 7";
+    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+    field public static final String NEXUS_9 = "id:Nexus 9";
+    field public static final String PIXEL = "id:pixel";
+    field public static final String PIXEL_2 = "id:pixel_2";
+    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+    field public static final String PIXEL_3 = "id:pixel_3";
+    field public static final String PIXEL_3A = "id:pixel_3a";
+    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+    field public static final String PIXEL_4 = "id:pixel_4";
+    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+    field public static final String PIXEL_C = "id:pixel_c";
+    field public static final String PIXEL_XL = "id:pixel_xl";
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
+    method public abstract int apiLevel() default -1;
+    method public abstract long backgroundColor() default 0L;
+    method public abstract String device() default "";
+    method public abstract float fontScale() default 1.0f;
+    method public abstract String group() default "";
+    method public abstract int heightDp() default -1;
+    method public abstract String locale() default "";
+    method public abstract String name() default "";
+    method public abstract boolean showBackground() default false;
+    method public abstract boolean showSystemUi() default false;
+    method public abstract int uiMode() default 0;
+    method public abstract int widthDp() default -1;
+    property public abstract int apiLevel;
+    property public abstract long backgroundColor;
+    property public abstract String device;
+    property public abstract float fontScale;
+    property public abstract String group;
+    property public abstract int heightDp;
+    property public abstract String locale;
+    property public abstract String name;
+    property public abstract boolean showBackground;
+    property public abstract boolean showSystemUi;
+    property public abstract int uiMode;
+    property public abstract int widthDp;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+    method public abstract int limit() default 2147483647;
+    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+    property public abstract int limit;
+    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+  }
+
+  public interface PreviewParameterProvider<T> {
+    method public default int getCount();
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public default int count;
+    property public abstract kotlin.sequences.Sequence<T> values;
+  }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public kotlin.sequences.Sequence<T> values;
+  }
+
+  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+    ctor public LoremIpsum(int words);
+    ctor public LoremIpsum();
+    method public kotlin.sequences.Sequence<java.lang.String> getValues();
+    property public kotlin.sequences.Sequence<java.lang.String> values;
+  }
+
+  public final class LoremIpsumKt {
+  }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/api/restricted_current.txt b/compose/ui/ui-tooling-preview/api/restricted_current.txt
new file mode 100644
index 0000000..6500942
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/api/restricted_current.txt
@@ -0,0 +1,91 @@
+// Signature format: 4.0
+package androidx.compose.ui.tooling.preview {
+
+  public final class Devices {
+    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
+    field public static final String DEFAULT = "";
+    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
+    field public static final String NEXUS_10 = "name:Nexus 10";
+    field public static final String NEXUS_5 = "id:Nexus 5";
+    field public static final String NEXUS_5X = "id:Nexus 5X";
+    field public static final String NEXUS_6 = "id:Nexus 6";
+    field public static final String NEXUS_6P = "id:Nexus 6P";
+    field public static final String NEXUS_7 = "id:Nexus 7";
+    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
+    field public static final String NEXUS_9 = "id:Nexus 9";
+    field public static final String PIXEL = "id:pixel";
+    field public static final String PIXEL_2 = "id:pixel_2";
+    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
+    field public static final String PIXEL_3 = "id:pixel_3";
+    field public static final String PIXEL_3A = "id:pixel_3a";
+    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
+    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
+    field public static final String PIXEL_4 = "id:pixel_4";
+    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
+    field public static final String PIXEL_C = "id:pixel_c";
+    field public static final String PIXEL_XL = "id:pixel_xl";
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
+    method public abstract int apiLevel() default -1;
+    method public abstract long backgroundColor() default 0L;
+    method public abstract String device() default "";
+    method public abstract float fontScale() default 1.0f;
+    method public abstract String group() default "";
+    method public abstract int heightDp() default -1;
+    method public abstract String locale() default "";
+    method public abstract String name() default "";
+    method public abstract boolean showBackground() default false;
+    method public abstract boolean showSystemUi() default false;
+    method public abstract int uiMode() default 0;
+    method public abstract int widthDp() default -1;
+    property public abstract int apiLevel;
+    property public abstract long backgroundColor;
+    property public abstract String device;
+    property public abstract float fontScale;
+    property public abstract String group;
+    property public abstract int heightDp;
+    property public abstract String locale;
+    property public abstract String name;
+    property public abstract boolean showBackground;
+    property public abstract boolean showSystemUi;
+    property public abstract int uiMode;
+    property public abstract int widthDp;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
+    method public abstract int limit() default 2147483647;
+    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
+    property public abstract int limit;
+    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
+  }
+
+  public interface PreviewParameterProvider<T> {
+    method public default int getCount();
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public default int count;
+    property public abstract kotlin.sequences.Sequence<T> values;
+  }
+
+}
+
+package androidx.compose.ui.tooling.preview.datasource {
+
+  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
+    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
+    method public kotlin.sequences.Sequence<T> getValues();
+    property public kotlin.sequences.Sequence<T> values;
+  }
+
+  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
+    ctor public LoremIpsum(int words);
+    ctor public LoremIpsum();
+    method public kotlin.sequences.Sequence<java.lang.String> getValues();
+    property public kotlin.sequences.Sequence<java.lang.String> values;
+  }
+
+  public final class LoremIpsumKt {
+  }
+
+}
+
diff --git a/compose/ui/ui-tooling-preview/build.gradle b/compose/ui/ui-tooling-preview/build.gradle
new file mode 100644
index 0000000..201c607
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/build.gradle
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import androidx.build.LibraryGroups
+import androidx.build.LibraryType
+
+plugins {
+    id("AndroidXPlugin")
+    id("AndroidXComposePlugin")
+    id("com.android.library")
+    id("org.jetbrains.kotlin.android")
+}
+
+dependencies {
+    implementation(libs.kotlinStdlib)
+    api("androidx.annotation:annotation:1.2.0")
+    api(project(":compose:runtime:runtime"))
+
+    testImplementation(libs.junit)
+}
+
+androidx {
+    name = "Compose Tooling API"
+    type = LibraryType.PUBLISHED_LIBRARY
+    mavenGroup = LibraryGroups.Compose.UI
+    inceptionYear = "2021"
+    description = "Compose tooling library API. This library provides the API required to declare" +
+            " @Preview composables in user apps."
+    legacyDisableKotlinStrictApiMode = true
+}
diff --git a/compose/ui/ui-tooling-preview/src/main/AndroidManifest.xml b/compose/ui/ui-tooling-preview/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..347442f
--- /dev/null
+++ b/compose/ui/ui-tooling-preview/src/main/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2021 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="androidx.compose.ui.tooling.preview">
+
+</manifest>
\ No newline at end of file
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Device.kt b/compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/Device.kt
similarity index 100%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Device.kt
rename to compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/Device.kt
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Preview.kt b/compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/Preview.kt
similarity index 100%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/Preview.kt
rename to compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/Preview.kt
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewParameter.kt b/compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/PreviewParameter.kt
similarity index 100%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewParameter.kt
rename to compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/PreviewParameter.kt
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/UiMode.kt b/compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/UiMode.kt
similarity index 100%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/UiMode.kt
rename to compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/UiMode.kt
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/datasource/CollectionPreviewParameterProvider.kt b/compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/datasource/CollectionPreviewParameterProvider.kt
similarity index 100%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/datasource/CollectionPreviewParameterProvider.kt
rename to compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/datasource/CollectionPreviewParameterProvider.kt
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/datasource/LoremIpsum.kt b/compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/datasource/LoremIpsum.kt
similarity index 85%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/datasource/LoremIpsum.kt
rename to compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/datasource/LoremIpsum.kt
index 2dd91ff..a02e165 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/datasource/LoremIpsum.kt
+++ b/compose/ui/ui-tooling-preview/src/main/java/androidx/compose/ui/tooling/preview/datasource/LoremIpsum.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -39,17 +39,6 @@
 """.trim().split(" ")
 
 /**
- * Generate a Lorem Ipsum [words] long.
- */
-private fun generateLoremIpsum(words: Int): String {
-    var wordsUsed = 0
-    val loremIpsumMaxSize = LOREM_IPSUM_SOURCE.size
-    return generateSequence {
-        LOREM_IPSUM_SOURCE[wordsUsed++ % loremIpsumMaxSize]
-    }.take(words).joinToString(" ")
-}
-
-/**
  * [PreviewParameterProvider] with 1 value containing Lorem Ipsum.
  *
  * @param words Number of words from "Lorem Ipsum" to use.
@@ -61,4 +50,15 @@
 
     override val values: Sequence<String>
         get() = sequenceOf(generateLoremIpsum(words))
+
+    /**
+     * Generate a Lorem Ipsum [words] long.
+     */
+    private fun generateLoremIpsum(words: Int): String {
+        var wordsUsed = 0
+        val loremIpsumMaxSize = LOREM_IPSUM_SOURCE.size
+        return generateSequence {
+            LOREM_IPSUM_SOURCE[wordsUsed++ % loremIpsumMaxSize]
+        }.take(words).joinToString(" ")
+    }
 }
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/datasource/LoremIpsumTest.kt b/compose/ui/ui-tooling-preview/src/test/java/androidx/compose/ui/tooling/preview/datasource/LoremIpsumTest.kt
similarity index 100%
rename from compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/datasource/LoremIpsumTest.kt
rename to compose/ui/ui-tooling-preview/src/test/java/androidx/compose/ui/tooling/preview/datasource/LoremIpsumTest.kt
diff --git a/compose/ui/ui-tooling/api/1.0.0-beta10.txt b/compose/ui/ui-tooling/api/1.0.0-beta10.txt
index 1789ce2..d6124a8 100644
--- a/compose/ui/ui-tooling/api/1.0.0-beta10.txt
+++ b/compose/ui/ui-tooling/api/1.0.0-beta10.txt
@@ -1,113 +1,22 @@
 // Signature format: 4.0
 package androidx.compose.ui.tooling {
 
+  public final class ComposeViewAdapterKt {
+  }
+
   public final class InspectableKt {
     method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
-}
-
-package androidx.compose.ui.tooling.preview {
-
-  public final class ComposeViewAdapterKt {
-    field public static final String TOOLS_NS_URI = "http://schemas.android.com/tools";
-  }
-
-  public final class Devices {
-    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
-    field public static final String DEFAULT = "";
-    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
-    field public static final String NEXUS_10 = "name:Nexus 10";
-    field public static final String NEXUS_5 = "id:Nexus 5";
-    field public static final String NEXUS_5X = "id:Nexus 5X";
-    field public static final String NEXUS_6 = "id:Nexus 6";
-    field public static final String NEXUS_6P = "id:Nexus 6P";
-    field public static final String NEXUS_7 = "id:Nexus 7";
-    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
-    field public static final String NEXUS_9 = "id:Nexus 9";
-    field public static final String PIXEL = "id:pixel";
-    field public static final String PIXEL_2 = "id:pixel_2";
-    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
-    field public static final String PIXEL_3 = "id:pixel_3";
-    field public static final String PIXEL_3A = "id:pixel_3a";
-    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
-    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
-    field public static final String PIXEL_4 = "id:pixel_4";
-    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
-    field public static final String PIXEL_C = "id:pixel_c";
-    field public static final String PIXEL_XL = "id:pixel_xl";
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
-    method public abstract int apiLevel() default -1;
-    method public abstract long backgroundColor() default 0L;
-    method public abstract String device() default "";
-    method public abstract float fontScale() default 1.0f;
-    method public abstract String group() default "";
-    method public abstract int heightDp() default -1;
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    method public abstract boolean showBackground() default false;
-    method public abstract boolean showSystemUi() default false;
-    method public abstract int uiMode() default 0;
-    method public abstract int widthDp() default -1;
-    property public abstract int apiLevel;
-    property public abstract long backgroundColor;
-    property public abstract String device;
-    property public abstract float fontScale;
-    property public abstract String group;
-    property public abstract int heightDp;
-    property public abstract String locale;
-    property public abstract String name;
-    property public abstract boolean showBackground;
-    property public abstract boolean showSystemUi;
-    property public abstract int uiMode;
-    property public abstract int widthDp;
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
-    method public abstract int limit() default 2147483647;
-    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
-    property public abstract int limit;
-    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
-  }
-
-  public interface PreviewParameterProvider<T> {
-    method public default int getCount();
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public default int count;
-    property public abstract kotlin.sequences.Sequence<T> values;
-  }
-
   public final class PreviewUtilsKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.animation {
+package androidx.compose.ui.tooling.animation {
 
   public final class ComposeAnimationParserKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.datasource {
-
-  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
-    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public kotlin.sequences.Sequence<T> values;
-  }
-
-  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
-    ctor public LoremIpsum(int words);
-    ctor public LoremIpsum();
-    method public kotlin.sequences.Sequence<java.lang.String> getValues();
-    property public kotlin.sequences.Sequence<java.lang.String> values;
-  }
-
-  public final class LoremIpsumKt {
-  }
-
-}
-
diff --git a/compose/ui/ui-tooling/api/current.ignore b/compose/ui/ui-tooling/api/current.ignore
new file mode 100644
index 0000000..62d7b31
--- /dev/null
+++ b/compose/ui/ui-tooling/api/current.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+RemovedPackage: androidx.compose.ui.tooling.preview:
+    Removed package androidx.compose.ui.tooling.preview
+RemovedPackage: androidx.compose.ui.tooling.preview.animation:
+    Removed package androidx.compose.ui.tooling.preview.animation
+RemovedPackage: androidx.compose.ui.tooling.preview.datasource:
+    Removed package androidx.compose.ui.tooling.preview.datasource
diff --git a/compose/ui/ui-tooling/api/current.txt b/compose/ui/ui-tooling/api/current.txt
index 1789ce2..d6124a8 100644
--- a/compose/ui/ui-tooling/api/current.txt
+++ b/compose/ui/ui-tooling/api/current.txt
@@ -1,113 +1,22 @@
 // Signature format: 4.0
 package androidx.compose.ui.tooling {
 
+  public final class ComposeViewAdapterKt {
+  }
+
   public final class InspectableKt {
     method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
-}
-
-package androidx.compose.ui.tooling.preview {
-
-  public final class ComposeViewAdapterKt {
-    field public static final String TOOLS_NS_URI = "http://schemas.android.com/tools";
-  }
-
-  public final class Devices {
-    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
-    field public static final String DEFAULT = "";
-    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
-    field public static final String NEXUS_10 = "name:Nexus 10";
-    field public static final String NEXUS_5 = "id:Nexus 5";
-    field public static final String NEXUS_5X = "id:Nexus 5X";
-    field public static final String NEXUS_6 = "id:Nexus 6";
-    field public static final String NEXUS_6P = "id:Nexus 6P";
-    field public static final String NEXUS_7 = "id:Nexus 7";
-    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
-    field public static final String NEXUS_9 = "id:Nexus 9";
-    field public static final String PIXEL = "id:pixel";
-    field public static final String PIXEL_2 = "id:pixel_2";
-    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
-    field public static final String PIXEL_3 = "id:pixel_3";
-    field public static final String PIXEL_3A = "id:pixel_3a";
-    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
-    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
-    field public static final String PIXEL_4 = "id:pixel_4";
-    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
-    field public static final String PIXEL_C = "id:pixel_c";
-    field public static final String PIXEL_XL = "id:pixel_xl";
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
-    method public abstract int apiLevel() default -1;
-    method public abstract long backgroundColor() default 0L;
-    method public abstract String device() default "";
-    method public abstract float fontScale() default 1.0f;
-    method public abstract String group() default "";
-    method public abstract int heightDp() default -1;
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    method public abstract boolean showBackground() default false;
-    method public abstract boolean showSystemUi() default false;
-    method public abstract int uiMode() default 0;
-    method public abstract int widthDp() default -1;
-    property public abstract int apiLevel;
-    property public abstract long backgroundColor;
-    property public abstract String device;
-    property public abstract float fontScale;
-    property public abstract String group;
-    property public abstract int heightDp;
-    property public abstract String locale;
-    property public abstract String name;
-    property public abstract boolean showBackground;
-    property public abstract boolean showSystemUi;
-    property public abstract int uiMode;
-    property public abstract int widthDp;
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
-    method public abstract int limit() default 2147483647;
-    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
-    property public abstract int limit;
-    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
-  }
-
-  public interface PreviewParameterProvider<T> {
-    method public default int getCount();
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public default int count;
-    property public abstract kotlin.sequences.Sequence<T> values;
-  }
-
   public final class PreviewUtilsKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.animation {
+package androidx.compose.ui.tooling.animation {
 
   public final class ComposeAnimationParserKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.datasource {
-
-  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
-    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public kotlin.sequences.Sequence<T> values;
-  }
-
-  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
-    ctor public LoremIpsum(int words);
-    ctor public LoremIpsum();
-    method public kotlin.sequences.Sequence<java.lang.String> getValues();
-    property public kotlin.sequences.Sequence<java.lang.String> values;
-  }
-
-  public final class LoremIpsumKt {
-  }
-
-}
-
diff --git a/compose/ui/ui-tooling/api/public_plus_experimental_1.0.0-beta10.txt b/compose/ui/ui-tooling/api/public_plus_experimental_1.0.0-beta10.txt
index 1789ce2..d6124a8 100644
--- a/compose/ui/ui-tooling/api/public_plus_experimental_1.0.0-beta10.txt
+++ b/compose/ui/ui-tooling/api/public_plus_experimental_1.0.0-beta10.txt
@@ -1,113 +1,22 @@
 // Signature format: 4.0
 package androidx.compose.ui.tooling {
 
+  public final class ComposeViewAdapterKt {
+  }
+
   public final class InspectableKt {
     method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
-}
-
-package androidx.compose.ui.tooling.preview {
-
-  public final class ComposeViewAdapterKt {
-    field public static final String TOOLS_NS_URI = "http://schemas.android.com/tools";
-  }
-
-  public final class Devices {
-    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
-    field public static final String DEFAULT = "";
-    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
-    field public static final String NEXUS_10 = "name:Nexus 10";
-    field public static final String NEXUS_5 = "id:Nexus 5";
-    field public static final String NEXUS_5X = "id:Nexus 5X";
-    field public static final String NEXUS_6 = "id:Nexus 6";
-    field public static final String NEXUS_6P = "id:Nexus 6P";
-    field public static final String NEXUS_7 = "id:Nexus 7";
-    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
-    field public static final String NEXUS_9 = "id:Nexus 9";
-    field public static final String PIXEL = "id:pixel";
-    field public static final String PIXEL_2 = "id:pixel_2";
-    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
-    field public static final String PIXEL_3 = "id:pixel_3";
-    field public static final String PIXEL_3A = "id:pixel_3a";
-    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
-    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
-    field public static final String PIXEL_4 = "id:pixel_4";
-    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
-    field public static final String PIXEL_C = "id:pixel_c";
-    field public static final String PIXEL_XL = "id:pixel_xl";
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
-    method public abstract int apiLevel() default -1;
-    method public abstract long backgroundColor() default 0L;
-    method public abstract String device() default "";
-    method public abstract float fontScale() default 1.0f;
-    method public abstract String group() default "";
-    method public abstract int heightDp() default -1;
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    method public abstract boolean showBackground() default false;
-    method public abstract boolean showSystemUi() default false;
-    method public abstract int uiMode() default 0;
-    method public abstract int widthDp() default -1;
-    property public abstract int apiLevel;
-    property public abstract long backgroundColor;
-    property public abstract String device;
-    property public abstract float fontScale;
-    property public abstract String group;
-    property public abstract int heightDp;
-    property public abstract String locale;
-    property public abstract String name;
-    property public abstract boolean showBackground;
-    property public abstract boolean showSystemUi;
-    property public abstract int uiMode;
-    property public abstract int widthDp;
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
-    method public abstract int limit() default 2147483647;
-    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
-    property public abstract int limit;
-    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
-  }
-
-  public interface PreviewParameterProvider<T> {
-    method public default int getCount();
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public default int count;
-    property public abstract kotlin.sequences.Sequence<T> values;
-  }
-
   public final class PreviewUtilsKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.animation {
+package androidx.compose.ui.tooling.animation {
 
   public final class ComposeAnimationParserKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.datasource {
-
-  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
-    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public kotlin.sequences.Sequence<T> values;
-  }
-
-  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
-    ctor public LoremIpsum(int words);
-    ctor public LoremIpsum();
-    method public kotlin.sequences.Sequence<java.lang.String> getValues();
-    property public kotlin.sequences.Sequence<java.lang.String> values;
-  }
-
-  public final class LoremIpsumKt {
-  }
-
-}
-
diff --git a/compose/ui/ui-tooling/api/public_plus_experimental_current.txt b/compose/ui/ui-tooling/api/public_plus_experimental_current.txt
index 1789ce2..d6124a8 100644
--- a/compose/ui/ui-tooling/api/public_plus_experimental_current.txt
+++ b/compose/ui/ui-tooling/api/public_plus_experimental_current.txt
@@ -1,113 +1,22 @@
 // Signature format: 4.0
 package androidx.compose.ui.tooling {
 
+  public final class ComposeViewAdapterKt {
+  }
+
   public final class InspectableKt {
     method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
-}
-
-package androidx.compose.ui.tooling.preview {
-
-  public final class ComposeViewAdapterKt {
-    field public static final String TOOLS_NS_URI = "http://schemas.android.com/tools";
-  }
-
-  public final class Devices {
-    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
-    field public static final String DEFAULT = "";
-    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
-    field public static final String NEXUS_10 = "name:Nexus 10";
-    field public static final String NEXUS_5 = "id:Nexus 5";
-    field public static final String NEXUS_5X = "id:Nexus 5X";
-    field public static final String NEXUS_6 = "id:Nexus 6";
-    field public static final String NEXUS_6P = "id:Nexus 6P";
-    field public static final String NEXUS_7 = "id:Nexus 7";
-    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
-    field public static final String NEXUS_9 = "id:Nexus 9";
-    field public static final String PIXEL = "id:pixel";
-    field public static final String PIXEL_2 = "id:pixel_2";
-    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
-    field public static final String PIXEL_3 = "id:pixel_3";
-    field public static final String PIXEL_3A = "id:pixel_3a";
-    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
-    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
-    field public static final String PIXEL_4 = "id:pixel_4";
-    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
-    field public static final String PIXEL_C = "id:pixel_c";
-    field public static final String PIXEL_XL = "id:pixel_xl";
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
-    method public abstract int apiLevel() default -1;
-    method public abstract long backgroundColor() default 0L;
-    method public abstract String device() default "";
-    method public abstract float fontScale() default 1.0f;
-    method public abstract String group() default "";
-    method public abstract int heightDp() default -1;
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    method public abstract boolean showBackground() default false;
-    method public abstract boolean showSystemUi() default false;
-    method public abstract int uiMode() default 0;
-    method public abstract int widthDp() default -1;
-    property public abstract int apiLevel;
-    property public abstract long backgroundColor;
-    property public abstract String device;
-    property public abstract float fontScale;
-    property public abstract String group;
-    property public abstract int heightDp;
-    property public abstract String locale;
-    property public abstract String name;
-    property public abstract boolean showBackground;
-    property public abstract boolean showSystemUi;
-    property public abstract int uiMode;
-    property public abstract int widthDp;
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
-    method public abstract int limit() default 2147483647;
-    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
-    property public abstract int limit;
-    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
-  }
-
-  public interface PreviewParameterProvider<T> {
-    method public default int getCount();
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public default int count;
-    property public abstract kotlin.sequences.Sequence<T> values;
-  }
-
   public final class PreviewUtilsKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.animation {
+package androidx.compose.ui.tooling.animation {
 
   public final class ComposeAnimationParserKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.datasource {
-
-  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
-    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public kotlin.sequences.Sequence<T> values;
-  }
-
-  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
-    ctor public LoremIpsum(int words);
-    ctor public LoremIpsum();
-    method public kotlin.sequences.Sequence<java.lang.String> getValues();
-    property public kotlin.sequences.Sequence<java.lang.String> values;
-  }
-
-  public final class LoremIpsumKt {
-  }
-
-}
-
diff --git a/compose/ui/ui-tooling/api/restricted_1.0.0-beta10.txt b/compose/ui/ui-tooling/api/restricted_1.0.0-beta10.txt
index 1789ce2..d6124a8 100644
--- a/compose/ui/ui-tooling/api/restricted_1.0.0-beta10.txt
+++ b/compose/ui/ui-tooling/api/restricted_1.0.0-beta10.txt
@@ -1,113 +1,22 @@
 // Signature format: 4.0
 package androidx.compose.ui.tooling {
 
+  public final class ComposeViewAdapterKt {
+  }
+
   public final class InspectableKt {
     method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
-}
-
-package androidx.compose.ui.tooling.preview {
-
-  public final class ComposeViewAdapterKt {
-    field public static final String TOOLS_NS_URI = "http://schemas.android.com/tools";
-  }
-
-  public final class Devices {
-    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
-    field public static final String DEFAULT = "";
-    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
-    field public static final String NEXUS_10 = "name:Nexus 10";
-    field public static final String NEXUS_5 = "id:Nexus 5";
-    field public static final String NEXUS_5X = "id:Nexus 5X";
-    field public static final String NEXUS_6 = "id:Nexus 6";
-    field public static final String NEXUS_6P = "id:Nexus 6P";
-    field public static final String NEXUS_7 = "id:Nexus 7";
-    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
-    field public static final String NEXUS_9 = "id:Nexus 9";
-    field public static final String PIXEL = "id:pixel";
-    field public static final String PIXEL_2 = "id:pixel_2";
-    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
-    field public static final String PIXEL_3 = "id:pixel_3";
-    field public static final String PIXEL_3A = "id:pixel_3a";
-    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
-    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
-    field public static final String PIXEL_4 = "id:pixel_4";
-    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
-    field public static final String PIXEL_C = "id:pixel_c";
-    field public static final String PIXEL_XL = "id:pixel_xl";
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
-    method public abstract int apiLevel() default -1;
-    method public abstract long backgroundColor() default 0L;
-    method public abstract String device() default "";
-    method public abstract float fontScale() default 1.0f;
-    method public abstract String group() default "";
-    method public abstract int heightDp() default -1;
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    method public abstract boolean showBackground() default false;
-    method public abstract boolean showSystemUi() default false;
-    method public abstract int uiMode() default 0;
-    method public abstract int widthDp() default -1;
-    property public abstract int apiLevel;
-    property public abstract long backgroundColor;
-    property public abstract String device;
-    property public abstract float fontScale;
-    property public abstract String group;
-    property public abstract int heightDp;
-    property public abstract String locale;
-    property public abstract String name;
-    property public abstract boolean showBackground;
-    property public abstract boolean showSystemUi;
-    property public abstract int uiMode;
-    property public abstract int widthDp;
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
-    method public abstract int limit() default 2147483647;
-    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
-    property public abstract int limit;
-    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
-  }
-
-  public interface PreviewParameterProvider<T> {
-    method public default int getCount();
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public default int count;
-    property public abstract kotlin.sequences.Sequence<T> values;
-  }
-
   public final class PreviewUtilsKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.animation {
+package androidx.compose.ui.tooling.animation {
 
   public final class ComposeAnimationParserKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.datasource {
-
-  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
-    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public kotlin.sequences.Sequence<T> values;
-  }
-
-  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
-    ctor public LoremIpsum(int words);
-    ctor public LoremIpsum();
-    method public kotlin.sequences.Sequence<java.lang.String> getValues();
-    property public kotlin.sequences.Sequence<java.lang.String> values;
-  }
-
-  public final class LoremIpsumKt {
-  }
-
-}
-
diff --git a/compose/ui/ui-tooling/api/restricted_current.ignore b/compose/ui/ui-tooling/api/restricted_current.ignore
new file mode 100644
index 0000000..62d7b31
--- /dev/null
+++ b/compose/ui/ui-tooling/api/restricted_current.ignore
@@ -0,0 +1,7 @@
+// Baseline format: 1.0
+RemovedPackage: androidx.compose.ui.tooling.preview:
+    Removed package androidx.compose.ui.tooling.preview
+RemovedPackage: androidx.compose.ui.tooling.preview.animation:
+    Removed package androidx.compose.ui.tooling.preview.animation
+RemovedPackage: androidx.compose.ui.tooling.preview.datasource:
+    Removed package androidx.compose.ui.tooling.preview.datasource
diff --git a/compose/ui/ui-tooling/api/restricted_current.txt b/compose/ui/ui-tooling/api/restricted_current.txt
index 1789ce2..d6124a8 100644
--- a/compose/ui/ui-tooling/api/restricted_current.txt
+++ b/compose/ui/ui-tooling/api/restricted_current.txt
@@ -1,113 +1,22 @@
 // Signature format: 4.0
 package androidx.compose.ui.tooling {
 
+  public final class ComposeViewAdapterKt {
+  }
+
   public final class InspectableKt {
     method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
-}
-
-package androidx.compose.ui.tooling.preview {
-
-  public final class ComposeViewAdapterKt {
-    field public static final String TOOLS_NS_URI = "http://schemas.android.com/tools";
-  }
-
-  public final class Devices {
-    field public static final String AUTOMOTIVE_1024p = "id:automotive_1024p_landscape";
-    field public static final String DEFAULT = "";
-    field public static final androidx.compose.ui.tooling.preview.Devices INSTANCE;
-    field public static final String NEXUS_10 = "name:Nexus 10";
-    field public static final String NEXUS_5 = "id:Nexus 5";
-    field public static final String NEXUS_5X = "id:Nexus 5X";
-    field public static final String NEXUS_6 = "id:Nexus 6";
-    field public static final String NEXUS_6P = "id:Nexus 6P";
-    field public static final String NEXUS_7 = "id:Nexus 7";
-    field public static final String NEXUS_7_2013 = "id:Nexus 7 2013";
-    field public static final String NEXUS_9 = "id:Nexus 9";
-    field public static final String PIXEL = "id:pixel";
-    field public static final String PIXEL_2 = "id:pixel_2";
-    field public static final String PIXEL_2_XL = "id:pixel_2_xl";
-    field public static final String PIXEL_3 = "id:pixel_3";
-    field public static final String PIXEL_3A = "id:pixel_3a";
-    field public static final String PIXEL_3A_XL = "id:pixel_3a_xl";
-    field public static final String PIXEL_3_XL = "id:pixel_3_xl";
-    field public static final String PIXEL_4 = "id:pixel_4";
-    field public static final String PIXEL_4_XL = "id:pixel_4_xl";
-    field public static final String PIXEL_C = "id:pixel_c";
-    field public static final String PIXEL_XL = "id:pixel_xl";
-  }
-
-  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Repeatable @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention) @kotlin.annotation.Target(allowedTargets=kotlin.annotation.AnnotationTarget) public @interface Preview {
-    method public abstract int apiLevel() default -1;
-    method public abstract long backgroundColor() default 0L;
-    method public abstract String device() default "";
-    method public abstract float fontScale() default 1.0f;
-    method public abstract String group() default "";
-    method public abstract int heightDp() default -1;
-    method public abstract String locale() default "";
-    method public abstract String name() default "";
-    method public abstract boolean showBackground() default false;
-    method public abstract boolean showSystemUi() default false;
-    method public abstract int uiMode() default 0;
-    method public abstract int widthDp() default -1;
-    property public abstract int apiLevel;
-    property public abstract long backgroundColor;
-    property public abstract String device;
-    property public abstract float fontScale;
-    property public abstract String group;
-    property public abstract int heightDp;
-    property public abstract String locale;
-    property public abstract String name;
-    property public abstract boolean showBackground;
-    property public abstract boolean showSystemUi;
-    property public abstract int uiMode;
-    property public abstract int widthDp;
-  }
-
-  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface PreviewParameter {
-    method public abstract int limit() default 2147483647;
-    method public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider();
-    property public abstract int limit;
-    property public abstract Class<? extends androidx.compose.ui.tooling.preview.PreviewParameterProvider<?>> provider;
-  }
-
-  public interface PreviewParameterProvider<T> {
-    method public default int getCount();
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public default int count;
-    property public abstract kotlin.sequences.Sequence<T> values;
-  }
-
   public final class PreviewUtilsKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.animation {
+package androidx.compose.ui.tooling.animation {
 
   public final class ComposeAnimationParserKt {
   }
 
 }
 
-package androidx.compose.ui.tooling.preview.datasource {
-
-  public class CollectionPreviewParameterProvider<T> implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<T> {
-    ctor public CollectionPreviewParameterProvider(java.util.Collection<? extends T> collection);
-    method public kotlin.sequences.Sequence<T> getValues();
-    property public kotlin.sequences.Sequence<T> values;
-  }
-
-  public final class LoremIpsum implements androidx.compose.ui.tooling.preview.PreviewParameterProvider<java.lang.String> {
-    ctor public LoremIpsum(int words);
-    ctor public LoremIpsum();
-    method public kotlin.sequences.Sequence<java.lang.String> getValues();
-    property public kotlin.sequences.Sequence<java.lang.String> values;
-  }
-
-  public final class LoremIpsumKt {
-  }
-
-}
-
diff --git a/compose/ui/ui-tooling/build.gradle b/compose/ui/ui-tooling/build.gradle
index e485626..4890adc 100644
--- a/compose/ui/ui-tooling/build.gradle
+++ b/compose/ui/ui-tooling/build.gradle
@@ -36,6 +36,7 @@
 
         api(project(":compose:runtime:runtime"))
         api(project(":compose:ui:ui"))
+        api(project(":compose:ui:ui-tooling-preview"))
         api(project(":compose:ui:ui-tooling-data"))
         implementation(project(":compose:material:material"))
         implementation(project(":activity:activity-compose"))
@@ -77,6 +78,7 @@
 
                 api(project(":compose:runtime:runtime"))
                 api(project(":compose:ui:ui"))
+                api(project(":compose:ui:ui-tooling-preview"))
                 api(project(":compose:ui:ui-tooling-data"))
                 implementation(project(":compose:material:material"))
                 implementation(project(":activity:activity-compose"))
diff --git a/compose/ui/ui-tooling/lint-baseline.xml b/compose/ui/ui-tooling/lint-baseline.xml
index 5f2bf52..38b8dce8 100644
--- a/compose/ui/ui-tooling/lint-baseline.xml
+++ b/compose/ui/ui-tooling/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-alpha01" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha01">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanUncheckedReflection"
@@ -7,7 +7,7 @@
         errorLine1="        return invoke(instance, *arguments)"
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/jvmMain/kotlin/androidx/compose/ui/tooling/preview/CommonPreviewUtils.kt"
+            file="src/jvmMain/kotlin/androidx/compose/ui/tooling/CommonPreviewUtils.kt"
             line="149"
             column="16"/>
     </issue>
@@ -18,7 +18,7 @@
         errorLine1="                val result = designInfoMethod.invoke("
         errorLine2="                             ^">
         <location
-            file="src/androidMain/kotlin/androidx/compose/ui/tooling/preview/ComposeViewAdapter.kt"
+            file="src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt"
             line="385"
             column="30"/>
     </issue>
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/AndroidManifest.xml b/compose/ui/ui-tooling/src/androidAndroidTest/AndroidManifest.xml
index faa9b77..7216778 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/AndroidManifest.xml
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/AndroidManifest.xml
@@ -21,8 +21,9 @@
         android:debuggable="true"
         tools:ignore="HardcodedDebugMode"
         tools:replace="android:debuggable">
-        <activity android:name="androidx.compose.ui.tooling.preview.ComposeViewAdapterTest$Companion$TestActivity"
-            android:theme="@style/TestTheme"/>
+        <activity
+            android:name="androidx.compose.ui.tooling.ComposeViewAdapterTest$Companion$TestActivity"
+            android:theme="@style/TestTheme" />
         <activity android:name="androidx.compose.ui.tooling.TestActivity"
             android:theme="@style/TestTheme"/>
     </application>
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/ComposeViewAdapterTest.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ComposeViewAdapterTest.kt
similarity index 97%
rename from compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/ComposeViewAdapterTest.kt
rename to compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ComposeViewAdapterTest.kt
index a8c2933..ac5f09d 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/ComposeViewAdapterTest.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ComposeViewAdapterTest.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,14 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import android.app.Activity
 import android.os.Bundle
 import androidx.compose.animation.core.InternalAnimationApi
-import androidx.compose.ui.tooling.compositionCount
 import androidx.compose.ui.tooling.data.UiToolingDataApi
-import androidx.compose.ui.tooling.preview.animation.PreviewAnimationClock
+import androidx.compose.ui.tooling.animation.PreviewAnimationClock
 import androidx.compose.ui.tooling.test.R
 import androidx.test.filters.LargeTest
 import androidx.test.filters.MediumTest
@@ -348,7 +347,7 @@
         expectedResult: String
     ) {
         initAndWaitForDraw(
-            "androidx.compose.ui.tooling.preview.DesignInfoProviderComposableKt",
+            "androidx.compose.ui.tooling.DesignInfoProviderComposableKt",
             methodName,
             customArgument
         )
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/DesignInfoProviderComposable.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/DesignInfoProviderComposable.kt
similarity index 94%
rename from compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/DesignInfoProviderComposable.kt
rename to compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/DesignInfoProviderComposable.kt
index ec9575e..806dd6c 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/DesignInfoProviderComposable.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/DesignInfoProviderComposable.kt
@@ -14,11 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import androidx.compose.material.Scaffold
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
+import androidx.compose.ui.tooling.preview.Preview
 
 @Composable
 fun DesignInfoProviderA() {
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/ParameterProviderComposable.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ParameterProviderComposable.kt
similarity index 90%
rename from compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/ParameterProviderComposable.kt
rename to compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ParameterProviderComposable.kt
index 0c91f65..9412cf0 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/ParameterProviderComposable.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/ParameterProviderComposable.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import androidx.compose.material.Button
 import androidx.compose.material.Colors
@@ -23,6 +23,7 @@
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.tooling.preview.Preview
 
 @Preview
 @Composable
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/PreviewActivityTest.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/PreviewActivityTest.kt
similarity index 96%
rename from compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/PreviewActivityTest.kt
rename to compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/PreviewActivityTest.kt
index fba78f7..49c6d5c 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/PreviewActivityTest.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/PreviewActivityTest.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import android.content.Intent
 import android.view.ViewGroup
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterTest.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/PreviewParameterTest.kt
similarity index 87%
rename from compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterTest.kt
rename to compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/PreviewParameterTest.kt
index 0913689..61591d4 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterTest.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/PreviewParameterTest.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import androidx.compose.material.Colors
 import androidx.compose.material.darkColors
@@ -48,7 +48,7 @@
     fun loremIpsumProvider() {
         activityTestRule.runOnUiThread {
             composeViewAdapter.init(
-                "androidx.compose.ui.tooling.preview.ParameterProviderComposableKt",
+                "androidx.compose.ui.tooling.ParameterProviderComposableKt",
                 "OneStringParameter",
                 parameterProvider = LoremIpsum::class.java,
                 debugViewInfos = true
@@ -62,7 +62,7 @@
     fun checkIntParameterProvider() {
         activityTestRule.runOnUiThread {
             composeViewAdapter.init(
-                "androidx.compose.ui.tooling.preview.ParameterProviderComposableKt",
+                "androidx.compose.ui.tooling.ParameterProviderComposableKt",
                 "OneIntParameter",
                 parameterProvider = MyListProvider::class.java,
                 debugViewInfos = true
@@ -78,7 +78,7 @@
     fun checkColorsProvider() {
         activityTestRule.runOnUiThread {
             composeViewAdapter.init(
-                "androidx.compose.ui.tooling.preview.ParameterProviderComposableKt",
+                "androidx.compose.ui.tooling.ParameterProviderComposableKt",
                 "ColorsParameter",
                 parameterProvider = MyColorsProvider::class.java,
                 debugViewInfos = true
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/animation/PreviewAnimationClockTest.kt b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/animation/PreviewAnimationClockTest.kt
similarity index 99%
rename from compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/animation/PreviewAnimationClockTest.kt
rename to compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/animation/PreviewAnimationClockTest.kt
index a661cc7..e35c2ca 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/preview/animation/PreviewAnimationClockTest.kt
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/kotlin/androidx/compose/ui/tooling/animation/PreviewAnimationClockTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview.animation
+package androidx.compose.ui.tooling.animation
 
 import androidx.compose.animation.animateColor
 import androidx.compose.animation.core.InternalAnimationApi
diff --git a/compose/ui/ui-tooling/src/androidAndroidTest/res/layout/compose_adapter_test.xml b/compose/ui/ui-tooling/src/androidAndroidTest/res/layout/compose_adapter_test.xml
index 8adabed..6673e1e 100644
--- a/compose/ui/ui-tooling/src/androidAndroidTest/res/layout/compose_adapter_test.xml
+++ b/compose/ui/ui-tooling/src/androidAndroidTest/res/layout/compose_adapter_test.xml
@@ -15,7 +15,7 @@
   limitations under the License.
   -->
 
-<androidx.compose.ui.tooling.preview.ComposeViewAdapter
+<androidx.compose.ui.tooling.ComposeViewAdapter
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/compose_view_adapter"
     android:orientation="vertical" android:layout_width="match_parent"
diff --git a/compose/ui/ui-tooling/src/androidMain/AndroidManifest.xml b/compose/ui/ui-tooling/src/androidMain/AndroidManifest.xml
index 0a785be..aef36de 100644
--- a/compose/ui/ui-tooling/src/androidMain/AndroidManifest.xml
+++ b/compose/ui/ui-tooling/src/androidMain/AndroidManifest.xml
@@ -18,7 +18,7 @@
 
     <application>
         <activity
-            android:name=".preview.PreviewActivity"
+            android:name=".PreviewActivity"
             android:exported="true" />
     </application>
 
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/ComposeViewAdapter.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt
similarity index 98%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/ComposeViewAdapter.kt
rename to compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt
index 4dabeea..baf13ac 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/ComposeViewAdapter.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/ComposeViewAdapter.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import android.annotation.SuppressLint
 import android.content.Context
@@ -47,14 +47,14 @@
 import androidx.compose.ui.platform.ComposeView
 import androidx.compose.ui.platform.LocalFontLoader
 import androidx.compose.ui.platform.ViewRootForTest
-import androidx.compose.ui.tooling.CompositionDataRecord
-import androidx.compose.ui.tooling.Inspectable
+import androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableViaReflection
 import androidx.compose.ui.tooling.data.Group
 import androidx.compose.ui.tooling.data.SourceLocation
 import androidx.compose.ui.tooling.data.UiToolingDataApi
 import androidx.compose.ui.tooling.data.asTree
-import androidx.compose.ui.tooling.preview.animation.PreviewAnimationClock
-import androidx.compose.ui.tooling.preview.CommonPreviewUtils.invokeComposableViaReflection
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.tooling.preview.PreviewParameterProvider
+import androidx.compose.ui.tooling.animation.PreviewAnimationClock
 import androidx.compose.ui.unit.IntRect
 import androidx.core.app.ActivityOptionsCompat
 import androidx.lifecycle.Lifecycle
@@ -68,7 +68,7 @@
 import androidx.savedstate.ViewTreeSavedStateRegistryOwner
 import java.lang.reflect.Method
 
-const val TOOLS_NS_URI = "http://schemas.android.com/tools"
+private const val TOOLS_NS_URI = "http://schemas.android.com/tools"
 private const val DESIGN_INFO_METHOD = "getDesignInfo"
 
 private val emptyContent: @Composable () -> Unit = @Composable {}
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/LayoutlibFontResourceLoader.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/LayoutlibFontResourceLoader.kt
similarity index 93%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/LayoutlibFontResourceLoader.kt
rename to compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/LayoutlibFontResourceLoader.kt
index 0c85551..90af339 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/LayoutlibFontResourceLoader.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/LayoutlibFontResourceLoader.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import android.content.Context
 import android.graphics.Typeface
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewActivity.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewActivity.kt
similarity index 96%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewActivity.kt
rename to compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewActivity.kt
index 6b2fd1b..87f7446 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewActivity.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewActivity.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import android.content.pm.ApplicationInfo
 import android.os.Bundle
@@ -27,7 +27,7 @@
 import androidx.compose.runtime.currentComposer
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
-import androidx.compose.ui.tooling.preview.CommonPreviewUtils.invokeComposableViaReflection
+import androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableViaReflection
 
 /**
  * Activity used to run `@Composable` previews from Android Studio.
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewUtils.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewUtils.kt
similarity index 95%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewUtils.kt
rename to compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewUtils.kt
index 0637d9a..902dccc 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/PreviewUtils.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/PreviewUtils.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,9 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import android.util.Log
+import androidx.compose.ui.tooling.preview.PreviewParameterProvider
 
 /**
  * Tries to find the [Class] of the [PreviewParameterProvider] corresponding to the given FQN.
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/animation/ComposeAnimationParser.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/ComposeAnimationParser.kt
similarity index 96%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/animation/ComposeAnimationParser.kt
rename to compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/ComposeAnimationParser.kt
index 966dfc9..8421a8a8 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/animation/ComposeAnimationParser.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/ComposeAnimationParser.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview.animation
+package androidx.compose.ui.tooling.animation
 
 import android.util.Log
 import androidx.compose.animation.core.Transition
diff --git a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/animation/PreviewAnimationClock.kt b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/PreviewAnimationClock.kt
similarity index 99%
rename from compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/animation/PreviewAnimationClock.kt
rename to compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/PreviewAnimationClock.kt
index 8541ec1..cb1d1fe 100644
--- a/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/preview/animation/PreviewAnimationClock.kt
+++ b/compose/ui/ui-tooling/src/androidMain/kotlin/androidx/compose/ui/tooling/animation/PreviewAnimationClock.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview.animation
+package androidx.compose.ui.tooling.animation
 
 import android.util.Log
 import androidx.annotation.VisibleForTesting
diff --git a/compose/ui/ui-tooling/src/desktopMain/kotlin/androidx/compose/desktop/ui/tooling/preview/runtime/PreviewRunner.kt b/compose/ui/ui-tooling/src/desktopMain/kotlin/androidx/compose/desktop/ui/tooling/preview/runtime/PreviewRunner.kt
index 4100ec56..6f49adf 100644
--- a/compose/ui/ui-tooling/src/desktopMain/kotlin/androidx/compose/desktop/ui/tooling/preview/runtime/PreviewRunner.kt
+++ b/compose/ui/ui-tooling/src/desktopMain/kotlin/androidx/compose/desktop/ui/tooling/preview/runtime/PreviewRunner.kt
@@ -19,7 +19,7 @@
 import androidx.compose.desktop.Window
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.currentComposer
-import androidx.compose.ui.tooling.preview.CommonPreviewUtils.invokeComposableViaReflection
+import androidx.compose.ui.tooling.CommonPreviewUtils.invokeComposableViaReflection
 
 internal class PreviewRunner {
     companion object {
diff --git a/compose/ui/ui-tooling/src/jvmMain/kotlin/androidx/compose/ui/tooling/preview/CommonPreviewUtils.kt b/compose/ui/ui-tooling/src/jvmMain/kotlin/androidx/compose/ui/tooling/CommonPreviewUtils.kt
similarity index 99%
rename from compose/ui/ui-tooling/src/jvmMain/kotlin/androidx/compose/ui/tooling/preview/CommonPreviewUtils.kt
rename to compose/ui/ui-tooling/src/jvmMain/kotlin/androidx/compose/ui/tooling/CommonPreviewUtils.kt
index 2f114ae..1a30e4e 100644
--- a/compose/ui/ui-tooling/src/jvmMain/kotlin/androidx/compose/ui/tooling/preview/CommonPreviewUtils.kt
+++ b/compose/ui/ui-tooling/src/jvmMain/kotlin/androidx/compose/ui/tooling/CommonPreviewUtils.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.ui.tooling.preview
+package androidx.compose.ui.tooling
 
 import androidx.compose.runtime.Composer
 import java.lang.reflect.Method
diff --git a/compose/ui/ui/lint-baseline.xml b/compose/ui/ui/lint-baseline.xml
new file mode 100644
index 0000000..e85b753
--- /dev/null
+++ b/compose/ui/ui/lint-baseline.xml
@@ -0,0 +1,543 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `waitAndScreenShot`"
+        errorLine1="        val bitmap = rule.waitAndScreenShot()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/draw/AlphaTest.kt"
+            line="231"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 21): `RenderNodeApi29`"
+        errorLine1="        RenderNodeApi29(AndroidComposeView(activity)).apply {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt"
+            line="224"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 21): `dumpRenderNodeData`"
+        errorLine1="        }.dumpRenderNodeData().cameraDistance == cameraDistance"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt"
+            line="226"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `RenderNodeApi23`"
+        errorLine1="        RenderNodeApi23(AndroidComposeView(activity)).apply {"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt"
+            line="231"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `dumpRenderNodeData`"
+        errorLine1="        }.dumpRenderNodeData().cameraDistance == -cameraDistance // Camera distance is negative"
+        errorLine2="          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt"
+            line="233"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `waitAndScreenShot`"
+        errorLine1="    val bitmap = waitAndScreenShot()"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/AndroidLayoutDrawTest.kt"
+            line="3707"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `AndroidAutofill`"
+        errorLine1="        androidAutofill = AndroidAutofill(view, autofillTree)"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPerformAutofillTest.kt"
+            line="46"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `android.view.autofill.AutofillValue#forText`"
+        errorLine1="            .apply { append(autofillNode.id, AutofillValue.forText(expectedValue)) }"
+        errorLine2="                                                           ~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPerformAutofillTest.kt"
+            line="62"
+            column="60"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `performAutofill`"
+        errorLine1="        androidAutofill.performAutofill(autofillValues)"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPerformAutofillTest.kt"
+            line="65"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `android.view.autofill.AutofillValue#forText`"
+        errorLine1="            .apply { append(autofillNode.id, AutofillValue.forText(expectedValue)) }"
+        errorLine2="                                                           ~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPerformAutofillTest.kt"
+            line="84"
+            column="60"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `performAutofill`"
+        errorLine1="        androidAutofill.performAutofill(autofillValues)"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPerformAutofillTest.kt"
+            line="87"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `AndroidAutofill`"
+        errorLine1="        androidAutofill = AndroidAutofill(view, autofillTree)"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="50"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="        val viewStructure: ViewStructure = FakeAndroidViewStructure()"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="57"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `populateViewStructure`"
+        errorLine1="        androidAutofill.populateViewStructure(viewStructure)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="60"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.view.ViewStructure#getChildCount`"
+        errorLine1="        assertThat(viewStructure.childCount).isEqualTo(0)"
+        errorLine2="                                 ~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="63"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="        val viewStructure = FakeAndroidViewStructure()"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="77"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `populateViewStructure`"
+        errorLine1="        androidAutofill.populateViewStructure(viewStructure)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="78"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="            FakeAndroidViewStructure().apply {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="82"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="                    FakeAndroidViewStructure().apply {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="84"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setAutofillType`"
+        errorLine1="                        setAutofillType(View.AUTOFILL_TYPE_TEXT)"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="87"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setAutofillHints`"
+        errorLine1="                        setAutofillHints(arrayOf(AUTOFILL_HINT_PERSON_NAME))"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="88"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setDimens`"
+        errorLine1="                        setDimens(0, 0, 0, 0, 0, 0)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="89"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="        val viewStructure: ViewStructure = FakeAndroidViewStructure()"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="114"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `populateViewStructure`"
+        errorLine1="        androidAutofill.populateViewStructure(viewStructure)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="115"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="            FakeAndroidViewStructure().apply {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="119"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="                    FakeAndroidViewStructure().apply {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="121"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setAutofillType`"
+        errorLine1="                        setAutofillType(View.AUTOFILL_TYPE_TEXT)"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="124"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setAutofillHints`"
+        errorLine1="                        setAutofillHints(arrayOf(AUTOFILL_HINT_PERSON_NAME))"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="125"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setDimens`"
+        errorLine1="                        setDimens(0, 0, 0, 0, 0, 0)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="126"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `FakeAndroidViewStructure`"
+        errorLine1="                    FakeAndroidViewStructure().apply {"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="130"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setAutofillType`"
+        errorLine1="                        setAutofillType(View.AUTOFILL_TYPE_TEXT)"
+        errorLine2="                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="133"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setAutofillHints`"
+        errorLine1="                        setAutofillHints(arrayOf(View.AUTOFILL_HINT_EMAIL_ADDRESS))"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="134"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `setDimens`"
+        errorLine1="                        setDimens(0, 0, 0, 0, 0, 0)"
+        errorLine2="                        ~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AndroidPopulateViewStructureTest.kt"
+            line="135"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`"
+        errorLine1="            activity.getSystemService(AutofillManager::class.java)"
+        errorLine2="                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AutofillNodeTest.kt"
+            line="60"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 26 (current min is 21): `android.view.autofill.AutofillManager`"
+        errorLine1="            activity.getSystemService(AutofillManager::class.java)"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AutofillNodeTest.kt"
+            line="60"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `AndroidAutofill`"
+        errorLine1="        androidAutofill = AndroidAutofill(view, autofillTree)"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AutofillNodeTest.kt"
+            line="63"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `android.view.View#getImportantForAutofill`"
+        errorLine1="        assertThat(view.importantForAutofill).isEqualTo(View.IMPORTANT_FOR_AUTOFILL_YES)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AutofillNodeTest.kt"
+            line="74"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `requestAutofillForNode`"
+        errorLine1="        androidAutofill.requestAutofillForNode(autofillNode)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AutofillNodeTest.kt"
+            line="84"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `requestAutofillForNode`"
+        errorLine1="        androidAutofill.requestAutofillForNode(autofillNode)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AutofillNodeTest.kt"
+            line="101"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `cancelAutofillForNode`"
+        errorLine1="        androidAutofill.cancelAutofillForNode(autofillNode)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/kotlin/androidx/compose/ui/autofill/AutofillNodeTest.kt"
+            line="110"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `waitAndScreenShot`"
+        errorLine1="        val bitmap = rule.waitAndScreenShot()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/draw/ClipDrawTest.kt"
+            line="524"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 21): `android.os.Parcel#readBoolean`"
+        errorLine1="        parcel?.readBoolean()"
+        errorLine2="                ~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DisposableSaveableStateRegistryTest.kt"
+            line="184"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 21): `android.os.Parcel#readBoolean`"
+        errorLine1="        parcel?.readBoolean()"
+        errorLine2="                ~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DisposableSaveableStateRegistryTest.kt"
+            line="184"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 21): `android.os.Parcel#writeBoolean`"
+        errorLine1="        parcel.writeBoolean(true)"
+        errorLine2="               ~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/platform/DisposableSaveableStateRegistryTest.kt"
+            line="188"
+            column="16"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `captureToImage`"
+        errorLine1="    fun SemanticsNodeInteraction.captureToBitmap() = captureToImage().asAndroidBitmap()"
+        errorLine2="                                                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/draw/DrawModifierTest.kt"
+            line="638"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/draw/InvalidatingNotPlacedChildTest.kt"
+            line="378"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `captureToImage`"
+        errorLine1="    val bitmap = onRoot().captureToImage()"
+        errorLine2="                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/draw/PainterModifierTest.kt"
+            line="720"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `waitAndScreenShot`"
+        errorLine1="        val bitmap = rule.waitAndScreenShot()"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/draw/ShadowTest.kt"
+            line="342"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `captureToImage`"
+        errorLine1="        val bitmap = rule.onRoot().captureToImage().asAndroidBitmap()"
+        errorLine2="                                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt"
+            line="481"
+            column="36"/>
+    </issue>
+
+</issues>
diff --git a/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt
new file mode 100644
index 0000000..14598b3
--- /dev/null
+++ b/compose/ui/ui/src/androidAndroidTest/kotlin/androidx/compose/ui/platform/AndroidClipboardManagerTest.kt
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.compose.ui.platform
+
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Shadow
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.ExperimentalTextApi
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.withStyle
+import androidx.compose.ui.unit.sp
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+@OptIn(ExperimentalTextApi::class)
+class AndroidClipboardManagerTest {
+    @Test
+    fun annotatedString_singleSpanStyle_convertToCharSequenceAndRecover() {
+        val annotatedString = buildAnnotatedString {
+            withStyle(SpanStyle(color = Color.Yellow)) {
+                append("Hello ")
+            }
+            append("World")
+        }
+
+        assertEncodeAndDecode(annotatedString)
+    }
+
+    @Test
+    fun annotatedString_multipleSpanStyle_convertToCharSequenceAndRecover() {
+        val annotatedString = buildAnnotatedString {
+            withStyle(SpanStyle(color = Color.Yellow)) {
+                append("Hello")
+            }
+            append("World")
+            withStyle(SpanStyle(letterSpacing = 0.4.sp)) {
+                append("Hello")
+            }
+        }
+
+        assertEncodeAndDecode(annotatedString)
+    }
+
+    @Test
+    fun annotatedString_nestedSpanStyle_convertToCharSequenceAndRecover() {
+        val annotatedString = buildAnnotatedString {
+            withStyle(SpanStyle(letterSpacing = 0.4.sp)) {
+                withStyle(SpanStyle(color = Color.Yellow)) {
+                    append("Hello")
+                }
+                append("World")
+            }
+            append("Hello")
+        }
+
+        assertEncodeAndDecode(annotatedString)
+    }
+
+    @Test
+    fun spanStyle_default_encodeAndDecode() {
+        val spanStyle = SpanStyle()
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withColor_encodeAndDecode() {
+        val spanStyle = SpanStyle(color = Color.Cyan)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withFontSize_encodeAndDecode() {
+        val spanStyle = SpanStyle(fontSize = 16.sp)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withFontWeight_encodeAndDecode() {
+        val spanStyle = SpanStyle(fontWeight = FontWeight.ExtraBold)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withFontStyle_encodeAndDecode() {
+        val spanStyle = SpanStyle(fontStyle = FontStyle.Italic)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withFontSynthesis_encodeAndDecode() {
+        val spanStyle = SpanStyle(fontSynthesis = FontSynthesis.Weight)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withFontFeatureSettings_encodeAndDecode() {
+        val spanStyle = SpanStyle(fontFeatureSettings = "smcp")
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withLetterSpacing_encodeAndDecode() {
+        val spanStyle = SpanStyle(letterSpacing = 0.3.sp)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withBaselineShift_encodeAndDecode() {
+        val spanStyle = SpanStyle(baselineShift = BaselineShift.Subscript)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withTextGeometricTransform_encodeAndDecode() {
+        val spanStyle = SpanStyle(
+            textGeometricTransform = TextGeometricTransform(
+                scaleX = 1.5f,
+                skewX = 0.3f
+            )
+        )
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withBackground_encodeAndDecode() {
+        val spanStyle = SpanStyle(background = Color.Cyan)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withTextDecoration_encodeAndDecode() {
+        val spanStyle = SpanStyle(textDecoration = TextDecoration.Underline)
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withShadow_encodeAndDecode() {
+        val spanStyle = SpanStyle(
+            shadow = Shadow(
+                color = Color.Cyan,
+                offset = Offset(1f, 2f),
+                blurRadius = 3f
+            )
+        )
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    @Test
+    fun spanStyle_withEverything_encodeAndDecode() {
+        val spanStyle = SpanStyle(
+            color = Color.Cyan,
+            fontSize = 16.sp,
+            fontWeight = FontWeight.ExtraLight,
+            fontSynthesis = FontSynthesis.Weight,
+            fontFeatureSettings = "smcp",
+            letterSpacing = 0.3.sp,
+            baselineShift = BaselineShift.Superscript,
+            textGeometricTransform = TextGeometricTransform(
+                scaleX = 1.1f,
+                skewX = 0.1f
+            ),
+            background = Color.Yellow,
+            textDecoration = TextDecoration.LineThrough,
+            shadow = Shadow(
+                color = Color.Cyan,
+                offset = Offset(1f, 2f),
+                blurRadius = 3f
+            )
+        )
+        assertEncodeAndDecode(spanStyle)
+    }
+
+    private fun assertEncodeAndDecode(spanStyle: SpanStyle) {
+        val encoder = EncodeHelper()
+        encoder.encode(spanStyle)
+        val encodedString = encoder.encodedString()
+
+        val decodeHelper = DecodeHelper(encodedString)
+        val decodedSpanStyle = decodeHelper.decodeSpanStyle()
+
+        assertThat(spanStyle).isEqualTo(decodedSpanStyle)
+    }
+
+    private fun assertEncodeAndDecode(annotatedString: AnnotatedString) {
+        val charSequence = annotatedString.convertToCharSequence()
+        val recoveredAnnotatedString = charSequence.convertToAnnotatedString()
+
+        assertThat(annotatedString).isEqualTo(recoveredAnnotatedString)
+    }
+}
\ No newline at end of file
diff --git a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidClipboardManager.android.kt b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidClipboardManager.android.kt
index 6260e07..cc70283b 100644
--- a/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidClipboardManager.android.kt
+++ b/compose/ui/ui/src/androidMain/kotlin/androidx/compose/ui/platform/AndroidClipboardManager.android.kt
@@ -19,7 +19,28 @@
 import android.content.ClipData
 import android.content.ClipDescription.MIMETYPE_TEXT_PLAIN
 import android.content.Context
+import android.os.Parcel
+import android.text.Annotation
+import android.text.SpannableString
+import android.text.Spanned
+import android.util.Base64
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.unit.ExperimentalUnitApi
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnitType
+import androidx.compose.ui.util.fastForEach
 
 private const val PLAIN_TEXT_LABEL = "plain text"
 
@@ -34,28 +55,492 @@
         clipboardManager.setPrimaryClip(
             ClipData.newPlainText(
                 PLAIN_TEXT_LABEL,
-                convertAnnotatedStringToCharSequence(annotatedString)
+                annotatedString.convertToCharSequence()
             )
         )
     }
 
     override fun getText(): AnnotatedString? {
-        return if (clipboardManager.hasPrimaryClip())
-            convertCharSequenceToAnnotatedString(clipboardManager.primaryClip!!.getItemAt(0).text)
-        else null
+        return if (clipboardManager.hasPrimaryClip()) {
+            clipboardManager.primaryClip!!.getItemAt(0).text.convertToAnnotatedString()
+        } else {
+            null
+        }
     }
 
     fun hasText() =
         clipboardManager.primaryClipDescription?.hasMimeType(MIMETYPE_TEXT_PLAIN) ?: false
-
-    private fun convertCharSequenceToAnnotatedString(charSequence: CharSequence?):
-        AnnotatedString? {
-            if (charSequence == null) return null
-            return AnnotatedString(text = charSequence.toString())
-        }
-
-    private fun convertAnnotatedStringToCharSequence(annotatedString: AnnotatedString):
-        CharSequence? {
-            return annotatedString.text
-        }
 }
+
+internal fun CharSequence?.convertToAnnotatedString(): AnnotatedString? {
+    if (this == null) return null
+    if (this !is Spanned) {
+        return AnnotatedString(text = toString())
+    }
+    val annotations = getSpans(0, length, Annotation::class.java)
+    val spanStyleRanges = mutableListOf<AnnotatedString.Range<SpanStyle>>()
+    for (i in 0..annotations.lastIndex) {
+        val span = annotations[i]
+        if (span.key != "androidx.compose.text.SpanStyle") {
+            continue
+        }
+        val start = getSpanStart(span)
+        val end = getSpanEnd(span)
+        val decodeHelper = DecodeHelper(span.value)
+        val spanStyle = decodeHelper.decodeSpanStyle()
+        spanStyleRanges.add(AnnotatedString.Range(spanStyle, start, end))
+    }
+    return AnnotatedString(text = toString(), spanStyles = spanStyleRanges)
+}
+
+internal fun AnnotatedString.convertToCharSequence(): CharSequence {
+    if (spanStyles.isEmpty()) {
+        return text
+    }
+    val spannableString = SpannableString(text)
+    // Normally a SpanStyle will take less than 100 bytes. However, fontFeatureSettings is a string
+    // and doesn't have a maximum length defined. Here we set tentatively set maxSize to be 1024.
+    val encodeHelper = EncodeHelper()
+    spanStyles.fastForEach { (spanStyle, start, end) ->
+        encodeHelper.apply {
+            reset()
+            encode(spanStyle)
+        }
+        spannableString.setSpan(
+            Annotation("androidx.compose.text.SpanStyle", encodeHelper.encodedString()),
+            start,
+            end,
+            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+        )
+    }
+    return spannableString
+}
+
+/**
+ * A helper class used to encode SpanStyles into bytes.
+ * Each field of SpanStyle is assigned with an ID. And if a field is not null or Unspecified, it
+ * will be encoded. Otherwise, it will simply be omitted to save space.
+ */
+internal class EncodeHelper {
+    private var parcel = Parcel.obtain()
+
+    fun reset() {
+        parcel.recycle()
+        parcel = Parcel.obtain()
+    }
+
+    fun encodedString(): String {
+        val bytes = parcel.marshall()
+        return Base64.encodeToString(bytes, Base64.DEFAULT)
+    }
+
+    fun encode(spanStyle: SpanStyle) {
+        if (spanStyle.color != Color.Unspecified) {
+            encode(COLOR_ID)
+            encode(spanStyle.color)
+        }
+        if (spanStyle.fontSize != TextUnit.Unspecified) {
+            encode(FONT_SIZE_ID)
+            encode(spanStyle.fontSize)
+        }
+        spanStyle.fontWeight?.let {
+            encode(FONT_WEIGHT_ID)
+            encode(it)
+        }
+
+        spanStyle.fontStyle?.let {
+            encode(FONT_STYLE_ID)
+            encode(it)
+        }
+
+        spanStyle.fontSynthesis?.let {
+            encode(FONT_SYNTHESIS_ID)
+            encode(it)
+        }
+
+        spanStyle.fontFeatureSettings?.let {
+            encode(FONT_FEATURE_SETTINGS_ID)
+            encode(it)
+        }
+
+        if (spanStyle.letterSpacing != TextUnit.Unspecified) {
+            encode(LETTER_SPACING_ID)
+            encode(spanStyle.letterSpacing)
+        }
+
+        spanStyle.baselineShift?.let {
+            encode(BASELINE_SHIFT_ID)
+            encode(it)
+        }
+
+        spanStyle.textGeometricTransform?.let {
+            encode(TEXT_GEOMETRIC_TRANSFORM_ID)
+            encode(it)
+        }
+
+        if (spanStyle.background != Color.Unspecified) {
+            encode(BACKGROUND_ID)
+            encode(spanStyle.background)
+        }
+
+        spanStyle.textDecoration?.let {
+            encode(TEXT_DECORATION_ID)
+            encode(it)
+        }
+
+        spanStyle.shadow?.let {
+            encode(SHADOW_ID)
+            encode(it)
+        }
+    }
+
+    @OptIn(ExperimentalUnsignedTypes::class)
+    fun encode(color: Color) {
+        encode(color.value)
+    }
+
+    fun encode(textUnit: TextUnit) {
+        val typeCode = when (textUnit.type) {
+            TextUnitType.Unspecified -> UNIT_TYPE_UNSPECIFIED
+            TextUnitType.Sp -> UNIT_TYPE_SP
+            TextUnitType.Em -> UNIT_TYPE_EM
+            else -> UNIT_TYPE_UNSPECIFIED
+        }
+        encode(typeCode)
+        if (textUnit.type != TextUnitType.Unspecified) {
+            encode(textUnit.value)
+        }
+    }
+
+    fun encode(fontWeight: FontWeight) {
+        encode(fontWeight.weight)
+    }
+
+    fun encode(fontStyle: FontStyle) {
+        encode(
+            when (fontStyle) {
+                FontStyle.Normal -> FONT_STYLE_NORMAL
+                FontStyle.Italic -> FONT_STYLE_ITALIC
+                else -> FONT_STYLE_NORMAL
+            }
+        )
+    }
+
+    fun encode(fontSynthesis: FontSynthesis) {
+        val value = when (fontSynthesis) {
+            FontSynthesis.None -> FONT_SYNTHESIS_NONE
+            FontSynthesis.All -> FONT_SYNTHESIS_ALL
+            FontSynthesis.Weight -> FONT_SYNTHESIS_WEIGHT
+            FontSynthesis.Style -> FONT_SYNTHESIS_STYLE
+            else -> FONT_SYNTHESIS_NONE
+        }
+        encode(value)
+    }
+
+    fun encode(baselineShift: BaselineShift) {
+        encode(baselineShift.multiplier)
+    }
+
+    fun encode(textGeometricTransform: TextGeometricTransform) {
+        encode(textGeometricTransform.scaleX)
+        encode(textGeometricTransform.skewX)
+    }
+
+    fun encode(textDecoration: TextDecoration) {
+        encode(textDecoration.mask)
+    }
+
+    fun encode(shadow: Shadow) {
+        encode(shadow.color)
+        encode(shadow.offset.x)
+        encode(shadow.offset.y)
+        encode(shadow.blurRadius)
+    }
+
+    fun encode(byte: Byte) {
+        parcel.writeByte(byte)
+    }
+
+    fun encode(int: Int) {
+        parcel.writeInt(int)
+    }
+
+    fun encode(float: Float) {
+        parcel.writeFloat(float)
+    }
+
+    fun encode(uLong: ULong) {
+        parcel.writeLong(uLong.toLong())
+    }
+
+    fun encode(string: String) {
+        parcel.writeString(string)
+    }
+}
+
+/**
+ * The helper class to decode SpanStyle from a string encoded by [EncodeHelper].
+ */
+internal class DecodeHelper(string: String) {
+    private val parcel = Parcel.obtain()
+
+    init {
+        val bytes = Base64.decode(string, Base64.DEFAULT)
+        parcel.unmarshall(bytes, 0, bytes.size)
+        parcel.setDataPosition(0)
+    }
+
+    /** Decode a SpanStyle from a string. */
+    fun decodeSpanStyle(): SpanStyle {
+        val mutableSpanStyle = MutableSpanStyle()
+        while (parcel.dataAvail() > BYTE_SIZE) {
+            when (decodeByte()) {
+                COLOR_ID ->
+                    if (dataAvailable() >= COLOR_SIZE) {
+                        mutableSpanStyle.color = decodeColor()
+                    } else {
+                        break
+                    }
+                FONT_SIZE_ID ->
+                    if (dataAvailable() >= TEXT_UNIT_SIZE) {
+                        mutableSpanStyle.fontSize = decodeTextUnit()
+                    } else {
+                        break
+                    }
+                FONT_WEIGHT_ID ->
+                    if (dataAvailable() >= FONT_WEIGHT_SIZE) {
+                        mutableSpanStyle.fontWeight = decodeFontWeight()
+                    } else {
+                        break
+                    }
+                FONT_STYLE_ID ->
+                    if (dataAvailable() >= FONT_STYLE_SIZE) {
+                        mutableSpanStyle.fontStyle = decodeFontStyle()
+                    } else {
+                        break
+                    }
+                FONT_SYNTHESIS_ID ->
+                    if (dataAvailable() >= FONT_SYNTHESIS_SIZE) {
+                        mutableSpanStyle.fontSynthesis = decodeFontSynthesis()
+                    } else {
+                        break
+                    }
+                FONT_FEATURE_SETTINGS_ID ->
+                    mutableSpanStyle.fontFeatureSettings = decodeString()
+                LETTER_SPACING_ID ->
+                    if (dataAvailable() >= TEXT_UNIT_SIZE) {
+                        mutableSpanStyle.letterSpacing = decodeTextUnit()
+                    } else {
+                        break
+                    }
+                BASELINE_SHIFT_ID ->
+                    if (dataAvailable() >= BASELINE_SHIFT_SIZE) {
+                        mutableSpanStyle.baselineShift = decodeBaselineShift()
+                    } else {
+                        break
+                    }
+                TEXT_GEOMETRIC_TRANSFORM_ID ->
+                    if (dataAvailable() >= TEXT_GEOMETRIC_TRANSFORM_SIZE) {
+                        mutableSpanStyle.textGeometricTransform = decodeTextGeometricTransform()
+                    } else {
+                        break
+                    }
+                BACKGROUND_ID ->
+                    if (dataAvailable() >= COLOR_SIZE) {
+                        mutableSpanStyle.background = decodeColor()
+                    } else {
+                        break
+                    }
+                TEXT_DECORATION_ID ->
+                    if (dataAvailable() >= TEXT_DECORATION_SIZE) {
+                        mutableSpanStyle.textDecoration = decodeTextDecoration()
+                    } else {
+                        break
+                    }
+                SHADOW_ID ->
+                    if (dataAvailable() >= SHADOW_SIZE) {
+                        mutableSpanStyle.shadow = decodeShadow()
+                    } else {
+                        break
+                    }
+            }
+        }
+
+        return mutableSpanStyle.toSpanStyle()
+    }
+
+    @OptIn(ExperimentalUnsignedTypes::class)
+    fun decodeColor(): Color {
+        return Color(decodeULong())
+    }
+
+    @OptIn(ExperimentalUnitApi::class)
+    fun decodeTextUnit(): TextUnit {
+        val type = when (decodeByte()) {
+            UNIT_TYPE_SP -> TextUnitType.Sp
+            UNIT_TYPE_EM -> TextUnitType.Em
+            else -> TextUnitType.Unspecified
+        }
+        if (type == TextUnitType.Unspecified) {
+            return TextUnit.Unspecified
+        }
+        val value = decodeFloat()
+        return TextUnit(value, type)
+    }
+
+    @OptIn(ExperimentalUnitApi::class)
+    fun decodeFontWeight(): FontWeight {
+        return FontWeight(decodeInt())
+    }
+
+    fun decodeFontStyle(): FontStyle {
+        return when (decodeByte()) {
+            FONT_STYLE_NORMAL -> FontStyle.Normal
+            FONT_STYLE_ITALIC -> FontStyle.Italic
+            else -> FontStyle.Normal
+        }
+    }
+
+    fun decodeFontSynthesis(): FontSynthesis {
+        return when (decodeByte()) {
+            FONT_SYNTHESIS_NONE -> FontSynthesis.None
+            FONT_SYNTHESIS_ALL -> FontSynthesis.All
+            FONT_SYNTHESIS_STYLE -> FontSynthesis.Style
+            FONT_SYNTHESIS_WEIGHT -> FontSynthesis.Weight
+            else -> FontSynthesis.None
+        }
+    }
+
+    private fun decodeBaselineShift(): BaselineShift {
+        return BaselineShift(decodeFloat())
+    }
+
+    private fun decodeTextGeometricTransform(): TextGeometricTransform {
+        return TextGeometricTransform(
+            scaleX = decodeFloat(),
+            skewX = decodeFloat()
+        )
+    }
+
+    private fun decodeTextDecoration(): TextDecoration {
+        val mask = decodeInt()
+        val hasLineThrough = mask and TextDecoration.LineThrough.mask != 0
+        val hasUnderline = mask and TextDecoration.Underline.mask != 0
+        return if (hasLineThrough && hasUnderline) {
+            TextDecoration.combine(listOf(TextDecoration.LineThrough, TextDecoration.Underline))
+        } else if (hasLineThrough) {
+            TextDecoration.LineThrough
+        } else if (hasUnderline) {
+            TextDecoration.Underline
+        } else {
+            TextDecoration.None
+        }
+    }
+
+    private fun decodeShadow(): Shadow {
+        return Shadow(
+            color = decodeColor(),
+            offset = Offset(decodeFloat(), decodeFloat()),
+            blurRadius = decodeFloat()
+        )
+    }
+
+    private fun decodeByte(): Byte {
+        return parcel.readByte()
+    }
+
+    private fun decodeInt(): Int {
+        return parcel.readInt()
+    }
+
+    private fun decodeULong(): ULong {
+        return parcel.readLong().toULong()
+    }
+
+    private fun decodeFloat(): Float {
+        return parcel.readFloat()
+    }
+
+    private fun decodeString(): String? {
+        return parcel.readString()
+    }
+
+    private fun dataAvailable(): Int {
+        return parcel.dataAvail()
+    }
+}
+
+private class MutableSpanStyle(
+    var color: Color = Color.Unspecified,
+    var fontSize: TextUnit = TextUnit.Unspecified,
+    var fontWeight: FontWeight? = null,
+    var fontStyle: FontStyle? = null,
+    var fontSynthesis: FontSynthesis? = null,
+    var fontFamily: FontFamily? = null,
+    var fontFeatureSettings: String? = null,
+    var letterSpacing: TextUnit = TextUnit.Unspecified,
+    var baselineShift: BaselineShift? = null,
+    var textGeometricTransform: TextGeometricTransform? = null,
+    var localeList: LocaleList? = null,
+    var background: Color = Color.Unspecified,
+    var textDecoration: TextDecoration? = null,
+    var shadow: Shadow? = null
+) {
+    fun toSpanStyle(): SpanStyle {
+        return SpanStyle(
+            color = color,
+            fontSize = fontSize,
+            fontWeight = fontWeight,
+            fontStyle = fontStyle,
+            fontSynthesis = fontSynthesis,
+            fontFamily = fontFamily,
+            fontFeatureSettings = fontFeatureSettings,
+            letterSpacing = letterSpacing,
+            baselineShift = baselineShift,
+            textGeometricTransform = textGeometricTransform,
+            localeList = localeList,
+            background = background,
+            textDecoration = textDecoration,
+            shadow = shadow
+        )
+    }
+}
+
+private const val UNIT_TYPE_UNSPECIFIED: Byte = 0
+private const val UNIT_TYPE_SP: Byte = 1
+private const val UNIT_TYPE_EM: Byte = 2
+
+private const val FONT_STYLE_NORMAL: Byte = 0
+private const val FONT_STYLE_ITALIC: Byte = 1
+
+private const val FONT_SYNTHESIS_NONE: Byte = 0
+private const val FONT_SYNTHESIS_ALL: Byte = 1
+private const val FONT_SYNTHESIS_WEIGHT: Byte = 2
+private const val FONT_SYNTHESIS_STYLE: Byte = 3
+
+private const val COLOR_ID: Byte = 1
+private const val FONT_SIZE_ID: Byte = 2
+private const val FONT_WEIGHT_ID: Byte = 3
+private const val FONT_STYLE_ID: Byte = 4
+private const val FONT_SYNTHESIS_ID: Byte = 5
+private const val FONT_FEATURE_SETTINGS_ID: Byte = 6
+private const val LETTER_SPACING_ID: Byte = 7
+private const val BASELINE_SHIFT_ID: Byte = 8
+private const val TEXT_GEOMETRIC_TRANSFORM_ID: Byte = 9
+private const val BACKGROUND_ID: Byte = 10
+private const val TEXT_DECORATION_ID: Byte = 11
+private const val SHADOW_ID: Byte = 12
+
+private const val BYTE_SIZE = 1
+private const val INT_SIZE = 4
+private const val FLOAT_SIZE = 4
+private const val LONG_SIZE = 8
+private const val COLOR_SIZE = LONG_SIZE
+private const val TEXT_UNIT_SIZE = BYTE_SIZE + FLOAT_SIZE
+private const val FONT_WEIGHT_SIZE = INT_SIZE
+private const val FONT_STYLE_SIZE = BYTE_SIZE
+private const val FONT_SYNTHESIS_SIZE = BYTE_SIZE
+private const val BASELINE_SHIFT_SIZE = FLOAT_SIZE
+private const val TEXT_GEOMETRIC_TRANSFORM_SIZE = FLOAT_SIZE * 2
+private const val TEXT_DECORATION_SIZE = INT_SIZE
+private const val SHADOW_SIZE = COLOR_SIZE + FLOAT_SIZE * 3
\ No newline at end of file
diff --git a/concurrent/futures/lint-baseline.xml b/concurrent/futures/lint-baseline.xml
index e3e9c00..1e1f597 100644
--- a/concurrent/futures/lint-baseline.xml
+++ b/concurrent/futures/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/contentaccess/contentaccess-entities/lint-baseline.xml b/contentaccess/contentaccess-entities/lint-baseline.xml
deleted file mode 100644
index cac8848..0000000
--- a/contentaccess/contentaccess-entities/lint-baseline.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.2.0-alpha15" client="gradle" variant="debug" version="4.2.0-alpha15">
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#DATE_TAKEN`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.DATE_TAKEN)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="204"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#BUCKET_ID`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.BUCKET_ID)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="208"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#BUCKET_DISPLAY_NAME`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.BUCKET_DISPLAY_NAME)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="212"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#ORIENTATION`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.ORIENTATION)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="216"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#DATE_TAKEN`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.DATE_TAKEN)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="403"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#BUCKET_ID`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.BUCKET_ID)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="407"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#BUCKET_DISPLAY_NAME`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.BUCKET_DISPLAY_NAME)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="411"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#DURATION`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.DURATION)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="420"
-            column="24"/>
-    </issue>
-
-    <issue
-        id="InlinedApi"
-        message="Field requires API level 29 (current min is 14): `android.provider.MediaStore.MediaColumns#DURATION`"
-        errorLine1="        @ContentColumn(android.provider.MediaStore.MediaColumns.DURATION)"
-        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/kotlin/androidx/contentaccess/entities/ContentAccessMediaStore.kt"
-            line="581"
-            column="24"/>
-    </issue>
-
-</issues>
diff --git a/contentaccess/integration-tests/testapp/lint-baseline.xml b/contentaccess/integration-tests/testapp/lint-baseline.xml
deleted file mode 100644
index f4519bf..0000000
--- a/contentaccess/integration-tests/testapp/lint-baseline.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.2.0-alpha15" client="gradle" variant="debug" version="4.2.0-alpha15">
-
-    <issue
-        id="ScopedStorage"
-        message="WRITE_EXTERNAL_STORAGE no longer provides write access when targeting Android 10+"
-        errorLine1="    &lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; />"
-        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="20"
-            column="36"/>
-    </issue>
-
-    <issue
-        id="AllowBackup"
-        message="On SDK version 23 and up, your app data will be automatically backed up and restored on app install. Consider adding the attribute `android:fullBackupContent` to specify an `@xml` resource which configures which files to backup. More info: https://developer.android.com/training/backup/autosyncapi.html"
-        errorLine1="    &lt;application />"
-        errorLine2="     ~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="24"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="AllowBackup"
-        message="Should explicitly set `android:allowBackup` to `true` or `false` (it&apos;s `true` by default, and that can have some security implications for the application&apos;s data)"
-        errorLine1="    &lt;application />"
-        errorLine2="     ~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="24"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="MissingApplicationIcon"
-        message="Should explicitly set `android:icon`, there is no default"
-        errorLine1="    &lt;application />"
-        errorLine2="     ~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="24"
-            column="6"/>
-    </issue>
-
-</issues>
diff --git a/contentpager/contentpager/lint-baseline.xml b/contentpager/contentpager/lint-baseline.xml
index cbcf5fe..16ff690 100644
--- a/contentpager/contentpager/lint-baseline.xml
+++ b/contentpager/contentpager/lint-baseline.xml
@@ -1,5 +1,38 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.database.AbstractCursor#setExtras`"
+        errorLine1="        c.setExtras(extras);"
+        errorLine2="          ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/contentpager/content/TestContentProvider.java"
+            line="245"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 15 (current min is 14): `new android.database.CursorWindow`"
+        errorLine1="            setWindow(new CursorWindow(&quot;stevie&quot;));"
+        errorLine2="                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/contentpager/content/TestContentProvider.java"
+            line="377"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `android.database.AbstractCursor#setExtras`"
+        errorLine1="        cursor.setExtras(extras);"
+        errorLine2="               ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/contentpager/content/TestQueryCallback.java"
+            line="51"
+            column="16"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/coordinatorlayout/coordinatorlayout/lint-baseline.xml b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
index be43f6b..a8c4079 100644
--- a/coordinatorlayout/coordinatorlayout/lint-baseline.xml
+++ b/coordinatorlayout/coordinatorlayout/lint-baseline.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.view.MotionEvent#actionToString`"
+        errorLine1="            return &quot;MotionEvent#getAction() == &quot; + MotionEvent.actionToString(mAction);"
+        errorLine2="                                                               ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/coordinatorlayout/widget/CoordinatorLayoutTouchEventTest.java"
+            line="561"
+            column="64"/>
+    </issue>
 
     <issue
         id="UnknownNullness"
diff --git a/coordinatorlayout/coordinatorlayout/proguard-rules.pro b/coordinatorlayout/coordinatorlayout/proguard-rules.pro
index 3705ed2..8e70bc6 100644
--- a/coordinatorlayout/coordinatorlayout/proguard-rules.pro
+++ b/coordinatorlayout/coordinatorlayout/proguard-rules.pro
@@ -19,4 +19,7 @@
 }
 
 # Make sure we keep annotations for CoordinatorLayout's DefaultBehavior and ViewPager's DecorView
--keepattributes *Annotation*
+-keepattributes AnnotationDefault,
+                RuntimeVisibleAnnotations,
+                RuntimeVisibleParameterAnnotations,
+                RuntimeVisibleTypeAnnotations
diff --git a/core/core-animation/lint-baseline.xml b/core/core-animation/lint-baseline.xml
index 13d37ce..7ea9925 100644
--- a/core/core-animation/lint-baseline.xml
+++ b/core/core-animation/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ResourceType"
@@ -14,7 +14,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                        Object value = convertBack(mGetter.invoke(target));"
         errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -25,7 +25,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                Object value = convertBack(mGetter.invoke(target));"
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -36,7 +36,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                mSetter.invoke(target, mTmpValueArray);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -47,7 +47,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                mSetter.invoke(target, mTmpValueArray);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -58,7 +58,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mSetter.invoke(target, mTmpValueArray);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -69,7 +69,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mSetter.invoke(target, boxedValues);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -80,7 +80,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mSetter.invoke(target, boxedValues);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/core/core-appdigest/lint-baseline.xml b/core/core-appdigest/lint-baseline.xml
new file mode 100644
index 0000000..f787484e
--- /dev/null
+++ b/core/core-appdigest/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 24): `android.app.UiAutomation#adoptShellPermissionIdentity`"
+        errorLine1="            getUiAutomation().adoptShellPermissionIdentity(Manifest.permission.INSTALL_PACKAGES);"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java"
+            line="379"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 24): `android.app.UiAutomation#dropShellPermissionIdentity`"
+        errorLine1="                getUiAutomation().dropShellPermissionIdentity();"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/appdigest/ChecksumsTest.java"
+            line="395"
+            column="35"/>
+    </issue>
+
+</issues>
diff --git a/core/core-google-shortcuts/lint-baseline.xml b/core/core-google-shortcuts/lint-baseline.xml
new file mode 100644
index 0000000..cf82732
--- /dev/null
+++ b/core/core-google-shortcuts/lint-baseline.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.Collection#stream`"
+        errorLine1="                actions.stream().map(Object::toString).collect(Collectors.toList());"
+        errorLine2="                        ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/google/shortcuts/ShortcutInfoChangeListenerImplTest.java"
+            line="274"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.stream.Collectors#toList`"
+        errorLine1="                actions.stream().map(Object::toString).collect(Collectors.toList());"
+        errorLine2="                                                                          ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/google/shortcuts/ShortcutInfoChangeListenerImplTest.java"
+            line="274"
+            column="75"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.stream.Stream#collect`"
+        errorLine1="                actions.stream().map(Object::toString).collect(Collectors.toList());"
+        errorLine2="                                                       ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/google/shortcuts/ShortcutInfoChangeListenerImplTest.java"
+            line="274"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.stream.Stream#map`"
+        errorLine1="                actions.stream().map(Object::toString).collect(Collectors.toList());"
+        errorLine2="                                 ~~~">
+        <location
+            file="src/androidTest/java/androidx/core/google/shortcuts/ShortcutInfoChangeListenerImplTest.java"
+            line="274"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast to `Collector` requires API level 24 (current min is 21)"
+        errorLine1="                actions.stream().map(Object::toString).collect(Collectors.toList());"
+        errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/google/shortcuts/ShortcutInfoChangeListenerImplTest.java"
+            line="274"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.Collection#stream`"
+        errorLine1="        assertThat(resolveInfos.stream().anyMatch(resolveInfo ->"
+        errorLine2="                                ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java"
+            line="136"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 21): `java.util.stream.Stream#anyMatch`"
+        errorLine1="        assertThat(resolveInfos.stream().anyMatch(resolveInfo ->"
+        errorLine2="                                         ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/google/shortcuts/TrampolineActivityTest.java"
+            line="136"
+            column="42"/>
+    </issue>
+
+</issues>
diff --git a/core/core-ktx/lint-baseline.xml b/core/core-ktx/lint-baseline.xml
index 718509e..0a1170e 100644
--- a/core/core-ktx/lint-baseline.xml
+++ b/core/core-ktx/lint-baseline.xml
@@ -1,5 +1,126 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
+        errorLine1="        assertFalse(1 in array)"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"
+            line="42"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
+        errorLine1="        assertTrue(1 in array)"
+        errorLine2="                   ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"
+            line="44"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
+        errorLine1="        assertFalse(2 in array)"
+        errorLine2="                    ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"
+            line="52"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.util.SparseArray#contains`"
+        errorLine1="        assertTrue(2 in array)"
+        errorLine2="                   ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/util/SparseArrayTest.kt"
+            line="55"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `updatePaddingRelative`"
+        errorLine1="        view.updatePaddingRelative(start = 10, end = 20)"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/ViewTest.kt"
+            line="142"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingStart`"
+        errorLine1="        assertEquals(10, view.paddingStart)"
+        errorLine2="                              ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/ViewTest.kt"
+            line="143"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingEnd`"
+        errorLine1="        assertEquals(20, view.paddingEnd)"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/ViewTest.kt"
+            line="145"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.View#setPaddingRelative`"
+        errorLine1="        view.setPaddingRelative(10, 20, 30, 40)"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/ViewTest.kt"
+            line="151"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `updatePaddingRelative`"
+        errorLine1="        view.updatePaddingRelative()"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/ViewTest.kt"
+            line="152"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingStart`"
+        errorLine1="        assertEquals(10, view.paddingStart)"
+        errorLine2="                              ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/ViewTest.kt"
+            line="153"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.View#getPaddingEnd`"
+        errorLine1="        assertEquals(30, view.paddingEnd)"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/ViewTest.kt"
+            line="155"
+            column="31"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/core/core/api/current.txt b/core/core/api/current.txt
index ed6e107..fc6c7cd 100644
--- a/core/core/api/current.txt
+++ b/core/core/api/current.txt
@@ -988,16 +988,21 @@
   }
 
   public final class IntentCompat {
-    method public static boolean areUnusedAppRestrictionsAllowlisted(android.content.Context);
-    method public static boolean areUnusedAppRestrictionsAvailable(android.content.Context);
     method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
+    method public static int getUnusedAppRestrictionsStatus(android.content.Context);
     method public static android.content.Intent makeMainSelectorActivity(String, String);
     field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
     field public static final String ACTION_UNUSED_APP_RESTRICTIONS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+    field public static final int APP_HIBERNATION_DISABLED = 5; // 0x5
+    field public static final int APP_HIBERNATION_ENABLED = 4; // 0x4
     field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
     field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
     field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
     field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+    field public static final int PERMISSION_REVOCATION_DISABLED = 3; // 0x3
+    field public static final int PERMISSION_REVOCATION_ENABLED = 2; // 0x2
+    field public static final int UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE = 1; // 0x1
+    field public static final int UNUSED_APP_RESTRICTION_STATUS_UNKNOWN = 0; // 0x0
   }
 
   public final class LocusIdCompat {
diff --git a/core/core/api/public_plus_experimental_current.txt b/core/core/api/public_plus_experimental_current.txt
index 5153500..5ae6f44 100644
--- a/core/core/api/public_plus_experimental_current.txt
+++ b/core/core/api/public_plus_experimental_current.txt
@@ -988,16 +988,21 @@
   }
 
   public final class IntentCompat {
-    method public static boolean areUnusedAppRestrictionsAllowlisted(android.content.Context);
-    method public static boolean areUnusedAppRestrictionsAvailable(android.content.Context);
     method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
+    method public static int getUnusedAppRestrictionsStatus(android.content.Context);
     method public static android.content.Intent makeMainSelectorActivity(String, String);
     field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
     field public static final String ACTION_UNUSED_APP_RESTRICTIONS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+    field public static final int APP_HIBERNATION_DISABLED = 5; // 0x5
+    field public static final int APP_HIBERNATION_ENABLED = 4; // 0x4
     field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
     field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
     field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
     field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+    field public static final int PERMISSION_REVOCATION_DISABLED = 3; // 0x3
+    field public static final int PERMISSION_REVOCATION_ENABLED = 2; // 0x2
+    field public static final int UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE = 1; // 0x1
+    field public static final int UNUSED_APP_RESTRICTION_STATUS_UNKNOWN = 0; // 0x0
   }
 
   public final class LocusIdCompat {
diff --git a/core/core/api/restricted_current.txt b/core/core/api/restricted_current.txt
index 3cea1d3..c7814ac 100644
--- a/core/core/api/restricted_current.txt
+++ b/core/core/api/restricted_current.txt
@@ -1091,16 +1091,21 @@
   }
 
   public final class IntentCompat {
-    method public static boolean areUnusedAppRestrictionsAllowlisted(android.content.Context);
-    method public static boolean areUnusedAppRestrictionsAvailable(android.content.Context);
     method public static android.content.Intent createManageUnusedAppRestrictionsIntent(android.content.Context, String);
+    method public static int getUnusedAppRestrictionsStatus(android.content.Context);
     method public static android.content.Intent makeMainSelectorActivity(String, String);
     field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
     field public static final String ACTION_UNUSED_APP_RESTRICTIONS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+    field public static final int APP_HIBERNATION_DISABLED = 5; // 0x5
+    field public static final int APP_HIBERNATION_ENABLED = 4; // 0x4
     field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
     field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
     field public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK";
     field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+    field public static final int PERMISSION_REVOCATION_DISABLED = 3; // 0x3
+    field public static final int PERMISSION_REVOCATION_ENABLED = 2; // 0x2
+    field public static final int UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE = 1; // 0x1
+    field public static final int UNUSED_APP_RESTRICTION_STATUS_UNKNOWN = 0; // 0x0
   }
 
   public final class LocusIdCompat {
diff --git a/core/core/lint-baseline.xml b/core/core/lint-baseline.xml
index 39e9183..a2d6eef 100644
--- a/core/core/lint-baseline.xml
+++ b/core/core/lint-baseline.xml
@@ -1,5 +1,1358 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Optional#of`"
+        errorLine1="                return Optional.of(modeCompat);"
+        errorLine2="                                ~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="74"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Optional#empty`"
+        errorLine1="        return Optional.empty();"
+        errorLine2="                        ~~~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="77"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 17 (current min is 14): `android.hardware.display.DisplayManager`"
+        errorLine1="        mDisplayManager = (DisplayManager) mContext.getSystemService(DISPLAY_SERVICE);"
+        errorLine2="                           ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="84"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.hardware.display.DisplayManager#getDisplay`"
+        errorLine1="        mDefaultDisplay = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);"
+        errorLine2="                                          ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="85"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Optional#get`"
+        errorLine1="                findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay)).get();"
+        errorLine2="                                                                                           ~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="112"
+            column="92"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.hardware.display.DisplayManager#getDisplay`"
+        errorLine1="        Display secondDisplay = mDisplayManager.getDisplay(secondDisplayId);"
+        errorLine2="                                                ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="123"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Optional#get`"
+        errorLine1="                findNativeMode(DisplayCompat.getSupportedModes(mContext, secondDisplay)).get();"
+        errorLine2="                                                                                         ~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="130"
+            column="90"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Optional#get`"
+        errorLine1="                findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay)).get();"
+        errorLine2="                                                                                           ~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="145"
+            column="92"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Optional#get`"
+        errorLine1="                findNativeMode(DisplayCompat.getSupportedModes(mContext, mDefaultDisplay)).get();"
+        errorLine2="                                                                                           ~~~">
+        <location
+            file="src/test/java/androidx/core/view/DisplayCompatTest.java"
+            line="166"
+            column="92"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.lang.AutoCloseable#close`"
+        errorLine1="                closeable.close();"
+        errorLine2="                          ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/FileProviderTest.java"
+            line="466"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="            resolveInfo.providerInfo = new ProviderInfo();"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/IntentCompatTest.java"
+            line="318"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="            resolveInfo.providerInfo.name = &quot;Name needed to keep toString() happy :)&quot;;"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/IntentCompatTest.java"
+            line="319"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getImportance`"
+        errorLine1="            boolean equality = nc1.getImportance() == nc2.getImportance()"
+        errorLine2="                                   ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="175"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getImportance`"
+        errorLine1="            boolean equality = nc1.getImportance() == nc2.getImportance()"
+        errorLine2="                                                          ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="175"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#canBypassDnd`"
+        errorLine1="                    &amp;&amp; nc1.canBypassDnd() == nc2.canBypassDnd()"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="176"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#canBypassDnd`"
+        errorLine1="                    &amp;&amp; nc1.canBypassDnd() == nc2.canBypassDnd()"
+        errorLine2="                                                 ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="176"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getLockscreenVisibility`"
+        errorLine1="                    &amp;&amp; nc1.getLockscreenVisibility() == nc2.getLockscreenVisibility()"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="177"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getLockscreenVisibility`"
+        errorLine1="                    &amp;&amp; nc1.getLockscreenVisibility() == nc2.getLockscreenVisibility()"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="177"
+            column="61"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getLightColor`"
+        errorLine1="                    &amp;&amp; nc1.getLightColor() == nc2.getLightColor()"
+        errorLine2="                           ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="178"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getLightColor`"
+        errorLine1="                    &amp;&amp; nc1.getLightColor() == nc2.getLightColor()"
+        errorLine2="                                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="178"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getId(), nc2.getId())"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="179"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getId`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getId(), nc2.getId())"
+        errorLine2="                                          ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="179"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getId`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getId(), nc2.getId())"
+        errorLine2="                                                       ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="179"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getName(), nc2.getName())"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="180"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getName`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getName(), nc2.getName())"
+        errorLine2="                                          ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="180"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getName`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getName(), nc2.getName())"
+        errorLine2="                                                         ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="180"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getDescription(), nc2.getDescription())"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="181"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getDescription`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getDescription(), nc2.getDescription())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="181"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getDescription`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getDescription(), nc2.getDescription())"
+        errorLine2="                                                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="181"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getSound(), nc2.getSound())"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="182"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getSound`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getSound(), nc2.getSound())"
+        errorLine2="                                          ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="182"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getSound`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getSound(), nc2.getSound())"
+        errorLine2="                                                          ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="182"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getVibrationPattern`"
+        errorLine1="                    &amp;&amp; Arrays.equals(nc1.getVibrationPattern(), nc2.getVibrationPattern())"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="183"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getVibrationPattern`"
+        errorLine1="                    &amp;&amp; Arrays.equals(nc1.getVibrationPattern(), nc2.getVibrationPattern())"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="183"
+            column="69"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getGroup(), nc2.getGroup())"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="184"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getGroup`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getGroup(), nc2.getGroup())"
+        errorLine2="                                          ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="184"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getGroup`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getGroup(), nc2.getGroup())"
+        errorLine2="                                                          ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="184"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getAudioAttributes(), nc2.getAudioAttributes());"
+        errorLine2="                               ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="185"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getAudioAttributes`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getAudioAttributes(), nc2.getAudioAttributes());"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="185"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getAudioAttributes`"
+        errorLine1="                    &amp;&amp; Objects.equals(nc1.getAudioAttributes(), nc2.getAudioAttributes());"
+        errorLine2="                                                                    ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="185"
+            column="69"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getImportance`"
+        errorLine1="            assertEquals(expected.getImportance(), actual.getImportance());"
+        errorLine2="                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="200"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getLightColor`"
+        errorLine1="            assertEquals(expected.getLightColor(), actual.getLightColor());"
+        errorLine2="                                  ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="201"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getId`"
+        errorLine1="            assertEquals(expected.getId(), actual.getId());"
+        errorLine2="                                  ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="202"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getName`"
+        errorLine1="            assertEquals(expected.getName(), actual.getName());"
+        errorLine2="                                  ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="203"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getDescription`"
+        errorLine1="            assertEquals(expected.getDescription(), actual.getDescription());"
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="204"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getSound`"
+        errorLine1="            assertEquals(expected.getSound(), actual.getSound());"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="205"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getVibrationPattern`"
+        errorLine1="            assertArrayEquals(expected.getVibrationPattern(), actual.getVibrationPattern());"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="206"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getGroup`"
+        errorLine1="            assertEquals(expected.getGroup(), actual.getGroup());"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="207"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannel#getAudioAttributes`"
+        errorLine1="            assertEquals(expected.getAudioAttributes(), actual.getAudioAttributes());"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelCompatTest.java"
+            line="208"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannelGroup#getId`"
+        errorLine1="            assertEquals(expected.getId(), actual.getId());"
+        errorLine2="                                  ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"
+            line="113"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `android.app.NotificationChannelGroup#getName`"
+        errorLine1="            assertEquals(expected.getName(), actual.getName());"
+        errorLine2="                                  ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationChannelGroupCompatTest.java"
+            line="114"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `addInvisibleAction`"
+        errorLine1="        Notification nWith = builder.addInvisibleAction(0, &quot;testAction&quot;, null)"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="251"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `getInvisibleActions`"
+        errorLine1="        List&lt;NotificationCompat.Action> actions = NotificationCompat.getInvisibleActions(nWith);"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="253"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 19): `android.graphics.drawable.Icon#getType`"
+        errorLine1="            assertEquals(Icon.TYPE_BITMAP, ((Icon) firstBuiltIcon).getType());"
+        errorLine2="                                                                   ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1409"
+            column="68"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 19): `android.graphics.drawable.Icon#getType`"
+        errorLine1="            assertEquals(Icon.TYPE_BITMAP, ((Icon) rebuiltIcon).getType());"
+        errorLine2="                                                                ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1424"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 23): `android.graphics.drawable.Icon#getType`"
+        errorLine1="        assertEquals(Icon.TYPE_RESOURCE, firstBuiltIcon.getType());"
+        errorLine2="                                                        ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1440"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 23): `android.graphics.drawable.Icon#getType`"
+        errorLine1="        assertEquals(Icon.TYPE_RESOURCE, rebuiltIcon.getType());"
+        errorLine2="                                                     ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="1450"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `Builder`"
+        errorLine1="                new NotificationCompat.BubbleMetadata.Builder(shortcutId)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="2017"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `getInvisibleActions`"
+        errorLine1="                NotificationCompat.getInvisibleActions(notification);"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationCompatTest.java"
+            line="2229"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.app.Notification#extras`"
+        errorLine1="        assertBundleEquals(&quot;Notification.extras&quot;, n2.extras, n2.extras)"
+        errorLine2="                                                  ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationTester.kt"
+            line="33"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.app.Notification#extras`"
+        errorLine1="        assertBundleEquals(&quot;Notification.extras&quot;, n2.extras, n2.extras)"
+        errorLine2="                                                             ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/app/NotificationTester.kt"
+            line="33"
+            column="62"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `COLOR_DODGE`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.COLOR_DODGE, null);"
+        errorLine2="                                                      ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="100"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `COLOR_BURN`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.COLOR_BURN, null);"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="101"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `HARD_LIGHT`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.HARD_LIGHT, null);"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="102"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `SOFT_LIGHT`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.SOFT_LIGHT, null);"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="103"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `DIFFERENCE`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.DIFFERENCE, null);"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="104"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `EXCLUSION`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.EXCLUSION, null);"
+        errorLine2="                                                      ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="105"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MULTIPLY`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.MULTIPLY, null);"
+        errorLine2="                                                      ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="108"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `HUE`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.HUE, null);"
+        errorLine2="                                                      ~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="109"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `SATURATION`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.SATURATION, null);"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="110"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `COLOR`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.COLOR, null);"
+        errorLine2="                                                      ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="111"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `LUMINOSITY`"
+        errorLine1="        verifyPorterDuffMatchesCompat(BlendModeCompat.LUMINOSITY, null);"
+        errorLine2="                                                      ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="112"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 14): `android.graphics.Paint#getBlendMode`"
+        errorLine1="            assertEquals(blendMode, p.getBlendMode());"
+        errorLine2="                                      ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/graphics/PaintTest.java"
+            line="146"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `setBreakStrategy`"
+        errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build());"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="70"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `setBreakStrategy`"
+        errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="72"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `setHyphenationFrequency`"
+        errorLine1="                .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL).build());"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="73"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `setBreakStrategy`"
+        errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="75"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `setHyphenationFrequency`"
+        errorLine1="                .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="76"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 14): `setTextDirection`"
+        errorLine1="                .setTextDirection(LTR).build());"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="77"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 18 (current min is 14): `android.text.TextDirectionHeuristics#LTR`"
+        errorLine1="                .setTextDirection(LTR).build());"
+        errorLine2="                                  ~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="77"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `getBreakStrategy`"
+        errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build().getBreakStrategy());"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="83"
+            column="73"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `setBreakStrategy`"
+        errorLine1="                .setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE).build().getBreakStrategy());"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="83"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `setHyphenationFrequency`"
+        errorLine1="                .setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NONE).build()"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="85"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `getHyphenationFrequency`"
+        errorLine1="                .getHyphenationFrequency());"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="86"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 14): `setTextDirection`"
+        errorLine1="        assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="87"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 18 (current min is 14): `android.text.TextDirectionHeuristics#RTL`"
+        errorLine1="        assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
+        errorLine2="                     ~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="87"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 18 (current min is 14): `android.text.TextDirectionHeuristics#RTL`"
+        errorLine1="        assertEquals(RTL, new Params.Builder(PAINT).setTextDirection(RTL).build()"
+        errorLine2="                                                                     ~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="87"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 14): `getTextDirection`"
+        errorLine1="                .getTextDirection());"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/text/PrecomputedTextCompatTest.java"
+            line="88"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 25 (current min is 14): `toShortcutInfo`"
+        errorLine1="                .toShortcutInfo());"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="471"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 25 (current min is 14): `toShortcutInfo`"
+        errorLine1="                .toShortcutInfo());"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="479"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 25 (current min is 14): `toShortcutInfo`"
+        errorLine1="                .toShortcutInfo());"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="487"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 25 (current min is 14): `toShortcutInfo`"
+        errorLine1="                .toShortcutInfo());"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="495"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 25 (current min is 14): `toShortcutInfo`"
+        errorLine1="                .toShortcutInfo());"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/content/pm/ShortcutManagerCompatTest.java"
+            line="503"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `android.telephony.SubscriptionManager#getDefaultSubscriptionId`"
+        errorLine1="                assertEquals(getDefaultSubscriptionId(), actual);"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"
+            line="110"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `android.telephony.SubscriptionManager#getDefaultSubscriptionId`"
+        errorLine1="                assertEquals(expected, getDefaultSubscriptionId());"
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/telephony/TelephonyManagerCompatTest.java"
+            line="112"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `new android.widget.FrameLayout`"
+        errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
+        errorLine2="        ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/widget/TestContentView.java"
+            line="53"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 20 (current min is 14): `android.view.View#requestApplyInsets`"
+        errorLine1="        requestApplyInsets()"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/WindowInsetsCompatActivityTest.kt"
+            line="425"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `scenario`"
+        errorLine1="        scenario.onActivity {"
+        errorLine2="        ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt"
+            line="269"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `windowInsetsController`"
+        errorLine1="            windowInsetsController.systemBarsBehavior ="
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt"
+            line="270"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `scenario`"
+        errorLine1="        val decorView = scenario.withActivity { window.decorView }"
+        errorLine2="                        ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt"
+            line="273"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `scenario`"
+        errorLine1="        scenario.onActivity {"
+        errorLine2="        ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt"
+            line="286"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `windowInsetsController`"
+        errorLine1="            windowInsetsController.systemBarsBehavior ="
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt"
+            line="287"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `scenario`"
+        errorLine1="        val decorView = scenario.withActivity { window.decorView }"
+        errorLine2="                        ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/core/view/WindowInsetsControllerCompatActivityTest.kt"
+            line="290"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one or more of: AccessibilityEventCompat.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION, AccessibilityEventCompat.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION, AccessibilityEventCompat.CONTENT_CHANGE_TYPE_SUBTREE, AccessibilityEventCompat.CONTENT_CHANGE_TYPE_TEXT, AccessibilityEventCompat.CONTENT_CHANGE_TYPE_UNDEFINED"
+        errorLine1="            return event.getContentChangeTypes();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/view/accessibility/AccessibilityEventCompat.java"
+            line="344"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_DISABLED, ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_WHITELISTED, ConnectivityManagerCompat.RESTRICT_BACKGROUND_STATUS_ENABLED"
+        errorLine1="            return cm.getRestrictBackgroundStatus();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/net/ConnectivityManagerCompat.java"
+            line="160"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: GnssStatusCompat.CONSTELLATION_UNKNOWN, GnssStatusCompat.CONSTELLATION_GPS, GnssStatusCompat.CONSTELLATION_SBAS, GnssStatusCompat.CONSTELLATION_GLONASS, GnssStatusCompat.CONSTELLATION_QZSS, GnssStatusCompat.CONSTELLATION_BEIDOU, GnssStatusCompat.CONSTELLATION_GALILEO, GnssStatusCompat.CONSTELLATION_IRNSS"
+        errorLine1="        return mWrapped.getConstellationType(satelliteIndex);"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/location/GnssStatusWrapper.java"
+            line="48"
+            column="16"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: IconCompat.TYPE_UNKNOWN, IconCompat.TYPE_BITMAP, IconCompat.TYPE_RESOURCE, IconCompat.TYPE_DATA, IconCompat.TYPE_URI, IconCompat.TYPE_ADAPTIVE_BITMAP, IconCompat.TYPE_URI_ADAPTIVE_BITMAP"
+        errorLine1="            return icon.getType();"
+        errorLine2="                   ~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/graphics/drawable/IconCompat.java"
+            line="1101"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Action.SEMANTIC_ACTION_NONE, Action.SEMANTIC_ACTION_REPLY, Action.SEMANTIC_ACTION_MARK_AS_READ, Action.SEMANTIC_ACTION_MARK_AS_UNREAD, Action.SEMANTIC_ACTION_DELETE, Action.SEMANTIC_ACTION_ARCHIVE, Action.SEMANTIC_ACTION_MUTE, Action.SEMANTIC_ACTION_UNMUTE, Action.SEMANTIC_ACTION_THUMBS_UP, Action.SEMANTIC_ACTION_THUMBS_DOWN, Action.SEMANTIC_ACTION_CALL"
+        errorLine1="                    builder.setSemanticAction(action.getSemanticAction());"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="4623"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED"
+        errorLine1="                            ? remoteInput.getEditChoicesBeforeSending()"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="6243"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED"
+        errorLine1="                                ? src.getEditChoicesBeforeSending()"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7276"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: NotificationCompat.GROUP_ALERT_ALL, NotificationCompat.GROUP_ALERT_SUMMARY, NotificationCompat.GROUP_ALERT_CHILDREN"
+        errorLine1="            return notification.getGroupAlertBehavior();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/NotificationCompat.java"
+            line="7637"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Action.SEMANTIC_ACTION_NONE, Action.SEMANTIC_ACTION_REPLY, Action.SEMANTIC_ACTION_MARK_AS_READ, Action.SEMANTIC_ACTION_MARK_AS_UNREAD, Action.SEMANTIC_ACTION_DELETE, Action.SEMANTIC_ACTION_ARCHIVE, Action.SEMANTIC_ACTION_MUTE, Action.SEMANTIC_ACTION_UNMUTE, Action.SEMANTIC_ACTION_THUMBS_UP, Action.SEMANTIC_ACTION_THUMBS_DOWN, Action.SEMANTIC_ACTION_CALL"
+        errorLine1="                actionBuilder.setSemanticAction(action.getSemanticAction());"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/NotificationCompatBuilder.java"
+            line="384"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: LineBreaker.BREAK_STRATEGY_SIMPLE, LineBreaker.BREAK_STRATEGY_HIGH_QUALITY, LineBreaker.BREAK_STRATEGY_BALANCED"
+        errorLine1="                        .setBreakStrategy(params.getBreakStrategy())"
+        errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="467"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Layout.HYPHENATION_FREQUENCY_NORMAL, Layout.HYPHENATION_FREQUENCY_FULL, Layout.HYPHENATION_FREQUENCY_NONE"
+        errorLine1="                        .setHyphenationFrequency(params.getHyphenationFrequency())"
+        errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
+            line="468"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: RemoteInput.SOURCE_FREE_FORM_INPUT, RemoteInput.SOURCE_CHOICE"
+        errorLine1="            return android.app.RemoteInput.getResultsSource(intent);"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/RemoteInput.java"
+            line="531"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED"
+        errorLine1="            builder.setEditChoicesBeforeSending(src.getEditChoicesBeforeSending());"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/RemoteInput.java"
+            line="576"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_DISABLED, RemoteInput.EDIT_CHOICES_BEFORE_SENDING_ENABLED"
+        errorLine1="            builder.setEditChoicesBeforeSending(src.getEditChoicesBeforeSending());"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/app/RemoteInput.java"
+            line="598"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: LineBreaker.BREAK_STRATEGY_SIMPLE, LineBreaker.BREAK_STRATEGY_HIGH_QUALITY, LineBreaker.BREAK_STRATEGY_BALANCED"
+        errorLine1="            textView.setBreakStrategy(params.getBreakStrategy());"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/widget/TextViewCompat.java"
+            line="886"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Layout.HYPHENATION_FREQUENCY_NORMAL, Layout.HYPHENATION_FREQUENCY_FULL, Layout.HYPHENATION_FREQUENCY_NONE"
+        errorLine1="            textView.setHyphenationFrequency(params.getHyphenationFrequency());"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/widget/TextViewCompat.java"
+            line="887"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Callback.DISPATCH_MODE_STOP, Callback.DISPATCH_MODE_CONTINUE_ON_SUBTREE"
+        errorLine1="                super(compat.getDispatchMode());"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/view/WindowInsetsAnimationCompat.java"
+            line="968"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one or more of: Type.STATUS_BARS, Type.NAVIGATION_BARS, Type.CAPTION_BAR, Type.IME, Type.WINDOW_DECOR, Type.SYSTEM_GESTURES, Type.MANDATORY_SYSTEM_GESTURES, Type.TAPPABLE_ELEMENT, Type.DISPLAY_CUTOUT"
+        errorLine1="            return mController.getTypes();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/view/WindowInsetsAnimationControllerCompat.java"
+            line="332"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH, WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE, WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE"
+        errorLine1="        return mImpl.getSystemBarsBehavior();"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/view/WindowInsetsControllerCompat.java"
+            line="275"
+            column="16"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH, WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE, WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE"
+        errorLine1="            return mInsetsController.getSystemBarsBehavior();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/core/view/WindowInsetsControllerCompat.java"
+            line="723"
+            column="20"/>
+    </issue>
 
     <issue
         id="BanUncheckedReflection"
@@ -3517,7 +4870,7 @@
         errorLine2="                                                      ~~~~~">
         <location
             file="src/main/java/androidx/core/provider/FontProvider.java"
-            line="139"
+            line="138"
             column="55"/>
     </issue>
 
@@ -4056,7 +5409,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/view/inputmethod/InputConnectionCompat.java"
-            line="145"
+            line="148"
             column="36"/>
     </issue>
 
@@ -4078,7 +5431,7 @@
         errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/content/IntentCompat.java"
-            line="108"
+            line="183"
             column="27"/>
     </issue>
 
@@ -4089,7 +5442,7 @@
         errorLine2="                                ~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/app/JobIntentService.java"
-            line="260"
+            line="265"
             column="33"/>
     </issue>
 
@@ -4100,7 +5453,7 @@
         errorLine2="                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/app/JobIntentService.java"
-            line="267"
+            line="272"
             column="33"/>
     </issue>
 
@@ -4111,7 +5464,7 @@
         errorLine2="                    ~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/util/LinkifyCompat.java"
-            line="260"
+            line="258"
             column="21"/>
     </issue>
 
@@ -4122,7 +5475,7 @@
         errorLine2="                           ~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/util/LinkifyCompat.java"
-            line="336"
+            line="333"
             column="28"/>
     </issue>
 
@@ -4419,7 +5772,7 @@
         errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/view/MenuCompat.java"
-            line="51"
+            line="49"
             column="18"/>
     </issue>
 
@@ -7510,7 +8863,7 @@
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="199"
+            line="197"
             column="28"/>
     </issue>
 
@@ -7521,7 +8874,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="200"
+            line="198"
             column="26"/>
     </issue>
 
@@ -7532,7 +8885,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="201"
+            line="199"
             column="26"/>
     </issue>
 
@@ -7543,7 +8896,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="202"
+            line="200"
             column="26"/>
     </issue>
 
@@ -7554,7 +8907,7 @@
         errorLine2="                         ~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="203"
+            line="201"
             column="26"/>
     </issue>
 
@@ -7565,7 +8918,7 @@
         errorLine2="                             ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="215"
+            line="213"
             column="30"/>
     </issue>
 
@@ -7576,7 +8929,7 @@
         errorLine2="                               ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="216"
+            line="214"
             column="32"/>
     </issue>
 
@@ -7587,7 +8940,7 @@
         errorLine2="                                     ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="217"
+            line="215"
             column="38"/>
     </issue>
 
@@ -7598,7 +8951,7 @@
         errorLine2="                                            ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="218"
+            line="216"
             column="45"/>
     </issue>
 
@@ -7609,7 +8962,7 @@
         errorLine2="                           ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="294"
+            line="292"
             column="28"/>
     </issue>
 
@@ -7620,7 +8973,7 @@
         errorLine2="                                                                      ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="294"
+            line="292"
             column="71"/>
     </issue>
 
@@ -7631,7 +8984,7 @@
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="297"
+            line="295"
             column="46"/>
     </issue>
 
@@ -7642,7 +8995,7 @@
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="298"
+            line="296"
             column="46"/>
     </issue>
 
@@ -7653,7 +9006,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="306"
+            line="304"
             column="29"/>
     </issue>
 
@@ -7664,7 +9017,7 @@
         errorLine2="                                                                         ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="306"
+            line="304"
             column="74"/>
     </issue>
 
@@ -7675,7 +9028,7 @@
         errorLine2="                            ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="310"
+            line="308"
             column="29"/>
     </issue>
 
@@ -7686,7 +9039,7 @@
         errorLine2="                                                                        ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="310"
+            line="308"
             column="73"/>
     </issue>
 
@@ -7697,7 +9050,7 @@
         errorLine2="                                                      ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="354"
+            line="352"
             column="55"/>
     </issue>
 
@@ -7708,7 +9061,7 @@
         errorLine2="                                                                              ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="355"
+            line="353"
             column="79"/>
     </issue>
 
@@ -7719,7 +9072,7 @@
         errorLine2="                               ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="355"
+            line="353"
             column="32"/>
     </issue>
 
@@ -7730,7 +9083,7 @@
         errorLine2="                                                      ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="359"
+            line="357"
             column="55"/>
     </issue>
 
@@ -7741,7 +9094,7 @@
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="360"
+            line="358"
             column="32"/>
     </issue>
 
@@ -7752,7 +9105,7 @@
         errorLine2="                                                                             ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="360"
+            line="358"
             column="78"/>
     </issue>
 
@@ -7763,7 +9116,7 @@
         errorLine2="                                                                         ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="364"
+            line="362"
             column="74"/>
     </issue>
 
@@ -7774,7 +9127,7 @@
         errorLine2="                                                                         ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="368"
+            line="366"
             column="74"/>
     </issue>
 
@@ -7785,7 +9138,7 @@
         errorLine2="                                                      ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="384"
+            line="382"
             column="55"/>
     </issue>
 
@@ -7796,7 +9149,7 @@
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="385"
+            line="383"
             column="59"/>
     </issue>
 
@@ -7807,7 +9160,7 @@
         errorLine2="                                                   ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="388"
+            line="386"
             column="52"/>
     </issue>
 
@@ -7818,7 +9171,7 @@
         errorLine2="                                                   ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="390"
+            line="388"
             column="52"/>
     </issue>
 
@@ -7829,7 +9182,7 @@
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="394"
+            line="392"
             column="59"/>
     </issue>
 
@@ -7840,7 +9193,7 @@
         errorLine2="                                        ~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="440"
+            line="437"
             column="41"/>
     </issue>
 
@@ -7851,7 +9204,7 @@
         errorLine2="                                     ~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="468"
+            line="465"
             column="38"/>
     </issue>
 
@@ -7862,7 +9215,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="470"
+            line="467"
             column="26"/>
     </issue>
 
@@ -7873,7 +9226,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="471"
+            line="468"
             column="26"/>
     </issue>
 
@@ -7884,7 +9237,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="472"
+            line="469"
             column="26"/>
     </issue>
 
@@ -7895,7 +9248,7 @@
         errorLine2="                         ~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="473"
+            line="470"
             column="26"/>
     </issue>
 
@@ -7906,7 +9259,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="532"
+            line="528"
             column="29"/>
     </issue>
 
@@ -7917,7 +9270,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="545"
+            line="540"
             column="29"/>
     </issue>
 
@@ -7928,7 +9281,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="558"
+            line="552"
             column="29"/>
     </issue>
 
@@ -8995,7 +10348,7 @@
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
-            line="908"
+            line="907"
             column="41"/>
     </issue>
 
@@ -9006,7 +10359,7 @@
         errorLine2="                                      ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
-            line="915"
+            line="914"
             column="39"/>
     </issue>
 
@@ -9017,7 +10370,7 @@
         errorLine2="                                          ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
-            line="921"
+            line="920"
             column="43"/>
     </issue>
 
@@ -9028,7 +10381,7 @@
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
-            line="928"
+            line="927"
             column="41"/>
     </issue>
 
@@ -9039,7 +10392,7 @@
         errorLine2="                                  ~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/content/pm/ShortcutInfoCompat.java"
-            line="930"
+            line="929"
             column="35"/>
     </issue>
 
@@ -14183,7 +15536,7 @@
         errorLine2="           ~~~~~~~">
         <location
             file="src/main/java/androidx/core/app/JobIntentService.java"
-            line="463"
+            line="468"
             column="12"/>
     </issue>
 
@@ -14469,7 +15822,7 @@
         errorLine2="                                       ~~~~~~~~">
         <location
             file="src/main/java/androidx/core/view/MenuCompat.java"
-            line="36"
+            line="35"
             column="40"/>
     </issue>
 
@@ -14480,7 +15833,7 @@
         errorLine2="                                              ~~~~">
         <location
             file="src/main/java/androidx/core/view/MenuCompat.java"
-            line="47"
+            line="45"
             column="47"/>
     </issue>
 
@@ -16229,7 +17582,7 @@
         errorLine2="                   ~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="144"
+            line="143"
             column="20"/>
     </issue>
 
@@ -16240,7 +17593,7 @@
         errorLine2="                   ~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="162"
+            line="161"
             column="20"/>
     </issue>
 
@@ -16251,7 +17604,7 @@
         errorLine2="                   ~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="180"
+            line="179"
             column="20"/>
     </issue>
 
@@ -16262,7 +17615,7 @@
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="431"
+            line="428"
             column="19"/>
     </issue>
 
@@ -16273,7 +17626,7 @@
         errorLine2="                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="650"
+            line="644"
             column="19"/>
     </issue>
 
@@ -16284,7 +17637,7 @@
         errorLine2="                        ~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="677"
+            line="670"
             column="25"/>
     </issue>
 
@@ -16295,7 +17648,7 @@
         errorLine2="                           ~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="694"
+            line="686"
             column="28"/>
     </issue>
 
@@ -16306,7 +17659,7 @@
         errorLine2="               ~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="713"
+            line="704"
             column="16"/>
     </issue>
 
@@ -16317,7 +17670,7 @@
         errorLine2="                                                ~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="713"
+            line="704"
             column="49"/>
     </issue>
 
@@ -16328,7 +17681,7 @@
         errorLine2="                            ~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="723"
+            line="714"
             column="29"/>
     </issue>
 
@@ -16339,7 +17692,7 @@
         errorLine2="                          ~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="728"
+            line="719"
             column="27"/>
     </issue>
 
@@ -16350,7 +17703,7 @@
         errorLine2="                            ~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="733"
+            line="724"
             column="29"/>
     </issue>
 
@@ -16361,7 +17714,7 @@
         errorLine2="                                                        ~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="738"
+            line="729"
             column="57"/>
     </issue>
 
@@ -16372,7 +17725,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/text/PrecomputedTextCompat.java"
-            line="758"
+            line="749"
             column="12"/>
     </issue>
 
@@ -17637,7 +18990,7 @@
         errorLine2="                                                                            ~~~~~~">
         <location
             file="src/main/java/androidx/core/graphics/TypefaceCompat.java"
-            line="174"
+            line="172"
             column="77"/>
     </issue>
 
@@ -18198,7 +19551,7 @@
         errorLine2="                                                ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="565"
+            line="542"
             column="49"/>
     </issue>
 
@@ -18209,7 +19562,7 @@
         errorLine2="                                              ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="578"
+            line="555"
             column="47"/>
     </issue>
 
@@ -18220,7 +19573,7 @@
         errorLine2="                                        ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="595"
+            line="572"
             column="41"/>
     </issue>
 
@@ -18231,7 +19584,7 @@
         errorLine2="                                         ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="615"
+            line="592"
             column="42"/>
     </issue>
 
@@ -18242,7 +19595,7 @@
         errorLine2="                                                    ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="653"
+            line="632"
             column="53"/>
     </issue>
 
@@ -18253,7 +19606,7 @@
         errorLine2="                                                            ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="653"
+            line="632"
             column="61"/>
     </issue>
 
@@ -18264,7 +19617,7 @@
         errorLine2="                                                      ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="683"
+            line="664"
             column="55"/>
     </issue>
 
@@ -18275,7 +19628,7 @@
         errorLine2="                                                              ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="683"
+            line="664"
             column="63"/>
     </issue>
 
@@ -18286,7 +19639,7 @@
         errorLine2="                                 ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1481"
+            line="1467"
             column="34"/>
     </issue>
 
@@ -18297,7 +19650,7 @@
         errorLine2="                                    ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1519"
+            line="1506"
             column="37"/>
     </issue>
 
@@ -18308,7 +19661,7 @@
         errorLine2="                                                                         ~~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1519"
+            line="1506"
             column="74"/>
     </issue>
 
@@ -18319,7 +19672,7 @@
         errorLine2="                                   ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1541"
+            line="1530"
             column="36"/>
     </issue>
 
@@ -18330,7 +19683,7 @@
         errorLine2="                                   ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1710"
+            line="1698"
             column="36"/>
     </issue>
 
@@ -18341,7 +19694,7 @@
         errorLine2="                                               ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1745"
+            line="1735"
             column="48"/>
     </issue>
 
@@ -18352,7 +19705,7 @@
         errorLine2="                                                ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1761"
+            line="1752"
             column="49"/>
     </issue>
 
@@ -18363,7 +19716,7 @@
         errorLine2="                                       ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1775"
+            line="1766"
             column="40"/>
     </issue>
 
@@ -18374,7 +19727,7 @@
         errorLine2="                                        ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1965"
+            line="1958"
             column="41"/>
     </issue>
 
@@ -18385,7 +19738,7 @@
         errorLine2="                                        ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1978"
+            line="1972"
             column="41"/>
     </issue>
 
@@ -18396,7 +19749,7 @@
         errorLine2="                                   ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="1998"
+            line="1994"
             column="36"/>
     </issue>
 
@@ -18407,7 +19760,7 @@
         errorLine2="                                       ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2103"
+            line="2100"
             column="40"/>
     </issue>
 
@@ -18418,7 +19771,7 @@
         errorLine2="                                       ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2118"
+            line="2117"
             column="40"/>
     </issue>
 
@@ -18440,7 +19793,7 @@
         errorLine2="                            ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2148"
+            line="2149"
             column="29"/>
     </issue>
 
@@ -18451,7 +19804,7 @@
         errorLine2="                            ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2162"
+            line="2164"
             column="29"/>
     </issue>
 
@@ -18462,7 +19815,7 @@
         errorLine2="                                   ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2174"
+            line="2177"
             column="36"/>
     </issue>
 
@@ -18473,7 +19826,7 @@
         errorLine2="                                    ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2187"
+            line="2191"
             column="37"/>
     </issue>
 
@@ -18484,7 +19837,7 @@
         errorLine2="                                    ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2200"
+            line="2205"
             column="37"/>
     </issue>
 
@@ -18495,7 +19848,7 @@
         errorLine2="                                 ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2212"
+            line="2218"
             column="34"/>
     </issue>
 
@@ -18506,7 +19859,7 @@
         errorLine2="                                 ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2224"
+            line="2231"
             column="34"/>
     </issue>
 
@@ -18517,7 +19870,7 @@
         errorLine2="                                  ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2235"
+            line="2242"
             column="35"/>
     </issue>
 
@@ -18528,7 +19881,7 @@
         errorLine2="                                 ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2250"
+            line="2258"
             column="34"/>
     </issue>
 
@@ -18539,7 +19892,7 @@
         errorLine2="                                  ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2262"
+            line="2271"
             column="35"/>
     </issue>
 
@@ -18550,7 +19903,7 @@
         errorLine2="                                 ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2277"
+            line="2287"
             column="34"/>
     </issue>
 
@@ -18561,7 +19914,7 @@
         errorLine2="                                    ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2285"
+            line="2295"
             column="37"/>
     </issue>
 
@@ -18572,7 +19925,7 @@
         errorLine2="                                     ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2293"
+            line="2303"
             column="38"/>
     </issue>
 
@@ -18583,7 +19936,7 @@
         errorLine2="                                     ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2301"
+            line="2311"
             column="38"/>
     </issue>
 
@@ -18594,7 +19947,7 @@
         errorLine2="                                  ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2309"
+            line="2319"
             column="35"/>
     </issue>
 
@@ -18605,7 +19958,7 @@
         errorLine2="                                  ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2317"
+            line="2327"
             column="35"/>
     </issue>
 
@@ -18616,7 +19969,7 @@
         errorLine2="                             ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2325"
+            line="2335"
             column="30"/>
     </issue>
 
@@ -18627,7 +19980,7 @@
         errorLine2="                             ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2333"
+            line="2343"
             column="30"/>
     </issue>
 
@@ -18638,7 +19991,7 @@
         errorLine2="                                                      ~~~~~~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2456"
+            line="2467"
             column="55"/>
     </issue>
 
@@ -18649,7 +20002,7 @@
         errorLine2="                                            ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2497"
+            line="2508"
             column="45"/>
     </issue>
 
@@ -18660,7 +20013,7 @@
         errorLine2="                                                   ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2511"
+            line="2522"
             column="52"/>
     </issue>
 
@@ -18671,7 +20024,7 @@
         errorLine2="                                                ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2841"
+            line="2853"
             column="49"/>
     </issue>
 
@@ -18682,7 +20035,7 @@
         errorLine2="                                    ~~~~">
         <location
             file="src/main/java/androidx/core/view/ViewCompat.java"
-            line="2856"
+            line="2869"
             column="37"/>
     </issue>
 
diff --git a/core/core/src/androidTest/java/androidx/core/content/IntentCompatTest.java b/core/core/src/androidTest/java/androidx/core/content/IntentCompatTest.java
index 422aa5c1..4685da9 100644
--- a/core/core/src/androidTest/java/androidx/core/content/IntentCompatTest.java
+++ b/core/core/src/androidTest/java/androidx/core/content/IntentCompatTest.java
@@ -26,6 +26,13 @@
 import static android.os.Build.VERSION_CODES.R;
 import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS;
 
+import static androidx.core.content.IntentCompat.APP_HIBERNATION_DISABLED;
+import static androidx.core.content.IntentCompat.APP_HIBERNATION_ENABLED;
+import static androidx.core.content.IntentCompat.PERMISSION_REVOCATION_DISABLED;
+import static androidx.core.content.IntentCompat.PERMISSION_REVOCATION_ENABLED;
+import static androidx.core.content.IntentCompat.UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE;
+import static androidx.core.content.IntentCompat.UNUSED_APP_RESTRICTION_STATUS_UNKNOWN;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.junit.Assert.assertThrows;
@@ -110,7 +117,8 @@
                 mContext, PACKAGE_NAME);
 
         assertThat(activityIntent.getAction()).isEqualTo(ACTION_APPLICATION_DETAILS_SETTINGS);
-        assertThat(activityIntent.getData()).isEqualTo(Uri.parse(PACKAGE_NAME));
+        assertThat(activityIntent.getData()).isEqualTo(
+                Uri.fromParts("package", PACKAGE_NAME, /* fragment= */ null));
     }
 
     @Test
@@ -121,7 +129,8 @@
 
         assertThat(activityIntent.getAction())
                 .isEqualTo("android.intent.action.AUTO_REVOKE_PERMISSIONS");
-        assertThat(activityIntent.getData()).isEqualTo(Uri.parse(PACKAGE_NAME));
+        assertThat(activityIntent.getData()).isEqualTo(
+                Uri.fromParts("package", PACKAGE_NAME, /* fragment= */ null));
     }
 
     @Test
@@ -160,21 +169,28 @@
         assertThat(activityIntent.getAction()).isEqualTo(
                 "android.intent.action.AUTO_REVOKE_PERMISSIONS");
         assertThat(activityIntent.getPackage()).isEqualTo(VERIFIER_PACKAGE_NAME);
+        assertThat(activityIntent.getData()).isEqualTo(
+                Uri.fromParts("package", PACKAGE_NAME, /* fragment= */ null));
     }
 
     @Test
     @SdkSuppress(minSdkVersion = M, maxSdkVersion = Q)
     public void createManageUnusedAppRestrictionsIntent_preApi30_manyVerifierRevocationApps() {
         setupPermissionRevocationApps(Arrays.asList(VERIFIER_PACKAGE_NAME, VERIFIER_PACKAGE_NAME2));
-        // Set both apps as the Verifier on the device
+        // Set both apps as the Verifier on the device, but we should fail gracefully.
         when(mPackageManager.checkPermission("android.permission.PACKAGE_VERIFICATION_AGENT",
                 VERIFIER_PACKAGE_NAME)).thenReturn(PERMISSION_GRANTED);
         when(mPackageManager.checkPermission("android.permission.PACKAGE_VERIFICATION_AGENT",
                 VERIFIER_PACKAGE_NAME2)).thenReturn(PERMISSION_GRANTED);
+        Intent activityIntent = IntentCompat.createManageUnusedAppRestrictionsIntent(
+                mContext, PACKAGE_NAME);
 
-        assertThrows(RuntimeException.class,
-                () -> IntentCompat.createManageUnusedAppRestrictionsIntent(
-                        mContext, PACKAGE_NAME));
+        assertThat(activityIntent.getAction()).isEqualTo(
+                "android.intent.action.AUTO_REVOKE_PERMISSIONS");
+        // Verify that we use the first Verifier's package name.
+        assertThat(activityIntent.getPackage()).isEqualTo(VERIFIER_PACKAGE_NAME);
+        assertThat(activityIntent.getData()).isEqualTo(
+                Uri.fromParts("package", PACKAGE_NAME, /* fragment= */ null));
     }
 
     @Test
@@ -186,79 +202,98 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 31)
+    public void getUnusedAppRestrictionsStatus_api31Plus_disabled_returnsAppHibernationDisabled() {
+        // Mark the application as exempt from app hibernation, so the feature is disabled
+        when(mPackageManager.isAutoRevokeWhitelisted()).thenReturn(true);
+
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                APP_HIBERNATION_DISABLED);
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = 31)
+    public void getUnusedAppRestrictionsStatus_api31Plus_enabled_returnsAppHibernationEnabled() {
+        // Mark the application as _not_ exempt from app hibernation, so the feature is enabled
+        when(mPackageManager.isAutoRevokeWhitelisted()).thenReturn(false);
+
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                APP_HIBERNATION_ENABLED);
+    }
+
+    @Test
+    @SdkSuppress(minSdkVersion = R, maxSdkVersion = R)
+    public void getUnusedAppRestrictionsStatus_api30_disabled_returnsPermRevocationDisabled() {
+        // Mark the application as exempt from permission revocation, so the feature is disabled
+        when(mPackageManager.isAutoRevokeWhitelisted()).thenReturn(true);
+
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                PERMISSION_REVOCATION_DISABLED);
+    }
+
+    @Test
     @SdkSuppress(minSdkVersion = R)
-    public void areUnusedAppRestrictionsAvailable_api30Plus_returnsTrue() {
-        assertThat(IntentCompat.areUnusedAppRestrictionsAvailable(mContext)).isTrue();
+    public void getUnusedAppRestrictionsStatus_api30Plus_enabled_returnsPermRevocationEnabled() {
+        // Mark the application as _not_ exempt from permission revocation, so the feature is
+        // enabled
+        when(mPackageManager.isAutoRevokeWhitelisted()).thenReturn(false);
+
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                PERMISSION_REVOCATION_ENABLED);
     }
 
     @Test
     @SdkSuppress(minSdkVersion = M, maxSdkVersion = Q)
-    public void areUnusedAppRestrictionsAvailable_preApi30_noRevocationApp_returnsFalse() {
+    public void getUnusedAppRestrictionsStatus_preApi30_noRevocationApp_returnsNotAvailable() {
         // Don't install an app that can resolve the permission auto-revocation intent
 
-        assertThat(IntentCompat.areUnusedAppRestrictionsAvailable(mContext)).isFalse();
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE);
     }
 
     @Test
     @SdkSuppress(minSdkVersion = M, maxSdkVersion = Q)
-    public void areUnusedAppRestrictionsAvailable_preApi30_noVerifierRevocationApp_returnsFalse() {
+    public void getUnusedAppRestrictionsStatus_preApi30_noVerifierRevokeApp_returnsNotAvailable() {
         setupPermissionRevocationApps(Arrays.asList(NON_VERIFIER_PACKAGE_NAME));
         // Do not set this app as the Verifier on the device
         when(mPackageManager.checkPermission("android.permission.PACKAGE_VERIFICATION_AGENT",
                 NON_VERIFIER_PACKAGE_NAME)).thenReturn(PERMISSION_DENIED);
 
-        assertThat(IntentCompat.areUnusedAppRestrictionsAvailable(mContext)).isFalse();
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE);
     }
 
     @Test
     @SdkSuppress(minSdkVersion = M, maxSdkVersion = Q)
-    public void areUnusedAppRestrictionsAvailable_preApi30_verifierRevocationApp_returnsTrue() {
+    public void getUnusedAppRestrictionsStatus_preApi30_verifierRevocationApp_returnsUnknown() {
         setupPermissionRevocationApps(Arrays.asList(VERIFIER_PACKAGE_NAME));
         // Set this app as the Verifier on the device
         when(mPackageManager.checkPermission("android.permission.PACKAGE_VERIFICATION_AGENT",
                 VERIFIER_PACKAGE_NAME)).thenReturn(PERMISSION_GRANTED);
 
-        assertThat(IntentCompat.areUnusedAppRestrictionsAvailable(mContext)).isTrue();
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                UNUSED_APP_RESTRICTION_STATUS_UNKNOWN);
     }
 
     @Test
     @SdkSuppress(minSdkVersion = M, maxSdkVersion = Q)
-    public void areUnusedAppRestrictionsAvailable_preApi30_manyVerifierRevocationApps_throws() {
+    public void getUnusedAppRestrictionsStatus_preApi30_manyVerifierRevocationApps_doesNotThrow() {
         setupPermissionRevocationApps(Arrays.asList(VERIFIER_PACKAGE_NAME, VERIFIER_PACKAGE_NAME2));
-        // Set both apps as the Verifier on the device
+        // Set both apps as the Verifier on the device, but we should have a graceful failure.
         when(mPackageManager.checkPermission("android.permission.PACKAGE_VERIFICATION_AGENT",
                 VERIFIER_PACKAGE_NAME)).thenReturn(PERMISSION_GRANTED);
         when(mPackageManager.checkPermission("android.permission.PACKAGE_VERIFICATION_AGENT",
                 VERIFIER_PACKAGE_NAME2)).thenReturn(PERMISSION_GRANTED);
 
-        assertThrows(RuntimeException.class,
-                () -> IntentCompat.areUnusedAppRestrictionsAvailable(mContext));
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                UNUSED_APP_RESTRICTION_STATUS_UNKNOWN);
     }
 
     @Test
     @SdkSuppress(maxSdkVersion = LOLLIPOP)
-    public void areUnusedAppRestrictionsAvailable_preApi23_returnsFalse() {
-        assertThat(IntentCompat.areUnusedAppRestrictionsAvailable(mContext)).isFalse();
-    }
-
-    @Test
-    @SdkSuppress(minSdkVersion = R)
-    public void areUnusedAppRestrictionsAllowlisted_api30Plus_returnsPackageManagerAllowlisted() {
-        when(mPackageManager.isAutoRevokeWhitelisted()).thenReturn(true);
-
-        assertThat(IntentCompat.areUnusedAppRestrictionsAllowlisted(mContext)).isTrue();
-    }
-
-    @Test
-    @SdkSuppress(minSdkVersion = M, maxSdkVersion = Q)
-    public void areUnusedAppRestrictionsAllowlisted_preApi30_returnsFalse() {
-        assertThat(IntentCompat.areUnusedAppRestrictionsAllowlisted(mContext)).isFalse();
-    }
-
-    @Test
-    @SdkSuppress(maxSdkVersion = LOLLIPOP)
-    public void areUnusedAppRestrictionsAllowlisted_preApi23_returnsFalse() {
-        assertThat(IntentCompat.areUnusedAppRestrictionsAllowlisted(mContext)).isFalse();
+    public void getUnusedAppRestrictionsStatus_preApi23_returnsFeatureNotAvailable() {
+        assertThat(IntentCompat.getUnusedAppRestrictionsStatus(mContext)).isEqualTo(
+                UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE);
     }
 
     /**
diff --git a/core/core/src/main/java/androidx/core/content/IntentCompat.java b/core/core/src/main/java/androidx/core/content/IntentCompat.java
index bc25a06..33a93db 100644
--- a/core/core/src/main/java/androidx/core/content/IntentCompat.java
+++ b/core/core/src/main/java/androidx/core/content/IntentCompat.java
@@ -18,8 +18,11 @@
 
 import static android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS;
 
+import static androidx.annotation.RestrictTo.Scope.LIBRARY;
 import static androidx.core.util.Preconditions.checkNotNull;
 
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.Intent;
@@ -28,10 +31,13 @@
 import android.net.Uri;
 import android.os.Build;
 
+import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
 
+import java.lang.annotation.Retention;
 import java.util.List;
 
 /**
@@ -101,6 +107,55 @@
      */
     public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
 
+    /** The status of Unused App Restrictions features is unknown for this app. */
+    public static final int UNUSED_APP_RESTRICTION_STATUS_UNKNOWN = 0;
+
+    /** There are no available Unused App Restrictions features for this app. */
+    public static final int UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE = 1;
+
+    /**
+     * Permission revocation is enabled for this app (i.e. permissions will be automatically
+     * reset if the app is unused).
+     *
+     * Note: this also means that app hibernation is not available for this app.
+     */
+    public static final int PERMISSION_REVOCATION_ENABLED = 2;
+
+    /**
+     * Permission revocation is disabled for this app (i.e. this app is exempt from having
+     * its permissions automatically removed).
+     *
+     * Note: this also means that app hibernation is not available for this app.
+     */
+    public static final int PERMISSION_REVOCATION_DISABLED = 3;
+
+    /**
+     * App hibernation is enabled for this app (i.e. this app will be hibernated and have its
+     * permissions revoked if the app is unused).
+     *
+     * Note: this also means that permission revocation is enabled for this app.
+     */
+    public static final int APP_HIBERNATION_ENABLED = 4;
+
+    /**
+     * App hibernation is disabled for this app (i.e. this app is exempt from being hibernated).
+     *
+     * Note: this also means that permission revocation is disabled for this app.
+     */
+    public static final int APP_HIBERNATION_DISABLED = 5;
+
+    /**
+     * The status of Unused App Restrictions features for this app.
+     * @hide
+     */
+    @IntDef({UNUSED_APP_RESTRICTION_STATUS_UNKNOWN, UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE,
+            PERMISSION_REVOCATION_ENABLED, PERMISSION_REVOCATION_DISABLED,
+            APP_HIBERNATION_ENABLED, APP_HIBERNATION_DISABLED})
+    @Retention(SOURCE)
+    @RestrictTo(LIBRARY)
+    public @interface UnusedAppRestrictionsStatus {
+    }
+
     /**
      * Make an Intent for the main activity of an application, without
      * specifying a specific activity to run but giving a selector to find
@@ -140,9 +195,13 @@
      * Make an Intent to redirect the user to UI to manage their unused app restriction settings
      * for a particular app (e.g. permission revocation, app hibernation).
      *
-     * Note: developers must first call {@link #areUnusedAppRestrictionsAvailable} to make sure
-     * that unused app restriction features are available on the device before attempting to create
-     * an intent using this method.
+     * Note: developers must first call {@link #getUnusedAppRestrictionsStatus(Context)} to make
+     * sure that unused app restriction features are available on the device before attempting to
+     * create an intent using this method. Any return value of this method besides
+     * {@link #UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE} indicates that at least one
+     * unused app restriction feature is available on the device. If the return value _is_
+     * {@link #UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE}, this method will throw an
+     * {@link UnsupportedOperationException}.
      *
      * Compatibility behavior:
      * <ul>
@@ -150,11 +209,9 @@
      * .ACTION_APPLICATION_DETAILS_SETTINGS} and {@code packageName} as data.
      * <li>SDK 30, this method generates an intent with action {@code Intent
      * .ACTION_AUTO_REVOKE_PERMISSIONS} and {@code packageName} as data.
-     * <li>SDK 23 through 29, if {@link #areUnusedAppRestrictionsAvailable} returns true,
-     * this method will generate an intent with action {@code Intent
-     * .ACTION_AUTO_REVOKE_PERMISSIONS} and the package as the first system app that can
-     * resolve the intent. Otherwise, this method will throw an
-     * {@link UnsupportedOperationException}.
+     * <li>SDK 23 through 29, this method will generate an intent with action
+     * {@link Intent#ACTION_AUTO_REVOKE_PERMISSIONS} and the package as the app with the Verifier
+     * role that can resolve the intent.
      * <li>SDK 22 and below, this method will throw an {@link UnsupportedOperationException}
      * </ul>
      *
@@ -167,9 +224,10 @@
     @NonNull
     public static Intent createManageUnusedAppRestrictionsIntent(@NonNull Context context,
             @NonNull String packageName) {
-        if (!areUnusedAppRestrictionsAvailable(context)) {
+        if (getUnusedAppRestrictionsStatus(context)
+                == UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE) {
             throw new UnsupportedOperationException(
-                    "Unused App Restrictions are not available on this device");
+                    "Unused App Restriction features are not available on this device");
         }
 
         // If the OS version is S+, generate the intent using the Application Details Settings
@@ -177,77 +235,42 @@
         // TODO: replace with VERSION_CODES.S once it's defined
         if (Build.VERSION.SDK_INT >= 31) {
             return new Intent(ACTION_APPLICATION_DETAILS_SETTINGS)
-                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).setData(Uri.parse(packageName));
+                    .setData(Uri.fromParts("package", packageName, /* fragment= */ null));
         }
 
         Intent unusedAppRestrictionsIntent =
-                new Intent(ACTION_UNUSED_APP_RESTRICTIONS).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                new Intent(ACTION_UNUSED_APP_RESTRICTIONS)
+                        .setData(Uri.fromParts(
+                                "package", packageName, /* fragment= */ null));
 
-        // If the OS version is R, then just add the package name to the intent.
-        // No need to add any other data or flags, since we're relying on the Android R system
-        // feature.
+        // If the OS version is R, then no need to add any other data or flags, since we're
+        // relying on the Android R system feature.
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
-            return unusedAppRestrictionsIntent.setData(Uri.parse(packageName));
-        } else {
-            PackageManager packageManager = context.getPackageManager();
-            // Only allow apps with the Verifier role to resolve the intent.
-            String verifierPackageName = getVerifierPackageName(packageManager,
-                    packageManager.queryIntentActivities(
-                            unusedAppRestrictionsIntent, /* flags= */ 0));
-            // The package name shouldn't be null since we've already checked that there exists a
-            // single Verifier on the device, but nonetheless we double-check here.
-            unusedAppRestrictionsIntent.setPackage(checkNotNull(verifierPackageName));
             return unusedAppRestrictionsIntent;
+        } else {
+            // Only allow apps with the Verifier role to resolve the intent.
+            String verifierPackageName = getVerifierRolePackageName(context.getPackageManager());
+            // The Verifier package name shouldn't be null since we've already checked that there
+            // exists a Verifier on the device, but nonetheless we double-check here.
+            return unusedAppRestrictionsIntent
+                    .setPackage(checkNotNull(verifierPackageName));
         }
     }
 
     /**
-     * Checks to see whether unused app restrictions (e.g. permission revocation, app hibernation)
-     * are available on this device.
-     *
-     * Compatibility behavior:
-     * <ul>
-     * <li>SDK 30 and above, this method always returns {@code true} as unused app restrictions
-     * are built into the Android OS.
-     * <li>SDK 23 through 29, this method checks for a system app that can resolve the {@code
-     * Intent.ACTION_AUTO_REVOKE_PERMISSIONS} intent.
-     * <li>SDK 22 and below, this method always returns {@code false} as runtime permissions did
-     * not exist yet.
-     * </ul>
-     *
-     * @param context The {@link Context} of the calling application.
-     *
-     * @return Returns a boolean indicating whether permission auto-revocation is available on
-     * the device, whether through the Android Operating System or a system app.
-     */
-    public static boolean areUnusedAppRestrictionsAvailable(@NonNull Context context) {
-        // Return false if the Android OS version is before M, because Android M introduced runtime
-        // permissions
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false;
-
-        // Check that the Android OS version is R+
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) return true;
-
-        // Else, check for an app with the verifier role that can resolve the intent
-        PackageManager packageManager = context.getPackageManager();
-        List<ResolveInfo> intentResolvers =
-                packageManager.queryIntentActivities(
-                        new Intent(ACTION_UNUSED_APP_RESTRICTIONS), /* flags= */ 0);
-
-        // Check that we were able to get the one Verifier's package name. If no Verifier or
-        // more than one Verifier exists on the device, unused app restrictions are not available
-        // on the device.
-        return getVerifierPackageName(packageManager, intentResolvers) != null;
-    }
-
-    /**
      * Returns the package name of the one and only Verifier on the device. If none exist, this
-     * will return {@code null}. Likewise, if multiple Verifiers exist, this method will throw a
-     * {@link RuntimeException} as there can only ever be one verifier.
+     * will return {@code null}. Likewise, if multiple Verifiers exist, this method will return
+     * the first Verifier's package name.
      */
     @Nullable
-    private static String getVerifierPackageName(PackageManager packageManager,
-            List<ResolveInfo> intentResolvers) {
+    private static String getVerifierRolePackageName(PackageManager packageManager) {
+        Intent unusedAppRestrictionsIntent =
+                new Intent(ACTION_UNUSED_APP_RESTRICTIONS)
+                        .setData(Uri.fromParts(
+                                "package", "com.example", /* fragment= */ null));
+        List<ResolveInfo> intentResolvers =
+                packageManager.queryIntentActivities(unusedAppRestrictionsIntent, /* flags= */ 0);
+
         String verifierPackageName = null;
 
         for (ResolveInfo intentResolver: intentResolvers) {
@@ -258,7 +281,10 @@
             }
 
             if (verifierPackageName != null) {
-                throw new RuntimeException("There can be only one required verifier");
+                // This shouldn't happen, but we fail gracefully nonetheless and avoid throwing an
+                // exception, instead returning the first package name with the Verifier role
+                // that we found.
+                return verifierPackageName;
             }
             verifierPackageName = packageName;
         }
@@ -267,29 +293,54 @@
     }
 
     /**
-     * Checks whether this application is exempt from unused app restrictions (e.g. permission
-     * revocation, app hibernation).
+     * Returns the status of Unused App Restriction features for the current application, i.e.
+     * whether the features are available and if so, enabled for the application.
      *
      * Compatibility behavior:
      * <ul>
-     * <li>SDK 30 and above, this method returns the value of
-     * {@link PackageManager#isAutoRevokeWhitelisted}
-     * <li>SDK 23 through 29, this method returns {@code false}.
-     * <li>SDK 22 and below, this method always returns {@code false} as runtime
-     * permissions did not exist yet.
+     * <li>SDK 31 and above, if {@link PackageManager#isAutoRevokeWhitelisted()} is true, this
+     * will return {@link #APP_HIBERNATION_ENABLED}. Else, it will return
+     * {@link #APP_HIBERNATION_DISABLED}.</li>
+     * <li>SDK 30, if {@link PackageManager#isAutoRevokeWhitelisted()} is true, this will return
+     * {@link #PERMISSION_REVOCATION_ENABLED}. Else, it will return
+     * {@link #PERMISSION_REVOCATION_DISABLED}.</li>
+     * <li>SDK 23 through 29, if there exists an app with the Verifier role that can resolve the
+     * {@code Intent.ACTION_AUTO_REVOKE_PERMISSIONS} action.
+     * <li>SDK 22 and below, this method always returns
+     * {@link #UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE} as runtime permissions did not exist
+     * yet.
      * </ul>
      */
-    public static boolean areUnusedAppRestrictionsAllowlisted(@NonNull Context context) {
+    public static @UnusedAppRestrictionsStatus int getUnusedAppRestrictionsStatus(
+            @NonNull Context context) {
         // Return false if the Android OS version is before M, because Android M introduced runtime
         // permissions
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false;
-
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
-            return Api30Impl.areUnusedAppRestrictionsAllowlisted(context);
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
+            return UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE;
         }
 
-        // TODO(b/177234481): Implement the backport behavior of this API
-        return false;
+        // TODO: replace with VERSION_CODES.S once it's defined
+        if (Build.VERSION.SDK_INT >= 31) {
+            return Api30Impl.areUnusedAppRestrictionsEnabled(context)
+                    ? APP_HIBERNATION_ENABLED
+                    : APP_HIBERNATION_DISABLED;
+        }
+
+        if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R) {
+            return Api30Impl.areUnusedAppRestrictionsEnabled(context)
+                    ? PERMISSION_REVOCATION_ENABLED
+                    : PERMISSION_REVOCATION_DISABLED;
+        }
+
+        // Else, check for an app with the verifier role that can resolve the intent
+        String verifierPackageName = getVerifierRolePackageName(context.getPackageManager());
+        // Check that we were able to get the one Verifier's package name. If no Verifier or
+        // more than one Verifier exists on the device, unused app restrictions are not available
+        // on the device.
+        return (verifierPackageName == null)
+                ? UNUSED_APP_RESTRICTION_FEATURE_NOT_AVAILABLE
+                // TODO(b/177234481): Implement the backport behavior of this API
+                : UNUSED_APP_RESTRICTION_STATUS_UNKNOWN;
     }
 
     /**
@@ -302,8 +353,10 @@
     @RequiresApi(Build.VERSION_CODES.R)
     private static class Api30Impl {
         private Api30Impl() {}
-        static boolean areUnusedAppRestrictionsAllowlisted(@NonNull Context context) {
-            return context.getPackageManager().isAutoRevokeWhitelisted();
+        static boolean areUnusedAppRestrictionsEnabled(@NonNull Context context) {
+            // If the app is allowlisted, that means that it is exempt from unused app restriction
+            // features, and thus the features are _disabled_.
+            return !context.getPackageManager().isAutoRevokeWhitelisted();
         }
     }
 }
diff --git a/cursoradapter/cursoradapter/lint-baseline.xml b/cursoradapter/cursoradapter/lint-baseline.xml
index 9850951..a31f3ea 100644
--- a/cursoradapter/cursoradapter/lint-baseline.xml
+++ b/cursoradapter/cursoradapter/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/customview/customview/lint-baseline.xml b/customview/customview/lint-baseline.xml
index cdb72ad..d95bc70 100644
--- a/customview/customview/lint-baseline.xml
+++ b/customview/customview/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/datastore/datastore-preferences-core/datastore-preferences-proto/build.gradle b/datastore/datastore-preferences-core/datastore-preferences-proto/build.gradle
index 3f31343..993e22c 100644
--- a/datastore/datastore-preferences-core/datastore-preferences-proto/build.gradle
+++ b/datastore/datastore-preferences-core/datastore-preferences-proto/build.gradle
@@ -53,7 +53,6 @@
 def preferencesProtoJarJarTask = tasks.register("exportJar", Jar) {
     archiveBaseName.set("export")
     dependsOn(protobuf.generateProtoTasks.all())
-    from(files(protobuf.generatedFilesBaseDir))
     dependsOn(compileKotlin)
     from(files(compileKotlin.outputs.files))
 
diff --git a/datastore/datastore-sampleapp/lint-baseline.xml b/datastore/datastore-sampleapp/lint-baseline.xml
index 42a176b..a109708 100644
--- a/datastore/datastore-sampleapp/lint-baseline.xml
+++ b/datastore/datastore-sampleapp/lint-baseline.xml
@@ -1,4 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="cli" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="LongLogTag"
+        message="The logging tag can be at most 23 characters, was 27 (KotlinSerializationActivity)"
+        errorLine1="                        Log.e(TAG, &quot;Error reading preferences.&quot;, e)"
+        errorLine2="                              ~~~">
+        <location
+            file="src/main/java/com/example/datastoresampleapp/KotlinSerializationActivity.kt"
+            line="99"
+            column="31"/>
+    </issue>
 
 </issues>
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index ff80609..535f4386 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -1162,4 +1162,11 @@
 \$SUPPORT/wear/compose/material/benchmark/src/androidTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
 # > Configure project :ads-identifier
 WARNING\:The option setting \'android\.experimental\.enableArtProfiles\=true\' is experimental\.
-The current default is \'false\'\.
\ No newline at end of file
+The current default is \'false\'\.
+# > Task :emoji2:emoji2-bundled:processDebugAndroidTestManifest
+\$SUPPORT/emoji[0-9]+/emoji[0-9]+\-bundled/src/androidTest/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
+meta\-data\#androidx\.emoji[0-9]+\.text\.EmojiCompatInitializer was tagged at AndroidManifest\.xml:[0-9]+ to remove other declarations but no other declaration present
+# > Task :emoji2:emoji2-bundled:processDebugManifest
+\$SUPPORT/emoji[0-9]+/emoji[0-9]+\-bundled/src/main/AndroidManifest\.xml:[0-9]+:[0-9]+\-[0-9]+:[0-9]+ Warning:
+# > Configure project :emoji2:emoji2-bundled
+WARNING:The option setting 'android\.disableAutomaticComponentCreation=true' is experimental\.
\ No newline at end of file
diff --git a/docs-public/build.gradle b/docs-public/build.gradle
index feaf247..5e27f26 100644
--- a/docs-public/build.gradle
+++ b/docs-public/build.gradle
@@ -4,10 +4,10 @@
 }
 
 dependencies {
-    docs("androidx.activity:activity:1.3.0-beta02")
-    docs("androidx.activity:activity-compose:1.3.0-beta02")
-    samples("androidx.activity:activity-compose-samples:1.3.0-beta02")
-    docs("androidx.activity:activity-ktx:1.3.0-beta02")
+    docs("androidx.activity:activity:1.3.0-rc01")
+    docs("androidx.activity:activity-compose:1.3.0-rc01")
+    samples("androidx.activity:activity-compose-samples:1.3.0-rc01")
+    docs("androidx.activity:activity-ktx:1.3.0-rc01")
     docs("androidx.ads:ads-identifier:1.0.0-alpha04")
     docs("androidx.ads:ads-identifier-provider:1.0.0-alpha04")
     docs("androidx.annotation:annotation:1.3.0-alpha01")
@@ -41,46 +41,46 @@
     docs("androidx.cardview:cardview:1.0.0")
     docs("androidx.collection:collection:1.2.0-alpha01")
     docs("androidx.collection:collection-ktx:1.2.0-alpha01")
-    docs("androidx.compose.animation:animation:1.0.0-beta09")
-    docs("androidx.compose.animation:animation-core:1.0.0-beta09")
-    samples("androidx.compose.animation:animation-samples:1.0.0-beta09")
-    samples("androidx.compose.animation:animation-core-samples:1.0.0-beta09")
-    docs("androidx.compose.foundation:foundation:1.0.0-beta09")
-    docs("androidx.compose.foundation:foundation-layout:1.0.0-beta09")
-    samples("androidx.compose.foundation:foundation-layout-samples:1.0.0-beta09")
-    samples("androidx.compose.foundation:foundation-samples:1.0.0-beta09")
-    docs("androidx.compose.material:material:1.0.0-beta09")
-    docs("androidx.compose.material:material-icons-core:1.0.0-beta09")
-    samples("androidx.compose.material:material-icons-core-samples:1.0.0-beta09")
-    docs("androidx.compose.material:material-icons-extended:1.0.0-beta09")
-    docs("androidx.compose.material:material-ripple:1.0.0-beta09")
-    samples("androidx.compose.material:material-samples:1.0.0-beta09")
-    docs("androidx.compose.runtime:runtime:1.0.0-beta09")
-    docs("androidx.compose.runtime:runtime-livedata:1.0.0-beta09")
-    samples("androidx.compose.runtime:runtime-livedata-samples:1.0.0-beta09")
-    docs("androidx.compose.runtime:runtime-rxjava2:1.0.0-beta09")
-    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.0.0-beta09")
-    docs("androidx.compose.runtime:runtime-rxjava3:1.0.0-beta09")
-    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.0.0-beta09")
-    docs("androidx.compose.runtime:runtime-saveable:1.0.0-beta09")
-    samples("androidx.compose.runtime:runtime-saveable-samples:1.0.0-beta09")
-    samples("androidx.compose.runtime:runtime-samples:1.0.0-beta09")
-    docs("androidx.compose.ui:ui:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-geometry:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-graphics:1.0.0-beta09")
-    samples("androidx.compose.ui:ui-graphics-samples:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-test:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-test-junit4:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-text:1.0.0-beta09")
-    samples("androidx.compose.ui:ui-text-samples:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-tooling:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-tooling-data:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-unit:1.0.0-beta09")
-    samples("androidx.compose.ui:ui-unit-samples:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-util:1.0.0-beta09")
-    docs("androidx.compose.ui:ui-viewbinding:1.0.0-beta09")
-    samples("androidx.compose.ui:ui-viewbinding-samples:1.0.0-beta09")
-    samples("androidx.compose.ui:ui-samples:1.0.0-beta09")
+    docs("androidx.compose.animation:animation:1.0.0-rc01")
+    docs("androidx.compose.animation:animation-core:1.0.0-rc01")
+    samples("androidx.compose.animation:animation-samples:1.0.0-rc01")
+    samples("androidx.compose.animation:animation-core-samples:1.0.0-rc01")
+    docs("androidx.compose.foundation:foundation:1.0.0-rc01")
+    docs("androidx.compose.foundation:foundation-layout:1.0.0-rc01")
+    samples("androidx.compose.foundation:foundation-layout-samples:1.0.0-rc01")
+    samples("androidx.compose.foundation:foundation-samples:1.0.0-rc01")
+    docs("androidx.compose.material:material:1.0.0-rc01")
+    docs("androidx.compose.material:material-icons-core:1.0.0-rc01")
+    samples("androidx.compose.material:material-icons-core-samples:1.0.0-rc01")
+    docs("androidx.compose.material:material-ripple:1.0.0-rc01")
+    samples("androidx.compose.material:material-samples:1.0.0-rc01")
+    docs("androidx.compose.runtime:runtime:1.0.0-rc01")
+    docs("androidx.compose.runtime:runtime-livedata:1.0.0-rc01")
+    samples("androidx.compose.runtime:runtime-livedata-samples:1.0.0-rc01")
+    docs("androidx.compose.runtime:runtime-rxjava2:1.0.0-rc01")
+    samples("androidx.compose.runtime:runtime-rxjava2-samples:1.0.0-rc01")
+    docs("androidx.compose.runtime:runtime-rxjava3:1.0.0-rc01")
+    samples("androidx.compose.runtime:runtime-rxjava3-samples:1.0.0-rc01")
+    docs("androidx.compose.runtime:runtime-saveable:1.0.0-rc01")
+    samples("androidx.compose.runtime:runtime-saveable-samples:1.0.0-rc01")
+    samples("androidx.compose.runtime:runtime-samples:1.0.0-rc01")
+    docs("androidx.compose.ui:ui:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-geometry:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-graphics:1.0.0-rc01")
+    samples("androidx.compose.ui:ui-graphics-samples:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-test:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-test-junit4:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-text:1.0.0-rc01")
+    samples("androidx.compose.ui:ui-text-samples:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-tooling:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-tooling-data:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-tooling-preview:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-unit:1.0.0-rc01")
+    samples("androidx.compose.ui:ui-unit-samples:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-util:1.0.0-rc01")
+    docs("androidx.compose.ui:ui-viewbinding:1.0.0-rc01")
+    samples("androidx.compose.ui:ui-viewbinding-samples:1.0.0-rc01")
+    samples("androidx.compose.ui:ui-samples:1.0.0-rc01")
     docs("androidx.concurrent:concurrent-futures:1.1.0")
     docs("androidx.concurrent:concurrent-futures-ktx:1.1.0")
     docs("androidx.contentpager:contentpager:1.0.0")
@@ -187,7 +187,7 @@
     docs("androidx.preference:preference:1.1.1")
     docs("androidx.preference:preference-ktx:1.1.1")
     docs("androidx.print:print:1.1.0-beta01")
-    docs("androidx.profileinstaller:profileinstaller:1.0.0-beta01")
+    docs("androidx.profileinstaller:profileinstaller:1.0.0-rc01")
     docs("androidx.recommendation:recommendation:1.0.0")
     docs("androidx.recyclerview:recyclerview:1.2.1")
     docs("androidx.recyclerview:recyclerview-selection:2.0.0-alpha01")
diff --git a/docs-public/package-lists/coroutinesCore/package-list b/docs-public/package-lists/coroutinesCore/package-list
index 4c6a5e7..df328d9 100644
--- a/docs-public/package-lists/coroutinesCore/package-list
+++ b/docs-public/package-lists/coroutinesCore/package-list
@@ -8,13 +8,14 @@
 $dokka.location:kotlinx.coroutines$await(kotlin.js.Promise((kotlinx.coroutines.await.T)))kotlinx.coroutines/kotlin.js.-promise/await.html
 $dokka.location:kotlinx.coroutines$awaitAll(kotlin.collections.Collection((kotlinx.coroutines.Deferred((kotlinx.coroutines.awaitAll.T)))))kotlinx.coroutines/kotlin.collections.-collection/await-all.html
 $dokka.location:kotlinx.coroutines$awaitAnimationFrame(org.w3c.dom.Window)kotlinx.coroutines/org.w3c.dom.-window/await-animation-frame.html
-$dokka.location:kotlinx.coroutines$cancel(kotlin.coroutines.CoroutineContext, java.util.concurrent.CancellationException)kotlinx.coroutines/kotlin.coroutines.-coroutine-context/cancel.html
-$dokka.location:kotlinx.coroutines$cancelChildren(kotlin.coroutines.CoroutineContext, java.util.concurrent.CancellationException)kotlinx.coroutines/kotlin.coroutines.-coroutine-context/cancel-children.html
+$dokka.location:kotlinx.coroutines$cancel(kotlin.coroutines.CoroutineContext, kotlinx.coroutines.CancellationException)kotlinx.coroutines/kotlin.coroutines.-coroutine-context/cancel.html
+$dokka.location:kotlinx.coroutines$cancelChildren(kotlin.coroutines.CoroutineContext, kotlinx.coroutines.CancellationException)kotlinx.coroutines/kotlin.coroutines.-coroutine-context/cancel-children.html
 $dokka.location:kotlinx.coroutines$ensureActive(kotlin.coroutines.CoroutineContext)kotlinx.coroutines/kotlin.coroutines.-coroutine-context/ensure-active.html
 $dokka.location:kotlinx.coroutines$ensurePresent(java.lang.ThreadLocal((kotlin.Any)))kotlinx.coroutines/java.lang.-thread-local/ensure-present.html
 $dokka.location:kotlinx.coroutines$id(kotlin.Any)kotlinx.coroutines/kotlin.-any/id.html
 $dokka.location:kotlinx.coroutines$isActive#kotlin.coroutines.CoroutineContextkotlinx.coroutines/kotlin.coroutines.-coroutine-context/is-active.html
 $dokka.location:kotlinx.coroutines$isPresent(java.lang.ThreadLocal((kotlin.Any)))kotlinx.coroutines/java.lang.-thread-local/is-present.html
+$dokka.location:kotlinx.coroutines$job#kotlin.coroutines.CoroutineContextkotlinx.coroutines/kotlin.coroutines.-coroutine-context/job.html
 $dokka.location:kotlinx.coroutines$joinAll(kotlin.collections.Collection((kotlinx.coroutines.Job)))kotlinx.coroutines/kotlin.collections.-collection/join-all.html
 $dokka.location:kotlinx.coroutines.flow$asFlow(kotlin.Array((kotlinx.coroutines.flow.asFlow.T)))kotlinx.coroutines.flow/kotlin.-array/as-flow.html
 $dokka.location:kotlinx.coroutines.flow$asFlow(kotlin.Function0((kotlinx.coroutines.flow.asFlow.T)))kotlinx.coroutines.flow/kotlin.-function0/as-flow.html
@@ -26,6 +27,7 @@
 $dokka.location:kotlinx.coroutines.flow$asFlow(kotlin.ranges.IntRange)kotlinx.coroutines.flow/kotlin.ranges.-int-range/as-flow.html
 $dokka.location:kotlinx.coroutines.flow$asFlow(kotlin.ranges.LongRange)kotlinx.coroutines.flow/kotlin.ranges.-long-range/as-flow.html
 $dokka.location:kotlinx.coroutines.flow$asFlow(kotlin.sequences.Sequence((kotlinx.coroutines.flow.asFlow.T)))kotlinx.coroutines.flow/kotlin.sequences.-sequence/as-flow.html
+$dokka.location:kotlinx.coroutines.flow$merge(kotlin.collections.Iterable((kotlinx.coroutines.flow.Flow((kotlinx.coroutines.flow.merge.T)))))kotlinx.coroutines.flow/kotlin.collections.-iterable/merge.html
 $dokka.location:kotlinx.coroutines.intrinsics$startCoroutineCancellable(kotlin.SuspendFunction0((kotlinx.coroutines.intrinsics.startCoroutineCancellable.T)), kotlin.coroutines.Continuation((kotlinx.coroutines.intrinsics.startCoroutineCancellable.T)))kotlinx.coroutines.flow/kotlin.-suspend-function0/start-coroutine-cancellable.html
 kotlinx.coroutines
 kotlinx.coroutines.channels
diff --git a/docs-public/package-lists/kotlin/package-list b/docs-public/package-lists/kotlin/package-list
index 6c4d840..159e6e5 100644
--- a/docs-public/package-lists/kotlin/package-list
+++ b/docs-public/package-lists/kotlin/package-list
@@ -10,7 +10,6 @@
 $dokka.location:kotlin$inv(java.math.BigInteger)kotlin/java.math.-big-integer/inv.html
 $dokka.location:kotlin$minus(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/minus.html
 $dokka.location:kotlin$minus(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/minus.html
-$dokka.location:kotlin$mod(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/mod.html
 $dokka.location:kotlin$or(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/or.html
 $dokka.location:kotlin$plus(java.math.BigDecimal, java.math.BigDecimal)kotlin/java.math.-big-decimal/plus.html
 $dokka.location:kotlin$plus(java.math.BigInteger, java.math.BigInteger)kotlin/java.math.-big-integer/plus.html
@@ -39,9 +38,8 @@
 $dokka.location:kotlin.NullPointerExceptionkotlin/-null-pointer-exception/index.html
 $dokka.location:kotlin.NumberFormatExceptionkotlin/-number-format-exception/index.html
 $dokka.location:kotlin.RuntimeExceptionkotlin/-runtime-exception/index.html
-$dokka.location:kotlin.Synchronizedkotlin/-synchronized/index.html
+$dokka.location:kotlin.Throwskotlin/-throws/index.html
 $dokka.location:kotlin.UnsupportedOperationExceptionkotlin/-unsupported-operation-exception/index.html
-$dokka.location:kotlin.Volatilekotlin/-volatile/index.html
 $dokka.location:kotlin.collections$getOrPut(java.util.concurrent.ConcurrentMap((kotlin.collections.getOrPut.K, kotlin.collections.getOrPut.V)), kotlin.collections.getOrPut.K, kotlin.Function0((kotlin.collections.getOrPut.V)))kotlin.collections/java.util.concurrent.-concurrent-map/get-or-put.html
 $dokka.location:kotlin.collections$iterator(java.util.Enumeration((kotlin.collections.iterator.T)))kotlin.collections/java.util.-enumeration/iterator.html
 $dokka.location:kotlin.collections$toList(java.util.Enumeration((kotlin.collections.toList.T)))kotlin.collections/java.util.-enumeration/to-list.html
@@ -60,6 +58,7 @@
 $dokka.location:kotlin.concurrent$scheduleAtFixedRate(java.util.Timer, kotlin.Long, kotlin.Long, kotlin.Function1((java.util.TimerTask, kotlin.Unit)))kotlin.concurrent/java.util.-timer/schedule-at-fixed-rate.html
 $dokka.location:kotlin.concurrent$withLock(java.util.concurrent.locks.Lock, kotlin.Function0((kotlin.concurrent.withLock.T)))kotlin.concurrent/java.util.concurrent.locks.-lock/with-lock.html
 $dokka.location:kotlin.concurrent$write(java.util.concurrent.locks.ReentrantReadWriteLock, kotlin.Function0((kotlin.concurrent.write.T)))kotlin.concurrent/java.util.concurrent.locks.-reentrant-read-write-lock/write.html
+$dokka.location:kotlin.coroutines.cancellation.CancellationExceptionkotlin.coroutines.cancellation/-cancellation-exception/index.html
 $dokka.location:kotlin.io$appendBytes(java.io.File, kotlin.ByteArray)kotlin.io/java.io.-file/append-bytes.html
 $dokka.location:kotlin.io$appendText(java.io.File, kotlin.String, java.nio.charset.Charset)kotlin.io/java.io.-file/append-text.html
 $dokka.location:kotlin.io$buffered(java.io.InputStream, kotlin.Int)kotlin.io/java.io.-input-stream/buffered.html
@@ -121,7 +120,80 @@
 $dokka.location:kotlin.io$writeText(java.io.File, kotlin.String, java.nio.charset.Charset)kotlin.io/java.io.-file/write-text.html
 $dokka.location:kotlin.io$writer(java.io.File, java.nio.charset.Charset)kotlin.io/java.io.-file/writer.html
 $dokka.location:kotlin.io$writer(java.io.OutputStream, java.nio.charset.Charset)kotlin.io/java.io.-output-stream/writer.html
+$dokka.location:kotlin.io.path$absolute(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/absolute.html
+$dokka.location:kotlin.io.path$absolutePathString(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/absolute-path-string.html
+$dokka.location:kotlin.io.path$appendBytes(java.nio.file.Path, kotlin.ByteArray)kotlin.io.path/java.nio.file.-path/append-bytes.html
+$dokka.location:kotlin.io.path$appendLines(java.nio.file.Path, kotlin.collections.Iterable((kotlin.CharSequence)), java.nio.charset.Charset)kotlin.io.path/java.nio.file.-path/append-lines.html
+$dokka.location:kotlin.io.path$appendLines(java.nio.file.Path, kotlin.sequences.Sequence((kotlin.CharSequence)), java.nio.charset.Charset)kotlin.io.path/java.nio.file.-path/append-lines.html
+$dokka.location:kotlin.io.path$appendText(java.nio.file.Path, kotlin.CharSequence, java.nio.charset.Charset)kotlin.io.path/java.nio.file.-path/append-text.html
+$dokka.location:kotlin.io.path$bufferedReader(java.nio.file.Path, java.nio.charset.Charset, kotlin.Int, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/buffered-reader.html
+$dokka.location:kotlin.io.path$bufferedWriter(java.nio.file.Path, java.nio.charset.Charset, kotlin.Int, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/buffered-writer.html
+$dokka.location:kotlin.io.path$copyTo(java.nio.file.Path, java.nio.file.Path, kotlin.Array((java.nio.file.CopyOption)))kotlin.io.path/java.nio.file.-path/copy-to.html
+$dokka.location:kotlin.io.path$copyTo(java.nio.file.Path, java.nio.file.Path, kotlin.Boolean)kotlin.io.path/java.nio.file.-path/copy-to.html
+$dokka.location:kotlin.io.path$createDirectories(java.nio.file.Path, kotlin.Array((java.nio.file.attribute.FileAttribute((kotlin.Any)))))kotlin.io.path/java.nio.file.-path/create-directories.html
+$dokka.location:kotlin.io.path$createDirectory(java.nio.file.Path, kotlin.Array((java.nio.file.attribute.FileAttribute((kotlin.Any)))))kotlin.io.path/java.nio.file.-path/create-directory.html
+$dokka.location:kotlin.io.path$createFile(java.nio.file.Path, kotlin.Array((java.nio.file.attribute.FileAttribute((kotlin.Any)))))kotlin.io.path/java.nio.file.-path/create-file.html
+$dokka.location:kotlin.io.path$createLinkPointingTo(java.nio.file.Path, java.nio.file.Path)kotlin.io.path/java.nio.file.-path/create-link-pointing-to.html
+$dokka.location:kotlin.io.path$createSymbolicLinkPointingTo(java.nio.file.Path, java.nio.file.Path, kotlin.Array((java.nio.file.attribute.FileAttribute((kotlin.Any)))))kotlin.io.path/java.nio.file.-path/create-symbolic-link-pointing-to.html
+$dokka.location:kotlin.io.path$deleteExisting(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/delete-existing.html
+$dokka.location:kotlin.io.path$deleteIfExists(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/delete-if-exists.html
+$dokka.location:kotlin.io.path$div(java.nio.file.Path, java.nio.file.Path)kotlin.io.path/java.nio.file.-path/div.html
+$dokka.location:kotlin.io.path$div(java.nio.file.Path, kotlin.String)kotlin.io.path/java.nio.file.-path/div.html
+$dokka.location:kotlin.io.path$exists(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/exists.html
+$dokka.location:kotlin.io.path$extension#java.nio.file.Pathkotlin.io.path/java.nio.file.-path/extension.html
+$dokka.location:kotlin.io.path$fileAttributesView(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/file-attributes-view.html
+$dokka.location:kotlin.io.path$fileAttributesViewOrNull(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/file-attributes-view-or-null.html
+$dokka.location:kotlin.io.path$fileSize(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/file-size.html
+$dokka.location:kotlin.io.path$fileStore(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/file-store.html
+$dokka.location:kotlin.io.path$forEachDirectoryEntry(java.nio.file.Path, kotlin.String, kotlin.Function1((java.nio.file.Path, kotlin.Unit)))kotlin.io.path/java.nio.file.-path/for-each-directory-entry.html
+$dokka.location:kotlin.io.path$forEachLine(java.nio.file.Path, java.nio.charset.Charset, kotlin.Function1((kotlin.String, kotlin.Unit)))kotlin.io.path/java.nio.file.-path/for-each-line.html
+$dokka.location:kotlin.io.path$getAttribute(java.nio.file.Path, kotlin.String, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/get-attribute.html
+$dokka.location:kotlin.io.path$getLastModifiedTime(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/get-last-modified-time.html
+$dokka.location:kotlin.io.path$getOwner(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/get-owner.html
+$dokka.location:kotlin.io.path$getPosixFilePermissions(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/get-posix-file-permissions.html
+$dokka.location:kotlin.io.path$inputStream(java.nio.file.Path, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/input-stream.html
+$dokka.location:kotlin.io.path$invariantSeparatorsPath#java.nio.file.Pathkotlin.io.path/java.nio.file.-path/invariant-separators-path.html
+$dokka.location:kotlin.io.path$invariantSeparatorsPathString#java.nio.file.Pathkotlin.io.path/java.nio.file.-path/invariant-separators-path-string.html
+$dokka.location:kotlin.io.path$isDirectory(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/is-directory.html
+$dokka.location:kotlin.io.path$isExecutable(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/is-executable.html
+$dokka.location:kotlin.io.path$isHidden(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/is-hidden.html
+$dokka.location:kotlin.io.path$isReadable(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/is-readable.html
+$dokka.location:kotlin.io.path$isRegularFile(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/is-regular-file.html
+$dokka.location:kotlin.io.path$isSameFileAs(java.nio.file.Path, java.nio.file.Path)kotlin.io.path/java.nio.file.-path/is-same-file-as.html
+$dokka.location:kotlin.io.path$isSymbolicLink(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/is-symbolic-link.html
+$dokka.location:kotlin.io.path$isWritable(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/is-writable.html
+$dokka.location:kotlin.io.path$listDirectoryEntries(java.nio.file.Path, kotlin.String)kotlin.io.path/java.nio.file.-path/list-directory-entries.html
+$dokka.location:kotlin.io.path$moveTo(java.nio.file.Path, java.nio.file.Path, kotlin.Array((java.nio.file.CopyOption)))kotlin.io.path/java.nio.file.-path/move-to.html
+$dokka.location:kotlin.io.path$moveTo(java.nio.file.Path, java.nio.file.Path, kotlin.Boolean)kotlin.io.path/java.nio.file.-path/move-to.html
+$dokka.location:kotlin.io.path$name#java.nio.file.Pathkotlin.io.path/java.nio.file.-path/name.html
+$dokka.location:kotlin.io.path$nameWithoutExtension#java.nio.file.Pathkotlin.io.path/java.nio.file.-path/name-without-extension.html
+$dokka.location:kotlin.io.path$notExists(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/not-exists.html
+$dokka.location:kotlin.io.path$outputStream(java.nio.file.Path, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/output-stream.html
+$dokka.location:kotlin.io.path$pathString#java.nio.file.Pathkotlin.io.path/java.nio.file.-path/path-string.html
+$dokka.location:kotlin.io.path$readAttributes(java.nio.file.Path, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/read-attributes.html
+$dokka.location:kotlin.io.path$readAttributes(java.nio.file.Path, kotlin.String, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/read-attributes.html
+$dokka.location:kotlin.io.path$readBytes(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/read-bytes.html
+$dokka.location:kotlin.io.path$readLines(java.nio.file.Path, java.nio.charset.Charset)kotlin.io.path/java.nio.file.-path/read-lines.html
+$dokka.location:kotlin.io.path$readSymbolicLink(java.nio.file.Path)kotlin.io.path/java.nio.file.-path/read-symbolic-link.html
+$dokka.location:kotlin.io.path$readText(java.nio.file.Path, java.nio.charset.Charset)kotlin.io.path/java.nio.file.-path/read-text.html
+$dokka.location:kotlin.io.path$reader(java.nio.file.Path, java.nio.charset.Charset, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/reader.html
+$dokka.location:kotlin.io.path$relativeTo(java.nio.file.Path, java.nio.file.Path)kotlin.io.path/java.nio.file.-path/relative-to.html
+$dokka.location:kotlin.io.path$relativeToOrNull(java.nio.file.Path, java.nio.file.Path)kotlin.io.path/java.nio.file.-path/relative-to-or-null.html
+$dokka.location:kotlin.io.path$relativeToOrSelf(java.nio.file.Path, java.nio.file.Path)kotlin.io.path/java.nio.file.-path/relative-to-or-self.html
+$dokka.location:kotlin.io.path$setAttribute(java.nio.file.Path, kotlin.String, kotlin.Any?, kotlin.Array((java.nio.file.LinkOption)))kotlin.io.path/java.nio.file.-path/set-attribute.html
+$dokka.location:kotlin.io.path$setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime)kotlin.io.path/java.nio.file.-path/set-last-modified-time.html
+$dokka.location:kotlin.io.path$setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal)kotlin.io.path/java.nio.file.-path/set-owner.html
+$dokka.location:kotlin.io.path$setPosixFilePermissions(java.nio.file.Path, kotlin.collections.Set((java.nio.file.attribute.PosixFilePermission)))kotlin.io.path/java.nio.file.-path/set-posix-file-permissions.html
+$dokka.location:kotlin.io.path$toPath(java.net.URI)kotlin.io.path/java.net.-u-r-i/to-path.html
+$dokka.location:kotlin.io.path$useDirectoryEntries(java.nio.file.Path, kotlin.String, kotlin.Function1((kotlin.sequences.Sequence((java.nio.file.Path)), kotlin.io.path.useDirectoryEntries.T)))kotlin.io.path/java.nio.file.-path/use-directory-entries.html
+$dokka.location:kotlin.io.path$useLines(java.nio.file.Path, java.nio.charset.Charset, kotlin.Function1((kotlin.sequences.Sequence((kotlin.String)), kotlin.io.path.useLines.T)))kotlin.io.path/java.nio.file.-path/use-lines.html
+$dokka.location:kotlin.io.path$writeBytes(java.nio.file.Path, kotlin.ByteArray, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/write-bytes.html
+$dokka.location:kotlin.io.path$writeLines(java.nio.file.Path, kotlin.collections.Iterable((kotlin.CharSequence)), java.nio.charset.Charset, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/write-lines.html
+$dokka.location:kotlin.io.path$writeLines(java.nio.file.Path, kotlin.sequences.Sequence((kotlin.CharSequence)), java.nio.charset.Charset, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/write-lines.html
+$dokka.location:kotlin.io.path$writeText(java.nio.file.Path, kotlin.CharSequence, java.nio.charset.Charset, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/write-text.html
+$dokka.location:kotlin.io.path$writer(java.nio.file.Path, java.nio.charset.Charset, kotlin.Array((java.nio.file.OpenOption)))kotlin.io.path/java.nio.file.-path/writer.html
 $dokka.location:kotlin.jvm$kotlin#java.lang.Class((kotlin.jvm.kotlin.T))kotlin.jvm/java.lang.-class/kotlin.html
+$dokka.location:kotlin.jvm.JvmRecordkotlin.jvm/-jvm-record/index.html
 $dokka.location:kotlin.random$asKotlinRandom(java.util.Random)kotlin.random/java.util.-random/as-kotlin-random.html
 $dokka.location:kotlin.reflect.KAnnotatedElementkotlin.reflect/-k-annotated-element/index.html
 $dokka.location:kotlin.reflect.KDeclarationContainerkotlin.reflect/-k-declaration-container/index.html
@@ -141,33 +213,48 @@
 $dokka.location:kotlin.streams$toList(java.util.stream.IntStream)kotlin.streams/java.util.stream.-int-stream/to-list.html
 $dokka.location:kotlin.streams$toList(java.util.stream.LongStream)kotlin.streams/java.util.stream.-long-stream/to-list.html
 $dokka.location:kotlin.streams$toList(java.util.stream.Stream((kotlin.streams.toList.T)))kotlin.streams/java.util.stream.-stream/to-list.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, java.lang.StringBuffer?)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, java.lang.StringBuilder?)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, kotlin.Byte)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, kotlin.Double)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, kotlin.Float)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, kotlin.Int)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, kotlin.Long)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendLine(java.lang.StringBuilder, kotlin.Short)kotlin.text/java.lang.-string-builder/append-line.html
+$dokka.location:kotlin.text$appendRange(java.lang.StringBuilder, kotlin.CharArray, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/append-range.html
+$dokka.location:kotlin.text$appendRange(java.lang.StringBuilder, kotlin.CharSequence, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/append-range.html
 $dokka.location:kotlin.text$appendln(java.lang.Appendable)kotlin.text/java.lang.-appendable/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.Appendable, kotlin.Char)kotlin.text/java.lang.-appendable/appendln.html
-$dokka.location:kotlin.text$appendln(java.lang.Appendable, kotlin.CharSequence)kotlin.text/java.lang.-appendable/appendln.html
+$dokka.location:kotlin.text$appendln(java.lang.Appendable, kotlin.CharSequence?)kotlin.text/java.lang.-appendable/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder)kotlin.text/java.lang.-string-builder/appendln.html
-$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, java.lang.StringBuffer)kotlin.text/java.lang.-string-builder/appendln.html
-$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, java.lang.StringBuilder)kotlin.text/java.lang.-string-builder/appendln.html
-$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Any)kotlin.text/java.lang.-string-builder/appendln.html
+$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, java.lang.StringBuffer?)kotlin.text/java.lang.-string-builder/appendln.html
+$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, java.lang.StringBuilder?)kotlin.text/java.lang.-string-builder/appendln.html
+$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Any?)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Boolean)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Byte)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Char)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.CharArray)kotlin.text/java.lang.-string-builder/appendln.html
-$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.CharSequence)kotlin.text/java.lang.-string-builder/appendln.html
+$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.CharSequence?)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Double)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Float)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Int)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Long)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.Short)kotlin.text/java.lang.-string-builder/appendln.html
-$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.String)kotlin.text/java.lang.-string-builder/appendln.html
+$dokka.location:kotlin.text$appendln(java.lang.StringBuilder, kotlin.String?)kotlin.text/java.lang.-string-builder/appendln.html
 $dokka.location:kotlin.text$clear(java.lang.StringBuilder)kotlin.text/java.lang.-string-builder/clear.html
+$dokka.location:kotlin.text$deleteAt(java.lang.StringBuilder, kotlin.Int)kotlin.text/java.lang.-string-builder/delete-at.html
+$dokka.location:kotlin.text$deleteRange(java.lang.StringBuilder, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/delete-range.html
+$dokka.location:kotlin.text$insertRange(java.lang.StringBuilder, kotlin.Int, kotlin.CharArray, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/insert-range.html
+$dokka.location:kotlin.text$insertRange(java.lang.StringBuilder, kotlin.Int, kotlin.CharSequence, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/insert-range.html
 $dokka.location:kotlin.text$set(java.lang.StringBuilder, kotlin.Int, kotlin.Char)kotlin.text/java.lang.-string-builder/set.html
+$dokka.location:kotlin.text$setRange(java.lang.StringBuilder, kotlin.Int, kotlin.Int, kotlin.String)kotlin.text/java.lang.-string-builder/set-range.html
+$dokka.location:kotlin.text$toCharArray(java.lang.StringBuilder, kotlin.CharArray, kotlin.Int, kotlin.Int, kotlin.Int)kotlin.text/java.lang.-string-builder/to-char-array.html
 $dokka.location:kotlin.text$toRegex(java.util.regex.Pattern)kotlin.text/java.util.regex.-pattern/to-regex.html
 $dokka.location:kotlin.text.Appendablekotlin.text/-appendable/index.html
 $dokka.location:kotlin.text.CharacterCodingExceptionkotlin.text/-character-coding-exception/index.html
 $dokka.location:kotlin.text.StringBuilderkotlin.text/-string-builder/index.html
 $dokka.location:kotlin.time$toKotlinDuration(java.time.Duration)kotlin.time/java.time.-duration/to-kotlin-duration.html
 $dokka.location:kotlin.time.DurationUnitkotlin.time/-duration-unit/index.html
-$dokka.location:kotlin.time.MonoClockkotlin.time/-mono-clock/index.html
 kotlin
 kotlin.annotation
 kotlin.browser
@@ -176,12 +263,12 @@
 kotlin.concurrent
 kotlin.contracts
 kotlin.coroutines
-kotlin.coroutines.experimental
-kotlin.coroutines.experimental.intrinsics
+kotlin.coroutines.cancellation
 kotlin.coroutines.intrinsics
 kotlin.dom
 kotlin.experimental
 kotlin.io
+kotlin.io.path
 kotlin.js
 kotlin.jvm
 kotlin.math
@@ -199,16 +286,20 @@
 kotlin.system
 kotlin.text
 kotlin.time
+kotlinx.browser
 kotlinx.cinterop
 kotlinx.cinterop.internal
+kotlinx.dom
 kotlinx.wasm.jsinterop
 org.khronos.webgl
 org.w3c.css.masking
 org.w3c.dom
 org.w3c.dom.clipboard
 org.w3c.dom.css
+org.w3c.dom.encryptedmedia
 org.w3c.dom.events
 org.w3c.dom.mediacapture
+org.w3c.dom.mediasource
 org.w3c.dom.parsing
 org.w3c.dom.pointerevents
 org.w3c.dom.svg
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index e4a46cc..dee23c3 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -57,7 +57,6 @@
     docs(project(":compose:material:material"))
     docs(project(":compose:material:material-icons-core"))
     samples(project(":compose:material:material-icons-core:material-icons-core-samples"))
-    docs(project(":compose:material:material-icons-extended"))
     docs(project(":compose:material:material-ripple"))
     samples(project(":compose:material:material:material-samples"))
     docs(project(":compose:runtime:runtime"))
diff --git a/documentfile/documentfile/lint-baseline.xml b/documentfile/documentfile/lint-baseline.xml
index 292e7cc..9f4966b 100644
--- a/documentfile/documentfile/lint-baseline.xml
+++ b/documentfile/documentfile/lint-baseline.xml
@@ -1,59 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.documentfile.provider.DocumentFile is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            String documentId = DocumentsContract.getTreeDocumentId(treeUri);"
-        errorLine2="                                                  ~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/documentfile/provider/DocumentFile.java"
-            line="136"
-            column="51"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.documentfile.provider.DocumentFile is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            if (DocumentsContract.isDocumentUri(context, treeUri)) {"
-        errorLine2="                                  ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/documentfile/provider/DocumentFile.java"
-            line="137"
-            column="35"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.documentfile.provider.DocumentFile is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                documentId = DocumentsContract.getDocumentId(treeUri);"
-        errorLine2="                                               ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/documentfile/provider/DocumentFile.java"
-            line="138"
-            column="48"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 21; however, the containing class androidx.documentfile.provider.DocumentFile is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    DocumentsContract.buildDocumentUriUsingTree(treeUri,"
-        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/documentfile/provider/DocumentFile.java"
-            line="141"
-            column="39"/>
-    </issue>
-
-    <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 19; however, the containing class androidx.documentfile.provider.DocumentFile is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="            return DocumentsContract.isDocumentUri(context, uri);"
-        errorLine2="                                     ~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/documentfile/provider/DocumentFile.java"
-            line="154"
-            column="38"/>
-    </issue>
+<issues format="5" by="lint Bumblebee | 2021.1.1 Canary 2">
 
 </issues>
diff --git a/documentfile/documentfile/src/androidTest/java/androidx/documentfile/provider/DocumentFileTest.java b/documentfile/documentfile/src/androidTest/java/androidx/documentfile/provider/DocumentFileTest.java
index 98d4edc..1af61b2 100644
--- a/documentfile/documentfile/src/androidTest/java/androidx/documentfile/provider/DocumentFileTest.java
+++ b/documentfile/documentfile/src/androidTest/java/androidx/documentfile/provider/DocumentFileTest.java
@@ -17,10 +17,13 @@
 package androidx.documentfile.provider;
 
 import static org.hamcrest.core.IsEqual.equalTo;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 import android.content.Context;
 import android.net.Uri;
+import android.os.Build;
+import android.provider.DocumentsContract;
 
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -51,4 +54,64 @@
         DocumentFile subDirDoc = DocumentFile.fromTreeUri(context, DOWNLOAD_URI);
         assertThat(subDirDoc.getUri(), equalTo(DOWNLOAD_URI));
     }
+
+    @Test
+    public void testDocumentsContractApi_isDocumentId() {
+        Context context = ApplicationProvider.getApplicationContext();
+        final boolean isDocumentUri = DocumentsContractApi.isDocumentUri(context,
+                DOWNLOAD_URI);
+
+        final boolean expectedIsDocumentUri;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            expectedIsDocumentUri = DocumentsContract.isDocumentUri(context, DOWNLOAD_URI);
+        } else {
+            expectedIsDocumentUri = false;
+        }
+        assertEquals(expectedIsDocumentUri, isDocumentUri);
+    }
+
+    @Test
+    public void testDocumentsContractApi_getDocumentId() {
+        final String documentId = DocumentsContractApi.getDocumentId(DOWNLOAD_URI);
+
+        final String expectedDocumentId;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            expectedDocumentId = DocumentsContract.getDocumentId(DOWNLOAD_URI);
+        } else {
+            expectedDocumentId = null;
+        }
+        assertEquals(expectedDocumentId, documentId);
+    }
+
+    @Test
+    public void testDocumentsContractApi_getTreeDocumentId() {
+        final String treeDocumentId = DocumentsContractApi.getTreeDocumentId(
+                DOWNLOAD_URI);
+
+        final String expectedTreeDocumentId;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            expectedTreeDocumentId = DocumentsContract.getTreeDocumentId(DOWNLOAD_URI);
+        } else {
+            expectedTreeDocumentId = null;
+        }
+        assertEquals(expectedTreeDocumentId, treeDocumentId);
+    }
+
+    @Test
+    public void testDocumentsContractApi_buildDocumentUriUsingTree() {
+        final String treeDocumentId = DocumentsContractApi.getTreeDocumentId(
+                DOWNLOAD_URI);
+        final Uri treeUri = DocumentsContractApi.buildDocumentUriUsingTree(
+                DOWNLOAD_URI, treeDocumentId);
+
+        final Uri expectedTreeUri;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            final String expectedTreeDocId = DocumentsContract.getTreeDocumentId(DOWNLOAD_URI);
+            expectedTreeUri = DocumentsContract.buildDocumentUriUsingTree(DOWNLOAD_URI,
+                    expectedTreeDocId);
+        } else {
+            expectedTreeUri = null;
+        }
+        assertEquals(expectedTreeUri, treeUri);
+    }
 }
diff --git a/documentfile/documentfile/src/main/java/androidx/documentfile/provider/DocumentFile.java b/documentfile/documentfile/src/main/java/androidx/documentfile/provider/DocumentFile.java
index 0127a87..8385813 100644
--- a/documentfile/documentfile/src/main/java/androidx/documentfile/provider/DocumentFile.java
+++ b/documentfile/documentfile/src/main/java/androidx/documentfile/provider/DocumentFile.java
@@ -16,12 +16,11 @@
 
 package androidx.documentfile.provider;
 
-import android.content.Context;
 import android.content.ContentResolver;
+import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Build;
-import android.provider.DocumentsContract;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -133,13 +132,21 @@
     @Nullable
     public static DocumentFile fromTreeUri(@NonNull Context context, @NonNull Uri treeUri) {
         if (Build.VERSION.SDK_INT >= 21) {
-            String documentId = DocumentsContract.getTreeDocumentId(treeUri);
-            if (DocumentsContract.isDocumentUri(context, treeUri)) {
-                documentId = DocumentsContract.getDocumentId(treeUri);
+            String documentId = DocumentsContractApi.getTreeDocumentId(treeUri);
+            if (DocumentsContractApi.isDocumentUri(context, treeUri)) {
+                documentId = DocumentsContractApi.getDocumentId(treeUri);
             }
-            return new TreeDocumentFile(null, context,
-                    DocumentsContract.buildDocumentUriUsingTree(treeUri,
-                            documentId));
+            if (documentId == null) {
+                throw new IllegalArgumentException(
+                        "Could not get document ID from Uri: " + treeUri);
+            }
+            Uri treeDocumentUri =
+                    DocumentsContractApi.buildDocumentUriUsingTree(treeUri, documentId);
+            if (treeDocumentUri == null) {
+                throw new NullPointerException(
+                        "Failed to build documentUri from a tree: " + treeUri);
+            }
+            return new TreeDocumentFile(null, context, treeDocumentUri);
         } else {
             return null;
         }
@@ -150,11 +157,7 @@
      * {@link android.provider.DocumentsProvider}.
      */
     public static boolean isDocumentUri(@NonNull Context context, @Nullable Uri uri) {
-        if (Build.VERSION.SDK_INT >= 19) {
-            return DocumentsContract.isDocumentUri(context, uri);
-        } else {
-            return false;
-        }
+        return DocumentsContractApi.isDocumentUri(context, uri);
     }
 
     /**
diff --git a/documentfile/documentfile/src/main/java/androidx/documentfile/provider/DocumentsContractApi.java b/documentfile/documentfile/src/main/java/androidx/documentfile/provider/DocumentsContractApi.java
new file mode 100644
index 0000000..2da4d7e
--- /dev/null
+++ b/documentfile/documentfile/src/main/java/androidx/documentfile/provider/DocumentsContractApi.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.documentfile.provider;
+
+import android.content.Context;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.DocumentsContract;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+
+abstract class DocumentsContractApi {
+
+    static boolean isDocumentUri(Context context, @Nullable Uri uri) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            return DocumentsContractApi19Impl.isDocumentUri(context, uri);
+        } else {
+            return false;
+        }
+    }
+
+    @Nullable
+    static String getDocumentId(Uri documentUri) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            return DocumentsContractApi19Impl.getDocumentId(documentUri);
+        } else {
+            return null;
+        }
+    }
+
+    @Nullable
+    static String getTreeDocumentId(Uri documentUri) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            return DocumentsContractApi21Impl.getTreeDocumentId(documentUri);
+        } else {
+            return null;
+        }
+    }
+
+    @Nullable
+    static Uri buildDocumentUriUsingTree(Uri treeUri, String documentId) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            return DocumentsContractApi21Impl.buildDocumentUriUsingTree(treeUri, documentId);
+        } else {
+            return null;
+        }
+    }
+
+    @RequiresApi(19)
+    private static class DocumentsContractApi19Impl {
+        static boolean isDocumentUri(Context context, @Nullable Uri uri) {
+            return DocumentsContract.isDocumentUri(context, uri);
+        }
+
+        static String getDocumentId(Uri documentUri) {
+            return DocumentsContract.getDocumentId(documentUri);
+        }
+
+        private DocumentsContractApi19Impl() {
+        }
+    }
+
+    @RequiresApi(21)
+    private static class DocumentsContractApi21Impl {
+        static String getTreeDocumentId(Uri documentUri) {
+            return DocumentsContract.getTreeDocumentId(documentUri);
+        }
+
+        static Uri buildDocumentUriUsingTree(Uri treeUri, String documentId) {
+            return DocumentsContract.buildDocumentUriUsingTree(treeUri, documentId);
+        }
+
+        private DocumentsContractApi21Impl() {
+        }
+    }
+
+    private DocumentsContractApi() {
+    }
+}
diff --git a/drawerlayout/drawerlayout/lint-baseline.xml b/drawerlayout/drawerlayout/lint-baseline.xml
index dbfb443..677aa59 100644
--- a/drawerlayout/drawerlayout/lint-baseline.xml
+++ b/drawerlayout/drawerlayout/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/dynamic-animation/dynamic-animation/lint-baseline.xml b/dynamic-animation/dynamic-animation/lint-baseline.xml
index dddc744..939c67c 100644
--- a/dynamic-animation/dynamic-animation/lint-baseline.xml
+++ b/dynamic-animation/dynamic-animation/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/emoji/appcompat/lint-baseline.xml b/emoji/appcompat/lint-baseline.xml
index 0d655a9..a85ccf9 100644
--- a/emoji/appcompat/lint-baseline.xml
+++ b/emoji/appcompat/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/emoji/core/lint-baseline.xml b/emoji/core/lint-baseline.xml
index 9751702..e1b1de4 100644
--- a/emoji/core/lint-baseline.xml
+++ b/emoji/core/lint-baseline.xml
@@ -1,5 +1,368 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `TypefaceEmojiSpan`"
+        errorLine1="        final EmojiSpan span = new TypefaceEmojiSpan(metadata);"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiEditableFactoryTest.java"
+            line="65"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 15 (current min is 14): `android.view.View#hasOnClickListeners`"
+        errorLine1="        assertTrue(extractButton.hasOnClickListeners());"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiExtractTextLayoutTest.java"
+            line="177"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 15 (current min is 14): `android.view.View#hasOnClickListeners`"
+        errorLine1="        assertFalse(extractButton.hasOnClickListeners());"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiExtractTextLayoutTest.java"
+            line="199"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `EmojiInputFilter`"
+        errorLine1="        mInputFilter = new EmojiInputFilter(textView);"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiInputFilterTest.java"
+            line="58"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        assertNull(mInputFilter.filter(null, 0, 1, null, 0, 1));"
+        errorLine2="                                ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiInputFilterTest.java"
+            line="63"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiInputFilterTest.java"
+            line="73"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiInputFilterTest.java"
+            line="85"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiInputFilterTest.java"
+            line="98"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiInputFilterTest.java"
+            line="111"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiInputFilterTest.java"
+            line="123"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getId`"
+        errorLine1="                    if (mResId == spans[index].getId()) {"
+        errorLine2="                                               ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/util/EmojiMatcher.java"
+            line="233"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getId`"
+        errorLine1="                    if (mResId == -1 || mResId == spans[index].getId()) {"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/util/EmojiMatcher.java"
+            line="240"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `EmojiTextWatcher`"
+        errorLine1="        mTextWatcher = new EmojiTextWatcher(editText);"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="54"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `onTextChanged`"
+        errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="62"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `onTextChanged`"
+        errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="74"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `onTextChanged`"
+        errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="86"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getEmojiReplaceStrategy`"
+        errorLine1="        assertEquals(EmojiCompat.REPLACE_STRATEGY_DEFAULT, mTextWatcher.getEmojiReplaceStrategy());"
+        errorLine2="                                                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="98"
+            column="73"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `onTextChanged`"
+        errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="100"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `setEmojiReplaceStrategy`"
+        errorLine1="        mTextWatcher.setEmojiReplaceStrategy(EmojiCompat.REPLACE_STRATEGY_ALL);"
+        errorLine2="                     ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="105"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `onTextChanged`"
+        errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="107"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `onTextChanged`"
+        errorLine1="        mTextWatcher.onTextChanged(testString, 0, 0, 1);"
+        errorLine2="                     ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTextWatcherTest.java"
+            line="118"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `EmojiTransformationMethod`"
+        errorLine1="        mTransformationMethod = new EmojiTransformationMethod(mWrappedTransformationMethod);"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="84"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        assertNull(mTransformationMethod.getTransformation(null, mView));"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="89"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        mTransformationMethod.getTransformation(&quot;&quot;, null);"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="95"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `EmojiTransformationMethod`"
+        errorLine1="        mTransformationMethod = new EmojiTransformationMethod(null);"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="100"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="102"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="110"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="124"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="137"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/widget/EmojiTransformationMethodTest.java"
+            line="150"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `MetadataRepo`"
+        errorLine1="                            loaderCallback.onLoaded(new MetadataRepo());"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+            line="88"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `create`"
+        errorLine1="                            sMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
+        errorLine2="                                                         ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+            line="119"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `create`"
+        errorLine1="                    mMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji/text/TestConfigBuilder.java"
+            line="144"
+            column="50"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/emoji2/emoji2-bundled/lint-baseline.xml b/emoji2/emoji2-bundled/lint-baseline.xml
new file mode 100644
index 0000000..ea23657
--- /dev/null
+++ b/emoji2/emoji2-bundled/lint-baseline.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getId`"
+        errorLine1="                    if (mResId == spans[index].getId()) {"
+        errorLine2="                                               ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/bundled/util/EmojiMatcher.java"
+            line="233"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getId`"
+        errorLine1="                    if (mResId == -1 || mResId == spans[index].getId()) {"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/bundled/util/EmojiMatcher.java"
+            line="240"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `create`"
+        errorLine1="                            loaderCallback.onLoaded(MetadataRepo.create(mock(Typeface.class)));"
+        errorLine2="                                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+            line="92"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `create`"
+        errorLine1="                            sMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
+        errorLine2="                                                         ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+            line="123"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `create`"
+        errorLine1="                    mMetadataRepo = MetadataRepo.create(assetManager, FONT_FILE);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/bundled/TestConfigBuilder.java"
+            line="148"
+            column="50"/>
+    </issue>
+
+</issues>
diff --git a/emoji2/emoji2-bundled/src/androidTest/AndroidManifest.xml b/emoji2/emoji2-bundled/src/androidTest/AndroidManifest.xml
index 3b9ba38f..29ed14a 100644
--- a/emoji2/emoji2-bundled/src/androidTest/AndroidManifest.xml
+++ b/emoji2/emoji2-bundled/src/androidTest/AndroidManifest.xml
@@ -14,10 +14,21 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="androidx.emoji2.bundled">
+    xmlns:tools="http://schemas.android.com/tools"
+    package="androidx.emoji2.bundled">
 
     <application>
         <activity android:name=".TestActivity"/>
+        <provider
+            android:name="androidx.startup.InitializationProvider"
+            android:authorities="${applicationId}.androidx-startup"
+            android:exported="false"
+            tools:node="merge">
+            <meta-data
+                android:name="androidx.emoji2.text.EmojiCompatInitializer"
+                tools:node="remove" />
+        </provider>
+
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/emoji2/emoji2-bundled/src/main/AndroidManifest.xml b/emoji2/emoji2-bundled/src/main/AndroidManifest.xml
index ee983ff..53ef478 100644
--- a/emoji2/emoji2-bundled/src/main/AndroidManifest.xml
+++ b/emoji2/emoji2-bundled/src/main/AndroidManifest.xml
@@ -13,4 +13,18 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<manifest package="androidx.emoji2.bundled"/>
\ No newline at end of file
+<manifest package="androidx.emoji2.bundled"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools">
+    <application>
+        <provider
+            android:name="androidx.startup.InitializationProvider"
+            android:authorities="${applicationId}.androidx-startup"
+            android:exported="false"
+            tools:node="merge">
+            <meta-data
+                android:name="androidx.emoji2.text.EmojiCompatInitializer"
+                tools:node="remove" />
+        </provider>
+    </application>
+</manifest>
\ No newline at end of file
diff --git a/emoji2/emoji2-bundled/src/main/java/androidx/emoji2/bundled/BundledEmojiCompatConfig.java b/emoji2/emoji2-bundled/src/main/java/androidx/emoji2/bundled/BundledEmojiCompatConfig.java
index 5394c9b..7b75fda 100644
--- a/emoji2/emoji2-bundled/src/main/java/androidx/emoji2/bundled/BundledEmojiCompatConfig.java
+++ b/emoji2/emoji2-bundled/src/main/java/androidx/emoji2/bundled/BundledEmojiCompatConfig.java
@@ -31,6 +31,10 @@
  * <p/>
  * <pre><code>EmojiCompat.init(new BundledEmojiCompatConfig(context));</code></pre>
  *
+ * Including the emoji2-bundled artifact disables the
+ * {@link androidx.emoji2.text.EmojiCompatInitializer}. You must manually call EmojiCompat.init
+ * when using the bundled configuration.
+ *
  * @see EmojiCompat
  */
 public class BundledEmojiCompatConfig extends EmojiCompat.Config {
diff --git a/emoji2/emoji2-views-helper/lint-baseline.xml b/emoji2/emoji2-views-helper/lint-baseline.xml
new file mode 100644
index 0000000..ebfe397
--- /dev/null
+++ b/emoji2/emoji2-views-helper/lint-baseline.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `TypefaceEmojiSpan`"
+        errorLine1="        final EmojiSpan span = new TypefaceEmojiSpan(metadata);"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiEditableFactoryTest.java"
+            line="66"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `EmojiInputFilter`"
+        errorLine1="        mInputFilter = new EmojiInputFilter(textView);"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiInputFilterTest.java"
+            line="57"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        assertNull(mInputFilter.filter(null, 0, 1, null, 0, 1));"
+        errorLine2="                                ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiInputFilterTest.java"
+            line="62"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiInputFilterTest.java"
+            line="72"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiInputFilterTest.java"
+            line="85"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiInputFilterTest.java"
+            line="99"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiInputFilterTest.java"
+            line="112"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `filter`"
+        errorLine1="        final CharSequence result = mInputFilter.filter(testString, 0, 1, null, 0, 1);"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiInputFilterTest.java"
+            line="124"
+            column="50"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `EmojiTransformationMethod`"
+        errorLine1="        mTransformationMethod = new EmojiTransformationMethod(mWrappedTransformationMethod);"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="85"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        assertNull(mTransformationMethod.getTransformation(null, mView));"
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="90"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        mTransformationMethod.getTransformation(&quot;&quot;, null);"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="96"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `EmojiTransformationMethod`"
+        errorLine1="        mTransformationMethod = new EmojiTransformationMethod(null);"
+        errorLine2="                                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="101"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="103"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="111"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="125"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="138"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getTransformation`"
+        errorLine1="        final CharSequence result = mTransformationMethod.getTransformation(mTestString, mView);"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/viewsintegration/EmojiTransformationMethodTest.java"
+            line="151"
+            column="59"/>
+    </issue>
+
+</issues>
diff --git a/emoji2/emoji2-views/lint-baseline.xml b/emoji2/emoji2-views/lint-baseline.xml
new file mode 100644
index 0000000..06bb19f
--- /dev/null
+++ b/emoji2/emoji2-views/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 15 (current min is 14): `android.view.View#hasOnClickListeners`"
+        errorLine1="        assertTrue(extractButton.hasOnClickListeners());"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/widget/EmojiExtractTextLayoutTest.java"
+            line="178"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 15 (current min is 14): `android.view.View#hasOnClickListeners`"
+        errorLine1="        assertFalse(extractButton.hasOnClickListeners());"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/widget/EmojiExtractTextLayoutTest.java"
+            line="200"
+            column="35"/>
+    </issue>
+
+</issues>
diff --git a/emoji2/emoji2/build.gradle b/emoji2/emoji2/build.gradle
index 0090467..da94f37 100644
--- a/emoji2/emoji2/build.gradle
+++ b/emoji2/emoji2/build.gradle
@@ -26,6 +26,7 @@
     api("androidx.startup:startup-runtime:1.0.0")
     implementation("androidx.collection:collection:1.1.0")
     implementation("androidx.annotation:annotation:1.2.0")
+    implementation 'androidx.lifecycle:lifecycle-process:2.4.0-alpha02'
 
     androidTestImplementation(libs.testExtJunit)
     androidTestImplementation(libs.testCore)
diff --git a/emoji2/emoji2/lint-baseline.xml b/emoji2/emoji2/lint-baseline.xml
new file mode 100644
index 0000000..4d10805
--- /dev/null
+++ b/emoji2/emoji2/lint-baseline.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Collection#stream`"
+        errorLine1="        return result.stream().anyMatch((item) ->"
+        errorLine2="                      ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="77"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.stream.Stream#anyMatch`"
+        errorLine1="        return result.stream().anyMatch((item) ->"
+        errorLine2="                               ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="77"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="            when(helper.getProviderInfo(eq(info))).thenReturn(info.providerInfo);"
+        errorLine2="                                                              ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="217"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="        info.providerInfo = new ProviderInfo();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="246"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="        info.providerInfo.authority = authority;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="247"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="        info.providerInfo.packageName = packageName;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="248"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="        info.providerInfo.name = &quot;name to make toString happy :)&quot;;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="249"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="        info.providerInfo.applicationInfo = new ApplicationInfo();"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="250"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.content.pm.ResolveInfo#providerInfo`"
+        errorLine1="        info.providerInfo.applicationInfo.flags = flags;"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/DefaultEmojiCompatConfigTest.java"
+            line="251"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `create`"
+        errorLine1="            loaderCallback.onLoaded(MetadataRepo.create(mock(Typeface.class)));"
+        errorLine2="                                                 ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/text/NoFontTestEmojiConfig.java"
+            line="46"
+            column="50"/>
+    </issue>
+
+</issues>
diff --git a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompatInitializer.java b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompatInitializer.java
index 4f64647..2f08d2c 100644
--- a/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompatInitializer.java
+++ b/emoji2/emoji2/src/main/java/androidx/emoji2/text/EmojiCompatInitializer.java
@@ -22,7 +22,6 @@
 import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.Process;
-import android.view.Choreographer;
 
 import androidx.annotation.DoNotInline;
 import androidx.annotation.NonNull;
@@ -30,6 +29,12 @@
 import androidx.annotation.RequiresApi;
 import androidx.annotation.WorkerThread;
 import androidx.core.os.TraceCompat;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.lifecycle.ProcessLifecycleInitializer;
+import androidx.startup.AppInitializer;
 import androidx.startup.Initializer;
 
 import java.util.Collections;
@@ -65,6 +70,8 @@
  *     </provider>
  * </pre>
  *
+ * This initializer depends on {@link ProcessLifecycleInitializer}.
+ *
  * @see androidx.emoji2.text.DefaultEmojiCompatConfig
  */
 public class EmojiCompatInitializer implements Initializer<Boolean> {
@@ -82,7 +89,7 @@
     public Boolean create(@NonNull Context context) {
         if (Build.VERSION.SDK_INT >= 19) {
             EmojiCompat.init(new BackgroundDefaultConfig(context));
-            delayAfterFirstFrame();
+            delayUntilFirstResume(context);
             return true;
         }
         return false;
@@ -94,13 +101,23 @@
      * This allows startup code to run before the delay is scheduled.
      */
     @RequiresApi(19)
-    void delayAfterFirstFrame() {
-        // schedule delay after first frame callback
-        Choreographer16Impl.postFrameCallback(this::loadEmojiCompatAfterDelay);
+    void delayUntilFirstResume(@NonNull Context context) {
+        // schedule delay after first Activity resumes
+        AppInitializer appInitializer = AppInitializer.getInstance(context);
+        LifecycleOwner lifecycleOwner = appInitializer
+                .initializeComponent(ProcessLifecycleInitializer.class);
+        Lifecycle lifecycle = lifecycleOwner.getLifecycle();
+        lifecycle.addObserver(new LifecycleObserver() {
+            @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+            public void onResume() {
+                loadEmojiCompatAfterDelay();
+                lifecycle.removeObserver(this);
+            }
+        });
     }
 
     @RequiresApi(19)
-    private void loadEmojiCompatAfterDelay() {
+    void loadEmojiCompatAfterDelay() {
         final Handler mainHandler;
         if (Build.VERSION.SDK_INT >= 28) {
             mainHandler = Handler28Impl.createAsync(Looper.getMainLooper());
@@ -112,12 +129,12 @@
     }
 
     /**
-     * No dependencies
+     * Dependes on ProcessLifecycleInitializer
      */
     @NonNull
     @Override
     public List<Class<? extends Initializer<?>>> dependencies() {
-        return Collections.emptyList();
+        return Collections.singletonList(ProcessLifecycleInitializer.class);
     }
 
     static class LoadEmojiCompatRunnable implements Runnable {
@@ -213,18 +230,6 @@
         }
     }
 
-    @RequiresApi(16)
-    private static class Choreographer16Impl {
-        private Choreographer16Impl() {
-            // Non-instantiable.
-        }
-
-        @DoNotInline
-        public static void postFrameCallback(Runnable r) {
-            Choreographer.getInstance().postFrameCallback(frameTimeNanos -> r.run());
-        }
-    }
-
     @RequiresApi(28)
     private static class Handler28Impl {
         private Handler28Impl() {
diff --git a/emoji2/integration-tests/init-disabled-macrobenchmark/lint-baseline.xml b/emoji2/integration-tests/init-disabled-macrobenchmark/lint-baseline.xml
new file mode 100644
index 0000000..f67584d
--- /dev/null
+++ b/emoji2/integration-tests/init-disabled-macrobenchmark/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/integration/macrobenchmark/disabled/EmojiStartupBenchmark.kt"
+            line="33"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="        benchmarkRule.measureStartup("
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/integration/macrobenchmark/disabled/EmojiStartupBenchmark.kt"
+            line="37"
+            column="23"/>
+    </issue>
+
+</issues>
diff --git a/emoji2/integration-tests/init-enabled-macrobenchmark/lint-baseline.xml b/emoji2/integration-tests/init-enabled-macrobenchmark/lint-baseline.xml
new file mode 100644
index 0000000..b49d89b
--- /dev/null
+++ b/emoji2/integration-tests/init-enabled-macrobenchmark/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/integration/macrobenchmark/enabled/EmojiStartupBenchmark.kt"
+            line="36"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="        benchmarkRule.measureStartup("
+        errorLine2="                      ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/emoji2/integration/macrobenchmark/enabled/EmojiStartupBenchmark.kt"
+            line="42"
+            column="23"/>
+    </issue>
+
+</issues>
diff --git a/enterprise/feedback/lint-baseline.xml b/enterprise/feedback/lint-baseline.xml
new file mode 100644
index 0000000..2575dd7
--- /dev/null
+++ b/enterprise/feedback/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `android.content.ServiceConnection#onBindingDied`"
+        errorLine1="        getServiceConnection().onBindingDied(mTestComponentName);"
+        errorLine2="                               ~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/enterprise/feedback/BufferedServiceConnectionTest.java"
+            line="453"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 21): `android.content.ServiceConnection#onBindingDied`"
+        errorLine1="        getServiceConnection().onBindingDied(mTestComponentName);"
+        errorLine2="                               ~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/enterprise/feedback/DefaultKeyedAppStatesReporterTest.java"
+            line="601"
+            column="32"/>
+    </issue>
+
+</issues>
diff --git a/exifinterface/exifinterface/lint-baseline.xml b/exifinterface/exifinterface/lint-baseline.xml
index b78a5f8..60982c9 100644
--- a/exifinterface/exifinterface/lint-baseline.xml
+++ b/exifinterface/exifinterface/lint-baseline.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `android.system.Os#close`"
+        errorLine1="                Os.close(fd);"
+        errorLine2="                   ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/exifinterface/media/ExifInterfaceTest.java"
+            line="1364"
+            column="20"/>
+    </issue>
 
     <issue
         id="UnknownNullness"
diff --git a/fragment/fragment/lint-baseline.xml b/fragment/fragment/lint-baseline.xml
new file mode 100644
index 0000000..e394c82
--- /dev/null
+++ b/fragment/fragment/lint-baseline.xml
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition()`"
+        errorLine1="class TrackingTransition : Transition(), TargetTracking {"
+        errorLine2="                           ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="36"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 19 (current min is 14): `android.transition.Transition`"
+        errorLine1="class TrackingTransition : Transition(), TargetTracking {"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="36"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.transition.TransitionValues#values`"
+        errorLine1="        transitionValues.values[PROP] = 0"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="46"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.transition.TransitionValues#values`"
+        errorLine1="        transitionValues.values[PROP] = 1"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="50"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.TransitionValues#equals`"
+        errorLine1="        if (startValues != null) {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="58"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.transition.TransitionValues#view`"
+        errorLine1="            exitingTargets.add(startValues.view)"
+        errorLine2="                               ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="59"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.TransitionValues#equals`"
+        errorLine1="        if (endValues != null) {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="61"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.transition.TransitionValues#view`"
+        errorLine1="            enteringTargets.add(endValues.view)"
+        errorLine2="                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="62"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `android.transition.Transition#getEpicenter`"
+        errorLine1="        if (epicenter != null) {"
+        errorLine2="            ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="64"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `android.transition.Transition#getEpicenter`"
+        errorLine1="            capturedEpicenter.set(Rect(epicenter))"
+        errorLine2="                                       ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingTransition.kt"
+            line="65"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 19 (current min is 14): `android.transition.Visibility`"
+        errorLine1="public class TrackingVisibility extends Visibility implements TargetTracking {"
+        errorLine2="                                        ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingVisibility.java"
+            line="37"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.transition.TransitionValues#view`"
+        errorLine1="        mEnteringTargets.add(endValues.view);"
+        errorLine2="                             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingVisibility.java"
+            line="51"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `android.transition.Transition#getEpicenter`"
+        errorLine1="        Rect epicenter = getEpicenter();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingVisibility.java"
+            line="52"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 19 (current min is 14): `android.transition.TransitionValues#view`"
+        errorLine1="        mExitingTargets.add(startValues.view);"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingVisibility.java"
+            line="64"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `android.transition.Transition#getEpicenter`"
+        errorLine1="        Rect epicenter = getEpicenter();"
+        errorLine2="                         ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TrackingVisibility.java"
+            line="65"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        enterTransition.addListener(listener)"
+        errorLine2="                        ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="56"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        enterTransition.addListener(listener)"
+        errorLine2="                        ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="56"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        sharedElementEnter.addListener(listener)"
+        errorLine2="                           ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="57"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        sharedElementEnter.addListener(listener)"
+        errorLine2="                           ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="57"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        reenterTransition.addListener(listener)"
+        errorLine2="                          ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="58"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        reenterTransition.addListener(listener)"
+        errorLine2="                          ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="58"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        exitTransition.addListener(listener)"
+        errorLine2="                       ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="59"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        exitTransition.addListener(listener)"
+        errorLine2="                       ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="59"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        returnTransition.addListener(listener)"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="60"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        returnTransition.addListener(listener)"
+        errorLine2="                         ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="60"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        sharedElementReturn.addListener(listener)"
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="61"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `android.transition.Transition#addListener`"
+        errorLine1="        sharedElementReturn.addListener(listener)"
+        errorLine2="                            ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="61"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 19 (current min is 14): `android.transition.Transition.TransitionListener`"
+        errorLine1=") : Transition.TransitionListener {"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/fragment/app/TransitionFragment.kt"
+            line="80"
+            column="5"/>
+    </issue>
+
+</issues>
diff --git a/gradle.properties b/gradle.properties
index 220234a..adcf1fd 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -10,6 +10,7 @@
 android.enableAdditionalTestOutput=true
 android.useAndroidX=true
 android.nonTransitiveRClass=true
+android.disableAutomaticComponentCreation=true
 # Run multiple kotlin compilations in parallel within the same project.
 # See also https://github.com/JetBrains/kotlin/blob/1978db9d0e68a2ec29aded30a07e9c3c740c29f6/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt#L100 and https://blog.jetbrains.com/kotlin/2019/01/kotlin-1-3-20-released/
 kotlin.parallel.tasks.in.project=true
diff --git a/gridlayout/gridlayout/lint-baseline.xml b/gridlayout/gridlayout/lint-baseline.xml
index 6d404cc..7e84c1a 100644
--- a/gridlayout/gridlayout/lint-baseline.xml
+++ b/gridlayout/gridlayout/lint-baseline.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `new android.widget.FrameLayout`"
+        errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
+        errorLine2="        ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/gridlayout/widget/TestContentView.java"
+            line="53"
+            column="9"/>
+    </issue>
 
     <issue
         id="UnknownNullness"
diff --git a/health/health-services-client/lint-baseline.xml b/health/health-services-client/lint-baseline.xml
index b83c18e..2569c46 100644
--- a/health/health-services-client/lint-baseline.xml
+++ b/health/health-services-client/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanKeepAnnotation"
diff --git a/heifwriter/heifwriter/lint-baseline.xml b/heifwriter/heifwriter/lint-baseline.xml
index 9b1eb37..2f2db270a 100644
--- a/heifwriter/heifwriter/lint-baseline.xml
+++ b/heifwriter/heifwriter/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/hilt/hilt-navigation-compose/build.gradle b/hilt/hilt-navigation-compose/build.gradle
index dedbb24..9d2163b 100644
--- a/hilt/hilt-navigation-compose/build.gradle
+++ b/hilt/hilt-navigation-compose/build.gradle
@@ -35,13 +35,13 @@
 }
 
 dependencies {
-    kotlinPlugin projectOrArtifact(":compose:compiler:compiler")
+    kotlinPlugin "androidx.compose.compiler:compiler:1.0.0-rc01"
 
     implementation(libs.kotlinStdlib)
     api("androidx.hilt:hilt-navigation:1.0.0")
-    api(projectOrArtifact(":compose:runtime:runtime"))
-    api(projectOrArtifact(":compose:ui:ui"))
-    api(projectOrArtifact(":lifecycle:lifecycle-viewmodel-compose"))
+    api("androidx.compose.runtime:runtime:1.0.0-rc01")
+    api("androidx.compose.ui:ui:1.0.0-rc01")
+    api("androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07")
     api(projectOrArtifact(":navigation:navigation-compose"))
 
     androidTestImplementation(libs.testExtJunit)
diff --git a/hilt/hilt-navigation-compose/samples/build.gradle b/hilt/hilt-navigation-compose/samples/build.gradle
index aa1241ec..0a3b526 100644
--- a/hilt/hilt-navigation-compose/samples/build.gradle
+++ b/hilt/hilt-navigation-compose/samples/build.gradle
@@ -26,7 +26,7 @@
 }
 
 dependencies {
-    kotlinPlugin(projectOrArtifact(":compose:compiler:compiler"))
+    kotlinPlugin("androidx.compose.compiler:compiler:1.0.0-rc01")
     implementation(libs.kotlinStdlib)
 
     compileOnly(projectOrArtifact(":annotation:annotation-sampled"))
diff --git a/inspection/inspection/lint-baseline.xml b/inspection/inspection/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/inspection/inspection/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/leanback/leanback-preference/lint-baseline.xml b/leanback/leanback-preference/lint-baseline.xml
index 9a1dcc3..5a42702 100644
--- a/leanback/leanback-preference/lint-baseline.xml
+++ b/leanback/leanback-preference/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="MissingLeanbackLauncher"
diff --git a/leanback/leanback/lint-baseline.xml b/leanback/leanback/lint-baseline.xml
index c62f6c6..4f85890 100644
--- a/leanback/leanback/lint-baseline.xml
+++ b/leanback/leanback/lint-baseline.xml
@@ -1,5 +1,93 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 17): `android.view.ViewGroup#setLayoutMode`"
+        errorLine1="            mGridView.setLayoutMode(ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS);"
+        errorLine2="                      ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/widget/GridActivity.java"
+            line="130"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 17): `android.view.ViewGroup#setLayoutMode`"
+        errorLine1="                viewGroup.setLayoutMode(ViewGroup.LAYOUT_MODE_OPTICAL_BOUNDS);"
+        errorLine2="                          ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/widget/GridActivity.java"
+            line="461"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 17): `android.app.Activity#enterPictureInPictureMode`"
+        errorLine1="                    getActivity().enterPictureInPictureMode();"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/app/PlaybackTestFragment.java"
+            line="104"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 17): `android.app.Activity#enterPictureInPictureMode`"
+        errorLine1="                    getActivity().enterPictureInPictureMode();"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/app/PlaybackTestSupportFragment.java"
+            line="101"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
+        errorLine1="            if (!Objects.equals(mPreviousQuery, newQuery)) {"
+        errorLine2="                         ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/app/SearchFragmentTest.java"
+            line="245"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
+        errorLine1="            if (!Objects.equals(mPreviousQuery, query)) {"
+        errorLine2="                         ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/app/SearchFragmentTest.java"
+            line="256"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
+        errorLine1="            if (!Objects.equals(mPreviousQuery, newQuery)) {"
+        errorLine2="                         ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/app/SearchSupportFragmentTest.java"
+            line="242"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 17): `java.util.Objects#equals`"
+        errorLine1="            if (!Objects.equals(mPreviousQuery, query)) {"
+        errorLine2="                         ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/leanback/app/SearchSupportFragmentTest.java"
+            line="253"
+            column="26"/>
+    </issue>
 
     <issue
         id="WrongConstant"
@@ -5199,7 +5287,7 @@
         errorLine2="              ~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="542"
+            line="541"
             column="15"/>
     </issue>
 
@@ -5210,7 +5298,7 @@
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="542"
+            line="541"
             column="33"/>
     </issue>
 
@@ -5221,7 +5309,7 @@
         errorLine2="                                                         ~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="542"
+            line="541"
             column="58"/>
     </issue>
 
@@ -5232,7 +5320,7 @@
         errorLine2="            ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="543"
+            line="542"
             column="13"/>
     </issue>
 
@@ -5243,7 +5331,7 @@
         errorLine2="           ~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="548"
+            line="547"
             column="12"/>
     </issue>
 
@@ -5254,7 +5342,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="548"
+            line="547"
             column="36"/>
     </issue>
 
@@ -5265,7 +5353,7 @@
         errorLine2="                                                            ~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="548"
+            line="547"
             column="61"/>
     </issue>
 
@@ -5276,7 +5364,7 @@
         errorLine2="                                   ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="549"
+            line="548"
             column="36"/>
     </issue>
 
@@ -5287,7 +5375,7 @@
         errorLine2="                                  ~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="569"
+            line="568"
             column="35"/>
     </issue>
 
@@ -5298,7 +5386,7 @@
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="580"
+            line="579"
             column="53"/>
     </issue>
 
@@ -5309,7 +5397,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="610"
+            line="609"
             column="12"/>
     </issue>
 
@@ -5320,7 +5408,7 @@
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="772"
+            line="771"
             column="35"/>
     </issue>
 
@@ -5331,7 +5419,7 @@
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="772"
+            line="771"
             column="59"/>
     </issue>
 
@@ -5342,7 +5430,7 @@
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="797"
+            line="796"
             column="50"/>
     </issue>
 
@@ -5353,7 +5441,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="798"
+            line="797"
             column="13"/>
     </issue>
 
@@ -5364,7 +5452,7 @@
         errorLine2="              ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="829"
+            line="828"
             column="15"/>
     </issue>
 
@@ -5375,7 +5463,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="835"
+            line="834"
             column="42"/>
     </issue>
 
@@ -5386,7 +5474,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsFragment.java"
-            line="862"
+            line="861"
             column="12"/>
     </issue>
 
@@ -6343,7 +6431,7 @@
         errorLine2="              ~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="537"
+            line="536"
             column="15"/>
     </issue>
 
@@ -6354,7 +6442,7 @@
         errorLine2="                                ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="537"
+            line="536"
             column="33"/>
     </issue>
 
@@ -6365,7 +6453,7 @@
         errorLine2="                                                         ~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="537"
+            line="536"
             column="58"/>
     </issue>
 
@@ -6376,7 +6464,7 @@
         errorLine2="            ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="538"
+            line="537"
             column="13"/>
     </issue>
 
@@ -6387,7 +6475,7 @@
         errorLine2="           ~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="543"
+            line="542"
             column="12"/>
     </issue>
 
@@ -6398,7 +6486,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="543"
+            line="542"
             column="36"/>
     </issue>
 
@@ -6409,7 +6497,7 @@
         errorLine2="                                                            ~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="543"
+            line="542"
             column="61"/>
     </issue>
 
@@ -6420,7 +6508,7 @@
         errorLine2="                                   ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="544"
+            line="543"
             column="36"/>
     </issue>
 
@@ -6431,7 +6519,7 @@
         errorLine2="                                  ~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="564"
+            line="563"
             column="35"/>
     </issue>
 
@@ -6442,7 +6530,7 @@
         errorLine2="                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="575"
+            line="574"
             column="53"/>
     </issue>
 
@@ -6453,7 +6541,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="605"
+            line="604"
             column="12"/>
     </issue>
 
@@ -6464,7 +6552,7 @@
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="767"
+            line="766"
             column="35"/>
     </issue>
 
@@ -6475,7 +6563,7 @@
         errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="767"
+            line="766"
             column="59"/>
     </issue>
 
@@ -6486,7 +6574,7 @@
         errorLine2="                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="792"
+            line="791"
             column="50"/>
     </issue>
 
@@ -6497,7 +6585,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="793"
+            line="792"
             column="13"/>
     </issue>
 
@@ -6508,7 +6596,7 @@
         errorLine2="              ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="824"
+            line="823"
             column="15"/>
     </issue>
 
@@ -6519,7 +6607,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="830"
+            line="829"
             column="42"/>
     </issue>
 
@@ -6530,7 +6618,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/DetailsSupportFragment.java"
-            line="857"
+            line="856"
             column="12"/>
     </issue>
 
@@ -19807,7 +19895,7 @@
         errorLine2="           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="461"
+            line="460"
             column="12"/>
     </issue>
 
@@ -19818,7 +19906,7 @@
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="492"
+            line="491"
             column="41"/>
     </issue>
 
@@ -19829,7 +19917,7 @@
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="505"
+            line="504"
             column="47"/>
     </issue>
 
@@ -19840,7 +19928,7 @@
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="515"
+            line="514"
             column="46"/>
     </issue>
 
@@ -19851,7 +19939,7 @@
         errorLine2="                         ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="529"
+            line="528"
             column="26"/>
     </issue>
 
@@ -19862,7 +19950,7 @@
         errorLine2="           ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="539"
+            line="538"
             column="12"/>
     </issue>
 
@@ -19873,7 +19961,7 @@
         errorLine2="                                 ~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="550"
+            line="549"
             column="34"/>
     </issue>
 
@@ -19884,7 +19972,7 @@
         errorLine2="           ~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="560"
+            line="559"
             column="12"/>
     </issue>
 
@@ -19895,7 +19983,7 @@
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="572"
+            line="571"
             column="43"/>
     </issue>
 
@@ -19906,7 +19994,7 @@
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="583"
+            line="582"
             column="54"/>
     </issue>
 
@@ -19917,7 +20005,7 @@
         errorLine2="                                   ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="596"
+            line="595"
             column="36"/>
     </issue>
 
@@ -19928,7 +20016,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="607"
+            line="606"
             column="36"/>
     </issue>
 
@@ -19939,7 +20027,7 @@
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="618"
+            line="617"
             column="46"/>
     </issue>
 
@@ -19950,7 +20038,7 @@
         errorLine2="                               ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="637"
+            line="636"
             column="32"/>
     </issue>
 
@@ -19961,7 +20049,7 @@
         errorLine2="                               ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="658"
+            line="657"
             column="32"/>
     </issue>
 
@@ -19972,7 +20060,7 @@
         errorLine2="           ~~~~~~">
         <location
             file="src/main/java/androidx/leanback/app/SearchFragment.java"
-            line="680"
+            line="679"
             column="12"/>
     </issue>
 
diff --git a/legacy/core-utils/lint-baseline.xml b/legacy/core-utils/lint-baseline.xml
index e679463..7a92d66 100644
--- a/legacy/core-utils/lint-baseline.xml
+++ b/legacy/core-utils/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/lifecycle/integration-tests/testapp/lint-baseline.xml b/lifecycle/integration-tests/testapp/lint-baseline.xml
index 43ce3f8..f14a772 100644
--- a/lifecycle/integration-tests/testapp/lint-baseline.xml
+++ b/lifecycle/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/lifecycle/lifecycle-common/lint-baseline.xml b/lifecycle/lifecycle-common/lint-baseline.xml
index 19217a6..3d410e5 100644
--- a/lifecycle/lifecycle-common/lint-baseline.xml
+++ b/lifecycle/lifecycle-common/lint-baseline.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                        mMethod.invoke(target);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14,7 +14,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                        mMethod.invoke(target, source);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -25,7 +25,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                        mMethod.invoke(target, source, event);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/lifecycle/lifecycle-extensions/lint-baseline.xml b/lifecycle/lifecycle-extensions/lint-baseline.xml
index 0e44e2a..a605164 100644
--- a/lifecycle/lifecycle-extensions/lint-baseline.xml
+++ b/lifecycle/lifecycle-extensions/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="PrivateConstructorForUtilityClass"
diff --git a/lifecycle/lifecycle-livedata-core/lint-baseline.xml b/lifecycle/lifecycle-livedata-core/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/lifecycle/lifecycle-livedata-core/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/lifecycle/lifecycle-livedata-ktx/lint-baseline.xml b/lifecycle/lifecycle-livedata-ktx/lint-baseline.xml
index c7fbfe9..7fcfb02 100644
--- a/lifecycle/lifecycle-livedata-ktx/lint-baseline.xml
+++ b/lifecycle/lifecycle-livedata-ktx/lint-baseline.xml
@@ -1,5 +1,49 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `java.time.Duration#ofSeconds`"
+        errorLine1="        val ld = liveData(timeout = Duration.ofSeconds(5)) {"
+        errorLine2="                                             ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/lifecycle/BuildLiveDataTest.kt"
+            line="105"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `liveData`"
+        errorLine1="        val ld = liveData(timeout = Duration.ofSeconds(5)) {"
+        errorLine2="                 ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/lifecycle/BuildLiveDataTest.kt"
+            line="105"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `asLiveData`"
+        errorLine1="        }.asLiveData(timeout = Duration.ofSeconds(5))"
+        errorLine2="          ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/lifecycle/FlowAsLiveDataTest.kt"
+            line="150"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `java.time.Duration#ofSeconds`"
+        errorLine1="        }.asLiveData(timeout = Duration.ofSeconds(5))"
+        errorLine2="                                        ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/lifecycle/FlowAsLiveDataTest.kt"
+            line="150"
+            column="41"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
@@ -19,7 +63,7 @@
         errorLine2="                                             ~~~~~~~~">
         <location
             file="src/main/java/androidx/lifecycle/FlowLiveData.kt"
-            line="148"
+            line="150"
             column="46"/>
     </issue>
 
diff --git a/lifecycle/lifecycle-livedata/lint-baseline.xml b/lifecycle/lifecycle-livedata/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/lifecycle/lifecycle-livedata/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/lifecycle/lifecycle-process/lint-baseline.xml b/lifecycle/lifecycle-process/lint-baseline.xml
index 12b9fa8..8195350 100644
--- a/lifecycle/lifecycle-process/lint-baseline.xml
+++ b/lifecycle/lifecycle-process/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/lifecycle/lifecycle-reactivestreams/lint-baseline.xml b/lifecycle/lifecycle-reactivestreams/lint-baseline.xml
index f07a798..4cd059f 100644
--- a/lifecycle/lifecycle-reactivestreams/lint-baseline.xml
+++ b/lifecycle/lifecycle-reactivestreams/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="LambdaLast"
diff --git a/lifecycle/lifecycle-runtime/lint-baseline.xml b/lifecycle/lifecycle-runtime/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/lifecycle/lifecycle-runtime/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/lifecycle/lifecycle-viewmodel-compose/build.gradle b/lifecycle/lifecycle-viewmodel-compose/build.gradle
index a5c5dc2..3884556 100644
--- a/lifecycle/lifecycle-viewmodel-compose/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-compose/build.gradle
@@ -27,11 +27,11 @@
 }
 
 dependencies {
-    kotlinPlugin projectOrArtifact(":compose:compiler:compiler")
+    kotlinPlugin "androidx.compose.compiler:compiler:1.0.0-rc01"
 
     api "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0"
-    api projectOrArtifact(":compose:runtime:runtime")
-    api projectOrArtifact(":compose:ui:ui")
+    api "androidx.compose.runtime:runtime:1.0.0-rc01"
+    api "androidx.compose.ui:ui:1.0.0-rc01"
 
     implementation(libs.kotlinStdlib)
 
@@ -42,7 +42,7 @@
     androidTestImplementation(libs.junit)
     androidTestImplementation(libs.truth)
     androidTestImplementation "androidx.fragment:fragment:1.3.0"
-    androidTestImplementation "androidx.appcompat:appcompat:1.3.0-beta01"
+    androidTestImplementation "androidx.appcompat:appcompat:1.3.0"
     androidTestImplementation projectOrArtifact(":activity:activity-compose")
 }
 
diff --git a/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle b/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
index eafcfad..21b9220 100644
--- a/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-compose/samples/build.gradle
@@ -26,7 +26,7 @@
 }
 
 dependencies {
-    kotlinPlugin projectOrArtifact(":compose:compiler:compiler")
+    kotlinPlugin "androidx.compose.compiler:compiler:1.0.0-rc01"
     implementation(libs.kotlinStdlib)
     implementation projectOrArtifact(":lifecycle:lifecycle-viewmodel-compose")
 }
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/lint-baseline.xml b/lifecycle/lifecycle-viewmodel-savedstate/lint-baseline.xml
index 6511368..d2c3608 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/lint-baseline.xml
+++ b/lifecycle/lifecycle-viewmodel-savedstate/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="LambdaLast"
diff --git a/lint-checks/integration-tests/lint-baseline.xml b/lint-checks/integration-tests/lint-baseline.xml
deleted file mode 100644
index bc3b76a..0000000
--- a/lint-checks/integration-tests/lint-baseline.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 4.2.0-beta04" client="gradle" variant="debug" version="4.2.0-beta04">
-
-    <issue
-        id="UnknownIssueId"
-        message="Unknown issue id &quot;ComposableLambdaParameterNaming&quot;">
-        <location
-            file="build.gradle"/>
-    </issue>
-
-    <issue
-        id="UnknownIssueId"
-        message="Unknown issue id &quot;ComposableLambdaParameterPosition&quot;">
-        <location
-            file="build.gradle"/>
-    </issue>
-
-    <issue
-        id="UnknownIssueId"
-        message="Unknown issue id &quot;ComposableNaming&quot;">
-        <location
-            file="build.gradle"/>
-    </issue>
-
-    <issue
-        id="UnknownIssueId"
-        message="Unknown issue id &quot;CompositionLocalNaming&quot;">
-        <location
-            file="build.gradle"/>
-    </issue>
-
-</issues>
diff --git a/lint-checks/lint-baseline.xml b/lint-checks/lint-baseline.xml
new file mode 100644
index 0000000..78bd597
--- /dev/null
+++ b/lint-checks/lint-baseline.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="BanConcurrentHashMap"
+        message="Detected ConcurrentHashMap usage."
+        errorLine1="import java.util.concurrent.ConcurrentHashMap;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="integration-tests/src/main/java/androidx/ConcurrentHashMapUsageJava.java"
+            line="22"
+            column="1"/>
+    </issue>
+
+    <issue
+        id="BanConcurrentHashMap"
+        message="Detected ConcurrentHashMap usage."
+        errorLine1="import java.util.concurrent.ConcurrentHashMap;"
+        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="integration-tests/src/main/java/androidx/Sample.java"
+            line="19"
+            column="1"/>
+    </issue>
+
+    <issue
+        id="BanSynchronizedMethods"
+        message="Use of synchronized methods is not recommended"
+        errorLine1="    public synchronized void someMethod() {"
+        errorLine2="    ^">
+        <location
+            file="integration-tests/src/main/java/androidx/SynchronizedMethodJava.java"
+            line="22"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="IdeaSuppression"
+        message="Uses IntelliJ-specific suppression, should use `@SuppressWarnings(&quot;deprecation&quot;)`"
+        errorLine1="        //noinspection deprecation"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="integration-tests/src/main/java/androidx/IdeaSuppressionJava.java"
+            line="29"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="PrivateConstructorForUtilityClass"
+        message="Utility class is missing private constructor"
+        errorLine1="    static class DefaultInnerClass {"
+        errorLine2="                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="integration-tests/src/main/java/androidx/PrivateConstructorForUtilityClassJava.java"
+            line="37"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="PrivateConstructorForUtilityClass"
+        message="Utility class is missing private constructor"
+        errorLine1="    protected static class ProtectedInnerClass {"
+        errorLine2="                           ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="integration-tests/src/main/java/androidx/PrivateConstructorForUtilityClassJava.java"
+            line="46"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="PrivateConstructorForUtilityClass"
+        message="Utility class is missing private constructor"
+        errorLine1="    public static class PublicInnerClass {"
+        errorLine2="                        ~~~~~~~~~~~~~~~~">
+        <location
+            file="integration-tests/src/main/java/androidx/PrivateConstructorForUtilityClassJava.java"
+            line="55"
+            column="25"/>
+    </issue>
+
+</issues>
diff --git a/lint-demos/lint-demo-appcompat/lint-baseline.xml b/lint-demos/lint-demo-appcompat/lint-baseline.xml
index 9445a67..bdc3acc 100644
--- a/lint-demos/lint-demo-appcompat/lint-baseline.xml
+++ b/lint-demos/lint-demo-appcompat/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/media/media/lint-baseline.xml b/media/media/lint-baseline.xml
index 2386b46..c38d6d6 100644
--- a/media/media/lint-baseline.xml
+++ b/media/media/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="LambdaLast"
@@ -96,7 +96,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/media/AudioAttributesImplApi21.java"
-            line="42"
+            line="41"
             column="12"/>
     </issue>
 
@@ -1768,7 +1768,7 @@
         errorLine2="                            ~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="619"
+            line="621"
             column="29"/>
     </issue>
 
@@ -1779,7 +1779,7 @@
         errorLine2="                            ~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="635"
+            line="637"
             column="29"/>
     </issue>
 
@@ -1790,7 +1790,7 @@
         errorLine2="                                               ~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="635"
+            line="637"
             column="48"/>
     </issue>
 
@@ -1801,7 +1801,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="651"
+            line="653"
             column="36"/>
     </issue>
 
@@ -1812,7 +1812,7 @@
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="668"
+            line="670"
             column="40"/>
     </issue>
 
@@ -1823,7 +1823,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="710"
+            line="712"
             column="37"/>
     </issue>
 
@@ -1834,7 +1834,7 @@
         errorLine2="                                 ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="754"
+            line="756"
             column="34"/>
     </issue>
 
@@ -1845,7 +1845,7 @@
         errorLine2="                                               ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="754"
+            line="756"
             column="48"/>
     </issue>
 
@@ -1856,7 +1856,7 @@
         errorLine2="           ~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="784"
+            line="786"
             column="12"/>
     </issue>
 
@@ -1867,7 +1867,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="794"
+            line="796"
             column="12"/>
     </issue>
 
@@ -1878,7 +1878,7 @@
         errorLine2="                                 ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="803"
+            line="805"
             column="34"/>
     </issue>
 
@@ -1889,7 +1889,7 @@
         errorLine2="                            ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="815"
+            line="817"
             column="29"/>
     </issue>
 
@@ -1900,7 +1900,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="831"
+            line="833"
             column="26"/>
     </issue>
 
@@ -1911,7 +1911,7 @@
         errorLine2="                              ~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="855"
+            line="857"
             column="31"/>
     </issue>
 
@@ -1922,7 +1922,7 @@
         errorLine2="                          ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="924"
+            line="926"
             column="27"/>
     </issue>
 
@@ -1933,7 +1933,7 @@
         errorLine2="           ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="938"
+            line="940"
             column="12"/>
     </issue>
 
@@ -1944,7 +1944,7 @@
         errorLine2="           ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="952"
+            line="954"
             column="12"/>
     </issue>
 
@@ -1955,7 +1955,7 @@
         errorLine2="           ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="988"
+            line="990"
             column="12"/>
     </issue>
 
@@ -1966,7 +1966,7 @@
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="999"
+            line="1001"
             column="43"/>
     </issue>
 
@@ -1977,7 +1977,7 @@
         errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1012"
+            line="1014"
             column="46"/>
     </issue>
 
@@ -1988,7 +1988,7 @@
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1035"
+            line="1037"
             column="19"/>
     </issue>
 
@@ -1999,7 +1999,7 @@
         errorLine2="                                                      ~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1035"
+            line="1037"
             column="55"/>
     </issue>
 
@@ -2010,7 +2010,7 @@
         errorLine2="                                                                       ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1035"
+            line="1037"
             column="72"/>
     </issue>
 
@@ -2021,7 +2021,7 @@
         errorLine2="                              ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1168"
+            line="1170"
             column="31"/>
     </issue>
 
@@ -2032,7 +2032,7 @@
         errorLine2="                                              ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1168"
+            line="1170"
             column="47"/>
     </issue>
 
@@ -2043,7 +2043,7 @@
         errorLine2="                                                             ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1168"
+            line="1170"
             column="62"/>
     </issue>
 
@@ -2054,7 +2054,7 @@
         errorLine2="                                          ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1182"
+            line="1184"
             column="43"/>
     </issue>
 
@@ -2065,7 +2065,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1275"
+            line="1277"
             column="42"/>
     </issue>
 
@@ -2076,7 +2076,7 @@
         errorLine2="                                                         ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1275"
+            line="1277"
             column="58"/>
     </issue>
 
@@ -2087,7 +2087,7 @@
         errorLine2="                                        ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1285"
+            line="1287"
             column="41"/>
     </issue>
 
@@ -2098,7 +2098,7 @@
         errorLine2="                                                      ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1285"
+            line="1287"
             column="55"/>
     </issue>
 
@@ -2109,7 +2109,7 @@
         errorLine2="                                     ~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1293"
+            line="1295"
             column="38"/>
     </issue>
 
@@ -2120,7 +2120,7 @@
         errorLine2="                                              ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1293"
+            line="1295"
             column="47"/>
     </issue>
 
@@ -2131,7 +2131,7 @@
         errorLine2="                                      ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1306"
+            line="1308"
             column="39"/>
     </issue>
 
@@ -2142,7 +2142,7 @@
         errorLine2="                                                      ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1306"
+            line="1308"
             column="55"/>
     </issue>
 
@@ -2153,7 +2153,7 @@
         errorLine2="                                     ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1315"
+            line="1317"
             column="38"/>
     </issue>
 
@@ -2164,7 +2164,7 @@
         errorLine2="                                                   ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1315"
+            line="1317"
             column="52"/>
     </issue>
 
@@ -2175,7 +2175,7 @@
         errorLine2="                                  ~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1321"
+            line="1323"
             column="35"/>
     </issue>
 
@@ -2186,7 +2186,7 @@
         errorLine2="                                           ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1321"
+            line="1323"
             column="44"/>
     </issue>
 
@@ -2197,7 +2197,7 @@
         errorLine2="                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1380"
+            line="1382"
             column="33"/>
     </issue>
 
@@ -2208,7 +2208,7 @@
         errorLine2="                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1389"
+            line="1391"
             column="33"/>
     </issue>
 
@@ -2219,7 +2219,7 @@
         errorLine2="                                                     ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1389"
+            line="1391"
             column="54"/>
     </issue>
 
@@ -2230,7 +2230,7 @@
         errorLine2="                                   ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1460"
+            line="1462"
             column="36"/>
     </issue>
 
@@ -2241,7 +2241,7 @@
         errorLine2="                                                  ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1460"
+            line="1462"
             column="51"/>
     </issue>
 
@@ -2252,7 +2252,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1470"
+            line="1472"
             column="36"/>
     </issue>
 
@@ -2263,7 +2263,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1482"
+            line="1484"
             column="36"/>
     </issue>
 
@@ -2274,7 +2274,7 @@
         errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1493"
+            line="1495"
             column="39"/>
     </issue>
 
@@ -2285,7 +2285,7 @@
         errorLine2="                      ~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1954"
+            line="1956"
             column="23"/>
     </issue>
 
@@ -2296,7 +2296,7 @@
         errorLine2="                                      ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1954"
+            line="1956"
             column="39"/>
     </issue>
 
@@ -2307,7 +2307,7 @@
         errorLine2="                      ~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1972"
+            line="1974"
             column="23"/>
     </issue>
 
@@ -2318,7 +2318,7 @@
         errorLine2="                                      ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1972"
+            line="1974"
             column="39"/>
     </issue>
 
@@ -2329,7 +2329,7 @@
         errorLine2="                                                    ~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1972"
+            line="1974"
             column="53"/>
     </issue>
 
@@ -2340,7 +2340,7 @@
         errorLine2="                                  ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="1989"
+            line="1991"
             column="35"/>
     </issue>
 
@@ -2351,7 +2351,7 @@
         errorLine2="               ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2033"
+            line="2035"
             column="16"/>
     </issue>
 
@@ -2362,7 +2362,7 @@
         errorLine2="               ~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2041"
+            line="2043"
             column="16"/>
     </issue>
 
@@ -2373,7 +2373,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2051"
+            line="2053"
             column="36"/>
     </issue>
 
@@ -2384,7 +2384,7 @@
         errorLine2="               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2061"
+            line="2063"
             column="16"/>
     </issue>
 
@@ -2395,7 +2395,7 @@
         errorLine2="                                     ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2071"
+            line="2073"
             column="38"/>
     </issue>
 
@@ -2406,7 +2406,7 @@
         errorLine2="               ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2081"
+            line="2083"
             column="16"/>
     </issue>
 
@@ -2417,7 +2417,7 @@
         errorLine2="                      ~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2103"
+            line="2105"
             column="23"/>
     </issue>
 
@@ -2428,7 +2428,7 @@
         errorLine2="                                       ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2103"
+            line="2105"
             column="40"/>
     </issue>
 
@@ -2439,7 +2439,7 @@
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2158"
+            line="2160"
             column="26"/>
     </issue>
 
@@ -2450,7 +2450,7 @@
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2185"
+            line="2187"
             column="16"/>
     </issue>
 
@@ -2461,7 +2461,7 @@
         errorLine2="                                  ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2197"
+            line="2199"
             column="35"/>
     </issue>
 
@@ -2472,7 +2472,7 @@
         errorLine2="               ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2217"
+            line="2219"
             column="16"/>
     </issue>
 
@@ -2483,7 +2483,7 @@
         errorLine2="                      ~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2237"
+            line="2239"
             column="23"/>
     </issue>
 
@@ -2494,7 +2494,7 @@
         errorLine2="                                              ~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2237"
+            line="2239"
             column="47"/>
     </issue>
 
@@ -2505,7 +2505,7 @@
         errorLine2="                      ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2259"
+            line="2261"
             column="23"/>
     </issue>
 
@@ -2516,7 +2516,7 @@
         errorLine2="                                                        ~~~~~~~">
         <location
             file="src/main/java/android/support/v4/media/session/MediaSessionCompat.java"
-            line="2259"
+            line="2261"
             column="57"/>
     </issue>
 
diff --git a/media/version-compat-tests/lib/lint-baseline.xml b/media/version-compat-tests/lib/lint-baseline.xml
index 2c98d21..8c8180a 100644
--- a/media/version-compat-tests/lib/lint-baseline.xml
+++ b/media/version-compat-tests/lib/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/media2/integration-tests/testapp/lint-baseline.xml b/media2/integration-tests/testapp/lint-baseline.xml
index cfeacea..30c28ce 100644
--- a/media2/integration-tests/testapp/lint-baseline.xml
+++ b/media2/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/media2/media2-common/lint-baseline.xml b/media2/media2-common/lint-baseline.xml
index ec087a8..9156dc3 100644
--- a/media2/media2-common/lint-baseline.xml
+++ b/media2/media2-common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/media2/media2-player/lint-baseline.xml b/media2/media2-player/lint-baseline.xml
index 04da466..c4628b9 100644
--- a/media2/media2-player/lint-baseline.xml
+++ b/media2/media2-player/lint-baseline.xml
@@ -1,5 +1,115 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 16): `android.app.Activity#setTurnScreenOn`"
+        errorLine1="                mActivity.setTurnScreenOn(true);"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayer2DrmTestBase.java"
+            line="111"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 16): `android.app.Activity#setShowWhenLocked`"
+        errorLine1="                mActivity.setShowWhenLocked(true);"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayer2DrmTestBase.java"
+            line="112"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 16): `android.app.KeyguardManager#requestDismissKeyguard`"
+        errorLine1="                mKeyguardManager.requestDismissKeyguard(mActivity, null);"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayer2DrmTestBase.java"
+            line="113"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 16): `android.media.MediaDrm.KeyRequest#getData`"
+        errorLine1="        if (0 == getKeyIds(keyRequest.getData(), keyIds)) {"
+        errorLine2="                                      ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayer2DrmTestBase.java"
+            line="874"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 16): `android.app.Activity#setTurnScreenOn`"
+        errorLine1="                mActivity.setTurnScreenOn(true);"
+        errorLine2="                          ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayerDrmTest.java"
+            line="129"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 16): `android.app.Activity#setShowWhenLocked`"
+        errorLine1="                mActivity.setShowWhenLocked(true);"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayerDrmTest.java"
+            line="130"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 16): `android.app.KeyguardManager#requestDismissKeyguard`"
+        errorLine1="                mKeyguardManager.requestDismissKeyguard(mActivity, null);"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayerDrmTest.java"
+            line="131"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 16): `android.media.MediaDrm.KeyRequest#getData`"
+        errorLine1="        if (0 == getKeyIds(keyRequest.getData(), keyIds)) {"
+        errorLine2="                                      ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/player/MediaPlayerDrmTest.java"
+            line="955"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: BaseResult.RESULT_SUCCESS, DrmResult.RESULT_ERROR_PROVISIONING_NETWORK_ERROR, DrmResult.RESULT_ERROR_PROVISIONING_SERVER_ERROR, DrmResult.RESULT_ERROR_PREPARATION_ERROR, DrmResult.RESULT_ERROR_UNSUPPORTED_SCHEME, DrmResult.RESULT_ERROR_RESOURCE_BUSY"
+        errorLine1="            return super.getResultCode();"
+        errorLine2="                   ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/player/MediaPlayer.java"
+            line="3859"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT, PlaybackParams.AUDIO_FALLBACK_MODE_MUTE, PlaybackParams.AUDIO_FALLBACK_MODE_FAIL"
+        errorLine1="                return mPlaybackParams.getAudioFallbackMode();"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/player/PlaybackParams.java"
+            line="115"
+            column="24"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
@@ -47,7 +157,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            return (FileDescriptor) method.invoke(object, fileDescriptor);"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -58,7 +168,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            method.invoke(object, fileDescriptor, position, /* whence= */ SEEK_SET);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -69,7 +179,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            return (FileDescriptor) method.invoke(object, fileDescriptor);"
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/media2/media2-session/lint-baseline.xml b/media2/media2-session/lint-baseline.xml
index a781bd7..5213005 100644
--- a/media2/media2-session/lint-baseline.xml
+++ b/media2/media2-session/lint-baseline.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: SessionResult.RESULT_SUCCESS, BaseResult.RESULT_ERROR_UNKNOWN, BaseResult.RESULT_ERROR_INVALID_STATE, BaseResult.RESULT_ERROR_BAD_VALUE, BaseResult.RESULT_ERROR_PERMISSION_DENIED, BaseResult.RESULT_ERROR_IO, BaseResult.RESULT_INFO_SKIPPED, RemoteResult.RESULT_ERROR_SESSION_DISCONNECTED, BaseResult.RESULT_ERROR_NOT_SUPPORTED, RemoteResult.RESULT_ERROR_SESSION_AUTHENTICATION_EXPIRED, RemoteResult.RESULT_ERROR_SESSION_PREMIUM_ACCOUNT_REQUIRED, RemoteResult.RESULT_ERROR_SESSION_CONCURRENT_STREAM_LIMIT, RemoteResult.RESULT_ERROR_SESSION_PARENTAL_CONTROL_RESTRICTED, RemoteResult.RESULT_ERROR_SESSION_NOT_AVAILABLE_IN_REGION, RemoteResult.RESULT_ERROR_SESSION_SKIP_LIMIT_REACHED, RemoteResult.RESULT_ERROR_SESSION_SETUP_REQUIRED"
+        errorLine1="        return new SessionResult(result.getResultCode(), null, result.getMediaItem(),"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/media2/session/SessionResult.java"
+            line="134"
+            column="34"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/media2/media2-session/version-compat-tests/common/lint-baseline.xml b/media2/media2-session/version-compat-tests/common/lint-baseline.xml
index e82d8f6..c001098 100644
--- a/media2/media2-session/version-compat-tests/common/lint-baseline.xml
+++ b/media2/media2-session/version-compat-tests/common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/media2/media2-session/version-compat-tests/current/service/lint-baseline.xml b/media2/media2-session/version-compat-tests/current/service/lint-baseline.xml
new file mode 100644
index 0000000..ef32285
--- /dev/null
+++ b/media2/media2-session/version-compat-tests/current/service/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 16): `java.util.Objects#equals`"
+        errorLine1="                    if (Objects.equals(mediaId, list.get(i))) {"
+        errorLine2="                                ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/test/service/tests/MediaSessionCallbackTest.java"
+            line="166"
+            column="33"/>
+    </issue>
+
+</issues>
diff --git a/media2/media2-session/version-compat-tests/previous/service/lint-baseline.xml b/media2/media2-session/version-compat-tests/previous/service/lint-baseline.xml
new file mode 100644
index 0000000..f350fcf
--- /dev/null
+++ b/media2/media2-session/version-compat-tests/previous/service/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 19): `getInstance`"
+        errorLine1="        MediaSessionManager sessionManager = MediaSessionManager.getInstance(mContext);"
+        errorLine2="                                                                 ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/test/service/tests/MediaSessionManagerTest.java"
+            line="63"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 19): `getSessionServiceTokens`"
+        errorLine1="        Set&lt;SessionToken> serviceTokens = sessionManager.getSessionServiceTokens();"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/test/service/tests/MediaSessionManagerTest.java"
+            line="64"
+            column="58"/>
+    </issue>
+
+</issues>
diff --git a/media2/media2-widget/lint-baseline.xml b/media2/media2-widget/lint-baseline.xml
index 314a6af..ac04ba9 100644
--- a/media2/media2-widget/lint-baseline.xml
+++ b/media2/media2-widget/lint-baseline.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 24 (current min is 16): `android.view.PixelCopy.OnPixelCopyFinishedListener`"
+        errorLine1="                    PixelCopy.request(source, dest, new PixelCopy.OnPixelCopyFinishedListener() {"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/media2/widget/VideoView_WithPlayerTest.java"
+            line="478"
+            column="57"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/mediarouter/mediarouter/lint-baseline.xml b/mediarouter/mediarouter/lint-baseline.xml
index 7aa92ae..da2befa 100644
--- a/mediarouter/mediarouter/lint-baseline.xml
+++ b/mediarouter/mediarouter/lint-baseline.xml
@@ -1,9 +1,31 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 14): `android.app.Activity#setTurnScreenOn`"
+        errorLine1="        setTurnScreenOn(true);"
+        errorLine2="        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/mediarouter/media/MediaRouter2TestActivity.java"
+            line="47"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 14): `android.app.Activity#setShowWhenLocked`"
+        errorLine1="        setShowWhenLocked(true);"
+        errorLine2="        ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/mediarouter/media/MediaRouter2TestActivity.java"
+            line="48"
+            column="9"/>
+    </issue>
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                        mSelectRouteIntMethod.invoke(router, types, route);"
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14,7 +36,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    return mGetSystemAudioRouteMethod.invoke(router);"
         errorLine2="                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -25,7 +47,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mScanWifiDisplaysMethod.invoke(mDisplayManager);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -36,7 +58,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    int statusCode = (Integer)mGetStatusCodeMethod.invoke(route);"
         errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -52,7 +74,7 @@
         errorLine2="                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="377"
+            line="383"
             column="48"/>
     </issue>
 
@@ -63,7 +85,7 @@
         errorLine2="                                                                     ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="380"
+            line="386"
             column="70"/>
     </issue>
 
@@ -74,7 +96,7 @@
         errorLine2="                                                       ~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="386"
+            line="392"
             column="56"/>
     </issue>
 
@@ -85,7 +107,7 @@
         errorLine2="                               ~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="482"
+            line="488"
             column="32"/>
     </issue>
 
@@ -96,7 +118,7 @@
         errorLine2="                                                                          ~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="492"
+            line="498"
             column="75"/>
     </issue>
 
@@ -107,7 +129,7 @@
         errorLine2="                                       ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="495"
+            line="501"
             column="40"/>
     </issue>
 
@@ -118,7 +140,7 @@
         errorLine2="                               ~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="496"
+            line="502"
             column="32"/>
     </issue>
 
@@ -129,7 +151,7 @@
         errorLine2="                                                                 ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="502"
+            line="508"
             column="66"/>
     </issue>
 
@@ -140,7 +162,7 @@
         errorLine2="                               ~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="530"
+            line="536"
             column="32"/>
     </issue>
 
@@ -151,7 +173,7 @@
         errorLine2="                          ~~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="548"
+            line="554"
             column="27"/>
     </issue>
 
@@ -162,7 +184,7 @@
         errorLine2="                               ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="564"
+            line="570"
             column="32"/>
     </issue>
 
@@ -173,7 +195,7 @@
         errorLine2="                               ~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/mediarouter/media/MediaRoute2Provider.java"
-            line="580"
+            line="586"
             column="32"/>
     </issue>
 
diff --git a/navigation/integration-tests/testapp/lint-baseline.xml b/navigation/integration-tests/testapp/lint-baseline.xml
index d11926b..5142aa3 100644
--- a/navigation/integration-tests/testapp/lint-baseline.xml
+++ b/navigation/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/navigation/navigation-common/proguard-rules.pro b/navigation/navigation-common/proguard-rules.pro
index d633c02..cb2c1b8 100644
--- a/navigation/navigation-common/proguard-rules.pro
+++ b/navigation/navigation-common/proguard-rules.pro
@@ -17,3 +17,12 @@
 -keepclassmembers public class <1> {
     ** fromBundle(android.os.Bundle);
 }
+
+# Retain the @Navigator.Name annotation on each subclass of Navigator.
+# R8 full mode only retains annotations on items matched by a -keep rule,
+# hence the extra -keep rule for the subclasses of Navigator.
+#
+# A -keep rule for the Navigator.Name annotation class is not required
+# since the annotation is referenced from the code.
+-keepattributes RuntimeVisibleAnnotations
+-keep,allowobfuscation,allowshrinking class * extends androidx.navigation.Navigator
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt
index 8ab7f8e..7d4f7a3 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt
@@ -109,7 +109,7 @@
 
         destination.addDeepLink("www.example.com/users/index.html")
 
-        destination.addArgument("id", stringArgument())
+        destination.addArgument("name", stringArgument())
         destination.addDeepLink("www.example.com/users/{name}")
 
         val match = destination.matchDeepLink(
@@ -125,6 +125,31 @@
     }
 
     @Test
+    fun matchDeepLinkBestMatchExactWithQuery() {
+        val destination = NoOpNavigator().createDestination()
+
+        destination.addArgument("tab", stringArgument())
+        destination.addDeepLink("www.example.com/users/anonymous?tab={tab}")
+
+        destination.addArgument("name", stringArgument())
+        destination.addDeepLink("www.example.com/users/{name}?tab={tab}")
+
+        val match = destination.matchDeepLink(
+            Uri.parse("https://www.example.com/users/anonymous?tab=favorite")
+        )
+
+        assertWithMessage("Deep link should match")
+            .that(match)
+            .isNotNull()
+        assertWithMessage("Deep link should pick the exact match with query")
+            .that(match?.matchingArgs?.size())
+            .isEqualTo(1)
+        assertWithMessage("Deep link should extract tab argument correctly")
+            .that(match?.matchingArgs?.getString("tab"))
+            .isEqualTo("favorite")
+    }
+
+    @Test
     fun matchDotStar() {
         val destination = NoOpNavigator().createDestination()
 
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt
index 13ec744..45f051f 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavDeepLink.kt
@@ -386,13 +386,12 @@
             if (isParameterizedQuery) {
                 var matcher = Pattern.compile("(\\?)").matcher(uriPattern)
                 if (matcher.find()) {
-                    buildPathRegex(
+                    isExactDeepLink = buildPathRegex(
                         uriPattern.substring(0, matcher.start()),
                         uriRegex,
                         fillInPattern
                     )
                 }
-                isExactDeepLink = false
                 for (paramName in parameterizedUri.queryParameterNames) {
                     val argRegex = StringBuilder()
                     val queryParam = parameterizedUri.getQueryParameter(paramName) as String
diff --git a/navigation/navigation-compose/build.gradle b/navigation/navigation-compose/build.gradle
index 5d94ce2c..f9eda4f 100644
--- a/navigation/navigation-compose/build.gradle
+++ b/navigation/navigation-compose/build.gradle
@@ -26,15 +26,15 @@
 }
 
 dependencies {
-    kotlinPlugin(projectOrArtifact(":compose:compiler:compiler"))
+    kotlinPlugin("androidx.compose.compiler:compiler:1.0.0-rc01")
 
     implementation(libs.kotlinStdlib)
-    implementation(projectOrArtifact(":compose:foundation:foundation-layout"))
-    api(projectOrArtifact(":activity:activity-compose"))
-    api(projectOrArtifact(":compose:runtime:runtime"))
-    api(projectOrArtifact(":compose:runtime:runtime-saveable"))
-    api(projectOrArtifact(":compose:ui:ui"))
-    api(projectOrArtifact(":lifecycle:lifecycle-viewmodel-compose"))
+    implementation("androidx.compose.foundation:foundation-layout:1.0.0-rc01")
+    api("androidx.activity:activity-compose:1.3.0-rc01")
+    api("androidx.compose.runtime:runtime:1.0.0-rc01")
+    api("androidx.compose.runtime:runtime-saveable:1.0.0-rc01")
+    api("androidx.compose.ui:ui:1.0.0-rc01")
+    api("androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07")
     api(projectOrArtifact(":navigation:navigation-runtime-ktx"))
 
     androidTestImplementation(projectOrArtifact(":compose:material:material"))
diff --git a/navigation/navigation-compose/samples/build.gradle b/navigation/navigation-compose/samples/build.gradle
index ddd9eed..7c4732c 100644
--- a/navigation/navigation-compose/samples/build.gradle
+++ b/navigation/navigation-compose/samples/build.gradle
@@ -25,13 +25,13 @@
 }
 
 dependencies {
-    kotlinPlugin(projectOrArtifact(":compose:compiler:compiler"))
+    kotlinPlugin("androidx.compose.compiler:compiler:1.0.0-rc01")
     implementation(libs.kotlinStdlib)
 
     compileOnly(projectOrArtifact(":annotation:annotation-sampled"))
-    implementation(projectOrArtifact(":compose:foundation:foundation"))
+    implementation("androidx.compose.foundation:foundation:1.0.0-rc01")
     implementation(projectOrArtifact(":navigation:navigation-compose"))
-    implementation(projectOrArtifact(":compose:material:material"))
+    implementation("androidx.compose.material:material:1.0.0-rc01")
 }
 
 androidx {
diff --git a/navigation/navigation-dynamic-features-fragment/lint-baseline.xml b/navigation/navigation-dynamic-features-fragment/lint-baseline.xml
deleted file mode 100644
index 236c5d8..0000000
--- a/navigation/navigation-dynamic-features-fragment/lint-baseline.xml
+++ /dev/null
@@ -1,312 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-alpha01" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha01">
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="InvalidFragmentVersionForActivityResult"
-        message="Upgrade Fragment version to at least 1.3.0."
-        errorLine1="    private val intentSenderLauncher = registerForActivityResult("
-        errorLine2="                                       ^">
-        <location
-            file="src/main/java/androidx/navigation/dynamicfeatures/fragment/ui/AbstractProgressFragment.kt"
-            line="70"
-            column="40"/>
-    </issue>
-
-</issues>
diff --git a/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt b/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
index 5aae1a0..fa7152d 100644
--- a/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
+++ b/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
@@ -661,6 +661,103 @@
 
         job.cancel()
     }
+
+    @Test
+    fun loadStateFlowSynchronouslyUpdates() = testScope.runBlockingTest {
+        val differ = SimpleDiffer(dummyDifferCallback)
+        var combinedLoadStates: CombinedLoadStates? = null
+        var itemCount = -1
+        val loadStateJob = launch {
+            differ.loadStateFlow.collect {
+                combinedLoadStates = it
+                itemCount = differ.size
+            }
+        }
+
+        val pager = Pager(
+            config = PagingConfig(
+                pageSize = 10,
+                enablePlaceholders = false,
+                initialLoadSize = 10,
+                prefetchDistance = 1
+            ),
+            initialKey = 50
+        ) { TestPagingSource() }
+        val job = launch {
+            pager.flow.collectLatest { differ.collectFrom(it) }
+        }
+
+        // Initial refresh
+        advanceUntilIdle()
+        assertEquals(localLoadStatesOf(), combinedLoadStates)
+        assertEquals(10, itemCount)
+        assertEquals(10, differ.size)
+
+        // Append
+        differ[9]
+        advanceUntilIdle()
+        assertEquals(localLoadStatesOf(), combinedLoadStates)
+        assertEquals(20, itemCount)
+        assertEquals(20, differ.size)
+
+        // Prepend
+        differ[0]
+        advanceUntilIdle()
+        assertEquals(localLoadStatesOf(), combinedLoadStates)
+        assertEquals(30, itemCount)
+        assertEquals(30, differ.size)
+
+        job.cancel()
+        loadStateJob.cancel()
+    }
+
+    @Test
+    fun loadStateListenerSynchronouslyUpdates() = testScope.runBlockingTest {
+        val differ = SimpleDiffer(dummyDifferCallback)
+        pauseDispatcher {
+            var combinedLoadStates: CombinedLoadStates? = null
+            var itemCount = -1
+            differ.addLoadStateListener {
+                combinedLoadStates = it
+                itemCount = differ.size
+            }
+
+            val pager = Pager(
+                config = PagingConfig(
+                    pageSize = 10,
+                    enablePlaceholders = false,
+                    initialLoadSize = 10,
+                    prefetchDistance = 1
+                ),
+                initialKey = 50
+            ) { TestPagingSource() }
+            val job = launch {
+                pager.flow.collectLatest { differ.collectFrom(it) }
+            }
+
+            // Initial refresh
+            advanceUntilIdle()
+            assertEquals(localLoadStatesOf(), combinedLoadStates)
+            assertEquals(10, itemCount)
+            assertEquals(10, differ.size)
+
+            // Append
+            differ[9]
+            advanceUntilIdle()
+            assertEquals(localLoadStatesOf(), combinedLoadStates)
+            assertEquals(20, itemCount)
+            assertEquals(20, differ.size)
+
+            // Prepend
+            differ[0]
+            advanceUntilIdle()
+            assertEquals(localLoadStatesOf(), combinedLoadStates)
+            assertEquals(30, itemCount)
+            assertEquals(30, differ.size)
+
+            job.cancel()
+        }
+    }
 }
 
 private fun infinitelySuspendingPagingData(receiver: UiReceiver = dummyReceiver) = PagingData(
diff --git a/paging/integration-tests/testapp/lint-baseline.xml b/paging/integration-tests/testapp/lint-baseline.xml
index 647083f..3fc83c7 100644
--- a/paging/integration-tests/testapp/lint-baseline.xml
+++ b/paging/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/paging/paging-compose/build.gradle b/paging/paging-compose/build.gradle
index f6892b8..7f8f452 100644
--- a/paging/paging-compose/build.gradle
+++ b/paging/paging-compose/build.gradle
@@ -28,10 +28,10 @@
 }
 
 dependencies {
-    kotlinPlugin(projectOrArtifact(":compose:compiler:compiler"))
+    kotlinPlugin("androidx.compose.compiler:compiler:1.0.0-rc01")
 
     implementation(libs.kotlinStdlib)
-    api(projectOrArtifact(":compose:foundation:foundation"))
+    api("androidx.compose.foundation:foundation:1.0.0-rc01")
     api("androidx.paging:paging-common:3.0.0")
 
     androidTestImplementation(projectOrArtifact(":compose:ui:ui-test-junit4"))
diff --git a/paging/paging-compose/samples/build.gradle b/paging/paging-compose/samples/build.gradle
index 7d9fa7d..842b182 100644
--- a/paging/paging-compose/samples/build.gradle
+++ b/paging/paging-compose/samples/build.gradle
@@ -26,12 +26,12 @@
 }
 
 dependencies {
-    kotlinPlugin(projectOrArtifact(":compose:compiler:compiler"))
+    kotlinPlugin("androidx.compose.compiler:compiler:1.0.0-rc01")
     implementation(libs.kotlinStdlib)
 
     compileOnly(projectOrArtifact(":annotation:annotation-sampled"))
-    implementation(projectOrArtifact(":compose:foundation:foundation"))
-    implementation(projectOrArtifact(":compose:material:material"))
+    implementation("androidx.compose.foundation:foundation:1.0.0-rc01")
+    implementation("androidx.compose.material:material:1.0.0-rc01")
     implementation(projectOrArtifact(":paging:paging-compose"))
 }
 
diff --git a/paging/runtime/lint-baseline.xml b/paging/runtime/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/paging/runtime/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/paging/runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt b/paging/runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
index 18a7c6a6..43c6c6a 100644
--- a/paging/runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
+++ b/paging/runtime/src/main/java/androidx/paging/AsyncPagingDataDiffer.kt
@@ -126,10 +126,6 @@
      * Present a [PagingData] until it is invalidated by a call to [refresh] or
      * [PagingSource.invalidate].
      *
-     * [submitData] should be called on the same [CoroutineDispatcher] where updates will be
-     * dispatched to UI, typically [Dispatchers.Main]. (this is done for you if you use
-     * `lifecycleScope.launch {}`).
-     *
      * This method is typically used when collecting from a [Flow][kotlinx.coroutines.flow.Flow]
      * produced by [Pager]. For RxJava or LiveData support, use the non-suspending overload of
      * [submitData], which accepts a [Lifecycle].
@@ -140,7 +136,6 @@
      * up-to-date representation of your backing dataset should typically be done using
      * [collectLatest][kotlinx.coroutines.flow.collectLatest].
      *
-     *
      * @see [Pager]
      */
     suspend fun submitData(pagingData: PagingData<T>) {
diff --git a/paging/runtime/src/main/java/androidx/paging/PagingDataAdapter.kt b/paging/runtime/src/main/java/androidx/paging/PagingDataAdapter.kt
index 1541f6b..50e53e1 100644
--- a/paging/runtime/src/main/java/androidx/paging/PagingDataAdapter.kt
+++ b/paging/runtime/src/main/java/androidx/paging/PagingDataAdapter.kt
@@ -150,10 +150,6 @@
      * Present a [PagingData] until it is invalidated by a call to [refresh] or
      * [PagingSource.invalidate].
      *
-     * [submitData] should be called on the same [CoroutineDispatcher] where updates will be
-     * dispatched to UI, typically [Dispatchers.Main] (this is done for you if you use
-     * `lifecycleScope.launch {}`).
-     *
      * This method is typically used when collecting from a [Flow] produced by [Pager]. For RxJava
      * or LiveData support, use the non-suspending overload of [submitData], which accepts a
      * [Lifecycle].
diff --git a/percentlayout/percentlayout/lint-baseline.xml b/percentlayout/percentlayout/lint-baseline.xml
index e39961e..b80b520 100644
--- a/percentlayout/percentlayout/lint-baseline.xml
+++ b/percentlayout/percentlayout/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/playground-common/playground.properties b/playground-common/playground.properties
index dac9b6d..0ad15fc 100644
--- a/playground-common/playground.properties
+++ b/playground-common/playground.properties
@@ -26,7 +26,7 @@
 kotlin.code.style=official
 # Disable docs
 androidx.enableDocumentation=false
-androidx.playground.snapshotBuildId=7456910
+androidx.playground.snapshotBuildId=7483173
 androidx.playground.metalavaBuildId=7255182
 androidx.playground.dokkaBuildId=7299536
 androidx.studio.type=playground
diff --git a/preference/preference/lint-baseline.xml b/preference/preference/lint-baseline.xml
index df5ab01..d324f8d 100644
--- a/preference/preference/lint-baseline.xml
+++ b/preference/preference/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/print/print/lint-baseline.xml b/print/print/lint-baseline.xml
index e0ec659..f71eab4 100644
--- a/print/print/lint-baseline.xml
+++ b/print/print/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/profileinstaller/integration-tests/init-macrobenchmark/lint-baseline.xml b/profileinstaller/integration-tests/init-macrobenchmark/lint-baseline.xml
new file mode 100644
index 0000000..ac749c4
--- /dev/null
+++ b/profileinstaller/integration-tests/init-macrobenchmark/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `MacrobenchmarkRule`"
+        errorLine1="    val benchmarkRule = MacrobenchmarkRule()"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/profileinstaller/integration/macrobenchmark/ProfileinstallerStartupBenchmark.kt"
+            line="37"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 28): `measureStartup`"
+        errorLine1="    fun startup() = benchmarkRule.measureStartup("
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/profileinstaller/integration/macrobenchmark/ProfileinstallerStartupBenchmark.kt"
+            line="40"
+            column="35"/>
+    </issue>
+
+</issues>
diff --git a/profileinstaller/profileinstaller/lint-baseline.xml b/profileinstaller/profileinstaller/lint-baseline.xml
new file mode 100644
index 0000000..01be5fb
--- /dev/null
+++ b/profileinstaller/profileinstaller/lint-baseline.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `MAGIC`"
+        errorLine1="            expectBytes(is, MAGIC);"
+        errorLine2="                            ~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="46"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `readProfile`"
+        errorLine1="            Map&lt;String, DexProfileData> data = ProfileTranscoder.readProfile(is, version);"
+        errorLine2="                                                                 ~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="48"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `readHeader`"
+        errorLine1="            byte[] version = ProfileTranscoder.readHeader(is);"
+        errorLine2="                                               ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="97"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `writeHeader`"
+        errorLine1="            ProfileTranscoder.writeHeader(os, desiredVersion);"
+        errorLine2="                              ~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="98"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `readProfile`"
+        errorLine1="                Map&lt;String, DexProfileData> data = ProfileTranscoder.readProfile("
+        errorLine2="                                                                     ~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="100"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `transcodeAndWriteBody`"
+        errorLine1="                ProfileTranscoder.transcodeAndWriteBody(os, desiredVersion, data);"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="104"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `writeAll`"
+        errorLine1="                Encoding.writeAll(is, os);"
+        errorLine2="                         ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="106"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `java.io.File#toPath`"
+        errorLine1="            byte[] goldenBytes = Files.readAllBytes(golden.toPath());"
+        errorLine2="                                                           ~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="108"
+            column="60"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `java.nio.file.Files#readAllBytes`"
+        errorLine1="            byte[] goldenBytes = Files.readAllBytes(golden.toPath());"
+        errorLine2="                                       ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="108"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `read`"
+        errorLine1="        byte[] actual = Encoding.read(is, bytes.length);"
+        errorLine2="                                 ~~~~">
+        <location
+            file="src/test/java/androidx/profileinstaller/ProfileTranscoderTests.java"
+            line="116"
+            column="34"/>
+    </issue>
+
+</issues>
diff --git a/recommendation/recommendation/lint-baseline.xml b/recommendation/recommendation/lint-baseline.xml
index 3d898bf..0cb64d6 100644
--- a/recommendation/recommendation/lint-baseline.xml
+++ b/recommendation/recommendation/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/recyclerview/recyclerview-selection/lint-baseline.xml b/recyclerview/recyclerview-selection/lint-baseline.xml
index b706440..17a04c0 100644
--- a/recyclerview/recyclerview-selection/lint-baseline.xml
+++ b/recyclerview/recyclerview-selection/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/recyclerview/recyclerview/lint-baseline.xml b/recyclerview/recyclerview/lint-baseline.xml
index 3f8be2c..2499392 100644
--- a/recyclerview/recyclerview/lint-baseline.xml
+++ b/recyclerview/recyclerview/lint-baseline.xml
@@ -1,5 +1,115 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `new android.view.View`"
+        errorLine1="            super(context, attrs, defStyleAttr, defStyleRes);"
+        errorLine2="            ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/recyclerview/widget/BaseWrapContentWithAspectRatioTest.java"
+            line="75"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Map#getOrDefault`"
+        errorLine1="            } else if (duplicateDiffs.getOrDefault(after[index].id, 0) > 0 &amp;&amp; item.newItem) {"
+        errorLine2="                                      ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt"
+            line="503"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Map#getOrDefault`"
+        errorLine1="            duplicateDiffs[it.id] = 1 + duplicateDiffs.getOrDefault(it.id, 1)"
+        errorLine2="                                                       ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt"
+            line="549"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Map#getOrDefault`"
+        errorLine1="            duplicateDiffs[it.id] = -1 + duplicateDiffs.getOrDefault(it.id, 0)"
+        errorLine2="                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/recyclerview/widget/DiffUtilTest.kt"
+            line="552"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.view.View#isScrollContainer`"
+        errorLine1="                + &quot;handle it properly&quot;, true, mRecyclerView.isScrollContainer());"
+        errorLine2="                                                            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/recyclerview/widget/RecyclerViewBasicTest.java"
+            line="105"
+            column="61"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.View#setLayoutDirection`"
+        errorLine1="            mRecyclerView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/recyclerview/widget/RecyclerViewFocusTest.java"
+            line="239"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `new android.widget.FrameLayout`"
+        errorLine1="        super(context, attrs, defStyleAttr, defStyleRes);"
+        errorLine2="        ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/recyclerview/widget/TestContentView.java"
+            line="53"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.view.View#getMinimumWidth`"
+        errorLine1="                            getMinimumWidth()),"
+        errorLine2="                            ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/recyclerview/widget/TestedFrameLayout.java"
+            line="108"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.view.View#getMinimumHeight`"
+        errorLine1="                            getMinimumHeight()));"
+        errorLine2="                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/recyclerview/widget/TestedFrameLayout.java"
+            line="111"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `new android.widget.FrameLayout.LayoutParams`"
+        errorLine1="            super(source);"
+        errorLine2="            ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/recyclerview/widget/TestedFrameLayout.java"
+            line="283"
+            column="13"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/remotecallback/processor/lint-baseline.xml b/remotecallback/processor/lint-baseline.xml
index 3b674ab..c191b4f 100644
--- a/remotecallback/processor/lint-baseline.xml
+++ b/remotecallback/processor/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/remotecallback/remotecallback/lint-baseline.xml b/remotecallback/remotecallback/lint-baseline.xml
index 7c9f849..bbc44f4 100644
--- a/remotecallback/remotecallback/lint-baseline.xml
+++ b/remotecallback/remotecallback/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="LambdaLast"
diff --git a/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/InspectionCompanionGeneration.kt b/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/InspectionCompanionGeneration.kt
index 7cfda87..22ca3db 100644
--- a/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/InspectionCompanionGeneration.kt
+++ b/resourceinspection/resourceinspection-processor/src/main/kotlin/androidx/resourceinspection/processor/InspectionCompanionGeneration.kt
@@ -100,6 +100,8 @@
                         )
                     }
                 }
+
+                addStatement("mPropertiesMapped = true")
             }.build()
         )
 
diff --git a/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt b/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt
index 5f77c43..4505f58 100644
--- a/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt
+++ b/resourceinspection/resourceinspection-processor/src/test/kotlin/androidx/resourceinspection/processor/ResourceInspectionProcessorTest.kt
@@ -88,6 +88,7 @@
                     public void mapProperties(@NonNull PropertyMapper propertyMapper) {
                         mTestAttributeId = propertyMapper.mapInt(
                             "testAttribute", R.attr.testAttribute);
+                        mPropertiesMapped = true;
                     }
 
                     @Override
@@ -184,6 +185,7 @@
                             public void mapProperties(@NonNull PropertyMapper propertyMapper) {
                                 mColorId = propertyMapper.mapColor("color", android.R.attr.color);
                                 mColorId_ = propertyMapper.mapColor("color", R.attr.color);
+                                mPropertiesMapped = true;
                             }
 
                             @Override
@@ -409,6 +411,7 @@
                                     .mapShort("testShort", R.attr.testShort);
                                 mTestStringId = propertyMapper
                                     .mapObject("testString", R.attr.testString);
+                                mPropertiesMapped = true;
                             }
 
                             @Override
@@ -561,6 +564,7 @@
                                         }
                                     }
                                 );
+                                mPropertiesMapped = true;
                             }
 
                             @Override
@@ -672,6 +676,7 @@
                                         }
                                     }
                                 );
+                                mPropertiesMapped = true;
                             }
 
                             @Override
@@ -955,6 +960,7 @@
                                 .mapObject("backgroundTint", R.attr.backgroundTint);
                             mBackgroundTintModeId = propertyMapper
                                 .mapObject("backgroundTintMode", R.attr.backgroundTintMode);
+                            mPropertiesMapped = true;
                         }
 
                         @Override
@@ -1069,6 +1075,7 @@
                                     }
                                 }
                             );
+                            mPropertiesMapped = true;
                         }
 
                         @Override
@@ -1163,6 +1170,7 @@
                                 .mapObject("checkMarkTint", R.attr.checkMarkTint);
                             mCheckMarkTintModeId = propertyMapper
                                 .mapObject("checkMarkTintMode", R.attr.checkMarkTintMode);
+                            mPropertiesMapped = true;
                         }
 
                         @Override
@@ -1251,6 +1259,7 @@
                                 .mapObject("buttonTint", R.attr.buttonTint);
                             mButtonTintModeId = propertyMapper
                                 .mapObject("buttonTintMode", R.attr.buttonTintMode);
+                            mPropertiesMapped = true;
                         }
 
                         @Override
@@ -1339,6 +1348,7 @@
                                 .mapObject("drawableTint", R.attr.drawableTint);
                             mDrawableTintModeId = propertyMapper
                                 .mapObject("drawableTintMode", R.attr.drawableTintMode);
+                            mPropertiesMapped = true;
                         }
 
                         @Override
@@ -1425,6 +1435,7 @@
                         public void mapProperties(@NonNull PropertyMapper propertyMapper) {
                             mTintId = propertyMapper.mapObject("tint", R.attr.tint);
                             mTintModeId = propertyMapper.mapObject("tintMode", R.attr.tintMode);
+                            mPropertiesMapped = true;
                         }
 
                         @Override
diff --git a/room/integration-tests/testapp/build.gradle b/room/integration-tests/testapp/build.gradle
index 34e790d..864deb5 100644
--- a/room/integration-tests/testapp/build.gradle
+++ b/room/integration-tests/testapp/build.gradle
@@ -80,6 +80,9 @@
     implementation(projectOrArtifact(":lifecycle:lifecycle-runtime"))
     implementation(libs.multidex)
 
+    // Workaround for b/191286558.
+    implementation(project(":annotation:annotation-experimental"))
+
     // libs.findbugs dependency resolves an app/testapp version conflict.
     implementation(libs.findbugs)
     implementation("androidx.recyclerview:recyclerview:1.0.0")
diff --git a/room/integration-tests/testapp/lint-baseline.xml b/room/integration-tests/testapp/lint-baseline.xml
index 297ad6c..e8b30d0 100644
--- a/room/integration-tests/testapp/lint-baseline.xml
+++ b/room/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,203 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `LOCALIZED`"
+        errorLine1="        @ColumnInfo(collate = ColumnInfo.LOCALIZED)"
+        errorLine2="                                         ~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/CollationTest.java"
+            line="120"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `UNICODE`"
+        errorLine1="        @ColumnInfo(collate = ColumnInfo.UNICODE)"
+        errorLine2="                                         ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/CollationTest.java"
+            line="122"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#hash`"
+        errorLine1="            return Objects.hash(id, name);"
+        errorLine2="                           ~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/InvalidationTrackerTest.java"
+            line="241"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.lang.Long#hashCode`"
+        errorLine1="        int result = Long.hashCode(id);"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/vo/Product.java"
+            line="49"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#hash`"
+        errorLine1="            return Objects.hash(mId, mUsername);"
+        errorLine2="                           ~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/ProvidedTypeConverterTest.java"
+            line="229"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#hash`"
+        errorLine1="            return Objects.hash(mName, mLastName);"
+        errorLine2="                           ~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/ProvidedTypeConverterTest.java"
+            line="280"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;interrupted&quot;, e);"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/QueryTransactionTest.java"
+            line="290"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;drain timed out&quot;, e);"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/QueryTransactionTest.java"
+            line="292"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;interrupted&quot;, e);"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/QueryTransactionTest.java"
+            line="327"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `new java.lang.AssertionError`"
+        errorLine1="            throw new AssertionError(&quot;execution error&quot;, e);"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/QueryTransactionTest.java"
+            line="329"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 24): `java.util.List#of`"
+        errorLine1="        mDB.getDao().insert(new TestEntity(&quot;1&quot;, List.of(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;)));"
+        errorLine2="                                                     ~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="62"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 24): `java.util.List#of`"
+        errorLine1="        mDB.getDao().insert(new TestEntity(&quot;2&quot;, List.of(&quot;d&quot;, &quot;e&quot;, &quot;f&quot;)));"
+        errorLine2="                                                     ~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="63"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 24): `java.util.List#of`"
+        errorLine1="        mDB.getDao().insert(new TestEntity(&quot;3&quot;, List.of(&quot;g&quot;, &quot;h&quot;, &quot;i&quot;)));"
+        errorLine2="                                                     ~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="64"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 24): `java.util.List#of`"
+        errorLine1="        mDB.getDao().delete(List.of(&quot;2&quot;, &quot;3&quot;));"
+        errorLine2="                                 ~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="65"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 24): `java.util.List#of`"
+        errorLine1="        mDB.getDao().insert(new TestEntity(&quot;1&quot;, List.of(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;)));"
+        errorLine2="                                                     ~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="71"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 24): `java.util.List#of`"
+        errorLine1="        mDB.getDao().update(&quot;1&quot;, List.of(&quot;d&quot;, &quot;e&quot;, &quot;f&quot;));"
+        errorLine2="                                      ~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="72"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 24): `java.util.List#of`"
+        errorLine1="        assertThat(mDB.getDao().getAll().get(0).data).isEqualTo(List.of(&quot;d&quot;, &quot;e&quot;, &quot;f&quot;));"
+        errorLine2="                                                                     ~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="74"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 24): `java.lang.String#join`"
+        errorLine1="            return String.join(&quot;,&quot;, list);"
+        errorLine2="                          ~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/integration/testapp/test/TypeConverterPriorityTest.java"
+            line="114"
+            column="27"/>
+    </issue>
 
     <issue
         id="SyntheticAccessor"
diff --git a/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/1.json b/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/1.json
index 0477196..3ca5c0e 100644
--- a/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/1.json
+++ b/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/1.json
@@ -820,6 +820,33 @@
         },
         "indices": [],
         "foreignKeys": []
+      },
+      {
+        "tableName": "Entity27",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id27` INTEGER NOT NULL, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id27`))",
+        "fields": [
+          {
+            "fieldPath": "id27",
+            "columnName": "id27",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id27"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
       }
     ],
     "views": [
diff --git a/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/2.json b/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/2.json
index f8edc20..dfc2b4c 100644
--- a/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/2.json
+++ b/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/2.json
@@ -2,7 +2,7 @@
   "formatVersion": 1,
   "database": {
     "version": 2,
-    "identityHash": "2dee70d4b5bbc3df9701e56eedb6377c",
+    "identityHash": "e6ac760b64fa91da605ebdfefc93c88e",
     "entities": [
       {
         "tableName": "Entity1",
@@ -269,7 +269,7 @@
       },
       {
         "tableName": "Entity9",
-        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`), FOREIGN KEY(`id`) REFERENCES `Entity12`(`id`) ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED)",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
         "fields": [
           {
             "fieldPath": "id",
@@ -298,19 +298,7 @@
           "autoGenerate": false
         },
         "indices": [],
-        "foreignKeys": [
-          {
-            "table": "Entity12",
-            "onDelete": "NO ACTION",
-            "onUpdate": "NO ACTION",
-            "columns": [
-              "id"
-            ],
-            "referencedColumns": [
-              "id"
-            ]
-          }
-        ]
+        "foreignKeys": []
       },
       {
         "tableName": "Entity10",
@@ -916,6 +904,33 @@
           }
         ],
         "foreignKeys": []
+      },
+      {
+        "tableName": "Entity27",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id27` INTEGER NOT NULL, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id27`))",
+        "fields": [
+          {
+            "fieldPath": "id27",
+            "columnName": "id27",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id27"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
       }
     ],
     "views": [
@@ -926,7 +941,7 @@
     ],
     "setupQueries": [
       "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
-      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '2dee70d4b5bbc3df9701e56eedb6377c')"
+      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e6ac760b64fa91da605ebdfefc93c88e')"
     ]
   }
 }
\ No newline at end of file
diff --git a/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/3.json b/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/3.json
new file mode 100644
index 0000000..d227742
--- /dev/null
+++ b/room/integration-tests/testapp/schemas/androidx.room.integration.testapp.migration.AutoMigrationDb/3.json
@@ -0,0 +1,959 @@
+{
+  "formatVersion": 1,
+  "database": {
+    "version": 3,
+    "identityHash": "d3f9ad7159086752b95773a87757b6f6",
+    "entities": [
+      {
+        "tableName": "Entity1",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity2",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, `addedInV2` INTEGER NOT NULL DEFAULT 2, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          },
+          {
+            "fieldPath": "addedInV2",
+            "columnName": "addedInV2",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "2"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity3",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity4",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 2, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "2"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity5",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` TEXT DEFAULT '1', PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "TEXT",
+            "notNull": false,
+            "defaultValue": "'1'"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity6",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity7",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity8",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT NOT NULL, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`name`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "name"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity9",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`), FOREIGN KEY(`id`) REFERENCES `Entity27`(`id27`) ON UPDATE NO ACTION ON DELETE NO ACTION )",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": [
+          {
+            "table": "Entity27",
+            "onDelete": "NO ACTION",
+            "onUpdate": "NO ACTION",
+            "columns": [
+              "id"
+            ],
+            "referencedColumns": [
+              "id27"
+            ]
+          }
+        ]
+      },
+      {
+        "tableName": "Entity10",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`), FOREIGN KEY(`addedInV1`) REFERENCES `Entity13_V2`(`addedInV1`) ON UPDATE NO ACTION ON DELETE NO ACTION DEFERRABLE INITIALLY DEFERRED)",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [
+          {
+            "name": "index_Entity10_addedInV1",
+            "unique": true,
+            "columnNames": [
+              "addedInV1"
+            ],
+            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Entity10_addedInV1` ON `${TABLE_NAME}` (`addedInV1`)"
+          }
+        ],
+        "foreignKeys": [
+          {
+            "table": "Entity13_V2",
+            "onDelete": "NO ACTION",
+            "onUpdate": "NO ACTION",
+            "columns": [
+              "addedInV1"
+            ],
+            "referencedColumns": [
+              "addedInV1"
+            ]
+          }
+        ]
+      },
+      {
+        "tableName": "Entity11",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity12",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [
+          {
+            "name": "index_Entity12_name",
+            "unique": true,
+            "columnNames": [
+              "name"
+            ],
+            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Entity12_name` ON `${TABLE_NAME}` (`name`)"
+          }
+        ],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity13_V2",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [
+          {
+            "name": "index_Entity13_V2_addedInV1",
+            "unique": true,
+            "columnNames": [
+              "addedInV1"
+            ],
+            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Entity13_V2_addedInV1` ON `${TABLE_NAME}` (`addedInV1`)"
+          }
+        ],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity14",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity15",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity16",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `renamedInV2` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "renamedInV2",
+            "columnName": "renamedInV2",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity17",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `renamedInV2` TEXT DEFAULT '1', PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "renamedInV2",
+            "columnName": "renamedInV2",
+            "affinity": "TEXT",
+            "notNull": false,
+            "defaultValue": "'1'"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity19_V2",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity20_V2",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT NOT NULL, `renamedInV2` TEXT DEFAULT '1', `addedInV2` INTEGER NOT NULL DEFAULT 2, PRIMARY KEY(`name`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "renamedInV2",
+            "columnName": "renamedInV2",
+            "affinity": "TEXT",
+            "notNull": false,
+            "defaultValue": "'1'"
+          },
+          {
+            "fieldPath": "addedInV2",
+            "columnName": "addedInV2",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "2"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "name"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "ftsVersion": "FTS4",
+        "ftsOptions": {
+          "tokenizer": "simple",
+          "tokenizerArgs": [],
+          "contentTable": "Entity13_V2",
+          "languageIdColumnName": "",
+          "matchInfo": "FTS4",
+          "notIndexedColumns": [],
+          "prefixSizes": [],
+          "preferredOrder": "ASC"
+        },
+        "contentSyncTriggers": [
+          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_Entity21_BEFORE_UPDATE BEFORE UPDATE ON `Entity13_V2` BEGIN DELETE FROM `Entity21` WHERE `docid`=OLD.`rowid`; END",
+          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_Entity21_BEFORE_DELETE BEFORE DELETE ON `Entity13_V2` BEGIN DELETE FROM `Entity21` WHERE `docid`=OLD.`rowid`; END",
+          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_Entity21_AFTER_UPDATE AFTER UPDATE ON `Entity13_V2` BEGIN INSERT INTO `Entity21`(`docid`, `name`, `addedInV1`) VALUES (NEW.`rowid`, NEW.`name`, NEW.`addedInV1`); END",
+          "CREATE TRIGGER IF NOT EXISTS room_fts_content_sync_Entity21_AFTER_INSERT AFTER INSERT ON `Entity13_V2` BEGIN INSERT INTO `Entity21`(`docid`, `name`, `addedInV1`) VALUES (NEW.`rowid`, NEW.`name`, NEW.`addedInV1`); END"
+        ],
+        "tableName": "Entity21",
+        "createSql": "CREATE VIRTUAL TABLE IF NOT EXISTS `${TABLE_NAME}` USING FTS4(`name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, content=`Entity13_V2`)",
+        "fields": [
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "rowid"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "ftsVersion": "FTS4",
+        "ftsOptions": {
+          "tokenizer": "simple",
+          "tokenizerArgs": [],
+          "contentTable": "",
+          "languageIdColumnName": "",
+          "matchInfo": "FTS4",
+          "notIndexedColumns": [],
+          "prefixSizes": [],
+          "preferredOrder": "ASC"
+        },
+        "contentSyncTriggers": [],
+        "tableName": "Entity22",
+        "createSql": "CREATE VIRTUAL TABLE IF NOT EXISTS `${TABLE_NAME}` USING FTS4(`name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1)",
+        "fields": [
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "rowid"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "ftsVersion": "FTS3",
+        "ftsOptions": {
+          "tokenizer": "simple",
+          "tokenizerArgs": [],
+          "contentTable": "",
+          "languageIdColumnName": "",
+          "matchInfo": "FTS4",
+          "notIndexedColumns": [],
+          "prefixSizes": [],
+          "preferredOrder": "ASC"
+        },
+        "contentSyncTriggers": [],
+        "tableName": "Entity23",
+        "createSql": "CREATE VIRTUAL TABLE IF NOT EXISTS `${TABLE_NAME}` USING FTS3(`name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1, `addedInV2` INTEGER NOT NULL DEFAULT 2)",
+        "fields": [
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          },
+          {
+            "fieldPath": "addedInV2",
+            "columnName": "addedInV2",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "2"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "rowid"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "ftsVersion": "FTS3",
+        "ftsOptions": {
+          "tokenizer": "simple",
+          "tokenizerArgs": [],
+          "contentTable": "",
+          "languageIdColumnName": "",
+          "matchInfo": "FTS4",
+          "notIndexedColumns": [],
+          "prefixSizes": [],
+          "preferredOrder": "ASC"
+        },
+        "contentSyncTriggers": [],
+        "tableName": "Entity24",
+        "createSql": "CREATE VIRTUAL TABLE IF NOT EXISTS `${TABLE_NAME}` USING FTS3(`name` TEXT, `addedInV1` INTEGER NOT NULL DEFAULT 1)",
+        "fields": [
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "rowid"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity25",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `entity1Id` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "entity1Id",
+            "columnName": "entity1Id",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity26",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `name` TEXT, `addedInV2` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id`))",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "name",
+            "columnName": "name",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "addedInV2",
+            "columnName": "addedInV2",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [
+          {
+            "name": "index_Entity26_addedInV2",
+            "unique": true,
+            "columnNames": [
+              "addedInV2"
+            ],
+            "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_Entity26_addedInV2` ON `${TABLE_NAME}` (`addedInV2`)"
+          }
+        ],
+        "foreignKeys": []
+      },
+      {
+        "tableName": "Entity27",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id27` INTEGER NOT NULL, `addedInV1` INTEGER NOT NULL DEFAULT 1, PRIMARY KEY(`id27`))",
+        "fields": [
+          {
+            "fieldPath": "id27",
+            "columnName": "id27",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "addedInV1",
+            "columnName": "addedInV1",
+            "affinity": "INTEGER",
+            "notNull": true,
+            "defaultValue": "1"
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id27"
+          ],
+          "autoGenerate": false
+        },
+        "indices": [],
+        "foreignKeys": []
+      }
+    ],
+    "views": [
+      {
+        "viewName": "Entity25Detail",
+        "createSql": "CREATE VIEW `${VIEW_NAME}` AS SELECT Entity25.id, Entity25.name, Entity25.entity1Id, Entity1.name AS userNameAndId FROM Entity25 INNER JOIN Entity1 ON Entity25.entity1Id = Entity1.id"
+      }
+    ],
+    "setupQueries": [
+      "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd3f9ad7159086752b95773a87757b6f6')"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/MusicTestDatabase.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/MusicTestDatabase.java
index 22917de..f9b4e1a 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/MusicTestDatabase.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/MusicTestDatabase.java
@@ -19,13 +19,15 @@
 import androidx.room.Database;
 import androidx.room.RoomDatabase;
 import androidx.room.integration.testapp.dao.MusicDao;
+import androidx.room.integration.testapp.vo.Album;
+import androidx.room.integration.testapp.vo.Artist;
 import androidx.room.integration.testapp.vo.Playlist;
 import androidx.room.integration.testapp.vo.PlaylistMultiSongXRefView;
 import androidx.room.integration.testapp.vo.PlaylistSongXRef;
 import androidx.room.integration.testapp.vo.Song;
 
 @Database(
-        entities = {Song.class, Playlist.class, PlaylistSongXRef.class},
+        entities = {Song.class, Playlist.class, PlaylistSongXRef.class, Artist.class, Album.class},
         views = {PlaylistMultiSongXRefView.class},
         version = 1,
         exportSchema = false)
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java
index 957fbda..604ec0e 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/MusicDao.java
@@ -20,23 +20,42 @@
 import androidx.room.Dao;
 import androidx.room.Insert;
 import androidx.room.Query;
+import androidx.room.RawQuery;
+import androidx.room.RoomWarnings;
 import androidx.room.Transaction;
+import androidx.room.integration.testapp.vo.Album;
+import androidx.room.integration.testapp.vo.AlbumNameAndBandName;
+import androidx.room.integration.testapp.vo.AlbumWithSongs;
+import androidx.room.integration.testapp.vo.Artist;
 import androidx.room.integration.testapp.vo.MultiSongPlaylistWithSongs;
 import androidx.room.integration.testapp.vo.Playlist;
 import androidx.room.integration.testapp.vo.PlaylistSongXRef;
 import androidx.room.integration.testapp.vo.PlaylistWithSongTitles;
 import androidx.room.integration.testapp.vo.PlaylistWithSongs;
+import androidx.room.integration.testapp.vo.ReleasedAlbum;
 import androidx.room.integration.testapp.vo.Song;
+import androidx.sqlite.db.SupportSQLiteQuery;
 
 import java.util.List;
+import java.util.Map;
+
+import io.reactivex.Flowable;
 
 @Dao
+@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
+// TODO: (b/191693863) Cannot use @RewriteQueriesToDropUnusedColumns due to this bug.
 public interface MusicDao {
 
     @Insert
     void addSongs(Song... songs);
 
     @Insert
+    void addArtists(Artist... artists);
+
+    @Insert
+    void addAlbums(Album... albums);
+
+    @Insert
     void addPlaylists(Playlist... playlists);
 
     @Insert
@@ -57,4 +76,26 @@
     @Transaction
     @Query("SELECT * FROM Playlist")
     List<MultiSongPlaylistWithSongs> getAllMultiSongPlaylistWithSongs();
+
+    @Query("SELECT * FROM Artist JOIN Song ON Artist.mArtistName = Song.mArtist")
+    Map<Artist, List<Song>> getAllArtistAndTheirSongs();
+
+    @Query("SELECT * FROM Artist JOIN Album ON Artist.mArtistName = Album.mAlbumArtist")
+    Map<Artist, List<AlbumWithSongs>> getAllArtistAndTheirAlbumsWithSongs();
+
+    @RawQuery
+    Map<Artist, List<Song>> getAllArtistAndTheirSongsRawQuery(SupportSQLiteQuery query);
+
+    @Query("SELECT * FROM Artist JOIN Song ON Artist.mArtistName = Song.mArtist")
+    LiveData<Map<Artist, List<Song>>> getAllArtistAndTheirSongsAsLiveData();
+
+    @Query("SELECT * FROM Artist JOIN Song ON Artist.mArtistName = Song.mArtist")
+    Flowable<Map<Artist, List<Song>>> getAllArtistAndTheirSongsAsFlowable();
+
+    @Query("SELECT Album.mAlbumReleaseYear as mReleaseYear, Album.mAlbumName, Album.mAlbumArtist "
+            + "as mBandName"
+            + " from Album "
+            + "JOIN Song "
+            + "ON Album.mAlbumArtist = Song.mArtist AND Album.mAlbumName = Song.mAlbum")
+    Map<ReleasedAlbum, List<AlbumNameAndBandName>> getReleaseYearToAlbumsAndBands();
 }
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationDb.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationDb.java
index e4e47974..f910674 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationDb.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationDb.java
@@ -67,11 +67,15 @@
                 AutoMigrationDb.Entity23.class,
                 AutoMigrationDb.Entity24.class,
                 AutoMigrationDb.Entity25.class,
-                AutoMigrationDb.Entity26.class
+                AutoMigrationDb.Entity26.class,
+                AutoMigrationDb.Entity27.class
         },
         autoMigrations = {
                 @AutoMigration(
                         from = 1, to = 2, spec = AutoMigrationDb.SimpleAutoMigration1.class
+                ),
+                @AutoMigration(
+                        from = 2, to = 3
                 )
         },
         views = {
@@ -80,7 +84,7 @@
         exportSchema = true
 )
 public abstract class AutoMigrationDb extends RoomDatabase {
-    static final int LATEST_VERSION = 2;
+    static final int LATEST_VERSION = 3;
     abstract AutoMigrationDb.AutoMigrationDao dao();
 
     /**
@@ -192,10 +196,9 @@
      * Add a foreign key to Entity 9.
      */
     @Entity(foreignKeys = {
-            @ForeignKey(entity = Entity12.class,
-                    parentColumns = "id",
-                    childColumns = "id",
-                    deferred = true)})
+            @ForeignKey(entity = Entity27.class,
+                    parentColumns = "id27",
+                    childColumns = "id")})
     static class Entity9 {
         public static final String TABLE_NAME = "Entity9";
         @PrimaryKey
@@ -434,6 +437,19 @@
         public int addedInV2;
     }
 
+    /**
+     * No change between versions.
+     */
+    @Entity
+    static class Entity27 {
+        public static final String TABLE_NAME = "Entity27";
+        @PrimaryKey
+        public int id27;
+        @ColumnInfo(defaultValue = "1")
+        public int addedInV1;
+    }
+
+
     @Dao
     interface AutoMigrationDao {
         @Query("SELECT * from Entity1 ORDER BY id ASC")
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationTest.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationTest.java
index 3206ff9..fb3cd7c 100644
--- a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationTest.java
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/migration/AutoMigrationTest.java
@@ -16,8 +16,10 @@
 
 package androidx.room.integration.testapp.migration;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.database.sqlite.SQLiteException;
 
 import androidx.annotation.NonNull;
 import androidx.room.migration.Migration;
@@ -54,7 +56,10 @@
     // Run this to create the very 1st version of the db.
     public void createFirstVersion() throws IOException {
         SupportSQLiteDatabase db = helper.createDatabase(TEST_DB, 1);
-        db.execSQL("INSERT INTO Entity1 (id, name) VALUES (1, 'row1')");
+        db.execSQL("INSERT INTO Entity9 (id, name) VALUES (1, 'row1')");
+        db.execSQL("INSERT INTO Entity9 (id, name) VALUES (2, 'row2')");
+        db.execSQL("INSERT INTO Entity27 (id27) VALUES (3)");
+        db.execSQL("INSERT INTO Entity27 (id27) VALUES (5)");
         db.close();
     }
 
@@ -67,7 +72,25 @@
                 true
         );
         final TableInfo info = TableInfo.read(db, AutoMigrationDb.Entity1.TABLE_NAME);
-        assertThat(info.columns.size(), is(3));
+        assertThat(info.columns.size()).isEqualTo(3);
+    }
+
+    @Test
+    public void goFromV1ToV3() throws IOException {
+        createFirstVersion();
+        try {
+            SupportSQLiteDatabase db = helper.runMigrationsAndValidate(
+                    TEST_DB,
+                    3,
+                    true
+            );
+        } catch (IllegalStateException e) {
+            assertThat(e.getMessage()).isEqualTo("Foreign key violation(s) detected in 'Entity9'."
+                    + "\nNumber of different violations discovered: 1"
+                    + "\nNumber of rows in violation: 2"
+                    + "\nViolation(s) detected in the following constraint(s):\n"
+                    + "\tParent Table = Entity27, Foreign Key Constraint Index = 0\n");
+        }
     }
 
     /**
@@ -75,12 +98,17 @@
      */
     @Test
     public void testAutoMigrationsNotProcessedBeforeCustomMigrations() throws IOException {
-        helper.runMigrationsAndValidate(
-                TEST_DB,
-                2,
-                true,
-                MIGRATION_1_2
-        );
+        createFirstVersion();
+        try {
+            helper.runMigrationsAndValidate(
+                    TEST_DB,
+                    2,
+                    true,
+                    MIGRATION_1_2
+            );
+        } catch (SQLiteException e) {
+            assertThat(e.getMessage()).containsMatch("no such table: Entity0");
+        }
     }
 
     private static final Migration MIGRATION_1_2 = new Migration(1, 2) {
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/MultimapQueryTest.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/MultimapQueryTest.java
new file mode 100644
index 0000000..b96e7b4
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/test/MultimapQueryTest.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.integration.testapp.test;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.fail;
+
+import android.content.Context;
+
+import androidx.arch.core.executor.testing.CountingTaskExecutorRule;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.testing.TestLifecycleOwner;
+import androidx.room.Room;
+import androidx.room.integration.testapp.MusicTestDatabase;
+import androidx.room.integration.testapp.dao.MusicDao;
+import androidx.room.integration.testapp.vo.Album;
+import androidx.room.integration.testapp.vo.AlbumNameAndBandName;
+import androidx.room.integration.testapp.vo.AlbumWithSongs;
+import androidx.room.integration.testapp.vo.Artist;
+import androidx.room.integration.testapp.vo.ReleasedAlbum;
+import androidx.room.integration.testapp.vo.Song;
+import androidx.sqlite.db.SimpleSQLiteQuery;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.MediumTest;
+
+import org.hamcrest.MatcherAssert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+import io.reactivex.Flowable;
+
+/**
+ * Tests multimap return type for JOIN statements.
+ */
+@MediumTest
+@RunWith(AndroidJUnit4.class)
+public class MultimapQueryTest {
+    // TODO: (b/191265082) Handle duplicate column names in JOINs
+    private MusicDao mMusicDao;
+
+    private final Song mSong1 = new Song(
+            1,
+            "Dani California",
+            "Red Hot Chili Peppers",
+            "Stadium Arcadium",
+            442,
+            2006);
+    private final Song mSong2 = new Song(
+            2,
+            "Snow (Hey Oh)",
+            "Red Hot Chili Peppers",
+            "Stadium Arcadium",
+            514,
+            2006);
+    private final Song mSong3 = new Song(
+            3,
+            "Highway to Hell",
+            "AC/DC",
+            "Highway to Hell",
+            328,
+            1979);
+    private final Song mSong4 = new Song(
+            4,
+            "The Great Gig in the Sky",
+            "Pink Floyd",
+            "The Dark Side of the Moon",
+            443,
+            1973);
+
+
+    private final Artist mRhcp = new Artist(
+            1,
+            "Red Hot Chili Peppers"
+    );
+    private final Artist mAcDc = new Artist(
+            2,
+            "AC/DC"
+    );
+    private final Artist mTheClash = new Artist(
+            3,
+            "The Clash"
+    );
+    private final Artist mPinkFloyd = new Artist(
+            4,
+            "Pink Floyd"
+    );
+
+    private final Album mStadiumArcadium = new Album(
+            1,
+            "Stadium Arcadium",
+            "Red Hot Chili Peppers",
+            "2006"
+    );
+
+    private final Album mCalifornication = new Album(
+            2,
+            "Californication",
+            "Red Hot Chili Peppers",
+            "1999"
+    );
+
+    private final Album mHighwayToHell = new Album(
+            3,
+            "Highway to Hell",
+            "AC/DC",
+            "1979"
+    );
+
+    private final Album mTheDarkSideOfTheMoon = new Album(
+            4,
+            "The Dark Side of the Moon",
+            "Pink Floyd",
+            "1973"
+    );
+
+    @Rule
+    public CountingTaskExecutorRule mExecutorRule = new CountingTaskExecutorRule();
+
+    private void drain() throws TimeoutException, InterruptedException {
+        mExecutorRule.drainTasks(1, TimeUnit.MINUTES);
+        assertThat(mExecutorRule.isIdle()).isTrue();
+    }
+
+    private class MyTestObserver<T> extends TestObserver<T> {
+        @Override
+        protected void drain() throws TimeoutException, InterruptedException {
+            MultimapQueryTest.this.drain();
+        }
+    }
+
+    @Before
+    public void createDb() {
+        Context context = ApplicationProvider.getApplicationContext();
+        MusicTestDatabase db = Room.inMemoryDatabaseBuilder(context, MusicTestDatabase.class)
+                .build();
+        mMusicDao = db.getDao();
+    }
+
+    /**
+     * Tests a simple JOIN query between two tables.
+     */
+    @Test
+    public void testJoinByArtistName() {
+        mMusicDao.addSongs(mSong1, mSong2, mSong3, mSong4);
+        mMusicDao.addArtists(mRhcp, mAcDc, mTheClash, mPinkFloyd);
+
+        Map<Artist, List<Song>> artistToSongsMap = mMusicDao.getAllArtistAndTheirSongs();
+        assertContentsOfResultMap(artistToSongsMap);
+    }
+
+    /**
+     * Tests a JOIN {@link androidx.room.RawQuery} between two tables.
+     */
+    @Test
+    public void testJoinByArtistNameRawQuery() {
+        mMusicDao.addSongs(mSong1, mSong2, mSong3, mSong4);
+        mMusicDao.addArtists(mRhcp, mAcDc, mTheClash, mPinkFloyd);
+
+        Map<Artist, List<Song>> artistToSongsMap = mMusicDao.getAllArtistAndTheirSongsRawQuery(
+                new SimpleSQLiteQuery(
+                        "SELECT * FROM Artist JOIN Song ON Artist.mArtistName = Song.mArtist"
+                )
+        );
+        assertContentsOfResultMap(artistToSongsMap);
+    }
+
+    /**
+     * Tests a simple JOIN query between two tables with a {@link LiveData} return type.
+     */
+    @Test
+    public void testJoinByArtistNameLiveData()
+            throws ExecutionException, InterruptedException, TimeoutException {
+        mMusicDao.addSongs(mSong1, mSong2, mSong3, mSong4);
+        mMusicDao.addArtists(mRhcp, mAcDc, mTheClash, mPinkFloyd);
+
+        LiveData<Map<Artist, List<Song>>> artistToSongsMapLiveData =
+                mMusicDao.getAllArtistAndTheirSongsAsLiveData();
+        final TestLifecycleOwner testOwner = new TestLifecycleOwner(Lifecycle.State.CREATED);
+        final TestObserver<Map<Artist, List<Song>>> observer = new MyTestObserver<>();
+        TestUtil.observeOnMainThread(artistToSongsMapLiveData, testOwner, observer);
+        MatcherAssert.assertThat(observer.hasValue(), is(false));
+        observer.reset();
+        testOwner.handleLifecycleEvent(Lifecycle.Event.ON_START);
+
+        assertThat(observer.get()).isNotNull();
+        assertContentsOfResultMap(observer.get());
+    }
+
+    /**
+     * Tests a simple JOIN query between two tables with a {@link Flowable} return type.
+     */
+    @Test
+    public void testJoinByArtistNameFlowable() {
+        mMusicDao.addSongs(mSong1, mSong2, mSong3, mSong4);
+        mMusicDao.addArtists(mRhcp, mAcDc, mTheClash, mPinkFloyd);
+
+        Flowable<Map<Artist, List<Song>>> artistToSongsMapFlowable =
+                mMusicDao.getAllArtistAndTheirSongsAsFlowable();
+        assertContentsOfResultMap(artistToSongsMapFlowable.blockingFirst());
+    }
+
+    /**
+     * Tests a simple JOIN query between two tables with a return type of a map with a key that
+     * is an entity {@link Artist} and a list of entity POJOs {@link AlbumWithSongs} that use
+     * {@link androidx.room.Embedded} and {@link androidx.room.Relation}.
+     */
+    @Test
+    public void testPojoWithEmbeddedAndRelation() {
+        mMusicDao.addSongs(mSong1, mSong2, mSong3, mSong4);
+        mMusicDao.addArtists(mRhcp, mAcDc, mTheClash, mPinkFloyd);
+        mMusicDao.addAlbums(
+                mStadiumArcadium,
+                mCalifornication,
+                mTheDarkSideOfTheMoon,
+                mHighwayToHell
+        );
+
+        Map<Artist, List<AlbumWithSongs>> artistToAlbumsWithSongsMap =
+                mMusicDao.getAllArtistAndTheirAlbumsWithSongs();
+        List<AlbumWithSongs> rhcpList = artistToAlbumsWithSongsMap.get(mRhcp);
+
+        assertThat(artistToAlbumsWithSongsMap.keySet()).containsExactlyElementsIn(
+                Arrays.asList(mRhcp, mAcDc, mPinkFloyd));
+        assertThat(artistToAlbumsWithSongsMap.containsKey(mTheClash)).isFalse();
+        assertThat(artistToAlbumsWithSongsMap.get(mPinkFloyd).get(0).getAlbum())
+                .isEqualTo(mTheDarkSideOfTheMoon);
+        assertThat(artistToAlbumsWithSongsMap.get(mAcDc).get(0).getAlbum())
+                .isEqualTo(mHighwayToHell);
+        assertThat(artistToAlbumsWithSongsMap.get(mAcDc).get(0).getSongs().get(0))
+                .isEqualTo(mSong3);
+
+        for (AlbumWithSongs albumAndSong : rhcpList) {
+            if (albumAndSong.getAlbum().equals(mStadiumArcadium)) {
+                assertThat(albumAndSong.getSongs()).containsExactlyElementsIn(
+                        Arrays.asList(mSong1, mSong2)
+                );
+            } else if (albumAndSong.getAlbum().equals(mCalifornication)) {
+                assertThat(albumAndSong.getSongs()).isEmpty();
+            } else {
+                fail();
+            }
+        }
+    }
+
+    /**
+     * Tests a simple JOIN query between two tables with a return type of a map with a key
+     * {@link ReleasedAlbum} and value (list of {@link AlbumNameAndBandName}) that are non-entity
+     * POJOs.
+     */
+    @Test
+    public void testNonEntityPojos() {
+        mMusicDao.addSongs(mSong1, mSong2, mSong3, mSong4);
+        mMusicDao.addArtists(mRhcp, mAcDc, mTheClash, mPinkFloyd);
+        mMusicDao.addAlbums(
+                mStadiumArcadium,
+                mCalifornication,
+                mTheDarkSideOfTheMoon,
+                mHighwayToHell
+        );
+
+        Map<ReleasedAlbum, List<AlbumNameAndBandName>> map =
+                mMusicDao.getReleaseYearToAlbumsAndBands();
+        Set<ReleasedAlbum> allReleasedAlbums = map.keySet();
+
+        assertThat(allReleasedAlbums.size()).isEqualTo(3);
+
+        for (ReleasedAlbum album : allReleasedAlbums) {
+            if (album.getAlbumName().equals(mStadiumArcadium.mAlbumName)) {
+                assertThat(album.getReleaseYear()).isEqualTo(mStadiumArcadium.mAlbumReleaseYear);
+                assertThat(map.get(album).size()).isEqualTo(2);
+                assertThat(map.get(album).get(0).getBandName()).isEqualTo(mRhcp.mArtistName);
+                assertThat(map.get(album).get(0).getAlbumName())
+                        .isEqualTo(mStadiumArcadium.mAlbumName);
+                assertThat(map.get(album).get(1).getBandName()).isEqualTo(mRhcp.mArtistName);
+                assertThat(map.get(album).get(1).getAlbumName())
+                        .isEqualTo(mStadiumArcadium.mAlbumName);
+
+            } else if (album.getAlbumName().equals(mHighwayToHell.mAlbumName)) {
+                assertThat(album.getReleaseYear()).isEqualTo(mHighwayToHell.mAlbumReleaseYear);
+                assertThat(map.get(album).size()).isEqualTo(1);
+                assertThat(map.get(album).get(0).getBandName()).isEqualTo(mAcDc.mArtistName);
+                assertThat(map.get(album).get(0).getAlbumName())
+                        .isEqualTo(mHighwayToHell.mAlbumName);
+
+            } else if (album.getAlbumName().equals(mTheDarkSideOfTheMoon.mAlbumName)) {
+                assertThat(album.getReleaseYear())
+                        .isEqualTo(mTheDarkSideOfTheMoon.mAlbumReleaseYear);
+                assertThat(map.get(album).size()).isEqualTo(1);
+                assertThat(map.get(album).get(0).getBandName())
+                        .isEqualTo(mPinkFloyd.mArtistName);
+                assertThat(map.get(album).get(0).getAlbumName())
+                        .isEqualTo(mTheDarkSideOfTheMoon.mAlbumName);
+
+            } else {
+                // Shouldn't get here as we expect only the 3 albums to be keys in the map
+                fail();
+            }
+        }
+    }
+
+    /**
+     * Checks that the contents of the map are as expected.
+     *
+     * @param artistToSongsMap Map of Artists to Songs joined by the artist name
+     */
+    private void assertContentsOfResultMap(Map<Artist, List<Song>> artistToSongsMap) {
+        assertThat(artistToSongsMap.keySet()).containsExactlyElementsIn(
+                Arrays.asList(mRhcp, mAcDc, mPinkFloyd));
+        assertThat(artistToSongsMap.containsKey(mTheClash)).isFalse();
+        assertThat(artistToSongsMap.get(mPinkFloyd)).containsExactly(mSong4);
+        assertThat(artistToSongsMap.get(mRhcp)).containsExactlyElementsIn(
+                Arrays.asList(mSong1, mSong2)
+        );
+        assertThat(artistToSongsMap.get(mAcDc)).containsExactly(mSong3);
+    }
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Album.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Album.java
new file mode 100644
index 0000000..4c445d4
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Album.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.integration.testapp.vo;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+@Entity
+public class Album {
+    @PrimaryKey
+    public final int mAlbumId;
+    public final String mAlbumName;
+    public final String mAlbumArtist;
+    public final String mAlbumReleaseYear;
+
+    public Album(int albumId, String albumName, String albumArtist, String albumReleaseYear) {
+        mAlbumId = albumId;
+        mAlbumName = albumName;
+        mAlbumArtist = albumArtist;
+        mAlbumReleaseYear = albumReleaseYear;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Album album = (Album) o;
+
+        if (mAlbumId != album.mAlbumId) return false;
+        if (mAlbumName != null ? !mAlbumName.equals(album.mAlbumName) :
+                album.mAlbumName != null) {
+            return false;
+        }
+        if (mAlbumArtist != null ? !mAlbumArtist.equals(album.mAlbumArtist) :
+                album.mAlbumArtist != null) {
+            return false;
+        }
+        if (mAlbumReleaseYear != null ? !mAlbumReleaseYear.equals(album.mAlbumReleaseYear) :
+                album.mAlbumReleaseYear != null) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mAlbumId;
+        result = 31 * result + (mAlbumName != null ? mAlbumName.hashCode() : 0);
+        result = 31 * result + (mAlbumArtist != null ? mAlbumArtist.hashCode() : 0);
+        result = 31 * result + (mAlbumReleaseYear != null ? mAlbumReleaseYear.hashCode() : 0);
+        return result;
+    }
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/AlbumNameAndBandName.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/AlbumNameAndBandName.java
new file mode 100644
index 0000000..854c0bf
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/AlbumNameAndBandName.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2017 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.integration.testapp.vo;
+
+
+public class AlbumNameAndBandName {
+    private String mAlbumName;
+    private String mBandName;
+
+    public AlbumNameAndBandName(String albumName, String bandName) {
+        mAlbumName = albumName;
+        mBandName = bandName;
+    }
+
+    public String getAlbumName() {
+        return mAlbumName;
+    }
+
+    public String getBandName() {
+        return mBandName;
+    }
+
+    @SuppressWarnings("SimplifiableIfStatement")
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        AlbumNameAndBandName that = (AlbumNameAndBandName) o;
+
+        if (mAlbumName != null ? !mAlbumName.equals(that.mAlbumName) :
+                that.mAlbumName != null) {
+            return false;
+        }
+        return mBandName != null ? mBandName.equals(that.mBandName) : that.mBandName == null;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mAlbumName != null ? mAlbumName.hashCode() : 0;
+        result = 31 * result + (mBandName != null ? mBandName.hashCode() : 0);
+        return result;
+    }
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/AlbumWithSongs.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/AlbumWithSongs.java
new file mode 100644
index 0000000..980fb01
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/AlbumWithSongs.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.integration.testapp.vo;
+
+import androidx.room.Embedded;
+import androidx.room.Relation;
+
+import java.util.List;
+
+public class AlbumWithSongs {
+    @Embedded
+    private final Album mAlbum;
+
+    @Relation(parentColumn = "mAlbumName", entityColumn = "mAlbum")
+    private final List<Song> mSongs;
+
+    public AlbumWithSongs(Album album,
+            List<Song> songs) {
+        this.mAlbum = album;
+        this.mSongs = songs;
+    }
+
+    public Album getAlbum() {
+        return mAlbum;
+    }
+
+    public List<Song> getSongs() {
+        return mSongs;
+    }
+}
+
+
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Artist.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Artist.java
new file mode 100644
index 0000000..603cde0
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/Artist.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.integration.testapp.vo;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+@Entity
+public class Artist {
+    @PrimaryKey
+    public final int mArtistId;
+    public final String mArtistName;
+
+    public Artist(int artistId, String artistName) {
+        mArtistId = artistId;
+        mArtistName = artistName;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Artist artist = (Artist) o;
+
+        if (mArtistId != artist.mArtistId) return false;
+        if (mArtistName != null ? !mArtistName.equals(artist.mArtistName) :
+                artist.mArtistName != null) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mArtistId;
+        result = 31 * result + (mArtistName != null ? mArtistName.hashCode() : 0);
+        return result;
+    }
+}
diff --git a/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/ReleasedAlbum.java b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/ReleasedAlbum.java
new file mode 100644
index 0000000..c79e8a2
--- /dev/null
+++ b/room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/vo/ReleasedAlbum.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2017 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.integration.testapp.vo;
+
+
+public class ReleasedAlbum {
+    private String mReleaseYear;
+    private String mAlbumName;
+
+    public ReleasedAlbum(String releaseYear, String albumName) {
+        mReleaseYear = releaseYear;
+
+        mAlbumName = albumName;
+    }
+
+    public String getReleaseYear() {
+        return mReleaseYear;
+    }
+
+    public String getAlbumName() {
+        return mAlbumName;
+    }
+
+    @SuppressWarnings("SimplifiableIfStatement")
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ReleasedAlbum that = (ReleasedAlbum) o;
+        if (mReleaseYear != null ? !mReleaseYear.equals(that.mReleaseYear) :
+                that.mReleaseYear != null) {
+            return false;
+        }
+        return mAlbumName != null ? mAlbumName.equals(that.mAlbumName) : that.mAlbumName == null;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = mReleaseYear != null ? mReleaseYear.hashCode() : 0;
+        result = 31 * result + (mAlbumName != null ? mAlbumName.hashCode() : 0);
+        return result;
+    }
+}
diff --git a/room/room-common/lint-baseline.xml b/room/room-common/lint-baseline.xml
index 5e43b57..0a8c684 100644
--- a/room/room-common/lint-baseline.xml
+++ b/room/room-common/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
index 127d0fe..5147586 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
@@ -57,6 +57,7 @@
 import androidx.room.solver.query.result.GuavaOptionalQueryResultAdapter
 import androidx.room.solver.query.result.ImmutableListQueryResultAdapter
 import androidx.room.solver.query.result.ListQueryResultAdapter
+import androidx.room.solver.query.result.MapQueryResultAdapter
 import androidx.room.solver.query.result.OptionalQueryResultAdapter
 import androidx.room.solver.query.result.PojoRowAdapter
 import androidx.room.solver.query.result.QueryResultAdapter
@@ -461,6 +462,26 @@
                     typeArg = typeArg,
                     rowAdapter = rowAdapter
                 )
+            } else if (typeMirror.isTypeOf(java.util.Map::class)) {
+                val keyArg = typeMirror.typeArguments[0].extendsBoundOrSelf()
+                val secondTypeArg = typeMirror.typeArguments[1].extendsBoundOrSelf()
+
+                // TODO: Support Set::class here as well.
+                if (!secondTypeArg.isTypeOf(java.util.List::class)) {
+                    context.logger.e("Only supporting Map<Key, List<Value>> for now.")
+                    return null
+                }
+                val valueArg = secondTypeArg.typeArguments.first().extendsBoundOrSelf()
+
+                val keyRowAdapter = findRowAdapter(keyArg, query) ?: return null
+                val valueRowAdapter = findRowAdapter(valueArg, query) ?: return null
+
+                return MapQueryResultAdapter(
+                    keyTypeArg = keyArg,
+                    valueTypeArg = valueArg,
+                    keyRowAdapter = keyRowAdapter,
+                    valueRowAdapter = valueRowAdapter
+                )
             }
             return null
         }
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/MapQueryResultAdapter.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/MapQueryResultAdapter.kt
new file mode 100644
index 0000000..520b1de
--- /dev/null
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/MapQueryResultAdapter.kt
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.room.solver.query.result
+
+import androidx.room.compiler.processing.XType
+import androidx.room.ext.L
+import androidx.room.ext.T
+import androidx.room.solver.CodeGenScope
+import com.squareup.javapoet.ClassName
+import com.squareup.javapoet.ParameterizedTypeName
+
+class MapQueryResultAdapter(
+    private val keyTypeArg: XType,
+    private val valueTypeArg: XType,
+    private val keyRowAdapter: RowAdapter,
+    private val valueRowAdapter: RowAdapter,
+) : QueryResultAdapter(null) {
+    private val listType = ParameterizedTypeName.get(
+        ClassName.get(List::class.java),
+        valueTypeArg.typeName
+    )
+
+    private val arrayListType = ParameterizedTypeName
+        .get(ClassName.get(ArrayList::class.java), valueTypeArg.typeName)
+
+    private val mapType = ParameterizedTypeName.get(
+        ClassName.get(Map::class.java),
+        keyTypeArg.typeName,
+        listType
+    )
+
+    private val hashMapType = ParameterizedTypeName.get(
+        ClassName.get(HashMap::class.java),
+        keyTypeArg.typeName,
+        listType
+    )
+
+    override fun convert(outVarName: String, cursorVarName: String, scope: CodeGenScope) {
+        scope.builder().apply {
+            keyRowAdapter.onCursorReady(cursorVarName, scope)
+            valueRowAdapter.onCursorReady(cursorVarName, scope)
+            addStatement(
+                "final $T $L = new $T()",
+                mapType, outVarName, hashMapType
+            )
+            val tmpKeyVarName = scope.getTmpVar("_key")
+            val tmpValueVarName = scope.getTmpVar("_value")
+            beginControlFlow("while ($L.moveToNext())", cursorVarName).apply {
+                addStatement("final $T $L", keyTypeArg.typeName, tmpKeyVarName)
+                keyRowAdapter.convert(tmpKeyVarName, cursorVarName, scope)
+
+                addStatement("final $T $L", valueTypeArg.typeName, tmpValueVarName)
+                valueRowAdapter.convert(tmpValueVarName, cursorVarName, scope)
+
+                val tmpListVarName = scope.getTmpVar("_values")
+                addStatement("$T $L", listType, tmpListVarName)
+                beginControlFlow("if ($L.containsKey($L))", outVarName, tmpKeyVarName).apply {
+                    addStatement("$L = $L.get($L)", tmpListVarName, outVarName, tmpKeyVarName)
+                }
+                nextControlFlow("else").apply {
+                    addStatement("$L = new $T()", tmpListVarName, arrayListType)
+                    addStatement("$L.put($L, $L)", outVarName, tmpKeyVarName, tmpListVarName)
+                }
+                endControlFlow()
+                addStatement("$L.add($L)", tmpListVarName, tmpValueVarName)
+            }
+            endControlFlow()
+            keyRowAdapter.onCursorFinished()?.invoke(scope)
+            valueRowAdapter.onCursorFinished()?.invoke(scope)
+        }
+    }
+
+    override fun shouldCopyCursor() =
+        (keyRowAdapter is PojoRowAdapter && keyRowAdapter.relationCollectors.isNotEmpty()) ||
+            (valueRowAdapter is PojoRowAdapter && valueRowAdapter.relationCollectors.isNotEmpty())
+
+    override fun accessedTableNames() = mutableListOf<String>().apply {
+        (keyRowAdapter as? PojoRowAdapter)?.relationTableNames()?.let { addAll(it) }
+        (valueRowAdapter as? PojoRowAdapter)?.relationTableNames()?.let { addAll(it) }
+    }
+}
\ No newline at end of file
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/QueryResultAdapter.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/QueryResultAdapter.kt
index dc27eaf..68b5242 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/QueryResultAdapter.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/query/result/QueryResultAdapter.kt
@@ -29,7 +29,7 @@
     open fun shouldCopyCursor() = rowAdapter is PojoRowAdapter &&
         rowAdapter.relationCollectors.isNotEmpty()
 
-    fun accessedTableNames(): List<String> {
+    open fun accessedTableNames(): List<String> {
         return (rowAdapter as? PojoRowAdapter)?.relationTableNames() ?: emptyList()
     }
 }
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/writer/AutoMigrationWriter.kt b/room/room-compiler/src/main/kotlin/androidx/room/writer/AutoMigrationWriter.kt
index 8f4b05c..1279221 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/writer/AutoMigrationWriter.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/writer/AutoMigrationWriter.kt
@@ -373,9 +373,10 @@
         tableName: String,
         migrateBuilder: MethodSpec.Builder
     ) {
-        addDatabaseExecuteSqlStatement(
-            migrateBuilder,
-            "PRAGMA foreign_key_check(`$tableName`)"
+        migrateBuilder.addStatement(
+            "$T.foreignKeyCheck(database, $S)",
+            RoomTypeNames.DB_UTIL,
+            tableName
         )
     }
 
diff --git a/room/room-guava/lint-baseline.xml b/room/room-guava/lint-baseline.xml
index 0f84c67..c15105a 100644
--- a/room/room-guava/lint-baseline.xml
+++ b/room/room-guava/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="LambdaLast"
@@ -8,7 +8,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="58"
+            line="59"
             column="13"/>
     </issue>
 
@@ -19,7 +19,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="75"
+            line="76"
             column="13"/>
     </issue>
 
@@ -30,7 +30,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="106"
+            line="107"
             column="13"/>
     </issue>
 
@@ -41,7 +41,7 @@
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="55"
+            line="56"
             column="23"/>
     </issue>
 
@@ -52,17 +52,6 @@
         errorLine2="                  ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="56"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final RoomSQLiteQuery query,"
-        errorLine2="                  ~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/room/guava/GuavaRoom.java"
             line="57"
             column="19"/>
     </issue>
@@ -70,11 +59,22 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        errorLine1="            final RoomSQLiteQuery query,"
+        errorLine2="                  ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/guava/GuavaRoom.java"
+            line="58"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="UnknownNullness"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
         errorLine1="    public static &lt;T> ListenableFuture&lt;T> createListenableFuture("
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="71"
+            line="72"
             column="23"/>
     </issue>
 
@@ -85,17 +85,6 @@
         errorLine2="                  ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="72"
-            column="19"/>
-    </issue>
-
-    <issue
-        id="UnknownNullness"
-        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="            final Callable&lt;T> callable,"
-        errorLine2="                  ~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/room/guava/GuavaRoom.java"
             line="73"
             column="19"/>
     </issue>
@@ -103,11 +92,22 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
+        errorLine1="            final Callable&lt;T> callable,"
+        errorLine2="                  ~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/room/guava/GuavaRoom.java"
+            line="74"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="UnknownNullness"
+        message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
         errorLine1="            final RoomSQLiteQuery query,"
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="74"
+            line="75"
             column="19"/>
     </issue>
 
@@ -118,7 +118,7 @@
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="85"
+            line="86"
             column="23"/>
     </issue>
 
@@ -129,7 +129,7 @@
         errorLine2="                  ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="86"
+            line="87"
             column="19"/>
     </issue>
 
@@ -140,7 +140,7 @@
         errorLine2="                  ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="88"
+            line="89"
             column="19"/>
     </issue>
 
@@ -151,7 +151,7 @@
         errorLine2="                  ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/guava/GuavaRoom.java"
-            line="89"
+            line="90"
             column="19"/>
     </issue>
 
diff --git a/room/room-ktx/lint-baseline.xml b/room/room-ktx/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/room/room-ktx/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/room/room-migration/lint-baseline.xml b/room/room-migration/lint-baseline.xml
index 32a2637..9e11b3a 100644
--- a/room/room-migration/lint-baseline.xml
+++ b/room/room-migration/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
index 9cdc433..e96da43 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
@@ -78,9 +78,8 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         runBlocking {
             // count query is executed on first load
-            pagingSource.load(
-                createLoadParam(LoadType.REFRESH)
-            )
+            pagingSource.refresh()
+
             assertThat(pagingSource.itemCount.get()).isEqualTo(100)
         }
     }
@@ -94,9 +93,7 @@
         )
         runBlocking {
             // count query is executed on first load
-            pagingSource.load(
-                createLoadParam(LoadType.REFRESH)
-            )
+            pagingSource.refresh()
             // should be 60 instead of 100
             assertThat(pagingSource.itemCount.get()).isEqualTo(60)
         }
@@ -108,7 +105,7 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         runBlocking {
             // load once to register db observers
-            pagingSource.load(createLoadParam(LoadType.REFRESH))
+            pagingSource.refresh()
             assertThat(pagingSource.invalid).isFalse()
             // paging source should be invalidated when insert into db
             val result = dao.addTestItem(TestItem(101))
@@ -124,7 +121,7 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         runBlocking {
             // load once to register db observers
-            pagingSource.load(createLoadParam(LoadType.REFRESH))
+            pagingSource.refresh()
             assertThat(pagingSource.invalid).isFalse()
             // paging source should be invalidated when delete from db
             dao.deleteTestItem(TestItem(50))
@@ -139,7 +136,7 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         runBlocking {
             // load once to register db observers
-            pagingSource.load(createLoadParam(LoadType.REFRESH))
+            pagingSource.refresh()
             assertThat(pagingSource.invalid).isFalse()
 
             val result = dao.deleteTestItem(TestItem(1000))
@@ -155,18 +152,14 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         runBlocking {
             // test empty load
-            var result = pagingSource.load(
-                createLoadParam(LoadType.REFRESH)
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh()
 
             assertTrue(result.data.isEmpty())
             // now add data
             dao.addAllItems(itemsList)
-            result = pagingSource.load(
-                createLoadParam(LoadType.REFRESH)
-            ) as PagingSource.LoadResult.Page
+            val result2 = pagingSource.refresh()
 
-            assertThat(result.data).containsExactlyElementsIn(
+            assertThat(result2.data).containsExactlyElementsIn(
                 itemsList.subList(0, 15)
             )
         }
@@ -178,12 +171,8 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         // refresh with initial key = 20
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = 20,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh(key = 20)
+
             // item in pos 21-35 (TestItemId 20-34) loaded
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(20, 35)
@@ -199,12 +188,8 @@
             queryString = "SELECT * FROM $tableName ORDER BY id ASC LIMIT 10 OFFSET 30",
         )
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = null,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh()
+
             // default initial loadSize = 15 starting from index 0.
             // user supplied limit offset should cause initial loadSize = 10, starting from index 30
             assertThat(result.data).containsExactlyElementsIn(
@@ -228,12 +213,8 @@
         )
         // refresh with initial key = 40
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = 40,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh(key = 40)
+
             // initial loadSize = 15, but limited by id < 50, should only load items 40 - 50
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(40, 50)
@@ -255,12 +236,8 @@
                     "ORDER BY id ASC",
         )
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = null,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh()
+
             assertThat(result.data).containsExactly(itemsList[90])
             assertThat(pagingSource.itemCount.get()).isEqualTo(1)
         }
@@ -274,12 +251,8 @@
             queryString = "SELECT * FROM $tableName ORDER BY id ASC LIMIT 10 OFFSET 500",
         )
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = null,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh()
+
             // invalid OFFSET = 500 should return empty data
             assertThat(result.data).isEmpty()
 
@@ -300,12 +273,8 @@
             queryString = "SELECT * FROM $tableName ORDER BY id ASC LIMIT -1",
         )
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = null,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh()
+
             // ensure that it respects SQLite's default behavior for negative LIMIT
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(0, 15)
@@ -323,12 +292,8 @@
     fun invalidInitialKey_dbEmpty_returnsEmpty() {
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = 101,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh(key = 101)
+
             assertThat(result.data).isEmpty()
         }
     }
@@ -338,12 +303,8 @@
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         dao.addAllItems(itemsList)
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = 101,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh(key = 101)
+
             // should load the last page
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(85, 100)
@@ -358,12 +319,7 @@
         runBlocking {
             // should throw error when initial key is negative
             val expectedException = assertFailsWith<IllegalArgumentException> {
-                pagingSource.load(
-                    createLoadParam(
-                        LoadType.REFRESH,
-                        key = -1,
-                    )
-                )
+                pagingSource.refresh(key = -1)
             }
             // default message from Paging 3 for negative initial key
             assertThat(expectedException.message).isEqualTo(
@@ -379,12 +335,8 @@
         // to bypass check for initial load and run as non-initial load
         pagingSource.itemCount.set(100)
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.APPEND,
-                    key = 20,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.append(key = 20)
+
             // item in pos 21-25 (TestItemId 20-24) loaded
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(20, 25)
@@ -401,12 +353,8 @@
         // to bypass check for initial load and run as non-initial load
         pagingSource.itemCount.set(100)
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.APPEND,
-                    key = 97,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.append(key = 97)
+
             // item in pos 98-100 (TestItemId 97-99) loaded
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(97, 100)
@@ -424,23 +372,15 @@
         pagingSource.itemCount.set(100)
         runBlocking {
             // first prepend
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.APPEND,
-                    key = 30,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.append(key = 30)
+
             // TestItemId 30-34 loaded
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(30, 35)
             )
             // second prepend using nextKey from previous load
-            val result2 = pagingSource.load(
-                createLoadParam(
-                    LoadType.APPEND,
-                    key = result.nextKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result2 = pagingSource.append(key = result.nextKey)
+
             // TestItemId 35 - 39 loaded
             assertThat(result2.data).containsExactlyElementsIn(
                 itemsList.subList(35, 40)
@@ -455,12 +395,7 @@
         // to bypass check for initial load and run as non-initial load
         pagingSource.itemCount.set(100)
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.PREPEND,
-                    key = 30,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.prepend(key = 30)
 
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(25, 30)
@@ -477,12 +412,8 @@
         // to bypass check for initial load and run as non-initial load
         pagingSource.itemCount.set(100)
         runBlocking {
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.PREPEND,
-                    key = 3,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.prepend(key = 3)
+
             // items in pos 0 - 2 (TestItemId 0 - 2) loaded
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(0, 3)
@@ -500,23 +431,15 @@
         pagingSource.itemCount.set(100)
         runBlocking {
             // first prepend
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.PREPEND,
-                    key = 20,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.prepend(key = 20)
+
             // items pos 16-20 (TestItemId 15-19) loaded
             assertThat(result.data).containsExactlyElementsIn(
                 itemsList.subList(15, 20)
             )
             // second prepend using prevKey from previous load
-            val result2 = pagingSource.load(
-                createLoadParam(
-                    LoadType.PREPEND,
-                    key = result.prevKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result2 = pagingSource.prepend(key = result.prevKey)
+
             // items pos 11-15 (TestItemId 10 - 14) loaded
             assertThat(result2.data).containsExactlyElementsIn(
                 itemsList.subList(10, 15)
@@ -530,32 +453,20 @@
         dao.addAllItems(itemsList)
         runBlocking {
             // for initial load
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = 50,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh(key = 50)
+
             // initial loads items in pos 51 - 65, should have 50 items before
             assertThat(result.itemsBefore).isEqualTo(50)
 
             // prepend from initial load
-            val result2 = pagingSource.load(
-                createLoadParam(
-                    LoadType.PREPEND,
-                    key = result.prevKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result2 = pagingSource.prepend(key = result.prevKey)
+
             // prepend loads items in pos 46 - 50, should have 45 item before
             assertThat(result2.itemsBefore).isEqualTo(45)
 
             // append from initial load
-            val result3 = pagingSource.load(
-                createLoadParam(
-                    LoadType.APPEND,
-                    key = result.nextKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result3 = pagingSource.append(key = result.nextKey)
+
             // append loads items in position 66 - 70 , should have 65 item before
             assertThat(result3.itemsBefore).isEqualTo(65)
         }
@@ -567,32 +478,20 @@
         dao.addAllItems(itemsList)
         runBlocking {
             // for initial load
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = 30,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh(key = 30)
+
             // initial loads items in position 31 - 45, should have 55 items after
             assertThat(result.itemsAfter).isEqualTo(55)
 
             // prepend from initial load
-            val result2 = pagingSource.load(
-                createLoadParam(
-                    LoadType.PREPEND,
-                    key = result.prevKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result2 = pagingSource.prepend(key = result.prevKey)
+
             // prepend loads items in position 26 - 30, should have 70 item after
             assertThat(result2.itemsAfter).isEqualTo(70)
 
             // append from initial load
-            val result3 = pagingSource.load(
-                createLoadParam(
-                    LoadType.APPEND,
-                    key = result.nextKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result3 = pagingSource.append(result.nextKey)
+
             // append loads items in position 46 - 50 , should have 50 item after
             assertThat(result3.itemsAfter).isEqualTo(50)
         }
@@ -604,12 +503,7 @@
         dao.addAllItems(itemsList)
         runBlocking {
             // initial load
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = null,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result = pagingSource.refresh()
             // 15 items loaded, assuming anchorPosition = 14 as the last item loaded
             var refreshKey = pagingSource.getRefreshKey(
                 PagingState(
@@ -625,12 +519,7 @@
             assertThat(refreshKey).isEqualTo(7)
 
             // append after refresh
-            val result2 = pagingSource.load(
-                createLoadParam(
-                    LoadType.APPEND,
-                    key = result.nextKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            val result2 = pagingSource.append(key = result.nextKey)
 
             assertThat(result2.data).isEqualTo(
                 itemsList.subList(15, 20)
@@ -651,23 +540,39 @@
     }
 
     @Test
-    fun refreshKey_largerThanItemCount() {
+    fun load_refreshKeyGreaterThanItemCount_lastPage() {
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         dao.addAllItems(itemsList)
         runBlocking {
-            // initial load, assume getRefreshKey returned invalid large key due to large number of
-            // items dropped
-            val result = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = 250,
-                )
-            ) as PagingSource.LoadResult.Page
 
-            // should load last page
-            assertThat(result.data).containsExactlyElementsIn(
-                itemsList.subList(85, 100)
+            pagingSource.refresh(key = 70)
+
+            dao.deleteTestItems(40, 100)
+
+            // assume user was viewing last item of the refresh load with anchorPosition = 85,
+            // initialLoadSize = 15. This mimics how getRefreshKey() calculates refresh key.
+            val refreshKey = 85 - (15 / 2)
+            assertThat(refreshKey).isEqualTo(78)
+
+            val pagingSource2 = LimitOffsetPagingSourceImpl(database)
+            val result2 = pagingSource2.refresh(key = refreshKey)
+
+            // database should only have 40 items left. Refresh key is invalid at this point
+            // (greater than item count after deletion)
+            assertThat(pagingSource2.itemCount.get()).isEqualTo(40)
+            // ensure that paging source can handle invalid refresh key properly
+            // should load last page with items 25 - 40
+            assertThat(result2.data).containsExactlyElementsIn(
+                itemsList.subList(25, 40)
             )
+
+            // should account for updated item count to return correct itemsBefore, itemsAfter,
+            // prevKey, nextKey
+            assertThat(result2.itemsBefore).isEqualTo(25)
+            assertThat(result2.itemsAfter).isEqualTo(0)
+            // no append can be triggered
+            assertThat(result2.prevKey).isEqualTo(25)
+            assertThat(result2.nextKey).isEqualTo(null)
         }
     }
 
@@ -683,38 +588,23 @@
      * Ideally, in the future Paging will be able to handle this case better.
      */
     @Test
-    fun refreshKey_topItemsDeleted_loadFromBeginning() {
+    fun load_refreshKeyGreaterThanItemCount_firstPage() {
         val pagingSource = LimitOffsetPagingSourceImpl(database)
         dao.addAllItems(itemsList)
         runBlocking {
-            val result1 = pagingSource.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = null,
-                )
-            ) as PagingSource.LoadResult.Page
+            pagingSource.refresh()
 
             assertThat(pagingSource.itemCount.get()).isEqualTo(100)
 
             // items id 0 - 29 deleted (30 items removed)
-            dao.deleteTestItems()
+            dao.deleteTestItems(0, 29)
 
             val pagingSource2 = LimitOffsetPagingSourceImpl(database)
-            // assume user was viewing first few items with anchorPosition = 0
-            val refreshKey = pagingSource.getRefreshKey(
-                PagingState(
-                    pages = listOf(result1),
-                    anchorPosition = 0,
-                    config = CONFIG,
-                    leadingPlaceholderCount = 0,
-                )
-            )
-            val result2 = pagingSource2.load(
-                createLoadParam(
-                    LoadType.REFRESH,
-                    key = refreshKey,
-                )
-            ) as PagingSource.LoadResult.Page
+            // assume user was viewing first few items with anchorPosition = 0 and refresh key
+            // clips to 0
+            val refreshKey = 0
+
+            val result2 = pagingSource2.refresh(key = refreshKey)
 
             // database should only have 70 items left
             assertThat(pagingSource2.itemCount.get()).isEqualTo(70)
@@ -722,6 +612,48 @@
             assertThat(result2.data).containsExactlyElementsIn(
                 itemsList.subList(30, 45)
             )
+
+            // should account for updated item count to return correct itemsBefore, itemsAfter,
+            // prevKey, nextKey
+            assertThat(result2.itemsBefore).isEqualTo(0)
+            assertThat(result2.itemsAfter).isEqualTo(55)
+            // no prepend can be triggered
+            assertThat(result2.prevKey).isEqualTo(null)
+            assertThat(result2.nextKey).isEqualTo(15)
+        }
+    }
+
+    @Test
+    fun load_loadSizeAndRefreshKeyGreaterThanItemCount() {
+        val pagingSource = LimitOffsetPagingSourceImpl(database)
+        dao.addAllItems(itemsList)
+        runBlocking {
+
+            pagingSource.refresh(key = 30)
+
+            assertThat(pagingSource.itemCount.get()).isEqualTo(100)
+            // items id 0 - 94 deleted (95 items removed)
+            dao.deleteTestItems(0, 94)
+
+            val pagingSource2 = LimitOffsetPagingSourceImpl(database)
+            // assume user was viewing first few items with anchorPosition = 0 and refresh key
+            // clips to 0
+            val refreshKey = 0
+
+            val result2 = pagingSource2.refresh(key = refreshKey)
+
+            // database should only have 5 items left
+            assertThat(pagingSource2.itemCount.get()).isEqualTo(5)
+            // only 5 items should be loaded with offset = 0
+            assertThat(result2.data).containsExactlyElementsIn(
+                itemsList.subList(95, 100)
+            )
+
+            // should recognize that this is a terminal load
+            assertThat(result2.itemsBefore).isEqualTo(0)
+            assertThat(result2.itemsAfter).isEqualTo(0)
+            assertThat(result2.prevKey).isEqualTo(null)
+            assertThat(result2.nextKey).isEqualTo(null)
         }
     }
 
@@ -771,6 +703,39 @@
         }
     }
 
+    private suspend fun PagingSource<Int, TestItem>.refresh(
+        key: Int? = null,
+    ): PagingSource.LoadResult.Page<Int, TestItem> {
+        return this.load(
+            createLoadParam(
+                loadType = LoadType.REFRESH,
+                key = key,
+            )
+        ) as PagingSource.LoadResult.Page
+    }
+
+    private suspend fun PagingSource<Int, TestItem>.append(
+        key: Int? = -1,
+    ): PagingSource.LoadResult.Page<Int, TestItem> {
+        return this.load(
+            createLoadParam(
+                loadType = LoadType.APPEND,
+                key = key,
+            )
+        ) as PagingSource.LoadResult.Page
+    }
+
+    private suspend fun PagingSource<Int, TestItem>.prepend(
+        key: Int? = -1,
+    ): PagingSource.LoadResult.Page<Int, TestItem> {
+        return this.load(
+            createLoadParam(
+                loadType = LoadType.PREPEND,
+                key = key,
+            )
+        ) as PagingSource.LoadResult.Page
+    }
+
     companion object {
         val CONFIG = PagingConfig(
             pageSize = 5,
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/TestItemDao.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/TestItemDao.kt
index 6b50fcda..8863f6f 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/TestItemDao.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/TestItemDao.kt
@@ -32,6 +32,6 @@
     @Delete
     fun deleteTestItem(testItem: TestItem): Int
 
-    @Query("DELETE FROM TestItem WHERE id < 30")
-    fun deleteTestItems(): Int
+    @Query("DELETE FROM TestItem WHERE id >= :start AND id <= :end")
+    fun deleteTestItems(start: Int, end: Int): Int
 }
\ No newline at end of file
diff --git a/room/room-runtime/api/restricted_current.txt b/room/room-runtime/api/restricted_current.txt
index 51e2dac..9eaf43a 100644
--- a/room/room-runtime/api/restricted_current.txt
+++ b/room/room-runtime/api/restricted_current.txt
@@ -267,6 +267,7 @@
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class DBUtil {
     method public static android.os.CancellationSignal? createCancellationSignal();
     method public static void dropFtsSyncTriggers(androidx.sqlite.db.SupportSQLiteDatabase!);
+    method public static void foreignKeyCheck(androidx.sqlite.db.SupportSQLiteDatabase, String);
     method @Deprecated public static android.database.Cursor query(androidx.room.RoomDatabase!, androidx.sqlite.db.SupportSQLiteQuery!, boolean);
     method public static android.database.Cursor query(androidx.room.RoomDatabase, androidx.sqlite.db.SupportSQLiteQuery, boolean, android.os.CancellationSignal?);
     method public static int readVersion(java.io.File) throws java.io.IOException;
diff --git a/room/room-runtime/lint-baseline.xml b/room/room-runtime/lint-baseline.xml
index cd534ae..601763a 100644
--- a/room/room-runtime/lint-baseline.xml
+++ b/room/room-runtime/lint-baseline.xml
@@ -1,5 +1,269 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperFactoryTest.kt"
+            line="85"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperFactoryTest.kt"
+            line="98"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        val db = autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperFactoryTest.kt"
+            line="144"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="                .writableDatabase.query(&quot;select * from nonexistanttable&quot;)"
+        errorLine2="                 ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="88"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        autoClosingRoomOpenHelper.writableDatabase.execSQL(&quot;create table user (idk int)&quot;)"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="97"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="            autoClosingRoomOpenHelper.writableDatabase.query(&quot;select * from user&quot;)"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="100"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        autoClosingRoomOpenHelper.writableDatabase.beginTransaction()"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="109"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        autoClosingRoomOpenHelper.writableDatabase.endTransaction()"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="111"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 16): `getWritableDatabase`"
+        errorLine1="        assertThat(autoClosingRoomOpenHelper.writableDatabase.isWriteAheadLoggingEnabled).isTrue()"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="121"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 16): `getWritableDatabase`"
+        errorLine1="        assertThat(autoClosingRoomOpenHelper.writableDatabase.isWriteAheadLoggingEnabled).isTrue()"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="125"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="            autoClosingRoomOpenHelper.writableDatabase.enableWriteAheadLogging()"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="133"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `disableWriteAheadLogging`"
+        errorLine1="            autoClosingRoomOpenHelper.writableDatabase.disableWriteAheadLogging()"
+        errorLine2="                                                       ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="137"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="            autoClosingRoomOpenHelper.writableDatabase.disableWriteAheadLogging()"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="137"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="161"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="166"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        val db = autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="175"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        val db = autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="189"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getWritableDatabase`"
+        errorLine1="        val db = autoClosingRoomOpenHelper.writableDatabase"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/room/AutoClosingRoomOpenHelperTest.kt"
+            line="209"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `WRITE_AHEAD_LOGGING`"
+        errorLine1="                .setJournalMode(RoomDatabase.JournalMode.WRITE_AHEAD_LOGGING).build();"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/room/BuilderTest.java"
+            line="411"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `WRITE_AHEAD_LOGGING`"
+        errorLine1="        assertThat(config.journalMode, is(RoomDatabase.JournalMode.WRITE_AHEAD_LOGGING));"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/room/BuilderTest.java"
+            line="414"
+            column="68"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 21 (current min is 14): `java.util.Locale#forLanguageTag`"
+        errorLine1="        Locale.setDefault(Locale.forLanguageTag(&quot;tr-TR&quot;));"
+        errorLine2="                                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/room/InvalidationTrackerTest.java"
+            line="119"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `java.lang.Process#waitFor`"
+        errorLine1="                val exited = it.waitFor(5, TimeUnit.SECONDS)"
+        errorLine2="                                ~~~~~~~">
+        <location
+            file="src/test/java/androidx/room/SQLiteCopyOpenHelperTest.kt"
+            line="130"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 14): `java.lang.ProcessBuilder#redirectOutput`"
+        errorLine1="            .redirectOutput(ProcessBuilder.Redirect.INHERIT)"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/room/SQLiteCopyOpenHelperTest.kt"
+            line="264"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Field requires API level 26 (current min is 14): `java.lang.ProcessBuilder.Redirect#INHERIT`"
+        errorLine1="            .redirectOutput(ProcessBuilder.Redirect.INHERIT)"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/room/SQLiteCopyOpenHelperTest.kt"
+            line="264"
+            column="29"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
@@ -63,7 +327,7 @@
         errorLine2="             ~~~~">
         <location
             file="src/main/java/androidx/room/Room.java"
-            line="27"
+            line="28"
             column="14"/>
     </issue>
 
@@ -107,7 +371,7 @@
         errorLine2="                               ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/util/DBUtil.java"
-            line="63"
+            line="64"
             column="32"/>
     </issue>
 
@@ -118,7 +382,7 @@
         errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/util/DBUtil.java"
-            line="63"
+            line="64"
             column="49"/>
     </issue>
 
@@ -129,7 +393,7 @@
         errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/util/DBUtil.java"
-            line="109"
+            line="110"
             column="44"/>
     </issue>
 
@@ -679,7 +943,7 @@
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/RoomDatabase.java"
-            line="87"
+            line="88"
             column="24"/>
     </issue>
 
@@ -690,7 +954,7 @@
         errorLine2="                                                                ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/RoomDatabase.java"
-            line="392"
+            line="366"
             column="65"/>
     </issue>
 
@@ -701,7 +965,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/RoomDatabase.java"
-            line="565"
+            line="539"
             column="12"/>
     </issue>
 
@@ -712,7 +976,7 @@
         errorLine2="                                                             ~~~~~~">
         <location
             file="src/main/java/androidx/room/RoomDatabase.java"
-            line="1269"
+            line="1242"
             column="62"/>
     </issue>
 
diff --git a/room/room-runtime/src/main/java/androidx/room/util/DBUtil.java b/room/room-runtime/src/main/java/androidx/room/util/DBUtil.java
index c5014ae..8f876ae 100644
--- a/room/room-runtime/src/main/java/androidx/room/util/DBUtil.java
+++ b/room/room-runtime/src/main/java/androidx/room/util/DBUtil.java
@@ -35,7 +35,9 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Database utilities for Room
@@ -127,6 +129,22 @@
     }
 
     /**
+     * Checks for foreign key violations by executing a PRAGMA foreign_key_check.
+     */
+    public static void foreignKeyCheck(@NonNull SupportSQLiteDatabase db,
+            @NonNull String tableName) {
+        Cursor cursor = db.query("PRAGMA foreign_key_check(`" + tableName + "`)");
+        try {
+            if (cursor.getCount() > 0) {
+                String errorMsg = processForeignKeyCheckFailure(cursor);
+                throw new IllegalStateException(errorMsg);
+            }
+        } finally {
+            cursor.close();
+        }
+    }
+
+    /**
      * Reads the user version number out of the database header from the given file.
      *
      * @param databaseFile the database file.
@@ -171,6 +189,55 @@
         return null;
     }
 
+
+    /**
+     * Converts the {@link Cursor} returned in case of a foreign key violation into a detailed
+     * error message for debugging.
+     * <p>
+     * The foreign_key_check pragma returns one row output for each foreign key violation.
+     * <p>
+     * The cursor received has four columns for each row output. The first column is the name of
+     * the child table. The second column is the rowId of the row that contains the foreign key
+     * violation (or NULL if the child table is a WITHOUT ROWID table). The third column is the
+     * name of the parent table. The fourth column is the index of the specific foreign key
+     * constraint that failed.
+     *
+     * @param cursor Cursor containing information regarding the FK violation
+     * @return Error message generated containing debugging information
+     */
+    private static String processForeignKeyCheckFailure(Cursor cursor) {
+        int rowCount = cursor.getCount();
+        String childTableName = null;
+        Map<String, String> fkParentTables = new HashMap<>();
+
+        while (cursor.moveToNext()) {
+            if (childTableName == null) {
+                childTableName = cursor.getString(0);
+            }
+            String constraintIndex = cursor.getString(3);
+            if (!fkParentTables.containsKey(constraintIndex)) {
+                fkParentTables.put(constraintIndex, cursor.getString(2));
+            }
+        }
+
+        StringBuilder sb = new StringBuilder();
+        sb.append("Foreign key violation(s) detected in '")
+                .append(childTableName).append("'.\n");
+        sb.append("Number of different violations discovered: ")
+                .append(fkParentTables.keySet().size()).append("\n");
+        sb.append("Number of rows in violation: ")
+                .append(rowCount).append("\n");
+        sb.append("Violation(s) detected in the following constraint(s):\n");
+
+        for (Map.Entry<String, String> entry : fkParentTables.entrySet()) {
+            sb.append("\tParent Table = ")
+                    .append(entry.getValue());
+            sb.append(", Foreign Key Constraint Index = ")
+                    .append(entry.getKey()).append("\n");
+        }
+        return sb.toString();
+    }
+
     private DBUtil() {
     }
 }
diff --git a/room/room-rxjava2/lint-baseline.xml b/room/room-rxjava2/lint-baseline.xml
index 6eb516e..4f6c3a1 100644
--- a/room/room-rxjava2/lint-baseline.xml
+++ b/room/room-rxjava2/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="PrivateConstructorForUtilityClass"
diff --git a/room/room-rxjava3/lint-baseline.xml b/room/room-rxjava3/lint-baseline.xml
new file mode 100644
index 0000000..b4eb77e
--- /dev/null
+++ b/room/room-rxjava3/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                throwable -> Objects.equals(throwable.getMessage(), &quot;i want exception&quot;));"
+        errorLine2="                                     ~~~~~~">
+        <location
+            file="src/test/java/androidx/room/rxjava3/RxRoomTest.java"
+            line="235"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `java.util.Objects#equals`"
+        errorLine1="                throwable -> Objects.equals(throwable.getMessage(), &quot;i want exception&quot;));"
+        errorLine2="                                     ~~~~~~">
+        <location
+            file="src/test/java/androidx/room/rxjava3/RxRoomTest.java"
+            line="251"
+            column="38"/>
+    </issue>
+
+</issues>
diff --git a/room/room-testing/lint-baseline.xml b/room/room-testing/lint-baseline.xml
index 62d06ec..4884c7f 100644
--- a/room/room-testing/lint-baseline.xml
+++ b/room/room-testing/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
@@ -8,7 +8,7 @@
         errorLine2="                               ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="102"
+            line="118"
             column="32"/>
     </issue>
 
@@ -19,7 +19,7 @@
         errorLine2="                                                                ~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="102"
+            line="118"
             column="65"/>
     </issue>
 
@@ -30,7 +30,7 @@
         errorLine2="                               ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="114"
+            line="139"
             column="32"/>
     </issue>
 
@@ -41,7 +41,7 @@
         errorLine2="                                                                ~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="114"
+            line="139"
             column="65"/>
     </issue>
 
@@ -52,7 +52,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="115"
+            line="140"
             column="13"/>
     </issue>
 
@@ -63,7 +63,7 @@
         errorLine2="                            ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="125"
+            line="211"
             column="29"/>
     </issue>
 
@@ -74,7 +74,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="142"
+            line="228"
             column="12"/>
     </issue>
 
@@ -85,7 +85,7 @@
         errorLine2="                                                ~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="142"
+            line="228"
             column="49"/>
     </issue>
 
@@ -96,7 +96,7 @@
         errorLine2="           ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="207"
+            line="293"
             column="12"/>
     </issue>
 
@@ -107,7 +107,7 @@
         errorLine2="                                                          ~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="207"
+            line="293"
             column="59"/>
     </issue>
 
@@ -118,7 +118,7 @@
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="208"
+            line="294"
             column="44"/>
     </issue>
 
@@ -129,7 +129,7 @@
         errorLine2="                            ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="260"
+            line="416"
             column="29"/>
     </issue>
 
@@ -140,7 +140,7 @@
         errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="287"
+            line="443"
             column="35"/>
     </issue>
 
@@ -151,7 +151,7 @@
         errorLine2="                                  ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/room/testing/MigrationTestHelper.java"
-            line="304"
+            line="460"
             column="35"/>
     </issue>
 
diff --git a/samples/Support4Demos/lint-baseline.xml b/samples/Support4Demos/lint-baseline.xml
index f606642..4c42104 100644
--- a/samples/Support4Demos/lint-baseline.xml
+++ b/samples/Support4Demos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="WifiManagerLeak"
@@ -107,7 +107,7 @@
         errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/supportv4/widget/SlidingPaneLayoutActivity.java"
-            line="205"
+            line="203"
             column="54"/>
     </issue>
 
diff --git a/samples/Support7Demos/lint-baseline.xml b/samples/Support7Demos/lint-baseline.xml
index c682887..c175f48 100644
--- a/samples/Support7Demos/lint-baseline.xml
+++ b/samples/Support7Demos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.1.0-alpha01" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha01">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="OnClick"
@@ -3078,7 +3078,7 @@
         errorLine2="                ~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/supportv7/view/SystemUIModes.java"
-            line="354"
+            line="355"
             column="17"/>
     </issue>
 
@@ -3089,7 +3089,7 @@
         errorLine2="                ~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/supportv7/view/SystemUIModes.java"
-            line="355"
+            line="356"
             column="17"/>
     </issue>
 
diff --git a/samples/SupportAnimationDemos/lint-baseline.xml b/samples/SupportAnimationDemos/lint-baseline.xml
index e6cca97..3038af7 100644
--- a/samples/SupportAnimationDemos/lint-baseline.xml
+++ b/samples/SupportAnimationDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/samples/SupportContentDemos/lint-baseline.xml b/samples/SupportContentDemos/lint-baseline.xml
index e027914..b0fbc1b 100644
--- a/samples/SupportContentDemos/lint-baseline.xml
+++ b/samples/SupportContentDemos/lint-baseline.xml
@@ -1,38 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="AppCompatResource"
-        message="Should use `android:showAsAction` when not using the appcompat library"
-        errorLine1="          app:showAsAction=&quot;always&quot;/>"
-        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/res/menu/menu_demo.xml"
-            line="25"
-            column="11"/>
-    </issue>
-
-    <issue
-        id="AppCompatResource"
-        message="Should use `android:showAsAction` when not using the appcompat library"
-        errorLine1="          app:showAsAction=&quot;always&quot;/>"
-        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/res/menu/menu_demo.xml"
-            line="31"
-            column="11"/>
-    </issue>
-
-    <issue
-        id="AppCompatResource"
-        message="Should use `android:showAsAction` when not using the appcompat library"
-        errorLine1="          app:showAsAction=&quot;always&quot;/>"
-        errorLine2="          ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/res/menu/menu_demo.xml"
-            line="37"
-            column="11"/>
-    </issue>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/samples/SupportEmojiDemos/lint-baseline.xml b/samples/SupportEmojiDemos/lint-baseline.xml
index 8e58669..1790305 100644
--- a/samples/SupportEmojiDemos/lint-baseline.xml
+++ b/samples/SupportEmojiDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainFragment.java b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainFragment.java
index 2973a58..27aad03 100644
--- a/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainFragment.java
+++ b/samples/SupportEmojiDemos/src/main/java/com/example/android/support/text/emoji/MainFragment.java
@@ -20,9 +20,13 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
 import android.widget.TextView;
 
+import androidx.appcompat.widget.AppCompatAutoCompleteTextView;
+import androidx.appcompat.widget.AppCompatCheckBox;
 import androidx.appcompat.widget.AppCompatCheckedTextView;
+import androidx.appcompat.widget.AppCompatRadioButton;
 import androidx.appcompat.widget.AppCompatToggleButton;
 import androidx.appcompat.widget.SwitchCompat;
 import androidx.emoji2.text.EmojiCompat;
@@ -40,18 +44,27 @@
     private static final String WOMAN_SINGER = "\uD83D\uDC69\u200D\uD83C\uDFA4";
 
     static final String EMOJI = WOMAN_TECHNOLOGIST + " " + WOMAN_SINGER;
+    private static final String[] AUTOCOMPLETE_ITEMS = new String[3];
+    static {
+        AUTOCOMPLETE_ITEMS[0] = "Woman technologist " + WOMAN_TECHNOLOGIST;
+        AUTOCOMPLETE_ITEMS[1] = "Woman singer " + WOMAN_SINGER;
+        AUTOCOMPLETE_ITEMS[2] = "Woman";
+    };
 
     private TextView mEmojiTextView;
     private TextView mAppcompatTextView;
     private TextView mEmojiEditText;
-    private TextView mAppcompatEditText;
+    TextView mAppcompatEditText;
     private TextView mEmojiButton;
     private TextView mAppcompatButton;
-    private TextView mRegularTextView;
+    TextView mRegularTextView;
     private TextView mCustomTextView;
     private AppCompatToggleButton mAppCompatToggleButton;
     private SwitchCompat mSwitchCompat;
     private AppCompatCheckedTextView mAppCompatCheckedTextView;
+    private AppCompatCheckBox mAppCompatCheckBox;
+    private AppCompatRadioButton mAppCompatRadioButton;
+    AppCompatAutoCompleteTextView mAppCompatAutoCompleteTextView;
 
     final Config.Listener mConfigListener = new Config.Listener() {
         @Override
@@ -90,6 +103,9 @@
         mAppCompatToggleButton = view.findViewById(R.id.appcompat_toggle_button);
         mSwitchCompat = view.findViewById(R.id.switch_compat);
         mAppCompatCheckedTextView = view.findViewById(R.id.appcompat_checked_text_view);
+        mAppCompatCheckBox = view.findViewById(R.id.appcompat_checkbox);
+        mAppCompatRadioButton = view.findViewById(R.id.appcompat_radiobutton);
+        mAppCompatAutoCompleteTextView = view.findViewById(R.id.appcompat_autocomplete_textview);
 
         final TextView emojiListButton = view.findViewById(R.id.emoji_list_button);
         emojiListButton.setOnClickListener(new View.OnClickListener() {
@@ -132,6 +148,12 @@
         mSwitchCompat.setShowText(true);
         mSwitchCompat.setEmojiCompatEnabled(true);
         mAppCompatCheckedTextView.setText(getString(R.string.checked_text_view, EMOJI));
+        mAppCompatCheckBox.setText(getString(R.string.check_box, EMOJI));
+        mAppCompatRadioButton.setText(getString(R.string.radio_button, EMOJI));
+
+        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),
+                android.R.layout.simple_dropdown_item_1line, AUTOCOMPLETE_ITEMS);
+        mAppCompatAutoCompleteTextView.setAdapter(adapter);
         EmojiCompat.get().registerInitCallback(new EmojiCompat.InitCallback() {
             @Override
             public void onInitialized() {
@@ -139,6 +161,12 @@
                 if (compat.getLoadState() == EmojiCompat.LOAD_STATE_SUCCEEDED) {
                     mRegularTextView.setText(
                             compat.process(getString(R.string.regular_text_view, EMOJI)));
+
+
+                    mAppcompatEditText.setHint(
+                            compat.process(getString(R.string.appcompat_edit_text, EMOJI)));
+                    mAppCompatAutoCompleteTextView.setHint(
+                            compat.process(getString(R.string.autocomplete_hint, EMOJI)));
                 }
             }
         });
diff --git a/samples/SupportEmojiDemos/src/main/res/layout/fragment_main.xml b/samples/SupportEmojiDemos/src/main/res/layout/fragment_main.xml
index d8c8d7e..8bdccf5 100644
--- a/samples/SupportEmojiDemos/src/main/res/layout/fragment_main.xml
+++ b/samples/SupportEmojiDemos/src/main/res/layout/fragment_main.xml
@@ -110,6 +110,21 @@
                 android:checked="true"
                 />
 
+            <androidx.appcompat.widget.AppCompatCheckBox
+                android:id="@+id/appcompat_checkbox"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
+            <androidx.appcompat.widget.AppCompatRadioButton
+                android:id="@+id/appcompat_radiobutton"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
+            <androidx.appcompat.widget.AppCompatAutoCompleteTextView
+                android:id="@+id/appcompat_autocomplete_textview"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content" />
+
             <Button
                 android:id="@+id/emoji_list_button"
                 android:layout_width="match_parent"
diff --git a/samples/SupportEmojiDemos/src/main/res/values/strings.xml b/samples/SupportEmojiDemos/src/main/res/values/strings.xml
index 9f50be8..391aadc 100755
--- a/samples/SupportEmojiDemos/src/main/res/values/strings.xml
+++ b/samples/SupportEmojiDemos/src/main/res/values/strings.xml
@@ -28,4 +28,7 @@
     <string name="toggle_off">Off %s</string>
     <string name="switch_compat">SwitchCompat %s</string>
     <string name="checked_text_view">AppCompatCheckedTextView %s</string>
+    <string name="check_box">AppCompatCheckBox %s</string>
+    <string name="radio_button">AppCompatRadioButton %s</string>
+    <string name="autocomplete_hint">AppCompatAutoCompleteTextView %s</string>
 </resources>
diff --git a/samples/SupportLeanbackDemos/lint-baseline.xml b/samples/SupportLeanbackDemos/lint-baseline.xml
index e82a85f..c80f814 100644
--- a/samples/SupportLeanbackDemos/lint-baseline.xml
+++ b/samples/SupportLeanbackDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="MissingSuperCall"
@@ -706,17 +706,6 @@
     </issue>
 
     <issue
-        id="UnsupportedChromeOsHardware"
-        message="Expecting `android:required=&quot;false&quot;` for this hardware feature that may not be supported by all Chrome OS devices"
-        errorLine1="        android:required=&quot;true&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="9"
-            column="9"/>
-    </issue>
-
-    <issue
         id="SyntheticAccessor"
         message="Access to `private` member of class `ItemViewClickedListener` requires synthetic accessor"
         errorLine1="        setOnItemViewClickedListener(new ItemViewClickedListener());"
@@ -1273,7 +1262,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="291"
+            line="292"
             column="13"/>
     </issue>
 
@@ -1284,7 +1273,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="294"
+            line="295"
             column="13"/>
     </issue>
 
@@ -1295,7 +1284,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="419"
+            line="420"
             column="13"/>
     </issue>
 
@@ -1306,7 +1295,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="420"
+            line="421"
             column="13"/>
     </issue>
 
@@ -1317,7 +1306,7 @@
         errorLine2="                                ~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="422"
+            line="423"
             column="33"/>
     </issue>
 
@@ -1328,7 +1317,7 @@
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="423"
+            line="424"
             column="13"/>
     </issue>
 
@@ -1339,7 +1328,7 @@
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="448"
+            line="449"
             column="17"/>
     </issue>
 
@@ -1350,7 +1339,7 @@
         errorLine2="            ~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="454"
+            line="455"
             column="13"/>
     </issue>
 
@@ -1361,7 +1350,7 @@
         errorLine2="                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="569"
+            line="570"
             column="33"/>
     </issue>
 
@@ -1372,7 +1361,7 @@
         errorLine2="                                                             ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="570"
+            line="571"
             column="62"/>
     </issue>
 
@@ -1383,7 +1372,7 @@
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="570"
+            line="571"
             column="17"/>
     </issue>
 
@@ -1394,7 +1383,7 @@
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="571"
+            line="572"
             column="25"/>
     </issue>
 
@@ -1405,7 +1394,7 @@
         errorLine2="                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="576"
+            line="577"
             column="33"/>
     </issue>
 
@@ -1416,7 +1405,7 @@
         errorLine2="                                                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="577"
+            line="578"
             column="65"/>
     </issue>
 
@@ -1427,7 +1416,7 @@
         errorLine2="                ~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="577"
+            line="578"
             column="17"/>
     </issue>
 
@@ -1438,7 +1427,7 @@
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="578"
+            line="579"
             column="25"/>
     </issue>
 
@@ -1449,7 +1438,7 @@
         errorLine2="                                                 ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="621"
+            line="622"
             column="50"/>
     </issue>
 
@@ -1460,7 +1449,7 @@
         errorLine2="            ~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="634"
+            line="635"
             column="13"/>
     </issue>
 
@@ -4804,7 +4793,7 @@
         errorLine2="                                       ~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="83"
+            line="84"
             column="40"/>
     </issue>
 
@@ -4815,7 +4804,7 @@
         errorLine2="                                       ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="89"
+            line="90"
             column="40"/>
     </issue>
 
@@ -4826,7 +4815,7 @@
         errorLine2="                                          ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="95"
+            line="96"
             column="43"/>
     </issue>
 
@@ -4837,7 +4826,7 @@
         errorLine2="               ~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="196"
+            line="197"
             column="16"/>
     </issue>
 
@@ -4848,7 +4837,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="196"
+            line="197"
             column="42"/>
     </issue>
 
@@ -4859,7 +4848,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="207"
+            line="208"
             column="37"/>
     </issue>
 
@@ -4870,7 +4859,7 @@
         errorLine2="                                                                ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="207"
+            line="208"
             column="65"/>
     </issue>
 
@@ -4881,7 +4870,7 @@
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="224"
+            line="225"
             column="43"/>
     </issue>
 
@@ -4892,7 +4881,7 @@
         errorLine2="                             ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="269"
+            line="270"
             column="30"/>
     </issue>
 
@@ -4903,7 +4892,7 @@
         errorLine2="               ~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="279"
+            line="280"
             column="16"/>
     </issue>
 
@@ -4914,7 +4903,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="279"
+            line="280"
             column="42"/>
     </issue>
 
@@ -4925,7 +4914,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="290"
+            line="291"
             column="37"/>
     </issue>
 
@@ -4936,7 +4925,7 @@
         errorLine2="                                                                ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="290"
+            line="291"
             column="65"/>
     </issue>
 
@@ -4947,7 +4936,7 @@
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="298"
+            line="299"
             column="43"/>
     </issue>
 
@@ -4958,7 +4947,7 @@
         errorLine2="                                                                      ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="298"
+            line="299"
             column="71"/>
     </issue>
 
@@ -4969,7 +4958,7 @@
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="306"
+            line="307"
             column="43"/>
     </issue>
 
@@ -4980,7 +4969,7 @@
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="327"
+            line="328"
             column="52"/>
     </issue>
 
@@ -4991,7 +4980,7 @@
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="391"
+            line="392"
             column="16"/>
     </issue>
 
@@ -5002,7 +4991,7 @@
         errorLine2="               ~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="407"
+            line="408"
             column="16"/>
     </issue>
 
@@ -5013,7 +5002,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="407"
+            line="408"
             column="42"/>
     </issue>
 
@@ -5024,7 +5013,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="418"
+            line="419"
             column="37"/>
     </issue>
 
@@ -5035,7 +5024,7 @@
         errorLine2="                                                                ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="418"
+            line="419"
             column="65"/>
     </issue>
 
@@ -5046,7 +5035,7 @@
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="428"
+            line="429"
             column="43"/>
     </issue>
 
@@ -5057,7 +5046,7 @@
         errorLine2="                                                                      ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="428"
+            line="429"
             column="71"/>
     </issue>
 
@@ -5068,7 +5057,7 @@
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="437"
+            line="438"
             column="43"/>
     </issue>
 
@@ -5079,7 +5068,7 @@
         errorLine2="                                                   ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="459"
+            line="460"
             column="52"/>
     </issue>
 
@@ -5090,7 +5079,7 @@
         errorLine2="                                                ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="479"
+            line="480"
             column="49"/>
     </issue>
 
@@ -5101,7 +5090,7 @@
         errorLine2="               ~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="502"
+            line="503"
             column="16"/>
     </issue>
 
@@ -5112,7 +5101,7 @@
         errorLine2="                                 ~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="502"
+            line="503"
             column="34"/>
     </issue>
 
@@ -5123,7 +5112,7 @@
         errorLine2="                                                          ~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="502"
+            line="503"
             column="59"/>
     </issue>
 
@@ -5134,7 +5123,7 @@
         errorLine2="                ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="503"
+            line="504"
             column="17"/>
     </issue>
 
@@ -5145,7 +5134,7 @@
         errorLine2="               ~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="535"
+            line="536"
             column="16"/>
     </issue>
 
@@ -5156,7 +5145,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="535"
+            line="536"
             column="42"/>
     </issue>
 
@@ -5167,7 +5156,7 @@
         errorLine2="               ~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="546"
+            line="547"
             column="16"/>
     </issue>
 
@@ -5178,7 +5167,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="556"
+            line="557"
             column="37"/>
     </issue>
 
@@ -5189,7 +5178,7 @@
         errorLine2="                                                                ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="556"
+            line="557"
             column="65"/>
     </issue>
 
@@ -5200,7 +5189,7 @@
         errorLine2="                                          ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="583"
+            line="584"
             column="43"/>
     </issue>
 
@@ -5211,7 +5200,7 @@
         errorLine2="                                                                      ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="583"
+            line="584"
             column="71"/>
     </issue>
 
@@ -5222,7 +5211,7 @@
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="590"
+            line="591"
             column="43"/>
     </issue>
 
@@ -5233,7 +5222,7 @@
         errorLine2="               ~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="618"
+            line="619"
             column="16"/>
     </issue>
 
@@ -5244,7 +5233,7 @@
         errorLine2="                                         ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="618"
+            line="619"
             column="42"/>
     </issue>
 
@@ -5255,7 +5244,7 @@
         errorLine2="                                    ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="629"
+            line="630"
             column="37"/>
     </issue>
 
@@ -5266,7 +5255,7 @@
         errorLine2="                                                                ~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="629"
+            line="630"
             column="65"/>
     </issue>
 
@@ -5277,7 +5266,7 @@
         errorLine2="                                          ~~~~~~~~~~~~">
         <location
             file="src/main/java/com/example/android/leanback/GuidedStepActivity.java"
-            line="638"
+            line="639"
             column="43"/>
     </issue>
 
diff --git a/samples/SupportPreferenceDemos/lint-baseline.xml b/samples/SupportPreferenceDemos/lint-baseline.xml
index 1f9c3bd..03a3611 100644
--- a/samples/SupportPreferenceDemos/lint-baseline.xml
+++ b/samples/SupportPreferenceDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="MissingTvBanner"
diff --git a/samples/SupportRemoteCallbackDemos/lint-baseline.xml b/samples/SupportRemoteCallbackDemos/lint-baseline.xml
index 7fea55a..5ff028e 100644
--- a/samples/SupportRemoteCallbackDemos/lint-baseline.xml
+++ b/samples/SupportRemoteCallbackDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/samples/SupportSliceDemos/lint-baseline.xml b/samples/SupportSliceDemos/lint-baseline.xml
index 5f5225d..9eafe6a 100644
--- a/samples/SupportSliceDemos/lint-baseline.xml
+++ b/samples/SupportSliceDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/samples/SupportTransitionDemos/lint-baseline.xml b/samples/SupportTransitionDemos/lint-baseline.xml
index 7a2c909..9f60414 100644
--- a/samples/SupportTransitionDemos/lint-baseline.xml
+++ b/samples/SupportTransitionDemos/lint-baseline.xml
@@ -1,16 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="AppCompatResource"
-        message="Should use `android:showAsAction` when not using the appcompat library"
-        errorLine1="            app:showAsAction=&quot;ifRoom&quot;/>"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/res/menu/basic_usage.xml"
-            line="22"
-            column="13"/>
-    </issue>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/samples/SupportWearDemos/lint-baseline.xml b/samples/SupportWearDemos/lint-baseline.xml
index 50d9261..177b48d 100644
--- a/samples/SupportWearDemos/lint-baseline.xml
+++ b/samples/SupportWearDemos/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/security/crypto/lint-baseline.xml b/security/crypto/lint-baseline.xml
index 50222a8..20f6391 100644
--- a/security/crypto/lint-baseline.xml
+++ b/security/crypto/lint-baseline.xml
@@ -1,5 +1,71 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `new android.util.ArraySet`"
+        errorLine1="        Set&lt;String> stringSetValue = new ArraySet&lt;>();"
+        errorLine2="                                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java"
+            line="144"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Cast from `ArraySet` to `Set` requires API level 23 (current min is 21)"
+        errorLine1="        Set&lt;String> stringSetValue = new ArraySet&lt;>();"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java"
+            line="144"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.util.ArraySet#valueAt`"
+        errorLine1="                ((ArraySet&lt;String>) stringSetValue).valueAt(0),"
+        errorLine2="                                                    ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java"
+            line="189"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Class requires API level 23 (current min is 21): `android.util.ArraySet`"
+        errorLine1="                ((ArraySet&lt;String>) stringSetValue).valueAt(0),"
+        errorLine2="                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java"
+            line="189"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.content.Context#getSystemService`"
+        errorLine1="        KeyguardManager keyguardManager = context.getSystemService(KeyguardManager.class);"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/security/crypto/MasterKeySecureTest.java"
+            line="57"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 21): `android.app.KeyguardManager#isDeviceSecure`"
+        errorLine1="        Assume.assumeTrue(keyguardManager != null &amp;&amp; keyguardManager.isDeviceSecure());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/security/crypto/MasterKeySecureTest.java"
+            line="58"
+            column="70"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/security/identity-credential/lint-baseline.xml b/security/identity-credential/lint-baseline.xml
new file mode 100644
index 0000000..04c0516
--- /dev/null
+++ b/security/identity-credential/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: ResultData.STATUS_OK, ResultData.STATUS_NO_SUCH_ENTRY, ResultData.STATUS_NOT_REQUESTED, ResultData.STATUS_NOT_IN_REQUEST_MESSAGE, ResultData.STATUS_USER_AUTHENTICATION_FAILED, ResultData.STATUS_READER_AUTHENTICATION_FAILED, ResultData.STATUS_NO_ACCESS_CONTROL_PROFILES"
+        errorLine1="                    builder.addErrorStatus(namespaceName, entryName, status);"
+        errorLine2="                                                                     ~~~~~~">
+        <location
+            file="src/main/java/androidx/security/identity/HardwareIdentityCredential.java"
+            line="237"
+            column="70"/>
+    </issue>
+
+</issues>
diff --git a/security/security-app-authenticator-testing/lint-baseline.xml b/security/security-app-authenticator-testing/lint-baseline.xml
new file mode 100644
index 0000000..4ec6f47
--- /dev/null
+++ b/security/security-app-authenticator-testing/lint-baseline.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="        Set&lt;String> newPackageCertDigests = Set.of("
+        errorLine2="                                                ~~">
+        <location
+            file="src/androidTest/java/androidx/security/app/authenticator/TestAppSignatureVerifierTest.java"
+            line="139"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="        Set&lt;String> newAllPackagesCertDigests = Set.of("
+        errorLine2="                                                    ~~">
+        <location
+            file="src/androidTest/java/androidx/security/app/authenticator/TestAppSignatureVerifierTest.java"
+            line="141"
+            column="53"/>
+    </issue>
+
+</issues>
diff --git a/security/security-app-authenticator/lint-baseline.xml b/security/security-app-authenticator/lint-baseline.xml
new file mode 100644
index 0000000..6a0c5d4
--- /dev/null
+++ b/security/security-app-authenticator/lint-baseline.xml
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE1_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="91"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setAllPackagesCertDigestsForPermission(Set.of(SIGNATURE1_DIGEST),"
+        errorLine2="                                                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="102"
+            column="61"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="114"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setAllPackagesCertDigestsForPermission(Set.of(SIGNATURE2_DIGEST),"
+        errorLine2="                                                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="125"
+            column="61"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE2_DIGEST, SIGNATURE1_DIGEST),"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="139"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                        Set.of(SIGNATURE2_DIGEST, SIGNATURE1_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="155"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE1_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="167"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                        Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="169"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE1_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="192"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE1_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="216"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                        Set.of(SIGNATURE1_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="232"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="249"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                        Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="264"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="279"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                        Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="295"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setExpectedIdentities(Set.of(SIGNATURE2_DIGEST, SIGNATURE1_DIGEST))"
+        errorLine2="                                           ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="309"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setExpectedIdentities(Set.of(SIGNATURE2_DIGEST))"
+        errorLine2="                                           ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="320"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                        Set.of(SIGNATURE1_DIGEST, SIGNATURE2_DIGEST, SIGNATURE3_DIGEST))"
+        errorLine2="                            ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="333"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setExpectedIdentities(Set.of(SIGNATURE1_DIGEST, SIGNATURE3_DIGEST))"
+        errorLine2="                                           ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="346"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setExpectedIdentities(Set.of(SIGNATURE1_DIGEST))"
+        errorLine2="                                           ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="358"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setExpectedIdentities(Set.of(SIGNATURE2_DIGEST))"
+        errorLine2="                                           ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="372"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setExpectedIdentities(Set.of(SIGNATURE2_DIGEST))"
+        errorLine2="                                           ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="387"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setExpectedIdentities(Set.of(SIGNATURE2_DIGEST))"
+        errorLine2="                                           ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="402"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE1_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="426"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="447"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `java.util.Set#of`"
+        errorLine1="                .setPackageCertDigestsForPermission(Set.of(SIGNATURE2_DIGEST), TEST_PERMISSION_NAME)"
+        errorLine2="                                                        ~~">
+        <location
+            file="src/test/java/androidx/security/app/authenticator/AppSignatureVerifierTest.java"
+            line="465"
+            column="57"/>
+    </issue>
+
+</issues>
diff --git a/settings.gradle b/settings.gradle
index 71e8a68..c66d7f4 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -363,6 +363,7 @@
 includeProject(":compose:ui:ui-text:ui-text-samples", "compose/ui/ui-text/samples", [BuildType.COMPOSE])
 includeProject(":compose:ui:ui-tooling", "compose/ui/ui-tooling", [BuildType.COMPOSE])
 includeProject(":compose:ui:ui-tooling-data", "compose/ui/ui-tooling-data", [BuildType.COMPOSE])
+includeProject(":compose:ui:ui-tooling-preview", "compose/ui/ui-tooling-preview", [BuildType.COMPOSE])
 includeProject(":compose:ui:ui-unit", "compose/ui/ui-unit", [BuildType.COMPOSE])
 includeProject(":compose:ui:ui-unit:ui-unit-samples", "compose/ui/ui-unit/samples", [BuildType.COMPOSE])
 includeProject(":compose:ui:ui-util", "compose/ui/ui-util", [BuildType.COMPOSE])
diff --git a/sharetarget/OWNERS b/sharetarget/OWNERS
index bbad121..e5d1f0f 100644
--- a/sharetarget/OWNERS
+++ b/sharetarget/OWNERS
@@ -1,2 +1,2 @@
-mett@google.com
 sunnygoyal@google.com
+pinyaoting@google.com
diff --git a/sharetarget/integration-tests/testapp/lint-baseline.xml b/sharetarget/integration-tests/testapp/lint-baseline.xml
index a692025..e8eb413 100644
--- a/sharetarget/integration-tests/testapp/lint-baseline.xml
+++ b/sharetarget/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/sharetarget/sharetarget/lint-baseline.xml b/sharetarget/sharetarget/lint-baseline.xml
index 841949b..d9a42bd 100644
--- a/sharetarget/sharetarget/lint-baseline.xml
+++ b/sharetarget/sharetarget/lint-baseline.xml
@@ -1,5 +1,434 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcutIcon`"
+        errorLine1="        when(mShortcutSaver.getShortcutIcon(any())).thenReturn(mTestIcon);"
+        errorLine2="                            ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ChooserTargetServiceCompatTest.java"
+            line="63"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `createExecutorService`"
+        errorLine1="        mCacheUpdateService = ShortcutInfoCompatSaverImpl.createExecutorService();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="80"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `createExecutorService`"
+        errorLine1="        mDiskIoService = ShortcutInfoCompatSaverImpl.createExecutorService();"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="81"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `ShortcutInfoCompatSaverImpl`"
+        errorLine1="        mShortcutInfoSaver = new ShortcutInfoCompatSaverImpl(mContext, mCacheUpdateService,"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="82"
+            column="30"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `removeAllShortcuts`"
+        errorLine1="        catchAsyncExceptions(mShortcutInfoSaver.removeAllShortcuts());"
+        errorLine2="                                                ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="84"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `removeAllShortcuts`"
+        errorLine1="            mShortcutInfoSaver.removeAllShortcuts().get();"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="156"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getInstance`"
+        errorLine1="                ShortcutInfoCompatSaverImpl.getInstance(mContext);"
+        errorLine2="                                            ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="239"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getInstance`"
+        errorLine1="        assertEquals(saver, ShortcutInfoCompatSaverImpl.getInstance(mContext));"
+        errorLine2="                                                        ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="241"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        List&lt;ShortcutInfoCompat> shortcuts = mShortcutInfoSaver.getShortcuts();"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="246"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        catchAsyncExceptions(mShortcutInfoSaver.addShortcuts(mTestShortcuts));"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="254"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertShortcutsListEquals(testShortcutsWithCategories(), mShortcutInfoSaver.getShortcuts());"
+        errorLine2="                                                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="255"
+            column="85"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        ListenableFuture&lt;?> future = mShortcutInfoSaver.addShortcuts(mTestShortcuts);"
+        errorLine2="                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="260"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertShortcutsListEquals(testShortcutsWithCategories(), mShortcutInfoSaver.getShortcuts());"
+        errorLine2="                                                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="264"
+            column="85"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        catchAsyncExceptions(mShortcutInfoSaver.addShortcuts(firstBatch));"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="280"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        ListenableFuture&lt;Void> future = mShortcutInfoSaver.addShortcuts(secondBatch);"
+        errorLine2="                                                           ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="281"
+            column="60"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertShortcutsListEquals(allShortcuts, mShortcutInfoSaver.getShortcuts());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="283"
+            column="68"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertShortcutsListEquals(allShortcuts, mShortcutInfoSaver.getShortcuts());"
+        errorLine2="                                                                   ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="286"
+            column="68"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        catchAsyncExceptions(mShortcutInfoSaver.addShortcuts(mTestShortcuts));"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="291"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `removeShortcuts`"
+        errorLine1="        ListenableFuture&lt;?> future = mShortcutInfoSaver.removeShortcuts(removeIds);"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="296"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertShortcutsListEquals(testShortcutsWithCategories(), mShortcutInfoSaver.getShortcuts());"
+        errorLine2="                                                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="301"
+            column="85"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertShortcutsListEquals(testShortcutsWithCategories(), mShortcutInfoSaver.getShortcuts());"
+        errorLine2="                                                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="304"
+            column="85"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        catchAsyncExceptions(mShortcutInfoSaver.addShortcuts(mTestShortcuts));"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="309"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertShortcutsListEquals(testShortcutsWithCategories(), mShortcutInfoSaver.getShortcuts());"
+        errorLine2="                                                                                    ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="310"
+            column="85"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `removeAllShortcuts`"
+        errorLine1="        ListenableFuture&lt;?> future = mShortcutInfoSaver.removeAllShortcuts();"
+        errorLine2="                                                        ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="312"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertTrue(mShortcutInfoSaver.getShortcuts().isEmpty());"
+        errorLine2="                                      ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="314"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        assertTrue(mShortcutInfoSaver.getShortcuts().isEmpty());"
+        errorLine2="                                      ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="317"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        ListenableFuture&lt;?> future = mShortcutInfoSaver.addShortcuts(mTestShortcuts);"
+        errorLine2="                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="322"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        List&lt;ShortcutInfoCompat> shortcuts = mShortcutInfoSaver.getShortcuts();"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="326"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        catchAsyncExceptions(mShortcutInfoSaver.addShortcuts(mTestShortcuts));"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="334"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        List&lt;ShortcutInfoCompat> shortcuts = mShortcutInfoSaver.getShortcuts();"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="336"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcutIcon`"
+        errorLine1="            verifyCorrectIconLoaded(item.getId(), mShortcutInfoSaver.getShortcutIcon(item.getId()));"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="338"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        ListenableFuture&lt;?> future = mShortcutInfoSaver.addShortcuts(mTestShortcuts);"
+        errorLine2="                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="344"
+            column="57"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcuts`"
+        errorLine1="        List&lt;ShortcutInfoCompat> shortcuts = mShortcutInfoSaver.getShortcuts();"
+        errorLine2="                                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="348"
+            column="65"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcutIcon`"
+        errorLine1="            verifyCorrectIconLoaded(item.getId(), mShortcutInfoSaver.getShortcutIcon(item.getId()));"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="350"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `addShortcuts`"
+        errorLine1="        catchAsyncExceptions(mShortcutInfoSaver.addShortcuts(mTestShortcuts));"
+        errorLine2="                                                ~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="356"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `getShortcutIcon`"
+        errorLine1="        assertNull(mShortcutInfoSaver.getShortcutIcon(&quot;unknown-id&quot;));"
+        errorLine2="                                      ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="358"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `createExecutorService`"
+        errorLine1="        mCacheUpdateService = ShortcutInfoCompatSaverImpl.createExecutorService();"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="400"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `createExecutorService`"
+        errorLine1="        mDiskIoService = ShortcutInfoCompatSaverImpl.createExecutorService();"
+        errorLine2="                                                     ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="401"
+            column="54"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 19 (current min is 14): `ShortcutInfoCompatSaverImpl`"
+        errorLine1="        mShortcutInfoSaver = new ShortcutInfoCompatSaverImpl(mContext, mCacheUpdateService,"
+        errorLine2="                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/sharetarget/ShortcutInfoCompatSaverTest.java"
+            line="402"
+            column="30"/>
+    </issue>
 
     <issue
         id="UnknownNullness"
diff --git a/sharetarget/sharetarget/src/main/AndroidManifest.xml b/sharetarget/sharetarget/src/main/AndroidManifest.xml
index 5173fa2..044e38f 100644
--- a/sharetarget/sharetarget/src/main/AndroidManifest.xml
+++ b/sharetarget/sharetarget/src/main/AndroidManifest.xml
@@ -19,7 +19,8 @@
 
     <application>
         <service android:name=".ChooserTargetServiceCompat"
-                 android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE">
+                 android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"
+                 android:exported="true">
             <intent-filter>
                 <action android:name="android.service.chooser.ChooserTargetService"/>
             </intent-filter>
diff --git a/slices/builders/lint-baseline.xml b/slices/builders/lint-baseline.xml
index d679f37..bd05510 100644
--- a/slices/builders/lint-baseline.xml
+++ b/slices/builders/lint-baseline.xml
@@ -1,5 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: ListBuilder.LARGE_IMAGE, ListBuilder.SMALL_IMAGE, ListBuilder.ICON_IMAGE, ListBuilder.RAW_IMAGE_SMALL, ListBuilder.RAW_IMAGE_LARGE, ListBuilder.UNKNOWN_IMAGE, ListBuilder.ACTION_WITH_LABEL"
+        errorLine1="        return mSliceAction.getImageMode();"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/builders/SliceAction.java"
+            line="451"
+            column="16"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/slices/core/lint-baseline.xml b/slices/core/lint-baseline.xml
index 2861f41..5e1dac1 100644
--- a/slices/core/lint-baseline.xml
+++ b/slices/core/lint-baseline.xml
@@ -1,5 +1,192 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 19): `android.content.pm.PackageManager#getPackageUid`"
+        errorLine1="        mTestUid = mContext.getPackageManager().getPackageUid(mTestPkg, 0);"
+        errorLine2="                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/slice/SlicePermissionTest.java"
+            line="58"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST"
+        errorLine1="        builder.addHints(slice.getHints());"
+        errorLine2="                         ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="57"
+            column="26"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addSubSlice(unwrap(item.getSlice()), item.getSubType());"
+        errorLine2="                                                                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="61"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST"
+        errorLine1="                    builder.addIcon(item.getIcon().toIcon(), item.getSubType(), item.getHints());"
+        errorLine2="                                                                                ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="64"
+            column="81"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addIcon(item.getIcon().toIcon(), item.getSubType(), item.getHints());"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="64"
+            column="62"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addRemoteInput(item.getRemoteInput(), item.getSubType(),"
+        errorLine2="                                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="67"
+            column="67"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST"
+        errorLine1="                            item.getHints());"
+        errorLine2="                            ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="68"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addAction(item.getAction(), unwrap(item.getSlice()), item.getSubType());"
+        errorLine2="                                                                                 ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="71"
+            column="82"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST"
+        errorLine1="                    builder.addText(item.getText(), item.getSubType(), item.getHints());"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="74"
+            column="72"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addText(item.getText(), item.getSubType(), item.getHints());"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="74"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST"
+        errorLine1="                    builder.addInt(item.getInt(), item.getSubType(), item.getHints());"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="77"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addInt(item.getInt(), item.getSubType(), item.getHints());"
+        errorLine2="                                                  ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="77"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST"
+        errorLine1="                    builder.addLong(item.getLong(), item.getSubType(), item.getHints());"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="80"
+            column="72"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addLong(item.getLong(), item.getSubType(), item.getHints());"
+        errorLine2="                                                    ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="80"
+            column="53"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.HINT_TITLE, Slice.HINT_LIST, Slice.HINT_LIST_ITEM, Slice.HINT_LARGE, Slice.HINT_ACTIONS, Slice.HINT_SELECTED, Slice.HINT_NO_TINT, Slice.HINT_SHORTCUT, Slice.HINT_HORIZONTAL, Slice.HINT_PARTIAL, Slice.HINT_SEE_MORE, Slice.HINT_KEYWORDS, Slice.HINT_ERROR, Slice.HINT_TTL, Slice.HINT_LAST_UPDATED, Slice.HINT_PERMISSION_REQUEST"
+        errorLine1="                    builder.addBundle((Bundle) item.mObj, item.getSubType(), item.getHints());"
+        errorLine2="                                                                             ~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="83"
+            column="78"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Slice.SUBTYPE_COLOR, Slice.SUBTYPE_CONTENT_DESCRIPTION, Slice.SUBTYPE_MAX, Slice.SUBTYPE_MESSAGE, Slice.SUBTYPE_PRIORITY, Slice.SUBTYPE_RANGE, Slice.SUBTYPE_SOURCE, Slice.SUBTYPE_TOGGLE, Slice.SUBTYPE_VALUE, Slice.SUBTYPE_LAYOUT_DIRECTION"
+        errorLine1="                    builder.addBundle((Bundle) item.mObj, item.getSubType(), item.getHints());"
+        errorLine2="                                                          ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceConvert.java"
+            line="83"
+            column="59"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: PermissionChecker.PERMISSION_GRANTED, PermissionChecker.PERMISSION_DENIED, PermissionChecker.PERMISSION_DENIED_APP_OP"
+        errorLine1="        return mManager.checkSlicePermission(uri, pid, uid);"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/slice/SliceManagerWrapper.java"
+            line="62"
+            column="16"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
@@ -47,7 +234,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            return (int) h.getClass().getDeclaredMethod(&quot;getIdentifier&quot;).invoke(h);"
         errorLine2="                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/slices/test/lint-baseline.xml b/slices/test/lint-baseline.xml
index e6ba8b8..11b0024 100644
--- a/slices/test/lint-baseline.xml
+++ b/slices/test/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/slices/view/lint-baseline.xml b/slices/view/lint-baseline.xml
index 113cd8b..58f5cb5 100644
--- a/slices/view/lint-baseline.xml
+++ b/slices/view/lint-baseline.xml
@@ -1,5 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 20 (current min is 19): `android.app.RemoteInput.Builder#build`"
+        errorLine1="        RemoteInput remoteInput = new RemoteInput.Builder(&quot;&quot;).build();"
+        errorLine2="                                                              ~~~~~">
+        <location
+            file="src/androidTest/java/androidx/slice/SliceXmlTest.java"
+            line="80"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 20 (current min is 19): `new android.app.RemoteInput.Builder`"
+        errorLine1="        RemoteInput remoteInput = new RemoteInput.Builder(&quot;&quot;).build();"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/slice/SliceXmlTest.java"
+            line="80"
+            column="35"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/slidingpanelayout/slidingpanelayout/lint-baseline.xml b/slidingpanelayout/slidingpanelayout/lint-baseline.xml
index 5529aaa..cd1e2f1 100644
--- a/slidingpanelayout/slidingpanelayout/lint-baseline.xml
+++ b/slidingpanelayout/slidingpanelayout/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/sqlite/integration-tests/inspection-room-testapp/lint-baseline.xml b/sqlite/integration-tests/inspection-room-testapp/lint-baseline.xml
deleted file mode 100644
index fe92ca3..0000000
--- a/sqlite/integration-tests/inspection-room-testapp/lint-baseline.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    fun invalidationHook() = runBlocking&lt;Unit>(testJob) {"
-        errorLine2="        ~~~~~~~~~~~~~~~~">
-        <location
-            file="src/androidTest/java/androidx/sqlite/inspection/RoomInvalidationHookTest.kt"
-            line="80"
-            column="9"/>
-    </issue>
-
-</issues>
diff --git a/sqlite/integration-tests/inspection-sqldelight-testapp/lint-baseline.xml b/sqlite/integration-tests/inspection-sqldelight-testapp/lint-baseline.xml
deleted file mode 100644
index c5d00a5..0000000
--- a/sqlite/integration-tests/inspection-sqldelight-testapp/lint-baseline.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="MissingTestSizeAnnotation"
-        message="Missing test size annotation"
-        errorLine1="    fun test() {"
-        errorLine2="        ~~~~">
-        <location
-            file="src/androidTest/java/androidx/sqlite/inspection/SqlDelightInvalidationTest.kt"
-            line="73"
-            column="9"/>
-    </issue>
-
-</issues>
diff --git a/sqlite/sqlite-framework/lint-baseline.xml b/sqlite/sqlite-framework/lint-baseline.xml
index 6603aec..6e6c458 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 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
@@ -8,7 +8,7 @@
         errorLine2="        ^">
         <location
             file="src/main/java/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.java"
-            line="143"
+            line="149"
             column="9"/>
     </issue>
 
@@ -19,7 +19,7 @@
         errorLine2="        ^">
         <location
             file="src/main/java/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.java"
-            line="154"
+            line="160"
             column="9"/>
     </issue>
 
@@ -30,7 +30,7 @@
         errorLine2="        ^">
         <location
             file="src/main/java/androidx/sqlite/db/framework/FrameworkSQLiteOpenHelper.java"
-            line="199"
+            line="205"
             column="9"/>
     </issue>
 
diff --git a/sqlite/sqlite-inspection/lint-baseline.xml b/sqlite/sqlite-inspection/lint-baseline.xml
index d57b4aa..3dabb13 100644
--- a/sqlite/sqlite-inspection/lint-baseline.xml
+++ b/sqlite/sqlite-inspection/lint-baseline.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    mRefreshMethod.invoke(instance);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14,7 +14,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            mNotifyDataChangeMethod.invoke(query);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/sqlite/sqlite/lint-baseline.xml b/sqlite/sqlite/lint-baseline.xml
index 1c02a16..3aab667 100644
--- a/sqlite/sqlite/lint-baseline.xml
+++ b/sqlite/sqlite/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
index 98a416e..510e9e2c 100644
--- a/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
+++ b/swiperefreshlayout/swiperefreshlayout/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="KotlinPropertyAccess"
@@ -277,7 +277,7 @@
         errorLine2="                                     ~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1014"
+            line="1016"
             column="38"/>
     </issue>
 
@@ -288,7 +288,7 @@
         errorLine2="                                    ~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1021"
+            line="1023"
             column="37"/>
     </issue>
 
@@ -299,7 +299,7 @@
         errorLine2="                                 ~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1027"
+            line="1029"
             column="34"/>
     </issue>
 
@@ -310,7 +310,7 @@
         errorLine2="                              ~~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1065"
+            line="1067"
             column="31"/>
     </issue>
 
@@ -321,7 +321,7 @@
         errorLine2="                                                           ~~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1071"
+            line="1073"
             column="60"/>
     </issue>
 
@@ -332,7 +332,7 @@
         errorLine2="                                                                           ~~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1071"
+            line="1073"
             column="76"/>
     </issue>
 
@@ -343,7 +343,7 @@
         errorLine2="                              ~~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1106"
+            line="1108"
             column="31"/>
     </issue>
 
@@ -354,7 +354,7 @@
         errorLine2="                                                           ~~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1112"
+            line="1114"
             column="60"/>
     </issue>
 
@@ -365,7 +365,7 @@
         errorLine2="                                                                           ~~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1112"
+            line="1114"
             column="76"/>
     </issue>
 
@@ -376,7 +376,7 @@
         errorLine2="                                ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/swiperefreshlayout/widget/SwipeRefreshLayout.java"
-            line="1217"
+            line="1219"
             column="33"/>
     </issue>
 
diff --git a/testutils/testutils-espresso/lint-baseline.xml b/testutils/testutils-espresso/lint-baseline.xml
index b4cf80d..6955bb6 100644
--- a/testutils/testutils-espresso/lint-baseline.xml
+++ b/testutils/testutils-espresso/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="UnknownNullness"
diff --git a/testutils/testutils-runtime/lint-baseline.xml b/testutils/testutils-runtime/lint-baseline.xml
index 7d270a3..4144abb 100644
--- a/testutils/testutils-runtime/lint-baseline.xml
+++ b/testutils/testutils-runtime/lint-baseline.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            durationSetter.invoke(null, 1.0f)"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -14,7 +14,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="    private val originalDurationScale = durationGetter.invoke(null) as Float"
         errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -25,7 +25,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="        durationSetter.invoke(null, animationDurationScale)"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -36,7 +36,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="        durationSetter.invoke(null, originalDurationScale)"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/textclassifier/integration-tests/testapp/lint-baseline.xml b/textclassifier/integration-tests/testapp/lint-baseline.xml
index f33cca5..d36e58b 100644
--- a/textclassifier/integration-tests/testapp/lint-baseline.xml
+++ b/textclassifier/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="SyntheticAccessor"
diff --git a/textclassifier/textclassifier/lint-baseline.xml b/textclassifier/textclassifier/lint-baseline.xml
index 63494c0..c00c3c9 100644
--- a/textclassifier/textclassifier/lint-baseline.xml
+++ b/textclassifier/textclassifier/lint-baseline.xml
@@ -1,5 +1,71 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `FLOATING_TOOLBAR_TAG`"
+        errorLine1="        final Object tag = FloatingToolbar.FLOATING_TOOLBAR_TAG;"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/textclassifier/widget/FloatingToolbarEspressoUtils.java"
+            line="45"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `MAIN_PANEL_TAG`"
+        errorLine1="        final Object tag = FloatingToolbar.MAIN_PANEL_TAG;"
+        errorLine2="                                           ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/textclassifier/widget/FloatingToolbarEspressoUtils.java"
+            line="61"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `OVERFLOW_PANEL_TAG`"
+        errorLine1="        final Object tag = FloatingToolbar.OVERFLOW_PANEL_TAG;"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/textclassifier/widget/FloatingToolbarEspressoUtils.java"
+            line="66"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 23 (current min is 14): `FLOATING_TOOLBAR_TAG`"
+        errorLine1="        final Object tag = FloatingToolbar.FLOATING_TOOLBAR_TAG;"
+        errorLine2="                                           ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/textclassifier/widget/FloatingToolbarEspressoUtils.java"
+            line="71"
+            column="44"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: ConversationAction.TYPE_VIEW_CALENDAR, ConversationAction.TYPE_VIEW_MAP, ConversationAction.TYPE_TRACK_FLIGHT, ConversationAction.TYPE_OPEN_URL, ConversationAction.TYPE_SEND_SMS, ConversationAction.TYPE_CALL_PHONE, ConversationAction.TYPE_SEND_EMAIL, ConversationAction.TYPE_TEXT_REPLY, ConversationAction.TYPE_CREATE_REMINDER, ConversationAction.TYPE_SHARE_LOCATION, ConversationAction.TYPE_ADD_CONTACT, ConversationAction.TYPE_COPY"
+        errorLine1="        return new ConversationAction.Builder(conversationAction.getType())"
+        errorLine2="                                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/textclassifier/ConversationAction.java"
+            line="254"
+            column="47"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: Request.HINT_FOR_NOTIFICATION, Request.HINT_FOR_IN_APP"
+        errorLine1="                    .setHints(request.getHints())"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/textclassifier/ConversationActions.java"
+            line="484"
+            column="31"/>
+    </issue>
 
     <issue
         id="WrongConstant"
@@ -13,6 +79,28 @@
     </issue>
 
     <issue
+        id="WrongConstant"
+        message="Must be one of: TextClassifier.TYPE_UNKNOWN, TextClassifier.TYPE_OTHER, TextClassifier.TYPE_EMAIL, TextClassifier.TYPE_PHONE, TextClassifier.TYPE_ADDRESS, TextClassifier.TYPE_URL, TextClassifier.TYPE_DATE, TextClassifier.TYPE_DATE_TIME, TextClassifier.TYPE_FLIGHT_NUMBER"
+        errorLine1="            builder.setEntityType(entity, textClassification.getConfidenceScore(entity));"
+        errorLine2="                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/textclassifier/TextClassification.java"
+            line="236"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: TextClassifier.TYPE_UNKNOWN, TextClassifier.TYPE_OTHER, TextClassifier.TYPE_EMAIL, TextClassifier.TYPE_PHONE, TextClassifier.TYPE_ADDRESS, TextClassifier.TYPE_URL, TextClassifier.TYPE_DATE, TextClassifier.TYPE_DATE_TIME, TextClassifier.TYPE_FLIGHT_NUMBER"
+        errorLine1="            builder.setEntityType(entity, textSelection.getConfidenceScore(entity));"
+        errorLine2="                                  ~~~~~~">
+        <location
+            file="src/main/java/androidx/textclassifier/TextSelection.java"
+            line="192"
+            column="35"/>
+    </issue>
+
+    <issue
         id="ClassVerificationFailure"
         message="This call references a method added in API level 26; however, the containing class androidx.textclassifier.BundleUtils is reachable from earlier API levels and will fail run-time class verification."
         errorLine1="            return bundle.deepCopy();"
diff --git a/tracing/tracing/lint-baseline.xml b/tracing/tracing/lint-baseline.xml
deleted file mode 100644
index ca00e4a..0000000
--- a/tracing/tracing/lint-baseline.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-</issues>
diff --git a/transition/transition/lint-baseline.xml b/transition/transition/lint-baseline.xml
index 1d9f07a..a9da805 100644
--- a/transition/transition/lint-baseline.xml
+++ b/transition/transition/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ResourceType"
@@ -168,7 +168,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                        (View) sAddGhostMethod.invoke(null, view, viewGroup, matrix));"
         errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -179,7 +179,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                sRemoveGhostMethod.invoke(null, view);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -190,7 +190,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                sCancelMethod.invoke(t);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -201,7 +201,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                    sInvalidateChildInParentFastMethod.invoke(mHostView, left, top, dirty);"
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -212,7 +212,7 @@
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="                sSetFrameMethod.invoke(v, left, top, right, bottom);"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
diff --git a/tv-provider/tv-provider/lint-baseline.xml b/tv-provider/tv-provider/lint-baseline.xml
index f9b1035..0196d88 100644
--- a/tv-provider/tv-provider/lint-baseline.xml
+++ b/tv-provider/tv-provider/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/vectordrawable/integration-tests/testapp/lint-baseline.xml b/vectordrawable/integration-tests/testapp/lint-baseline.xml
index 610f5d7..b8cad8e 100644
--- a/vectordrawable/integration-tests/testapp/lint-baseline.xml
+++ b/vectordrawable/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="NewApi"
diff --git a/vectordrawable/vectordrawable-animated/lint-baseline.xml b/vectordrawable/vectordrawable-animated/lint-baseline.xml
index 01cd1086..9ec2eb3 100644
--- a/vectordrawable/vectordrawable-animated/lint-baseline.xml
+++ b/vectordrawable/vectordrawable-animated/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/vectordrawable/vectordrawable/lint-baseline.xml b/vectordrawable/vectordrawable/lint-baseline.xml
index 3a9ced8..2a90505 100644
--- a/vectordrawable/vectordrawable/lint-baseline.xml
+++ b/vectordrawable/vectordrawable/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ResourceType"
diff --git a/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml b/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml
index d4598db..dc618a7 100644
--- a/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml
+++ b/versionedparcelable/versionedparcelable-compiler/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/versionedparcelable/versionedparcelable/lint-baseline.xml b/versionedparcelable/versionedparcelable/lint-baseline.xml
index 949938fb..6235886 100644
--- a/versionedparcelable/versionedparcelable/lint-baseline.xml
+++ b/versionedparcelable/versionedparcelable/lint-baseline.xml
@@ -1,25 +1,25 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            return (T) m.invoke(null, versionedParcel);"
         errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/versionedparcelable/VersionedParcel.java"
-            line="1615"
+            line="1598"
             column="24"/>
     </issue>
 
     <issue
         id="BanUncheckedReflection"
-        message="Calling Method.invoke without an SDK check"
+        message="Calling `Method.invoke` without an SDK check"
         errorLine1="            m.invoke(null, val, versionedParcel);"
         errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/versionedparcelable/VersionedParcel.java"
-            line="1642"
+            line="1625"
             column="13"/>
     </issue>
 
@@ -30,7 +30,7 @@
         errorLine2="                                                               ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/versionedparcelable/VersionedParcel.java"
-            line="290"
+            line="291"
             column="64"/>
     </issue>
 
diff --git a/viewpager/viewpager/lint-baseline.xml b/viewpager/viewpager/lint-baseline.xml
index d331d83..25cc6cd 100644
--- a/viewpager/viewpager/lint-baseline.xml
+++ b/viewpager/viewpager/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="LambdaLast"
diff --git a/viewpager2/integration-tests/testapp/lint-baseline.xml b/viewpager2/integration-tests/testapp/lint-baseline.xml
index a8c267e..7b63883 100644
--- a/viewpager2/integration-tests/testapp/lint-baseline.xml
+++ b/viewpager2/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/viewpager2/viewpager2/lint-baseline.xml b/viewpager2/viewpager2/lint-baseline.xml
index 8c446ed..57765b2 100644
--- a/viewpager2/viewpager2/lint-baseline.xml
+++ b/viewpager2/viewpager2/lint-baseline.xml
@@ -1,5 +1,27 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-dev" type="baseline" client="gradle" name="AGP (7.1.0-dev)" variant="all" version="7.1.0-dev">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 16 (current min is 14): `android.view.View#setHasTransientState`"
+        errorLine1="                v.setHasTransientState(true)"
+        errorLine2="                  ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/viewpager2/widget/TransientStateFragmentTest.kt"
+            line="76"
+            column="19"/>
+    </issue>
+
+    <issue
+        id="WrongConstant"
+        message="Must be one of: ViewPager2.ORIENTATION_HORIZONTAL, ViewPager2.ORIENTATION_VERTICAL"
+        errorLine1="        return mLayoutManager.getOrientation();"
+        errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/main/java/androidx/viewpager2/widget/ViewPager2.java"
+            line="579"
+            column="16"/>
+    </issue>
 
     <issue
         id="ClassVerificationFailure"
diff --git a/wear/compose/foundation/api/current.txt b/wear/compose/foundation/api/current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/wear/compose/foundation/api/current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/wear/compose/foundation/api/public_plus_experimental_current.txt b/wear/compose/foundation/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/wear/compose/foundation/api/public_plus_experimental_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/wear/compose/foundation/api/res-current.txt b/wear/compose/foundation/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/foundation/api/res-current.txt
diff --git a/wear/compose/foundation/api/restricted_current.txt b/wear/compose/foundation/api/restricted_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/wear/compose/foundation/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/wear/compose/foundation/build.gradle b/wear/compose/foundation/build.gradle
index 845d675..7ffca80 100644
--- a/wear/compose/foundation/build.gradle
+++ b/wear/compose/foundation/build.gradle
@@ -17,7 +17,6 @@
 import androidx.build.LibraryGroups
 import androidx.build.LibraryType
 import androidx.build.LibraryVersions
-import androidx.build.RunApiTasks
 import androidx.build.AndroidXComposePlugin
 
 plugins {
@@ -94,5 +93,4 @@
             "functionality to support wearable specific devices sizes, shapes and navigation " +
             "gestures. It builds upon the Jetpack Compose libraries."
     targetsJavaConsumers = false
-    runApiTasks = new RunApiTasks.No("API tracking disabled while the package is empty")
 }
diff --git a/wear/compose/material/api/current.txt b/wear/compose/material/api/current.txt
new file mode 100644
index 0000000..53b52ed
--- /dev/null
+++ b/wear/compose/material/api/current.txt
@@ -0,0 +1,250 @@
+// Signature format: 4.0
+package androidx.wear.compose.material {
+
+  @androidx.compose.runtime.Stable public interface ButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+  }
+
+  public final class ButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors buttonColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+    method public float getCompactButtonBackgroundPadding-D9Ej5fM();
+    method public float getDefaultButtonSize-D9Ej5fM();
+    method public float getExtraSmallButtonSize-D9Ej5fM();
+    method public float getLargeButtonSize-D9Ej5fM();
+    method public float getSmallButtonSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors iconButtonColors-8_81llA(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors primaryButtonColors-6xK2E-Q(optional long backgroundColor, optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors secondaryButtonColors-6xK2E-Q(optional long backgroundColor, optional long contentColor);
+    property public final float CompactButtonBackgroundPadding;
+    property public final float DefaultButtonSize;
+    property public final float ExtraSmallButtonSize;
+    property public final float LargeButtonSize;
+    property public final float SmallButtonSize;
+    field public static final androidx.wear.compose.material.ButtonDefaults INSTANCE;
+  }
+
+  public final class ButtonKt {
+    method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactButton-nLbPc2M(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class CardDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter cardBackgroundPainter-JnqQKQ0(optional long startBackgroundColor, optional long endBackgroundColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method public float getAppImageSize-D9Ej5fM();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    property public final float AppImageSize;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.CardDefaults INSTANCE;
+  }
+
+  public final class CardKt {
+    method @androidx.compose.runtime.Composable public static void AppCard-8_uoIm8(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> appName, kotlin.jvm.functions.Function0<kotlin.Unit> time, kotlin.jvm.functions.Function0<kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> body, optional kotlin.jvm.functions.Function0<kotlin.Unit>? appImage, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long appColor, optional long timeColor, optional long titleColor, optional long bodyColor);
+    method @androidx.compose.runtime.Composable public static void Card-ajRWwWc(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> iconTintColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+  }
+
+  public final class ChipDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors childChipColors-xS_xkl8(optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors-4aXaTpA(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconTintColor);
+    method public androidx.compose.foundation.layout.PaddingValues contentPadding(boolean hasIcon);
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public androidx.compose.foundation.layout.PaddingValues getContentWithIconPadding();
+    method public float getIconSize-D9Ej5fM();
+    method public float getLargeIconSize-D9Ej5fM();
+    method public float getSmallIconSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors gradientBackgroundChipColors-hbTsPhk(optional long startBackgroundColor, optional long endBackgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors imageBackgroundChipColors-Uuj8IBc(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors primaryChipColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors secondaryChipColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentWithIconPadding;
+    property public final float IconSize;
+    property public final float LargeIconSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ChipDefaults INSTANCE;
+  }
+
+  public final class ChipKt {
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void Chip-KdzdggI(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+  }
+
+  @androidx.compose.runtime.Stable public final class Colors {
+    method public androidx.wear.compose.material.Colors copy-4aXaTpA(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long error, optional long onPrimary, optional long onSecondary, optional long onError);
+    method public long getBackground-0d7_KjU();
+    method public long getError-0d7_KjU();
+    method public long getOnBackground-0d7_KjU();
+    method public long getOnError-0d7_KjU();
+    method public long getOnPrimary-0d7_KjU();
+    method public long getOnSecondary-0d7_KjU();
+    method public long getOnSurface-0d7_KjU();
+    method public long getOnSurfaceVariant-0d7_KjU();
+    method public long getOnSurfaceVariant2-0d7_KjU();
+    method public long getPrimary-0d7_KjU();
+    method public long getPrimaryVariant-0d7_KjU();
+    method public long getSecondary-0d7_KjU();
+    method public long getSecondaryVariant-0d7_KjU();
+    method public long getSurface-0d7_KjU();
+    property public final long background;
+    property public final long error;
+    property public final long onBackground;
+    property public final long onError;
+    property public final long onPrimary;
+    property public final long onSecondary;
+    property public final long onSurface;
+    property public final long onSurfaceVariant;
+    property public final long onSurfaceVariant2;
+    property public final long primary;
+    property public final long primaryVariant;
+    property public final long secondary;
+    property public final long secondaryVariant;
+    property public final long surface;
+  }
+
+  public final class ColorsKt {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor-8_81llA(long backgroundColor);
+    method public static long contentColorFor-jR8T7bM(androidx.wear.compose.material.Colors, long backgroundColor);
+  }
+
+  public final class ContentAlpha {
+    method @androidx.compose.runtime.Composable public float getDisabled();
+    method @androidx.compose.runtime.Composable public float getHigh();
+    method @androidx.compose.runtime.Composable public float getMedium();
+    property @androidx.compose.runtime.Composable public final float disabled;
+    property @androidx.compose.runtime.Composable public final float high;
+    property @androidx.compose.runtime.Composable public final float medium;
+    field public static final androidx.wear.compose.material.ContentAlpha INSTANCE;
+  }
+
+  public final class ContentAlphaKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+  }
+
+  public final class ContentColorKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+  }
+
+  public final class IconKt {
+    method @androidx.compose.runtime.Composable public static void Icon-8NTYWNk(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon-BG621w0(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon-hGAziDE(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+  }
+
+  public final class MaterialTextSelectionColorsKt {
+  }
+
+  public final class MaterialTheme {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Colors getColors();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Shapes getShapes();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Typography getTypography();
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Colors colors;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Shapes shapes;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Typography typography;
+    field public static final androidx.wear.compose.material.MaterialTheme INSTANCE;
+  }
+
+  public final class MaterialThemeKt {
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.wear.compose.material.Colors colors, optional androidx.wear.compose.material.Typography typography, optional androidx.wear.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Shapes {
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.wear.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+    method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+    method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+    property public final androidx.compose.foundation.shape.CornerBasedShape large;
+    property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+    property public final androidx.compose.foundation.shape.CornerBasedShape small;
+  }
+
+  public final class ShapesKt {
+  }
+
+  public final class TextKt {
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Text-TPAwlIA(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @androidx.compose.runtime.Composable public static void Text-Vh6c2nE(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleButtonDefaults {
+    method public float getDefaultToggleButtonSize-D9Ej5fM();
+    method public float getSmallToggleButtonSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleButtonColors toggleButtonColors-4aXaTpA(optional long checkedBackgroundColor, optional long checkedContentColor, optional long disabledCheckedBackgroundColor, optional long disabledCheckedContentColor, optional long uncheckedBackgroundColor, optional long uncheckedContentColor, optional long disabledUncheckedBackgroundColor, optional long disabledUncheckedContentColor);
+    property public final float DefaultToggleButtonSize;
+    property public final float SmallToggleButtonSize;
+    field public static final androidx.wear.compose.material.ToggleButtonDefaults INSTANCE;
+  }
+
+  public final class ToggleButtonKt {
+    method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> splitBackgroundOverlay(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleIconTintColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleChipDefaults {
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleChipColors toggleChipColors-YAusTmY(optional long checkedStartBackgroundColor, optional long checkedEndBackgroundColor, optional long checkedContentColor, optional long checkedSecondaryContentColor, optional long checkedToggleIconTintColor, optional long uncheckedStartBackgroundColor, optional long uncheckedEndBackgroundColor, optional long uncheckedContentColor, optional long uncheckedSecondaryContentColor, optional long uncheckedToggleIconTintColor, optional long splitBackgroundOverlayColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    field public static final androidx.wear.compose.material.ToggleChipDefaults INSTANCE;
+  }
+
+  public final class ToggleChipKt {
+    method @androidx.compose.runtime.Composable public static void SplitToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleIcon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource checkedInteractionSource, optional androidx.compose.foundation.interaction.MutableInteractionSource clickInteractionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Composable public static void ToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? appIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Typography {
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2);
+    method public androidx.wear.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption1();
+    method public androidx.compose.ui.text.TextStyle getCaption2();
+    method public androidx.compose.ui.text.TextStyle getDisplay1();
+    method public androidx.compose.ui.text.TextStyle getDisplay2();
+    method public androidx.compose.ui.text.TextStyle getDisplay3();
+    method public androidx.compose.ui.text.TextStyle getTitle1();
+    method public androidx.compose.ui.text.TextStyle getTitle2();
+    method public androidx.compose.ui.text.TextStyle getTitle3();
+    property public final androidx.compose.ui.text.TextStyle body1;
+    property public final androidx.compose.ui.text.TextStyle body2;
+    property public final androidx.compose.ui.text.TextStyle button;
+    property public final androidx.compose.ui.text.TextStyle caption1;
+    property public final androidx.compose.ui.text.TextStyle caption2;
+    property public final androidx.compose.ui.text.TextStyle display1;
+    property public final androidx.compose.ui.text.TextStyle display2;
+    property public final androidx.compose.ui.text.TextStyle display3;
+    property public final androidx.compose.ui.text.TextStyle title1;
+    property public final androidx.compose.ui.text.TextStyle title2;
+    property public final androidx.compose.ui.text.TextStyle title3;
+  }
+
+  public final class TypographyKt {
+  }
+
+}
+
diff --git a/wear/compose/material/api/public_plus_experimental_current.txt b/wear/compose/material/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..53b52ed
--- /dev/null
+++ b/wear/compose/material/api/public_plus_experimental_current.txt
@@ -0,0 +1,250 @@
+// Signature format: 4.0
+package androidx.wear.compose.material {
+
+  @androidx.compose.runtime.Stable public interface ButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+  }
+
+  public final class ButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors buttonColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+    method public float getCompactButtonBackgroundPadding-D9Ej5fM();
+    method public float getDefaultButtonSize-D9Ej5fM();
+    method public float getExtraSmallButtonSize-D9Ej5fM();
+    method public float getLargeButtonSize-D9Ej5fM();
+    method public float getSmallButtonSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors iconButtonColors-8_81llA(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors primaryButtonColors-6xK2E-Q(optional long backgroundColor, optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors secondaryButtonColors-6xK2E-Q(optional long backgroundColor, optional long contentColor);
+    property public final float CompactButtonBackgroundPadding;
+    property public final float DefaultButtonSize;
+    property public final float ExtraSmallButtonSize;
+    property public final float LargeButtonSize;
+    property public final float SmallButtonSize;
+    field public static final androidx.wear.compose.material.ButtonDefaults INSTANCE;
+  }
+
+  public final class ButtonKt {
+    method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactButton-nLbPc2M(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class CardDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter cardBackgroundPainter-JnqQKQ0(optional long startBackgroundColor, optional long endBackgroundColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method public float getAppImageSize-D9Ej5fM();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    property public final float AppImageSize;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.CardDefaults INSTANCE;
+  }
+
+  public final class CardKt {
+    method @androidx.compose.runtime.Composable public static void AppCard-8_uoIm8(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> appName, kotlin.jvm.functions.Function0<kotlin.Unit> time, kotlin.jvm.functions.Function0<kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> body, optional kotlin.jvm.functions.Function0<kotlin.Unit>? appImage, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long appColor, optional long timeColor, optional long titleColor, optional long bodyColor);
+    method @androidx.compose.runtime.Composable public static void Card-ajRWwWc(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> iconTintColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+  }
+
+  public final class ChipDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors childChipColors-xS_xkl8(optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors-4aXaTpA(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconTintColor);
+    method public androidx.compose.foundation.layout.PaddingValues contentPadding(boolean hasIcon);
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public androidx.compose.foundation.layout.PaddingValues getContentWithIconPadding();
+    method public float getIconSize-D9Ej5fM();
+    method public float getLargeIconSize-D9Ej5fM();
+    method public float getSmallIconSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors gradientBackgroundChipColors-hbTsPhk(optional long startBackgroundColor, optional long endBackgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors imageBackgroundChipColors-Uuj8IBc(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors primaryChipColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors secondaryChipColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentWithIconPadding;
+    property public final float IconSize;
+    property public final float LargeIconSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ChipDefaults INSTANCE;
+  }
+
+  public final class ChipKt {
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void Chip-KdzdggI(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+  }
+
+  @androidx.compose.runtime.Stable public final class Colors {
+    method public androidx.wear.compose.material.Colors copy-4aXaTpA(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long error, optional long onPrimary, optional long onSecondary, optional long onError);
+    method public long getBackground-0d7_KjU();
+    method public long getError-0d7_KjU();
+    method public long getOnBackground-0d7_KjU();
+    method public long getOnError-0d7_KjU();
+    method public long getOnPrimary-0d7_KjU();
+    method public long getOnSecondary-0d7_KjU();
+    method public long getOnSurface-0d7_KjU();
+    method public long getOnSurfaceVariant-0d7_KjU();
+    method public long getOnSurfaceVariant2-0d7_KjU();
+    method public long getPrimary-0d7_KjU();
+    method public long getPrimaryVariant-0d7_KjU();
+    method public long getSecondary-0d7_KjU();
+    method public long getSecondaryVariant-0d7_KjU();
+    method public long getSurface-0d7_KjU();
+    property public final long background;
+    property public final long error;
+    property public final long onBackground;
+    property public final long onError;
+    property public final long onPrimary;
+    property public final long onSecondary;
+    property public final long onSurface;
+    property public final long onSurfaceVariant;
+    property public final long onSurfaceVariant2;
+    property public final long primary;
+    property public final long primaryVariant;
+    property public final long secondary;
+    property public final long secondaryVariant;
+    property public final long surface;
+  }
+
+  public final class ColorsKt {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor-8_81llA(long backgroundColor);
+    method public static long contentColorFor-jR8T7bM(androidx.wear.compose.material.Colors, long backgroundColor);
+  }
+
+  public final class ContentAlpha {
+    method @androidx.compose.runtime.Composable public float getDisabled();
+    method @androidx.compose.runtime.Composable public float getHigh();
+    method @androidx.compose.runtime.Composable public float getMedium();
+    property @androidx.compose.runtime.Composable public final float disabled;
+    property @androidx.compose.runtime.Composable public final float high;
+    property @androidx.compose.runtime.Composable public final float medium;
+    field public static final androidx.wear.compose.material.ContentAlpha INSTANCE;
+  }
+
+  public final class ContentAlphaKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+  }
+
+  public final class ContentColorKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+  }
+
+  public final class IconKt {
+    method @androidx.compose.runtime.Composable public static void Icon-8NTYWNk(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon-BG621w0(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon-hGAziDE(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+  }
+
+  public final class MaterialTextSelectionColorsKt {
+  }
+
+  public final class MaterialTheme {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Colors getColors();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Shapes getShapes();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Typography getTypography();
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Colors colors;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Shapes shapes;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Typography typography;
+    field public static final androidx.wear.compose.material.MaterialTheme INSTANCE;
+  }
+
+  public final class MaterialThemeKt {
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.wear.compose.material.Colors colors, optional androidx.wear.compose.material.Typography typography, optional androidx.wear.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Shapes {
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.wear.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+    method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+    method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+    property public final androidx.compose.foundation.shape.CornerBasedShape large;
+    property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+    property public final androidx.compose.foundation.shape.CornerBasedShape small;
+  }
+
+  public final class ShapesKt {
+  }
+
+  public final class TextKt {
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Text-TPAwlIA(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @androidx.compose.runtime.Composable public static void Text-Vh6c2nE(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleButtonDefaults {
+    method public float getDefaultToggleButtonSize-D9Ej5fM();
+    method public float getSmallToggleButtonSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleButtonColors toggleButtonColors-4aXaTpA(optional long checkedBackgroundColor, optional long checkedContentColor, optional long disabledCheckedBackgroundColor, optional long disabledCheckedContentColor, optional long uncheckedBackgroundColor, optional long uncheckedContentColor, optional long disabledUncheckedBackgroundColor, optional long disabledUncheckedContentColor);
+    property public final float DefaultToggleButtonSize;
+    property public final float SmallToggleButtonSize;
+    field public static final androidx.wear.compose.material.ToggleButtonDefaults INSTANCE;
+  }
+
+  public final class ToggleButtonKt {
+    method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> splitBackgroundOverlay(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleIconTintColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleChipDefaults {
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleChipColors toggleChipColors-YAusTmY(optional long checkedStartBackgroundColor, optional long checkedEndBackgroundColor, optional long checkedContentColor, optional long checkedSecondaryContentColor, optional long checkedToggleIconTintColor, optional long uncheckedStartBackgroundColor, optional long uncheckedEndBackgroundColor, optional long uncheckedContentColor, optional long uncheckedSecondaryContentColor, optional long uncheckedToggleIconTintColor, optional long splitBackgroundOverlayColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    field public static final androidx.wear.compose.material.ToggleChipDefaults INSTANCE;
+  }
+
+  public final class ToggleChipKt {
+    method @androidx.compose.runtime.Composable public static void SplitToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleIcon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource checkedInteractionSource, optional androidx.compose.foundation.interaction.MutableInteractionSource clickInteractionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Composable public static void ToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? appIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Typography {
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2);
+    method public androidx.wear.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption1();
+    method public androidx.compose.ui.text.TextStyle getCaption2();
+    method public androidx.compose.ui.text.TextStyle getDisplay1();
+    method public androidx.compose.ui.text.TextStyle getDisplay2();
+    method public androidx.compose.ui.text.TextStyle getDisplay3();
+    method public androidx.compose.ui.text.TextStyle getTitle1();
+    method public androidx.compose.ui.text.TextStyle getTitle2();
+    method public androidx.compose.ui.text.TextStyle getTitle3();
+    property public final androidx.compose.ui.text.TextStyle body1;
+    property public final androidx.compose.ui.text.TextStyle body2;
+    property public final androidx.compose.ui.text.TextStyle button;
+    property public final androidx.compose.ui.text.TextStyle caption1;
+    property public final androidx.compose.ui.text.TextStyle caption2;
+    property public final androidx.compose.ui.text.TextStyle display1;
+    property public final androidx.compose.ui.text.TextStyle display2;
+    property public final androidx.compose.ui.text.TextStyle display3;
+    property public final androidx.compose.ui.text.TextStyle title1;
+    property public final androidx.compose.ui.text.TextStyle title2;
+    property public final androidx.compose.ui.text.TextStyle title3;
+  }
+
+  public final class TypographyKt {
+  }
+
+}
+
diff --git a/wear/compose/material/api/res-current.txt b/wear/compose/material/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/wear/compose/material/api/res-current.txt
diff --git a/wear/compose/material/api/restricted_current.txt b/wear/compose/material/api/restricted_current.txt
new file mode 100644
index 0000000..53b52ed
--- /dev/null
+++ b/wear/compose/material/api/restricted_current.txt
@@ -0,0 +1,250 @@
+// Signature format: 4.0
+package androidx.wear.compose.material {
+
+  @androidx.compose.runtime.Stable public interface ButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+  }
+
+  public final class ButtonDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors buttonColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long disabledBackgroundColor, optional long disabledContentColor);
+    method public float getCompactButtonBackgroundPadding-D9Ej5fM();
+    method public float getDefaultButtonSize-D9Ej5fM();
+    method public float getExtraSmallButtonSize-D9Ej5fM();
+    method public float getLargeButtonSize-D9Ej5fM();
+    method public float getSmallButtonSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors iconButtonColors-8_81llA(optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors primaryButtonColors-6xK2E-Q(optional long backgroundColor, optional long contentColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ButtonColors secondaryButtonColors-6xK2E-Q(optional long backgroundColor, optional long contentColor);
+    property public final float CompactButtonBackgroundPadding;
+    property public final float DefaultButtonSize;
+    property public final float ExtraSmallButtonSize;
+    property public final float LargeButtonSize;
+    property public final float SmallButtonSize;
+    field public static final androidx.wear.compose.material.ButtonDefaults INSTANCE;
+  }
+
+  public final class ButtonKt {
+    method @androidx.compose.runtime.Composable public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactButton-nLbPc2M(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ButtonColors colors, optional float backgroundPadding, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  public final class CardDefaults {
+    method @androidx.compose.runtime.Composable public androidx.compose.ui.graphics.painter.Painter cardBackgroundPainter-JnqQKQ0(optional long startBackgroundColor, optional long endBackgroundColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method public float getAppImageSize-D9Ej5fM();
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    property public final float AppImageSize;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    field public static final androidx.wear.compose.material.CardDefaults INSTANCE;
+  }
+
+  public final class CardKt {
+    method @androidx.compose.runtime.Composable public static void AppCard-8_uoIm8(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, kotlin.jvm.functions.Function0<kotlin.Unit> appName, kotlin.jvm.functions.Function0<kotlin.Unit> time, kotlin.jvm.functions.Function0<kotlin.Unit> title, kotlin.jvm.functions.Function0<kotlin.Unit> body, optional kotlin.jvm.functions.Function0<kotlin.Unit>? appImage, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long appColor, optional long timeColor, optional long titleColor, optional long bodyColor);
+    method @androidx.compose.runtime.Composable public static void Card-ajRWwWc(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional androidx.compose.ui.graphics.painter.Painter backgroundPainter, optional long contentColor, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> iconTintColor(boolean enabled);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled);
+  }
+
+  public final class ChipDefaults {
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors childChipColors-xS_xkl8(optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors chipColors-4aXaTpA(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor, optional long disabledBackgroundColor, optional long disabledContentColor, optional long disabledSecondaryContentColor, optional long disabledIconTintColor);
+    method public androidx.compose.foundation.layout.PaddingValues contentPadding(boolean hasIcon);
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public androidx.compose.foundation.layout.PaddingValues getContentWithIconPadding();
+    method public float getIconSize-D9Ej5fM();
+    method public float getLargeIconSize-D9Ej5fM();
+    method public float getSmallIconSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors gradientBackgroundChipColors-hbTsPhk(optional long startBackgroundColor, optional long endBackgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors imageBackgroundChipColors-Uuj8IBc(androidx.compose.ui.graphics.painter.Painter backgroundImagePainter, optional androidx.compose.ui.graphics.Brush backgroundImageScrimBrush, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors primaryChipColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ChipColors secondaryChipColors-nlx5xbs(optional long backgroundColor, optional long contentColor, optional long secondaryContentColor, optional long iconTintColor);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final androidx.compose.foundation.layout.PaddingValues ContentWithIconPadding;
+    property public final float IconSize;
+    property public final float LargeIconSize;
+    property public final float SmallIconSize;
+    field public static final androidx.wear.compose.material.ChipDefaults INSTANCE;
+  }
+
+  public final class ChipKt {
+    method @androidx.compose.runtime.Composable public static void Chip(kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+    method @androidx.compose.runtime.Composable public static void Chip-KdzdggI(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.wear.compose.material.ChipColors colors, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.ui.semantics.Role? role, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void CompactChip(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? label, optional kotlin.jvm.functions.Function0<kotlin.Unit>? icon, optional androidx.wear.compose.material.ChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding);
+  }
+
+  @androidx.compose.runtime.Stable public final class Colors {
+    method public androidx.wear.compose.material.Colors copy-4aXaTpA(optional long primary, optional long primaryVariant, optional long secondary, optional long secondaryVariant, optional long error, optional long onPrimary, optional long onSecondary, optional long onError);
+    method public long getBackground-0d7_KjU();
+    method public long getError-0d7_KjU();
+    method public long getOnBackground-0d7_KjU();
+    method public long getOnError-0d7_KjU();
+    method public long getOnPrimary-0d7_KjU();
+    method public long getOnSecondary-0d7_KjU();
+    method public long getOnSurface-0d7_KjU();
+    method public long getOnSurfaceVariant-0d7_KjU();
+    method public long getOnSurfaceVariant2-0d7_KjU();
+    method public long getPrimary-0d7_KjU();
+    method public long getPrimaryVariant-0d7_KjU();
+    method public long getSecondary-0d7_KjU();
+    method public long getSecondaryVariant-0d7_KjU();
+    method public long getSurface-0d7_KjU();
+    property public final long background;
+    property public final long error;
+    property public final long onBackground;
+    property public final long onError;
+    property public final long onPrimary;
+    property public final long onSecondary;
+    property public final long onSurface;
+    property public final long onSurfaceVariant;
+    property public final long onSurfaceVariant2;
+    property public final long primary;
+    property public final long primaryVariant;
+    property public final long secondary;
+    property public final long secondaryVariant;
+    property public final long surface;
+  }
+
+  public final class ColorsKt {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public static long contentColorFor-8_81llA(long backgroundColor);
+    method public static long contentColorFor-jR8T7bM(androidx.wear.compose.material.Colors, long backgroundColor);
+  }
+
+  public final class ContentAlpha {
+    method @androidx.compose.runtime.Composable public float getDisabled();
+    method @androidx.compose.runtime.Composable public float getHigh();
+    method @androidx.compose.runtime.Composable public float getMedium();
+    property @androidx.compose.runtime.Composable public final float disabled;
+    property @androidx.compose.runtime.Composable public final float high;
+    property @androidx.compose.runtime.Composable public final float medium;
+    field public static final androidx.wear.compose.material.ContentAlpha INSTANCE;
+  }
+
+  public final class ContentAlphaKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<java.lang.Float> getLocalContentAlpha();
+  }
+
+  public final class ContentColorKt {
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.graphics.Color> getLocalContentColor();
+  }
+
+  public final class IconKt {
+    method @androidx.compose.runtime.Composable public static void Icon-8NTYWNk(androidx.compose.ui.graphics.painter.Painter painter, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon-BG621w0(androidx.compose.ui.graphics.vector.ImageVector imageVector, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+    method @androidx.compose.runtime.Composable public static void Icon-hGAziDE(androidx.compose.ui.graphics.ImageBitmap bitmap, String? contentDescription, optional androidx.compose.ui.Modifier modifier, optional long tint);
+  }
+
+  public final class MaterialTextSelectionColorsKt {
+  }
+
+  public final class MaterialTheme {
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Colors getColors();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Shapes getShapes();
+    method @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public androidx.wear.compose.material.Typography getTypography();
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Colors colors;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Shapes shapes;
+    property @androidx.compose.runtime.Composable @androidx.compose.runtime.ReadOnlyComposable public final androidx.wear.compose.material.Typography typography;
+    field public static final androidx.wear.compose.material.MaterialTheme INSTANCE;
+  }
+
+  public final class MaterialThemeKt {
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(optional androidx.wear.compose.material.Colors colors, optional androidx.wear.compose.material.Typography typography, optional androidx.wear.compose.material.Shapes shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Shapes {
+    ctor public Shapes(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.wear.compose.material.Shapes copy(optional androidx.compose.foundation.shape.CornerBasedShape small, optional androidx.compose.foundation.shape.CornerBasedShape medium, optional androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
+    method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
+    method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
+    property public final androidx.compose.foundation.shape.CornerBasedShape large;
+    property public final androidx.compose.foundation.shape.CornerBasedShape medium;
+    property public final androidx.compose.foundation.shape.CornerBasedShape small;
+  }
+
+  public final class ShapesKt {
+  }
+
+  public final class TextKt {
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Text-TPAwlIA(androidx.compose.ui.text.AnnotatedString text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method @androidx.compose.runtime.Composable public static void Text-Vh6c2nE(String text, optional androidx.compose.ui.Modifier modifier, optional long color, optional long fontSize, optional androidx.compose.ui.text.font.FontStyle? fontStyle, optional androidx.compose.ui.text.font.FontWeight? fontWeight, optional androidx.compose.ui.text.font.FontFamily? fontFamily, optional long letterSpacing, optional androidx.compose.ui.text.style.TextDecoration? textDecoration, optional androidx.compose.ui.text.style.TextAlign? textAlign, optional long lineHeight, optional int overflow, optional boolean softWrap, optional int maxLines, optional kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout, optional androidx.compose.ui.text.TextStyle style);
+    method public static androidx.compose.runtime.ProvidableCompositionLocal<androidx.compose.ui.text.TextStyle> getLocalTextStyle();
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleButtonColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> backgroundColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleButtonDefaults {
+    method public float getDefaultToggleButtonSize-D9Ej5fM();
+    method public float getSmallToggleButtonSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleButtonColors toggleButtonColors-4aXaTpA(optional long checkedBackgroundColor, optional long checkedContentColor, optional long disabledCheckedBackgroundColor, optional long disabledCheckedContentColor, optional long uncheckedBackgroundColor, optional long uncheckedContentColor, optional long disabledUncheckedBackgroundColor, optional long disabledUncheckedContentColor);
+    property public final float DefaultToggleButtonSize;
+    property public final float SmallToggleButtonSize;
+    field public static final androidx.wear.compose.material.ToggleButtonDefaults INSTANCE;
+  }
+
+  public final class ToggleButtonKt {
+    method @androidx.compose.runtime.Composable public static void ToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, optional androidx.compose.ui.Modifier modifier, optional boolean enabled, optional androidx.wear.compose.material.ToggleButtonColors colors, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.BoxScope,kotlin.Unit> content);
+  }
+
+  @androidx.compose.runtime.Stable public interface ToggleChipColors {
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.painter.Painter> background(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> contentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> secondaryContentColor(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> splitBackgroundOverlay(boolean enabled, boolean checked);
+    method @androidx.compose.runtime.Composable public androidx.compose.runtime.State<androidx.compose.ui.graphics.Color> toggleIconTintColor(boolean enabled, boolean checked);
+  }
+
+  public final class ToggleChipDefaults {
+    method public androidx.compose.foundation.layout.PaddingValues getContentPadding();
+    method public float getIconSize-D9Ej5fM();
+    method @androidx.compose.runtime.Composable public androidx.wear.compose.material.ToggleChipColors toggleChipColors-YAusTmY(optional long checkedStartBackgroundColor, optional long checkedEndBackgroundColor, optional long checkedContentColor, optional long checkedSecondaryContentColor, optional long checkedToggleIconTintColor, optional long uncheckedStartBackgroundColor, optional long uncheckedEndBackgroundColor, optional long uncheckedContentColor, optional long uncheckedSecondaryContentColor, optional long uncheckedToggleIconTintColor, optional long splitBackgroundOverlayColor, optional androidx.compose.ui.unit.LayoutDirection gradientDirection);
+    property public final androidx.compose.foundation.layout.PaddingValues ContentPadding;
+    property public final float IconSize;
+    field public static final androidx.wear.compose.material.ToggleChipDefaults INSTANCE;
+  }
+
+  public final class ToggleChipKt {
+    method @androidx.compose.runtime.Composable public static void SplitToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleIcon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource checkedInteractionSource, optional androidx.compose.foundation.interaction.MutableInteractionSource clickInteractionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Composable public static void ToggleChip(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, kotlin.jvm.functions.Function0<kotlin.Unit> toggleIcon, optional androidx.compose.ui.Modifier modifier, optional kotlin.jvm.functions.Function0<kotlin.Unit>? appIcon, optional kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryLabel, optional androidx.wear.compose.material.ToggleChipColors colors, optional boolean enabled, optional androidx.compose.foundation.interaction.MutableInteractionSource interactionSource, optional androidx.compose.foundation.layout.PaddingValues contentPadding, optional androidx.compose.ui.graphics.Shape shape);
+  }
+
+  @androidx.compose.runtime.Immutable public final class Typography {
+    ctor public Typography(optional androidx.compose.ui.text.font.FontFamily defaultFontFamily, optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2);
+    method public androidx.wear.compose.material.Typography copy(optional androidx.compose.ui.text.TextStyle display1, optional androidx.compose.ui.text.TextStyle display2, optional androidx.compose.ui.text.TextStyle display3, optional androidx.compose.ui.text.TextStyle title1, optional androidx.compose.ui.text.TextStyle title2, optional androidx.compose.ui.text.TextStyle title3, optional androidx.compose.ui.text.TextStyle body1, optional androidx.compose.ui.text.TextStyle body2, optional androidx.compose.ui.text.TextStyle button, optional androidx.compose.ui.text.TextStyle caption1, optional androidx.compose.ui.text.TextStyle caption2);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption1();
+    method public androidx.compose.ui.text.TextStyle getCaption2();
+    method public androidx.compose.ui.text.TextStyle getDisplay1();
+    method public androidx.compose.ui.text.TextStyle getDisplay2();
+    method public androidx.compose.ui.text.TextStyle getDisplay3();
+    method public androidx.compose.ui.text.TextStyle getTitle1();
+    method public androidx.compose.ui.text.TextStyle getTitle2();
+    method public androidx.compose.ui.text.TextStyle getTitle3();
+    property public final androidx.compose.ui.text.TextStyle body1;
+    property public final androidx.compose.ui.text.TextStyle body2;
+    property public final androidx.compose.ui.text.TextStyle button;
+    property public final androidx.compose.ui.text.TextStyle caption1;
+    property public final androidx.compose.ui.text.TextStyle caption2;
+    property public final androidx.compose.ui.text.TextStyle display1;
+    property public final androidx.compose.ui.text.TextStyle display2;
+    property public final androidx.compose.ui.text.TextStyle display3;
+    property public final androidx.compose.ui.text.TextStyle title1;
+    property public final androidx.compose.ui.text.TextStyle title2;
+    property public final androidx.compose.ui.text.TextStyle title3;
+  }
+
+  public final class TypographyKt {
+  }
+
+}
+
diff --git a/wear/compose/material/build.gradle b/wear/compose/material/build.gradle
index f6f0baf..b8f9984 100644
--- a/wear/compose/material/build.gradle
+++ b/wear/compose/material/build.gradle
@@ -17,7 +17,6 @@
 import androidx.build.LibraryGroups
 import androidx.build.LibraryType
 import androidx.build.LibraryVersions
-import androidx.build.RunApiTasks
 import androidx.build.AndroidXComposePlugin
 
 plugins {
@@ -121,7 +120,6 @@
             "Material Design UX guidelines and specifications. It builds upon the Jetpack Compose" +
             " libraries."
     targetsJavaConsumers = false
-    runApiTasks = new RunApiTasks.No("API tracking disabled while the package is empty")
 }
 
 
diff --git a/wear/compose/material/lint-baseline.xml b/wear/compose/material/lint-baseline.xml
new file mode 100644
index 0000000..25fd2c5
--- /dev/null
+++ b/wear/compose/material/lint-baseline.xml
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt"
+            line="588"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt"
+            line="608"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt"
+            line="628"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt"
+            line="648"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt"
+            line="807"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="        .captureToImage()"
+        errorLine2="         ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ButtonTest.kt"
+            line="887"
+            column="10"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt"
+            line="528"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt"
+            line="549"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt"
+            line="724"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt"
+            line="799"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="        .captureToImage()"
+        errorLine2="         ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ChipTest.kt"
+            line="888"
+            column="10"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt"
+            line="56"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt"
+            line="75"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt"
+            line="90"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt"
+            line="214"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt"
+            line="219"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt"
+            line="372"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/MaterialThemeTest.kt"
+            line="377"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt"
+            line="387"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt"
+            line="436"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt"
+            line="483"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="            .captureToImage()"
+        errorLine2="             ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt"
+            line="532"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="                .captureToImage()"
+        errorLine2="                 ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt"
+            line="597"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `captureToImage`"
+        errorLine1="        .captureToImage()"
+        errorLine2="         ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidAndroidTest/kotlin/androidx/wear/compose/material/ToggleButtonTest.kt"
+            line="636"
+            column="10"/>
+    </issue>
+
+</issues>
diff --git a/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Chip.kt b/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Chip.kt
index f4fc47e..040866b 100644
--- a/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Chip.kt
+++ b/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Chip.kt
@@ -15,7 +15,6 @@
  */
 package androidx.wear.compose.material
 
-import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.interaction.Interaction
 import androidx.compose.foundation.interaction.MutableInteractionSource
@@ -47,6 +46,7 @@
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.graphics.painter.ColorPainter
 import androidx.compose.ui.graphics.painter.Painter
+import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.semantics.Role
 import androidx.compose.ui.unit.Dp
@@ -106,7 +106,6 @@
         modifier = modifier
             .height(ChipDefaults.Height)
             .clip(shape = shape)
-            .background(color = Color.Transparent, shape = shape)
     ) {
         // TODO: Due to b/178201337 the paint() modifier on the box doesn't make a call to draw the
         //  box contents. As a result we need to have stacked boxes to enable us to paint the
@@ -115,7 +114,9 @@
             Modifier
                 .paint(
                     painter = colors.background(enabled = enabled).value,
+                    contentScale = ContentScale.FillBounds
                 )
+                .fillMaxSize()
 
         val contentBoxModifier = Modifier
             .clickable(
@@ -528,6 +529,63 @@
         )
     }
 
+    /**
+     * Creates a [ChipColors] for an image background [Chip]. Image background chips have an image
+     * as the background of the chip typically with a scrim over the image to ensure that the
+     * content is visible, and use a default content color of [Colors.onBackground].
+     *
+     * @param backgroundImagePainter The [Painter] to use to draw the background of the [Chip]
+     * @param backgroundImageScrimBrush The [Brush] to use to paint a scrim over the background
+     * image to ensure that any text drawn over the image is legible
+     * @param contentColor The content color of this [Chip] when enabled
+     * @param secondaryContentColor The secondary content color of this [Chip] when enabled, used
+     * for secondaryLabel content
+     * @param iconTintColor The icon tint color of this [Chip] when enabled, used for icon content
+     */
+    @Composable
+    public fun imageBackgroundChipColors(
+        backgroundImagePainter: Painter,
+        backgroundImageScrimBrush: Brush = Brush.linearGradient(
+            colors = listOf(
+                MaterialTheme.colors.surface.copy(alpha = 1.0f),
+                MaterialTheme.colors.surface.copy(alpha = 0f)
+            )
+        ),
+        contentColor: Color = MaterialTheme.colors.onBackground,
+        secondaryContentColor: Color = contentColor,
+        iconTintColor: Color = contentColor,
+    ): ChipColors {
+        val backgroundPainter =
+            remember(backgroundImagePainter, backgroundImageScrimBrush) {
+                ImageWithScrimPainter(
+                    imagePainter = backgroundImagePainter,
+                    brush = backgroundImageScrimBrush
+                )
+            }
+
+        val disabledContentAlpha = ContentAlpha.disabled
+        val disabledBackgroundPainter =
+            remember(backgroundImagePainter, backgroundImageScrimBrush, disabledContentAlpha) {
+                ImageWithScrimPainter(
+                    imagePainter = backgroundImagePainter,
+                    brush = backgroundImageScrimBrush,
+                    alpha = disabledContentAlpha,
+                )
+            }
+        return DefaultChipColors(
+            backgroundPainter = backgroundPainter,
+            contentColor = contentColor,
+            secondaryContentColor = secondaryContentColor,
+            iconTintColor = iconTintColor,
+            disabledBackgroundPainter = disabledBackgroundPainter,
+            disabledContentColor = contentColor.copy(alpha = ContentAlpha.disabled),
+            disabledSecondaryContentColor = secondaryContentColor.copy(
+                alpha = ContentAlpha.disabled
+            ),
+            disabledIconTintColor = iconTintColor.copy(alpha = ContentAlpha.disabled),
+        )
+    }
+
     private val ChipHorizontalPadding = 14.dp
     private val ChipWithIconHorizontalPadding = 12.dp
     private val ChipVerticalPadding = 6.dp
diff --git a/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt b/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt
index b01d38e..fad4fe3 100644
--- a/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt
+++ b/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/Colors.kt
@@ -33,6 +33,9 @@
     secondary: Color = Color(0xFFFDE293),
     secondaryVariant: Color = Color(0xFF594F33),
     error: Color = Color(0xFFEE675C),
+    onPrimary: Color = Color(0xFF202124),
+    onSecondary: Color = Color(0xFF202124),
+    onError: Color = Color(0xFF202124)
 ) {
     public var primary: Color by mutableStateOf(primary, structuralEqualityPolicy())
         internal set
@@ -49,13 +52,16 @@
     public val surface: Color = Color(0xFF202124)
     public var error: Color by mutableStateOf(error, structuralEqualityPolicy())
         internal set
-    public val onPrimary: Color = Color(0xFF202124)
-    public val onSecondary: Color = Color(0xFF202124)
+    public var onPrimary: Color by mutableStateOf(onPrimary, structuralEqualityPolicy())
+        internal set
+    public var onSecondary: Color by mutableStateOf(onSecondary, structuralEqualityPolicy())
+        internal set
     public val onBackground: Color = Color.White
     public val onSurface: Color = Color.White
     public val onSurfaceVariant: Color = Color(0xFFDADCE0)
     public val onSurfaceVariant2: Color = Color(0xFFBDC1C6)
-    public val onError: Color = Color(0xFF202124)
+    public var onError: Color by mutableStateOf(onError, structuralEqualityPolicy())
+        internal set
 
     /**
      * Returns a copy of this Colors, optionally overriding some of the values.
@@ -66,12 +72,18 @@
         secondary: Color = this.secondary,
         secondaryVariant: Color = this.secondaryVariant,
         error: Color = this.error,
+        onPrimary: Color = this.onPrimary,
+        onSecondary: Color = this.onSecondary,
+        onError: Color = this.onError
     ): Colors = Colors(
-        primary,
-        primaryVariant,
-        secondary,
-        secondaryVariant,
-        error,
+        primary = primary,
+        primaryVariant = primaryVariant,
+        secondary = secondary,
+        secondaryVariant = secondaryVariant,
+        error = error,
+        >
+        >
+        >
     )
 
     override fun toString(): String {
@@ -165,6 +177,9 @@
     secondary = other.secondary
     secondaryVariant = other.secondaryVariant
     error = other.error
+    >
+    >
+    >
 }
 
 internal val LocalColors = staticCompositionLocalOf<Colors> { Colors() }
diff --git a/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/ImageWithScrimPainter.kt b/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/ImageWithScrimPainter.kt
new file mode 100644
index 0000000..a25bf34
--- /dev/null
+++ b/wear/compose/material/src/commonMain/kotlin/androidx/wear/compose/material/ImageWithScrimPainter.kt
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.wear.compose.material
+
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.graphics.drawscope.DrawScope
+import androidx.compose.ui.graphics.painter.Painter
+
+/**
+ * A painter which takes wraps another [Painter] for drawing a background image and a [Brush] which
+ * is used to create an effect over the image to ensure that text drawn over it will be legible.
+ */
+internal class ImageWithScrimPainter(
+    val imagePainter: Painter,
+    val brush: Brush,
+    private var scrimAlpha: Float = 1.0f,
+    private var alpha: Float = 1.0f
+) : Painter() {
+
+    private var colorFilter: ColorFilter? = null
+
+    override fun DrawScope.onDraw() {
+        val size = this.size
+        with(imagePainter) { draw(size = size, alpha = alpha, colorFilter = colorFilter) }
+        drawRect(brush = brush, alpha = scrimAlpha * alpha, colorFilter = colorFilter)
+    }
+
+    override fun applyAlpha(alpha: Float): Boolean {
+        this.alpha = alpha
+        return true
+    }
+
+    override fun applyColorFilter(colorFilter: ColorFilter?): Boolean {
+        this.colorFilter = colorFilter
+        return true
+    }
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other == null) return false
+        if (this::class != other::class) return false
+
+        other as ImageWithScrimPainter
+
+        if (imagePainter != other.imagePainter) return false
+        if (brush != other.brush) return false
+        if (scrimAlpha != other.scrimAlpha) return false
+
+        return true
+    }
+
+    override fun hashCode(): Int {
+        var result = imagePainter.hashCode()
+        result = 31 * result + brush.hashCode()
+        result = 31 * result + scrimAlpha.hashCode()
+        return result
+    }
+
+    override fun toString(): String {
+        return "ImageWithScrimPainter(imagePainter=$imagePainter, brush=$brush, " +
+            "scrimAlpha=$scrimAlpha)"
+    }
+
+    /**
+     * Size of the combined painter, return Unspecified to allow us to fill the available space
+     */
+    override val intrinsicSize: Size = imagePainter.intrinsicSize
+}
\ No newline at end of file
diff --git a/wear/tiles/tiles-renderer/lint-baseline.xml b/wear/tiles/tiles-renderer/lint-baseline.xml
deleted file mode 100644
index e161273..0000000
--- a/wear/tiles/tiles-renderer/lint-baseline.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="ObsoleteSdkInt"
-        message="Unnecessary; SDK_INT is always >= 26"
-        errorLine1="        if (Build.VERSION.SDK_INT >= 26 &amp;&amp; attributes.mFontVariationSettings != null) {"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/androidx/wear/tiles/renderer/internal/WearCurvedTextView.java"
-            line="569"
-            column="13"/>
-    </issue>
-
-</issues>
diff --git a/wear/tiles/tiles/lint-baseline.xml b/wear/tiles/tiles/lint-baseline.xml
new file mode 100644
index 0000000..143fe06
--- /dev/null
+++ b/wear/tiles/tiles/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `java.util.List#of`"
+        errorLine1="                        List.of(mFakeUpdateRequester1, mFakeUpdateRequester2));"
+        errorLine2="                             ~~">
+        <location
+            file="src/test/java/androidx/wear/tiles/CompositeTileUpdateRequesterTest.java"
+            line="53"
+            column="30"/>
+    </issue>
+
+</issues>
diff --git a/wear/wear-complications-data/lint-baseline.xml b/wear/wear-complications-data/lint-baseline.xml
index 30ac451..ea1f0bf 100644
--- a/wear/wear-complications-data/lint-baseline.xml
+++ b/wear/wear-complications-data/lint-baseline.xml
@@ -1,5 +1,181 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `retrievePreviewComplicationData`"
+        errorLine1="                providerInfoRetriever.retrievePreviewComplicationData(component, type)!!"
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/ProviderInfoRetrieverTest.kt"
+            line="86"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `retrievePreviewComplicationData`"
+        errorLine1="            assertThat(providerInfoRetriever.retrievePreviewComplicationData(component, type))"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/ProviderInfoRetrieverTest.kt"
+            line="114"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `retrievePreviewComplicationData`"
+        errorLine1="            assertThat(providerInfoRetriever.retrievePreviewComplicationData(component, type))"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/ProviderInfoRetrieverTest.kt"
+            line="127"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `retrievePreviewComplicationData`"
+        errorLine1="            assertThat(providerInfoRetriever.retrievePreviewComplicationData(component, type))"
+        errorLine2="                                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/ProviderInfoRetrieverTest.kt"
+            line="147"
+            column="46"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#parse`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                      ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="52"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#toEpochMilli`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="52"
+            column="73"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#parse`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                      ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="81"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#toEpochMilli`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="81"
+            column="73"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#parse`"
+        errorLine1="        val startPointMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                       ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="145"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#toEpochMilli`"
+        errorLine1="        val startPointMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                                                         ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="145"
+            column="74"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#parse`"
+        errorLine1="        val dateTimeMillis = Instant.parse(&quot;2020-12-30T10:15:20.00Z&quot;).toEpochMilli()"
+        errorLine2="                                     ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="171"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#toEpochMilli`"
+        errorLine1="        val dateTimeMillis = Instant.parse(&quot;2020-12-30T10:15:20.00Z&quot;).toEpochMilli()"
+        errorLine2="                                                                      ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="171"
+            column="71"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#parse`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                      ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="194"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#toEpochMilli`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="194"
+            column="73"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#parse`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                      ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="207"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.time.Instant#toEpochMilli`"
+        errorLine1="        val referenceMillis = Instant.parse(&quot;2020-12-30T10:15:30.001Z&quot;).toEpochMilli()"
+        errorLine2="                                                                        ~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/complications/data/TextTest.kt"
+            line="207"
+            column="73"/>
+    </issue>
 
     <issue
         id="MissingQuantity"
@@ -8,7 +184,7 @@
         errorLine2="    ^">
         <location
             file="src/main/res/values-fr-rCA/complication_strings.xml"
-            line="60"
+            line="4"
             column="5"/>
     </issue>
 
diff --git a/wear/wear-ongoing/lint-baseline.xml b/wear/wear-ongoing/lint-baseline.xml
new file mode 100644
index 0000000..f5983a5
--- /dev/null
+++ b/wear/wear-ongoing/lint-baseline.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(StaticIconResourceId, received.staticIcon.resId)"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="64"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(AnimatedIconResourceId, received.animatedIcon!!.resId)"
+        errorLine2="                                                                     ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="90"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(StaticIconResourceId, received.staticIcon.resId)"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="91"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(AnimatedIconResourceId, received.animatedIcon!!.resId)"
+        errorLine2="                                                                     ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="127"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(StaticIconResourceId, received.staticIcon.resId)"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="128"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(AnimatedIconResourceId, received.animatedIcon!!.resId)"
+        errorLine2="                                                                     ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="212"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(StaticIconResourceId, received.staticIcon.resId)"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="213"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(AnimatedIconResourceId, received.animatedIcon!!.resId)"
+        errorLine2="                                                                     ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="248"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(StaticIconResourceId, received.staticIcon.resId)"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="249"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(StaticIconResourceId, received.staticIcon.resId)"
+        errorLine2="                                                               ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="276"
+            column="64"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(newAnimatedIconResourceId, received.animatedIcon!!.resId)"
+        errorLine2="                                                                        ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="309"
+            column="73"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getResId`"
+        errorLine1="        assertEquals(newStaticIconResourceId, received.staticIcon.resId)"
+        errorLine2="                                                                  ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/ongoing/OngoingActivityTest.kt"
+            line="310"
+            column="67"/>
+    </issue>
+
+</issues>
diff --git a/wear/wear-phone-interactions/lint-baseline.xml b/wear/wear-phone-interactions/lint-baseline.xml
new file mode 100644
index 0000000..6a5a99f
--- /dev/null
+++ b/wear/wear-phone-interactions/lint-baseline.xml
@@ -0,0 +1,906 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val verifier = CodeVerifier()"
+        errorLine2="                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="29"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="        assertEquals(43, verifier.getValue().length)"
+        errorLine2="                                  ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="30"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val verifier = CodeVerifier(96)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="35"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="        assertEquals(128, verifier.getValue().length)"
+        errorLine2="                                   ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="36"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="            CodeVerifier(100)"
+        errorLine2="            ~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="42"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val verifier = CodeVerifier()"
+        errorLine2="                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="51"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertTrue(verifier.equals(CodeVerifier(verifier.getValue())))"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="52"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `equals`"
+        errorLine1="        assertTrue(verifier.equals(CodeVerifier(verifier.getValue())))"
+        errorLine2="                            ~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="52"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="        assertTrue(verifier.equals(CodeVerifier(verifier.getValue())))"
+        errorLine2="                                                         ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="52"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeVerifier().equals(CodeVerifier()))"
+        errorLine2="                    ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="57"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeVerifier().equals(CodeVerifier()))"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="57"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `equals`"
+        errorLine1="        assertFalse(CodeVerifier().equals(CodeVerifier()))"
+        errorLine2="                                   ~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="57"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeVerifier(50).equals(CodeVerifier(50)))"
+        errorLine2="                    ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="58"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeVerifier(50).equals(CodeVerifier(50)))"
+        errorLine2="                                            ~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="58"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `equals`"
+        errorLine1="        assertFalse(CodeVerifier(50).equals(CodeVerifier(50)))"
+        errorLine2="                                     ~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="58"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeVerifier().equals(null))"
+        errorLine2="                    ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="59"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `equals`"
+        errorLine1="        assertFalse(CodeVerifier().equals(null))"
+        errorLine2="                                   ~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="59"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val verifier = CodeVerifier(&quot;dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk&quot;)"
+        errorLine2="                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="65"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val challenge = CodeChallenge(verifier)"
+        errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="66"
+            column="25"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="        assertEquals(&quot;E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM&quot;, challenge.getValue())"
+        errorLine2="                                                                              ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="67"
+            column="79"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="            CodeChallenge(CodeVerifier(verifierValue)).equals("
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="74"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="            CodeChallenge(CodeVerifier(verifierValue)).equals("
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="74"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `equals`"
+        errorLine1="            CodeChallenge(CodeVerifier(verifierValue)).equals("
+        errorLine2="                                                       ~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="74"
+            column="56"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="                CodeChallenge(CodeVerifier(verifierValue))"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="75"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="                CodeChallenge(CodeVerifier(verifierValue))"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="75"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(CodeChallenge(CodeVerifier())))"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="82"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(CodeChallenge(CodeVerifier())))"
+        errorLine2="                                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="82"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(CodeChallenge(CodeVerifier())))"
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="82"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(CodeChallenge(CodeVerifier())))"
+        errorLine2="                                                                       ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="82"
+            column="72"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `equals`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(CodeChallenge(CodeVerifier())))"
+        errorLine2="                                                  ~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="82"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(null))"
+        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="83"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(null))"
+        errorLine2="                                  ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="83"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `equals`"
+        errorLine1="        assertFalse(CodeChallenge(CodeVerifier()).equals(null))"
+        errorLine2="                                                  ~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/CodeVerifierCodeChallengeTest.kt"
+            line="83"
+            column="51"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `build`"
+        errorLine1="            request = builder.build()"
+        errorLine2="                              ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="51"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `build`"
+        errorLine1="            builder.build()"
+        errorLine2="                    ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="67"
+            column="21"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="76"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="76"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="            codeChallenge.getValue()"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="87"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="93"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="93"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="            codeChallenge.getValue()"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="105"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="111"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="111"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="                        &quot;&amp;code_challenge=${codeChallenge.getValue()}&quot; +"
+        errorLine2="                                                         ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="118"
+            column="58"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="            codeChallenge.getValue()"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="128"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="136"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="136"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="148"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="148"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="164"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="164"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="177"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="177"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="            codeChallenge.getValue()"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="190"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="209"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="209"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="                &quot;expect to have the value of &apos;${codeChallenge.getValue()}&apos;, but &quot; +"
+        errorLine2="                                                              ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="220"
+            column="63"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="228"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="228"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="                Uri.parse(&quot;$authProviderUrl?code_challenge=${codeChallenge.getValue()}&quot;)"
+        errorLine2="                                                                           ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="231"
+            column="76"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="            codeChallenge.getValue()"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="241"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="252"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="252"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="265"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="265"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="            codeChallenge.getValue()"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="278"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="289"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="            .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                            ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="289"
+            column="45"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="302"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="302"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `getValue`"
+        errorLine1="            codeChallenge.getValue()"
+        errorLine2="                          ~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="315"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="321"
+            column="29"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="        val codeChallenge = CodeChallenge(CodeVerifier())"
+        errorLine2="                                          ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/OAuthRequestResponseTest.kt"
+            line="321"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="                .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="50"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="                .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="50"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `build`"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="51"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="                .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="55"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="                .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="55"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `build`"
+        errorLine1="                .build()"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="56"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeChallenge`"
+        errorLine1="                .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="87"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `CodeVerifier`"
+        errorLine1="                .setCodeChallenge(CodeChallenge(CodeVerifier()))"
+        errorLine2="                                                ~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="87"
+            column="49"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `build`"
+        errorLine1="                .build(),"
+        errorLine2="                 ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/phone/interactions/authentication/RemoteAuthTest.kt"
+            line="88"
+            column="18"/>
+    </issue>
+
+</issues>
diff --git a/wear/wear-remote-interactions/lint-baseline.xml b/wear/wear-remote-interactions/lint-baseline.xml
new file mode 100644
index 0000000..c7d664e
--- /dev/null
+++ b/wear/wear-remote-interactions/lint-baseline.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `SETTINGS_AUTHORITY_URI`"
+        errorLine1="            PlayStoreAvailability.SETTINGS_AUTHORITY_URI,"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="51"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `SYSTEM_FEATURE_WATCH`"
+        errorLine1="        shadowPackageManager?.setSystemFeature(PlayStoreAvailability.SYSTEM_FEATURE_WATCH, true)"
+        errorLine2="                                                                     ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="57"
+            column="70"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `PLAY_STORE_AVAILABLE`"
+        errorLine1="        createFakePlayStoreAvailabilityQuery(PlayStoreAvailability.PLAY_STORE_AVAILABLE)"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="63"
+            column="68"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `PLAY_STORE_AVAILABLE`"
+        errorLine1="            PlayStoreAvailability.PLAY_STORE_AVAILABLE"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="68"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `PLAY_STORE_UNAVAILABLE`"
+        errorLine1="        createFakePlayStoreAvailabilityQuery(PlayStoreAvailability.PLAY_STORE_UNAVAILABLE)"
+        errorLine2="                                                                   ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="75"
+            column="68"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `PLAY_STORE_UNAVAILABLE`"
+        errorLine1="            PlayStoreAvailability.PLAY_STORE_UNAVAILABLE"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="80"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `PLAY_STORE_ERROR_UNKNOWN`"
+        errorLine1="            PlayStoreAvailability.PLAY_STORE_ERROR_UNKNOWN"
+        errorLine2="                                  ~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="91"
+            column="35"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `KEY_PLAY_STORE_AVAILABILITY`"
+        errorLine1="                arrayOf&lt;Any>(PlayStoreAvailability.KEY_PLAY_STORE_AVAILABILITY, availability)"
+        errorLine2="                                                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/remote/interactions/PlayStoreAvailabilityTest.kt"
+            line="104"
+            column="52"/>
+    </issue>
+
+</issues>
diff --git a/wear/wear-watchface-client/lint-baseline.xml b/wear/wear-watchface-client/lint-baseline.xml
new file mode 100644
index 0000000..5bbd3e0
--- /dev/null
+++ b/wear/wear-watchface-client/lint-baseline.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.util.Base64#getDecoder`"
+        errorLine1="        val bytes = Base64.getDecoder().decode(String(resource.readBytes()))"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/SerializationTest.kt"
+            line="59"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `java.util.Base64.Decoder#decode`"
+        errorLine1="        val bytes = Base64.getDecoder().decode(String(resource.readBytes()))"
+        errorLine2="                                        ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/SerializationTest.kt"
+            line="59"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `renderWatchFaceToBitmap`"
+        errorLine1="        val bitmap = headlessInstance.renderWatchFaceToBitmap("
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt"
+            line="216"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `renderWatchFaceToBitmap`"
+        errorLine1="        val bitmap = headlessInstance.renderWatchFaceToBitmap("
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt"
+            line="245"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `renderWatchFaceToBitmap`"
+        errorLine1="        val bitmap = headlessInstance.renderWatchFaceToBitmap("
+        errorLine2="                                      ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt"
+            line="278"
+            column="39"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `renderWatchFaceToBitmap`"
+        errorLine1="        val bitmap = interactiveInstance.renderWatchFaceToBitmap("
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt"
+            line="411"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `renderWatchFaceToBitmap`"
+        errorLine1="        val bitmap = interactiveInstance.renderWatchFaceToBitmap("
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt"
+            line="453"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `renderWatchFaceToBitmap`"
+        errorLine1="        val bitmap = interactiveInstance.renderWatchFaceToBitmap("
+        errorLine2="                                         ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlClientTest.kt"
+            line="804"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `getApiVersion`"
+        errorLine1="                override fun getApiVersion(): Int = apiVersionOverride ?: super.getApiVersion()"
+        errorLine2="                                                                                ~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/client/test/WatchFaceControlTestService.kt"
+            line="44"
+            column="81"/>
+    </issue>
+
+</issues>
diff --git a/wear/wear-watchface-data/lint-baseline.xml b/wear/wear-watchface-data/lint-baseline.xml
deleted file mode 100644
index 70aa352..0000000
--- a/wear/wear-watchface-data/lint-baseline.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-    <issue
-        id="BanTargetApiAnnotation"
-        message="Uses @TargetApi annotation"
-        errorLine1="@TargetApi(VERSION_CODES.KITKAT)"
-        errorLine2="~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/android/support/wearable/watchface/accessibility/ContentDescriptionLabel.java"
-            line="46"
-            column="1"/>
-    </issue>
-
-</issues>
diff --git a/wear/wear-watchface-editor/lint-baseline.xml b/wear/wear-watchface-editor/lint-baseline.xml
new file mode 100644
index 0000000..b47a5fd
--- /dev/null
+++ b/wear/wear-watchface-editor/lint-baseline.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `EditorRequest`"
+        errorLine1="                EditorRequest(testComponentName, testEditorPackageName, null, watchFaceId)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="462"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `watchFaceId`"
+        errorLine1="        assertThat(result.watchFaceId.id).isEqualTo(testInstanceId.id)"
+        errorLine2="                          ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="1164"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `watchFaceId`"
+        errorLine1="        assertThat(result.watchFaceId.id).isEmpty()"
+        errorLine2="                          ~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="1219"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `EditorRequest`"
+        errorLine1="                EditorRequest(testComponentName, testEditorPackageName, null, testInstanceId)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="1346"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `EditorRequest`"
+        errorLine1="                EditorRequest("
+        errorLine2="                ^">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="1399"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `EditorRequest`"
+        errorLine1="                EditorRequest(testComponentName, testEditorPackageName, null, watchFaceId)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="1545"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getType`"
+        errorLine1="            assertThat(actual.icon.type).isEqualTo(expected.icon.type)"
+        errorLine2="                                   ~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="1624"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getType`"
+        errorLine1="            assertThat(actual.icon.type).isEqualTo(expected.icon.type)"
+        errorLine2="                                                                 ~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditingSessionTest.kt"
+            line="1624"
+            column="66"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `EditorRequest`"
+        errorLine1="                EditorRequest(testComponentName, testEditorPackageName, null, watchFaceId)"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/editor/EditorSessionGuavaTest.kt"
+            line="137"
+            column="17"/>
+    </issue>
+
+</issues>
diff --git a/wear/wear-watchface-style/lint-baseline.xml b/wear/wear-watchface-style/lint-baseline.xml
new file mode 100644
index 0000000..6ac7089
--- /dev/null
+++ b/wear/wear-watchface-style/lint-baseline.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(unparceled.icon!!.uri.toString()).isEqualTo(&quot;settingIcon&quot;)"
+        errorLine2="                                     ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="80"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(optionArray[0].icon!!.uri.toString()).isEqualTo(&quot;icon1&quot;)"
+        errorLine2="                                         ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="87"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(optionArray[1].icon!!.uri.toString()).isEqualTo(&quot;icon2&quot;)"
+        errorLine2="                                         ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="90"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(optionArray[2].icon!!.uri.toString()).isEqualTo(&quot;icon3&quot;)"
+        errorLine2="                                         ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="93"
+            column="42"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(unmarshalled1.icon!!.uri.toString()).isEqualTo(&quot;icon1&quot;)"
+        errorLine2="                                        ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="108"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(unmarshalled2.icon!!.uri.toString()).isEqualTo(&quot;icon2&quot;)"
+        errorLine2="                                        ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="111"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(unmarshalled3.icon!!.uri.toString()).isEqualTo(&quot;icon3&quot;)"
+        errorLine2="                                        ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="114"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(schema.userStyleSettings[0].icon!!.uri.toString()).isEqualTo(&quot;settingIcon1&quot;)"
+        errorLine2="                                                      ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="172"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(optionArray1[0].icon!!.uri.toString()).isEqualTo(&quot;icon1&quot;)"
+        errorLine2="                                          ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="182"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(optionArray1[1].icon!!.uri.toString()).isEqualTo(&quot;icon2&quot;)"
+        errorLine2="                                          ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="185"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(schema.userStyleSettings[1].icon!!.uri.toString()).isEqualTo(&quot;settingIcon2&quot;)"
+        errorLine2="                                                      ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="191"
+            column="55"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(optionArray2[0].icon!!.uri.toString()).isEqualTo(&quot;icon3&quot;)"
+        errorLine2="                                          ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="201"
+            column="43"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 25): `android.graphics.drawable.Icon#getUri`"
+        errorLine1="        assertThat(optionArray2[1].icon!!.uri.toString()).isEqualTo(&quot;icon4&quot;)"
+        errorLine2="                                          ~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/style/StyleParcelableTest.kt"
+            line="204"
+            column="43"/>
+    </issue>
+
+</issues>
diff --git a/wear/wear-watchface/lint-baseline.xml b/wear/wear-watchface/lint-baseline.xml
index c975b15..440a9f8 100644
--- a/wear/wear-watchface/lint-baseline.xml
+++ b/wear/wear-watchface/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="MissingClass"
@@ -57,14 +57,476 @@
     </issue>
 
     <issue
-        id="ClassVerificationFailure"
-        message="This call references a method added in API level 26; however, the containing class androidx.wear.watchface.Renderer.CanvasRenderer is reachable from earlier API levels and will fail run-time class verification."
-        errorLine1="                    surfaceHolder.lockHardwareCanvas() // Requires API level 26."
-        errorLine2="                                  ~~~~~~~~~~~~~~~~~~">
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `createInteractiveInstance$lint_module`"
+        errorLine1="                engineWrapper.createInteractiveInstance(initParams, &quot;test&quot;)"
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="src/main/java/androidx/wear/watchface/Renderer.kt"
-            line="325"
-            column="35"/>
+            file="src/test/java/androidx/wear/watchface/AsyncWatchFaceInitTest.kt"
+            line="220"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance`"
+        errorLine1="                .getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance("
+        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/AsyncWatchFaceInitTest.kt"
+            line="242"
+            column="18"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `WatchFaceControlService`"
+        errorLine1="            WatchFaceControlService().apply {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="111"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `setContext`"
+        errorLine1="                setContext(ApplicationProvider.getApplicationContext&lt;Context>())"
+        errorLine2="                ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="112"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `onBind`"
+        errorLine1="            }.onBind("
+        errorLine2="              ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="113"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ACTION_WATCHFACE_CONTROL_SERVICE`"
+        errorLine1="                Intent(WatchFaceControlService.ACTION_WATCHFACE_CONTROL_SERVICE)"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="114"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `WatchFaceControlService`"
+        errorLine1="            WatchFaceControlService().apply {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="137"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `setContext`"
+        errorLine1="                setContext(ApplicationProvider.getApplicationContext&lt;Context>())"
+        errorLine2="                ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="138"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `onBind`"
+        errorLine1="            }.onBind("
+        errorLine2="              ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="139"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ACTION_WATCHFACE_CONTROL_SERVICE`"
+        errorLine1="                Intent(WatchFaceControlService.ACTION_WATCHFACE_CONTROL_SERVICE)"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="140"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="        val bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="164"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="        val bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="208"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="        val bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="242"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `WatchFaceControlService`"
+        errorLine1="            WatchFaceControlService().apply {"
+        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="275"
+            column="13"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `setContext`"
+        errorLine1="                setContext(ApplicationProvider.getApplicationContext&lt;Context>())"
+        errorLine2="                ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="276"
+            column="17"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `onBind`"
+        errorLine1="            }.onBind("
+        errorLine2="              ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="277"
+            column="15"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ACTION_WATCHFACE_CONTROL_SERVICE`"
+        errorLine1="                Intent(WatchFaceControlService.ACTION_WATCHFACE_CONTROL_SERVICE)"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceControlServiceTest.kt"
+            line="278"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `android.graphics.SurfaceTexture()`"
+        errorLine1="    private val surfaceTexture = SurfaceTexture(false)"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="291"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `android.view.SurfaceHolder#lockHardwareCanvas`"
+        errorLine1="        Mockito.`when`(surfaceHolder.lockHardwareCanvas()).thenReturn(canvas)"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="329"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `android.view.SurfaceHolder#lockHardwareCanvas`"
+        errorLine1="        Mockito.`when`(surfaceHolder.lockHardwareCanvas()).thenReturn(canvas)"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="367"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance`"
+        errorLine1="            .getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance("
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="412"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `setWatchUiState`"
+        errorLine1="        interactiveWatchFaceInstance.setWatchUiState("
+        errorLine2="                                     ~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="462"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `release`"
+        errorLine1="        interactiveWatchFaceInstance.release()"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="468"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="            bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="545"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="            bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="579"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="            bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="632"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="            bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="670"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `ashmemReadImageBundle`"
+        errorLine1="            bitmap = SharedMemoryImage.ashmemReadImageBundle("
+        errorLine2="                                       ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="732"
+            column="40"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 26 (current min is 25): `android.view.SurfaceHolder#lockHardwareCanvas`"
+        errorLine1="        Mockito.`when`(surfaceHolder.lockHardwareCanvas()).thenReturn(canvas)"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="760"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `sendTouchEvent`"
+        errorLine1="        interactiveWatchFaceInstance.sendTouchEvent("
+        errorLine2="                                     ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="828"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `release`"
+        errorLine1="        interactiveWatchFaceInstance.release()"
+        errorLine2="                                     ~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/wear/watchface/test/WatchFaceServiceImageTest.kt"
+            line="835"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance`"
+        errorLine1="            .getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance("
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="430"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance`"
+        errorLine1="            .getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance("
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2654"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 27 (current min is 25): `updateComplicationData`"
+        errorLine1="        interactiveInstance!!.updateComplicationData("
+        errorLine2="                              ~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2720"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 25): `android.view.WindowInsets.Builder#setSystemWindowInsets`"
+        errorLine1="        WindowInsets.Builder().setSystemWindowInsets("
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2754"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 25): `android.view.WindowInsets.Builder()`"
+        errorLine1="        WindowInsets.Builder().setSystemWindowInsets("
+        errorLine2="                     ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2754"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 25): `android.graphics.Insets#of`"
+        errorLine1="            Insets.of(0, 0, 0, chinHeight)"
+        errorLine2="                   ~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2755"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 25): `android.view.WindowInsets.Builder#build`"
+        errorLine1="        ).build()"
+        errorLine2="          ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2756"
+            column="11"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 25): `android.view.WindowInsets.Builder()`"
+        errorLine1="        WindowInsets.Builder().setInsets("
+        errorLine2="                     ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2759"
+            column="22"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `android.view.WindowInsets.Builder#setInsets`"
+        errorLine1="        WindowInsets.Builder().setInsets("
+        errorLine2="                               ~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2759"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 25): `android.view.WindowInsets.Type#systemBars`"
+        errorLine1="            WindowInsets.Type.systemBars(),"
+        errorLine2="                              ~~~~~~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2760"
+            column="31"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 25): `android.graphics.Insets#of`"
+        errorLine1="            Insets.of(Rect().apply { bottom = chinHeight })"
+        errorLine2="                   ~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2761"
+            column="20"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 29 (current min is 25): `android.view.WindowInsets.Builder#build`"
+        errorLine1="        ).build()"
+        errorLine2="          ~~~~~">
+        <location
+            file="src/test/java/androidx/wear/watchface/WatchFaceServiceTest.kt"
+            line="2762"
+            column="11"/>
     </issue>
 
     <issue
@@ -74,7 +536,7 @@
         errorLine2="                                           ~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/wear/watchface/WatchFace.kt"
-            line="573"
+            line="528"
             column="44"/>
     </issue>
 
diff --git a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index 36fe23a..c158db5 100644
--- a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -288,8 +288,8 @@
      * UiThread afterwards. There is a memory barrier between construction and rendering so no
      * special threading primitives are required.
      *
-     * Warning watch face initialization will fail if createWatchFace takes longer than
-     * [MAX_CREATE_WATCHFACE_TIME_MILLIS] milliseconds.
+     * Warning the system will likely time out waiting for watch face initialization if it takes
+     * longer than [MAX_CREATE_WATCHFACE_TIME_MILLIS] milliseconds.
      *
      * @param surfaceHolder The [SurfaceHolder] to pass to the [Renderer]'s constructor.
      * @param watchState The [WatchState] for the watch face.
@@ -1368,10 +1368,13 @@
 
                     val timeAfter = System.currentTimeMillis()
                     val timeTaken = timeAfter - timeBefore
-                    require(timeTaken < MAX_CREATE_WATCHFACE_TIME_MILLIS) {
-                        "createUserStyleSchema, createComplicationSlotsManager and " +
-                            "createWatchFace should complete in less than " +
-                            MAX_CREATE_WATCHFACE_TIME_MILLIS + " milliseconds."
+                    if (timeTaken > MAX_CREATE_WATCHFACE_TIME_MILLIS) {
+                        Log.e(
+                            TAG,
+                            "createUserStyleSchema, createComplicationSlotsManager and " +
+                                "createWatchFace should complete in less than " +
+                                MAX_CREATE_WATCHFACE_TIME_MILLIS + " milliseconds."
+                        )
                     }
 
                     // Perform more initialization on the background thread.
diff --git a/wear/wear/lint-baseline.xml b/wear/wear/lint-baseline.xml
index e144009..8d62f0c 100644
--- a/wear/wear/lint-baseline.xml
+++ b/wear/wear/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="KotlinPropertyAccess"
diff --git a/webkit/integration-tests/testapp/lint-baseline.xml b/webkit/integration-tests/testapp/lint-baseline.xml
index 765a6f1..5531cad 100644
--- a/webkit/integration-tests/testapp/lint-baseline.xml
+++ b/webkit/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanSynchronizedMethods"
diff --git a/webkit/webkit/lint-baseline.xml b/webkit/webkit/lint-baseline.xml
deleted file mode 100644
index 42a176b..0000000
--- a/webkit/webkit/lint-baseline.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
-
-</issues>
diff --git a/window/window-extensions/lint-baseline.xml b/window/window-extensions/lint-baseline.xml
new file mode 100644
index 0000000..1c39784
--- /dev/null
+++ b/window/window-extensions/lint-baseline.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 17 (current min is 14): `android.view.View#generateViewId`"
+        errorLine1="        mRootViewId = View.generateViewId();"
+        errorLine2="                           ~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/window/extensions/TestActivity.java"
+            line="37"
+            column="28"/>
+    </issue>
+
+</issues>
diff --git a/window/window/lint-baseline.xml b/window/window/lint-baseline.xml
new file mode 100644
index 0000000..dee0155
--- /dev/null
+++ b/window/window/lint-baseline.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `java.util.Collection#removeIf`"
+        errorLine1="            consumers.removeIf { it.callback == callback }"
+        errorLine2="                      ~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/window/WindowInfoRepoImpTest.kt"
+            line="115"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.view.WindowManager#getCurrentWindowMetrics`"
+        errorLine1="            val windowMetricsBounds = activity.windowManager.currentWindowMetrics.bounds"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/window/WindowMetricsCalculatorCompatTest.kt"
+            line="112"
+            column="62"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.view.WindowMetrics#getBounds`"
+        errorLine1="            val windowMetricsBounds = activity.windowManager.currentWindowMetrics.bounds"
+        errorLine2="                                                                                  ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/window/WindowMetricsCalculatorCompatTest.kt"
+            line="112"
+            column="83"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.view.WindowManager#getMaximumWindowMetrics`"
+        errorLine1="            val windowMetricsBounds = activity.windowManager.maximumWindowMetrics.bounds"
+        errorLine2="                                                             ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/window/WindowMetricsCalculatorCompatTest.kt"
+            line="186"
+            column="62"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 30 (current min is 14): `android.view.WindowMetrics#getBounds`"
+        errorLine1="            val windowMetricsBounds = activity.windowManager.maximumWindowMetrics.bounds"
+        errorLine2="                                                                                  ~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/window/WindowMetricsCalculatorCompatTest.kt"
+            line="186"
+            column="83"/>
+    </issue>
+
+    <issue
+        id="SyntheticAccessor"
+        message="Access to `private` method `toggleState` of class `Companion` requires synthetic accessor"
+        errorLine1="        lock.withLock { state = toggleState(state) }"
+        errorLine2="                                ~~~~~~~~~~~">
+        <location
+            file="src/testUtil/java/androidx/window/SwitchOnUnregisterExtensionInterfaceCompat.kt"
+            line="52"
+            column="33"/>
+    </issue>
+
+    <issue
+        id="SyntheticAccessor"
+        message="Access to `private` method `toggleState` of class `Companion` requires synthetic accessor"
+        errorLine1="        lock.withLock { state = toggleState(state) }"
+        errorLine2="                                ~~~~~~~~~~~">
+        <location
+            file="src/testUtil/java/androidx/window/SwitchOnUnregisterExtensionInterfaceCompat.kt"
+            line="52"
+            column="33"/>
+    </issue>
+
+</issues>
diff --git a/work/integration-tests/testapp/lint-baseline.xml b/work/integration-tests/testapp/lint-baseline.xml
index 51f735c..a178385 100644
--- a/work/integration-tests/testapp/lint-baseline.xml
+++ b/work/integration-tests/testapp/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="ClassVerificationFailure"
diff --git a/work/workmanager-gcm/lint-baseline.xml b/work/workmanager-gcm/lint-baseline.xml
index 76b8bd0..941d71e 100644
--- a/work/workmanager-gcm/lint-baseline.xml
+++ b/work/workmanager-gcm/lint-baseline.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
 
     <issue
         id="BanKeepAnnotation"
diff --git a/work/workmanager-inspection/lint-baseline.xml b/work/workmanager-inspection/lint-baseline.xml
new file mode 100644
index 0000000..ca920a7
--- /dev/null
+++ b/work/workmanager-inspection/lint-baseline.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="RemoveWorkManagerInitializer"
+        message="Remove androidx.work.WorkManagerInitializer from your AndroidManifest.xml when using on-demand initialization.">
+        <location
+            file="workmanager-inspection"/>
+    </issue>
+
+</issues>
diff --git a/work/workmanager-testing/lint-baseline.xml b/work/workmanager-testing/lint-baseline.xml
index 337ebad..b84652dd 100644
--- a/work/workmanager-testing/lint-baseline.xml
+++ b/work/workmanager-testing/lint-baseline.xml
@@ -1,5 +1,49 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `setTriggeredContentAuthorities`"
+        errorLine1="            .setTriggeredContentAuthorities(authorities.toList())"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt"
+            line="102"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `setTriggeredContentUris`"
+        errorLine1="            .setTriggeredContentUris(contentUris.toList())"
+        errorLine2="             ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt"
+            line="103"
+            column="14"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getTriggeredContentAuthorities`"
+        errorLine1="        assertThat(worker.triggeredContentAuthorities, containsInAnyOrder(*authorities))"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt"
+            line="109"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getTriggeredContentUris`"
+        errorLine1="        assertThat(worker.triggeredContentUris, containsInAnyOrder(*contentUris))"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/testing/TestWorkerBuilderTest.kt"
+            line="110"
+            column="27"/>
+    </issue>
 
     <issue
         id="KotlinPropertyAccess"
diff --git a/work/workmanager/lint-baseline.xml b/work/workmanager/lint-baseline.xml
index 416895c..a4fedbb 100644
--- a/work/workmanager/lint-baseline.xml
+++ b/work/workmanager/lint-baseline.xml
@@ -1,5 +1,115 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<issues format="6" by="lint 7.0.0-alpha15" type="baseline" client="cli" name="Lint" variant="all" version="7.0.0-alpha15">
+<issues format="6" by="lint 7.1.0-alpha02" type="baseline" client="cli" name="Lint" variant="all" version="7.1.0-alpha02">
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 18 (current min is 14): `android.os.HandlerThread#quitSafely`"
+        errorLine1="        mHandlerThread.quitSafely();"
+        errorLine2="                       ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java"
+            line="157"
+            column="24"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `getTriggeredContentAuthorities`"
+        errorLine1="                sTriggeredContentAuthorities = getTriggeredContentAuthorities();"
+        errorLine2="                                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java"
+            line="304"
+            column="48"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `getTriggeredContentUris`"
+        errorLine1="                sTriggeredContentUris = getTriggeredContentUris();"
+        errorLine2="                                        ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java"
+            line="305"
+            column="41"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 28 (current min is 23): `getNetwork`"
+        errorLine1="                sNetwork = getNetwork();"
+        errorLine2="                           ~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java"
+            line="325"
+            column="28"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `addContentUriTrigger`"
+        errorLine1="                                .addContentUriTrigger(testUri1, true)"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java"
+            line="367"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `addContentUriTrigger`"
+        errorLine1="                                .addContentUriTrigger(testUri2, false)"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java"
+            line="368"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `getContentUriTriggers`"
+        errorLine1="            assertThat(constraints.getContentUriTriggers(), is(new ContentUriTriggers()));"
+        errorLine2="                                   ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java"
+            line="391"
+            column="36"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 23): `getContentUriTriggers`"
+        errorLine1="        assertThat(constraints.getContentUriTriggers().size(), is(0));"
+        errorLine2="                               ~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java"
+            line="401"
+            column="32"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getTriggeredContentAuthorities`"
+        errorLine1="        assertThat(worker.getTriggeredContentAuthorities(),"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java"
+            line="919"
+            column="27"/>
+    </issue>
+
+    <issue
+        id="NewApi"
+        message="Call requires API level 24 (current min is 14): `getTriggeredContentUris`"
+        errorLine1="        assertThat(worker.getTriggeredContentUris(),"
+        errorLine2="                          ~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="src/androidTest/java/androidx/work/impl/WorkerWrapperTest.java"
+            line="921"
+            column="27"/>
+    </issue>
 
     <issue
         id="BanSynchronizedMethods"
@@ -239,7 +349,7 @@
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="105"
+            line="104"
             column="25"/>
     </issue>
 
@@ -250,7 +360,7 @@
         errorLine2="                        ~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="112"
+            line="111"
             column="25"/>
     </issue>
 
@@ -261,7 +371,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="114"
+            line="113"
             column="21"/>
     </issue>
 
@@ -272,7 +382,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="115"
+            line="114"
             column="21"/>
     </issue>
 
@@ -283,7 +393,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="122"
+            line="121"
             column="21"/>
     </issue>
 
@@ -294,7 +404,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="123"
+            line="122"
             column="21"/>
     </issue>
 
@@ -305,7 +415,7 @@
         errorLine2="               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="133"
+            line="132"
             column="16"/>
     </issue>
 
@@ -316,7 +426,7 @@
         errorLine2="                    ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/background/systemjob/SystemJobInfoConverter.java"
-            line="152"
+            line="150"
             column="21"/>
     </issue>
 
@@ -393,7 +503,7 @@
         errorLine2="                                                                      ~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/WorkManagerImpl.java"
-            line="759"
+            line="761"
             column="71"/>
     </issue>
 
@@ -1774,7 +1884,7 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void postToMainThread(Runnable r) {"
+        errorLine1="    public void postToMainThread(Runnable runnable) {"
         errorLine2="                                 ~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java"
@@ -1796,7 +1906,7 @@
     <issue
         id="UnknownNullness"
         message="Unknown nullability; explicitly declare as `@Nullable` or `@NonNull` to improve Kotlin interoperability; see https://android.github.io/kotlin-guides/interop.html#nullability-annotations"
-        errorLine1="    public void executeOnBackgroundThread(Runnable r) {"
+        errorLine1="    public void executeOnBackgroundThread(Runnable runnable) {"
         errorLine2="                                          ~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java"
@@ -2031,7 +2141,7 @@
         errorLine2="                                       ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/model/WorkTypeConverters.java"
-            line="199"
+            line="198"
             column="40"/>
     </issue>
 
@@ -2042,7 +2152,7 @@
         errorLine2="                  ~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/model/WorkTypeConverters.java"
-            line="234"
+            line="233"
             column="19"/>
     </issue>
 
@@ -2053,7 +2163,7 @@
         errorLine2="                  ~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/model/WorkTypeConverters.java"
-            line="267"
+            line="266"
             column="19"/>
     </issue>
 
@@ -2064,7 +2174,7 @@
         errorLine2="                                                       ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/model/WorkTypeConverters.java"
-            line="267"
+            line="266"
             column="56"/>
     </issue>
 
@@ -2075,7 +2185,7 @@
         errorLine2="                  ~~~~~~~~~~~~~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/model/WorkTypeConverters.java"
-            line="306"
+            line="305"
             column="19"/>
     </issue>
 
@@ -2086,7 +2196,7 @@
         errorLine2="                                                                   ~~~~~~">
         <location
             file="src/main/java/androidx/work/impl/model/WorkTypeConverters.java"
-            line="306"
+            line="305"
             column="68"/>
     </issue>